QtBase  v6.3.1
qrhi_p.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2019 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the Qt Gui module
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #ifndef QRHI_H
41 #define QRHI_H
42 
43 //
44 // W A R N I N G
45 // -------------
46 //
47 // This file is not part of the Qt API. It exists purely as an
48 // implementation detail. This header file may change from version to
49 // version without notice, or even be removed.
50 //
51 // We mean it.
52 //
53 
54 #include <QtGui/qtguiglobal.h>
55 #include <QSize>
56 #include <QMatrix4x4>
57 #include <QList>
58 #include <QVarLengthArray>
59 #include <QThread>
60 #include <QColor>
61 #include <QImage>
62 #include <functional>
63 #include <array>
64 #include <private/qshader_p.h>
65 
67 
68 class QWindow;
69 class QRhiImplementation;
70 class QRhiBuffer;
71 class QRhiRenderBuffer;
72 class QRhiTexture;
73 class QRhiSampler;
74 class QRhiCommandBuffer;
77 class QRhiProfiler;
78 
79 class Q_GUI_EXPORT QRhiDepthStencilClearValue
80 {
81 public:
84 
85  float depthClearValue() const { return m_d; }
86  void setDepthClearValue(float d) { m_d = d; }
87 
88  quint32 stencilClearValue() const { return m_s; }
89  void setStencilClearValue(quint32 s) { m_s = s; }
90 
91 private:
92  float m_d = 1.0f;
93  quint32 m_s = 0;
94 };
95 
97 
98 Q_GUI_EXPORT bool operator==(const QRhiDepthStencilClearValue &a, const QRhiDepthStencilClearValue &b) noexcept;
99 Q_GUI_EXPORT bool operator!=(const QRhiDepthStencilClearValue &a, const QRhiDepthStencilClearValue &b) noexcept;
100 Q_GUI_EXPORT size_t qHash(const QRhiDepthStencilClearValue &v, size_t seed = 0) noexcept;
101 #ifndef QT_NO_DEBUG_STREAM
102 Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiDepthStencilClearValue &);
103 #endif
104 
105 class Q_GUI_EXPORT QRhiViewport
106 {
107 public:
108  QRhiViewport() = default;
109  QRhiViewport(float x, float y, float w, float h, float minDepth = 0.0f, float maxDepth = 1.0f);
110 
111  std::array<float, 4> viewport() const { return m_rect; }
112  void setViewport(float x, float y, float w, float h) {
113  m_rect[0] = x; m_rect[1] = y; m_rect[2] = w; m_rect[3] = h;
114  }
115 
116  float minDepth() const { return m_minDepth; }
117  void setMinDepth(float minDepth) { m_minDepth = minDepth; }
118 
119  float maxDepth() const { return m_maxDepth; }
120  void setMaxDepth(float maxDepth) { m_maxDepth = maxDepth; }
121 
122 private:
123  std::array<float, 4> m_rect { { 0.0f, 0.0f, 0.0f, 0.0f } };
124  float m_minDepth = 0.0f;
125  float m_maxDepth = 1.0f;
126 };
127 
129 
130 Q_GUI_EXPORT bool operator==(const QRhiViewport &a, const QRhiViewport &b) noexcept;
131 Q_GUI_EXPORT bool operator!=(const QRhiViewport &a, const QRhiViewport &b) noexcept;
132 Q_GUI_EXPORT size_t qHash(const QRhiViewport &v, size_t seed = 0) noexcept;
133 #ifndef QT_NO_DEBUG_STREAM
134 Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiViewport &);
135 #endif
136 
137 class Q_GUI_EXPORT QRhiScissor
138 {
139 public:
140  QRhiScissor() = default;
141  QRhiScissor(int x, int y, int w, int h);
142 
143  std::array<int, 4> scissor() const { return m_rect; }
144  void setScissor(int x, int y, int w, int h) {
145  m_rect[0] = x; m_rect[1] = y; m_rect[2] = w; m_rect[3] = h;
146  }
147 
148 private:
149  std::array<int, 4> m_rect { { 0, 0, 0, 0 } };
150 };
151 
153 
154 Q_GUI_EXPORT bool operator==(const QRhiScissor &a, const QRhiScissor &b) noexcept;
155 Q_GUI_EXPORT bool operator!=(const QRhiScissor &a, const QRhiScissor &b) noexcept;
156 Q_GUI_EXPORT size_t qHash(const QRhiScissor &v, size_t seed = 0) noexcept;
157 #ifndef QT_NO_DEBUG_STREAM
158 Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiScissor &);
159 #endif
160 
161 class Q_GUI_EXPORT QRhiVertexInputBinding
162 {
163 public:
166  PerInstance
167  };
168 
170  QRhiVertexInputBinding(quint32 stride, Classification cls = PerVertex, int stepRate = 1);
171 
172  quint32 stride() const { return m_stride; }
173  void setStride(quint32 s) { m_stride = s; }
174 
175  Classification classification() const { return m_classification; }
176  void setClassification(Classification c) { m_classification = c; }
177 
178  int instanceStepRate() const { return m_instanceStepRate; }
179  void setInstanceStepRate(int rate) { m_instanceStepRate = rate; }
180 
181 private:
182  quint32 m_stride = 0;
183  Classification m_classification = PerVertex;
184  int m_instanceStepRate = 1;
185 };
186 
188 
189 Q_GUI_EXPORT bool operator==(const QRhiVertexInputBinding &a, const QRhiVertexInputBinding &b) noexcept;
190 Q_GUI_EXPORT bool operator!=(const QRhiVertexInputBinding &a, const QRhiVertexInputBinding &b) noexcept;
191 Q_GUI_EXPORT size_t qHash(const QRhiVertexInputBinding &v, size_t seed = 0) noexcept;
192 #ifndef QT_NO_DEBUG_STREAM
193 Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiVertexInputBinding &);
194 #endif
195 
196 class Q_GUI_EXPORT QRhiVertexInputAttribute
197 {
198 public:
199  enum Format {
214  SInt
215  };
216 
218  QRhiVertexInputAttribute(int binding, int location, Format format, quint32 offset, int matrixSlice = -1);
219 
220  int binding() const { return m_binding; }
221  void setBinding(int b) { m_binding = b; }
222 
223  int location() const { return m_location; }
224  void setLocation(int loc) { m_location = loc; }
225 
226  Format format() const { return m_format; }
227  void setFormat(Format f) { m_format = f; }
228 
229  quint32 offset() const { return m_offset; }
230  void setOffset(quint32 ofs) { m_offset = ofs; }
231 
232  int matrixSlice() const { return m_matrixSlice; }
233  void setMatrixSlice(int slice) { m_matrixSlice = slice; }
234 
235 private:
236  int m_binding = 0;
237  int m_location = 0;
238  Format m_format = Float4;
239  quint32 m_offset = 0;
240  int m_matrixSlice = -1;
241 };
242 
244 
245 Q_GUI_EXPORT bool operator==(const QRhiVertexInputAttribute &a, const QRhiVertexInputAttribute &b) noexcept;
246 Q_GUI_EXPORT bool operator!=(const QRhiVertexInputAttribute &a, const QRhiVertexInputAttribute &b) noexcept;
247 Q_GUI_EXPORT size_t qHash(const QRhiVertexInputAttribute &v, size_t seed = 0) noexcept;
248 #ifndef QT_NO_DEBUG_STREAM
249 Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiVertexInputAttribute &);
250 #endif
251 
252 class Q_GUI_EXPORT QRhiVertexInputLayout
253 {
254 public:
256 
257  void setBindings(std::initializer_list<QRhiVertexInputBinding> list) { m_bindings = list; }
258  template<typename InputIterator>
259  void setBindings(InputIterator first, InputIterator last)
260  {
261  m_bindings.clear();
262  std::copy(first, last, std::back_inserter(m_bindings));
263  }
264  const QRhiVertexInputBinding *cbeginBindings() const { return m_bindings.cbegin(); }
265  const QRhiVertexInputBinding *cendBindings() const { return m_bindings.cend(); }
266  const QRhiVertexInputBinding *bindingAt(int index) const { return &m_bindings.at(index); }
267 
268  void setAttributes(std::initializer_list<QRhiVertexInputAttribute> list) { m_attributes = list; }
269  template<typename InputIterator>
270  void setAttributes(InputIterator first, InputIterator last)
271  {
272  m_attributes.clear();
273  std::copy(first, last, std::back_inserter(m_attributes));
274  }
275  const QRhiVertexInputAttribute *cbeginAttributes() const { return m_attributes.cbegin(); }
276  const QRhiVertexInputAttribute *cendAttributes() const { return m_attributes.cend(); }
277 
278 private:
281 
282  friend Q_GUI_EXPORT bool operator==(const QRhiVertexInputLayout &a, const QRhiVertexInputLayout &b) noexcept;
283  friend Q_GUI_EXPORT size_t qHash(const QRhiVertexInputLayout &v, size_t seed) noexcept;
284  friend Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiVertexInputLayout &);
285 };
286 
287 Q_GUI_EXPORT bool operator==(const QRhiVertexInputLayout &a, const QRhiVertexInputLayout &b) noexcept;
288 Q_GUI_EXPORT bool operator!=(const QRhiVertexInputLayout &a, const QRhiVertexInputLayout &b) noexcept;
289 Q_GUI_EXPORT size_t qHash(const QRhiVertexInputLayout &v, size_t seed = 0) noexcept;
290 #ifndef QT_NO_DEBUG_STREAM
291 Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiVertexInputLayout &);
292 #endif
293 
294 class Q_GUI_EXPORT QRhiShaderStage
295 {
296 public:
297  enum Type {
300  Compute
301  };
302 
303  QRhiShaderStage() = default;
306 
307  Type type() const { return m_type; }
308  void setType(Type t) { m_type = t; }
309 
310  QShader shader() const { return m_shader; }
311  void setShader(const QShader &s) { m_shader = s; }
312 
313  QShader::Variant shaderVariant() const { return m_shaderVariant; }
314  void setShaderVariant(QShader::Variant v) { m_shaderVariant = v; }
315 
316 private:
317  Type m_type = Vertex;
318  QShader m_shader;
319  QShader::Variant m_shaderVariant = QShader::StandardShader;
320 };
321 
323 
324 Q_GUI_EXPORT bool operator==(const QRhiShaderStage &a, const QRhiShaderStage &b) noexcept;
325 Q_GUI_EXPORT bool operator!=(const QRhiShaderStage &a, const QRhiShaderStage &b) noexcept;
326 Q_GUI_EXPORT size_t qHash(const QRhiShaderStage &s, size_t seed = 0) noexcept;
327 #ifndef QT_NO_DEBUG_STREAM
328 Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiShaderStage &);
329 #endif
330 
332 
333 class Q_GUI_EXPORT QRhiShaderResourceBinding
334 {
335 public:
336  enum Type {
344  BufferLoadStore
345  };
346 
347  enum StageFlag {
348  VertexStage = 1 << 0,
349  FragmentStage = 1 << 1,
350  ComputeStage = 1 << 2
351  };
352  Q_DECLARE_FLAGS(StageFlags, StageFlag)
353 
355 
356  bool isLayoutCompatible(const QRhiShaderResourceBinding &other) const;
357 
358  static QRhiShaderResourceBinding uniformBuffer(int binding, StageFlags stage, QRhiBuffer *buf);
359  static QRhiShaderResourceBinding uniformBuffer(int binding, StageFlags stage, QRhiBuffer *buf, int offset, int size);
360  static QRhiShaderResourceBinding uniformBufferWithDynamicOffset(int binding, StageFlags stage, QRhiBuffer *buf, int size);
361 
362  static QRhiShaderResourceBinding sampledTexture(int binding, StageFlags stage, QRhiTexture *tex, QRhiSampler *sampler);
363 
367  };
368  static QRhiShaderResourceBinding sampledTextures(int binding, StageFlags stage, int count, const TextureAndSampler *texSamplers);
369 
370  static QRhiShaderResourceBinding imageLoad(int binding, StageFlags stage, QRhiTexture *tex, int level);
371  static QRhiShaderResourceBinding imageStore(int binding, StageFlags stage, QRhiTexture *tex, int level);
372  static QRhiShaderResourceBinding imageLoadStore(int binding, StageFlags stage, QRhiTexture *tex, int level);
373 
374  static QRhiShaderResourceBinding bufferLoad(int binding, StageFlags stage, QRhiBuffer *buf);
375  static QRhiShaderResourceBinding bufferLoad(int binding, StageFlags stage, QRhiBuffer *buf, int offset, int size);
376  static QRhiShaderResourceBinding bufferStore(int binding, StageFlags stage, QRhiBuffer *buf);
377  static QRhiShaderResourceBinding bufferStore(int binding, StageFlags stage, QRhiBuffer *buf, int offset, int size);
378  static QRhiShaderResourceBinding bufferLoadStore(int binding, StageFlags stage, QRhiBuffer *buf);
379  static QRhiShaderResourceBinding bufferLoadStore(int binding, StageFlags stage, QRhiBuffer *buf, int offset, int size);
380 
381  struct Data
382  {
383  int binding;
384  QRhiShaderResourceBinding::StageFlags stage;
388  int offset;
391  };
392  static const int MAX_TEX_SAMPLER_ARRAY_SIZE = 16;
394  int count;
395  TextureAndSampler texSamplers[MAX_TEX_SAMPLER_ARRAY_SIZE];
396  };
399  int level;
400  };
403  int offset;
405  };
406  union {
411  } u;
412 
413  template<typename Output>
415  {
416  // must write out exactly LAYOUT_DESC_ENTRIES_PER_BINDING elements here
417  *dst++ = quint32(binding);
418  *dst++ = quint32(stage);
419  *dst++ = quint32(type);
420  *dst++ = quint32(type == QRhiShaderResourceBinding::SampledTexture ? u.stex.count : 1);
421  return dst;
422  }
423  };
424 
425  Data *data() { return &d; }
426  const Data *data() const { return &d; }
427 
428  static const int LAYOUT_DESC_ENTRIES_PER_BINDING = 4;
429 
430  template<typename Output>
432  const QRhiShaderResourceBinding *last,
433  Output dst)
434  {
435  while (first != last) {
436  dst = first->data()->serialize(dst);
437  ++first;
438  }
439  }
440 
441 private:
442  Data d;
443 };
444 
445 Q_DECLARE_OPERATORS_FOR_FLAGS(QRhiShaderResourceBinding::StageFlags)
446 
448 
449 Q_GUI_EXPORT bool operator==(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b) noexcept;
450 Q_GUI_EXPORT bool operator!=(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b) noexcept;
451 Q_GUI_EXPORT size_t qHash(const QRhiShaderResourceBinding &b, size_t seed = 0) noexcept;
452 #ifndef QT_NO_DEBUG_STREAM
453 Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiShaderResourceBinding &);
454 #endif
455 
456 class Q_GUI_EXPORT QRhiColorAttachment
457 {
458 public:
459  QRhiColorAttachment() = default;
461  QRhiColorAttachment(QRhiRenderBuffer *renderBuffer);
462 
463  QRhiTexture *texture() const { return m_texture; }
464  void setTexture(QRhiTexture *tex) { m_texture = tex; }
465 
466  QRhiRenderBuffer *renderBuffer() const { return m_renderBuffer; }
467  void setRenderBuffer(QRhiRenderBuffer *rb) { m_renderBuffer = rb; }
468 
469  int layer() const { return m_layer; }
470  void setLayer(int layer) { m_layer = layer; }
471 
472  int level() const { return m_level; }
473  void setLevel(int level) { m_level = level; }
474 
475  QRhiTexture *resolveTexture() const { return m_resolveTexture; }
476  void setResolveTexture(QRhiTexture *tex) { m_resolveTexture = tex; }
477 
478  int resolveLayer() const { return m_resolveLayer; }
479  void setResolveLayer(int layer) { m_resolveLayer = layer; }
480 
481  int resolveLevel() const { return m_resolveLevel; }
482  void setResolveLevel(int level) { m_resolveLevel = level; }
483 
484 private:
485  QRhiTexture *m_texture = nullptr;
486  QRhiRenderBuffer *m_renderBuffer = nullptr;
487  int m_layer = 0;
488  int m_level = 0;
489  QRhiTexture *m_resolveTexture = nullptr;
490  int m_resolveLayer = 0;
491  int m_resolveLevel = 0;
492 };
493 
495 
497 {
498 public:
501  QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment, QRhiRenderBuffer *depthStencilBuffer);
502  QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment, QRhiTexture *depthTexture);
503 
504  void setColorAttachments(std::initializer_list<QRhiColorAttachment> list) { m_colorAttachments = list; }
505  template<typename InputIterator>
506  void setColorAttachments(InputIterator first, InputIterator last)
507  {
508  m_colorAttachments.clear();
509  std::copy(first, last, std::back_inserter(m_colorAttachments));
510  }
511  const QRhiColorAttachment *cbeginColorAttachments() const { return m_colorAttachments.cbegin(); }
512  const QRhiColorAttachment *cendColorAttachments() const { return m_colorAttachments.cend(); }
513  const QRhiColorAttachment *colorAttachmentAt(int index) const { return &m_colorAttachments.at(index); }
514 
515  QRhiRenderBuffer *depthStencilBuffer() const { return m_depthStencilBuffer; }
516  void setDepthStencilBuffer(QRhiRenderBuffer *renderBuffer) { m_depthStencilBuffer = renderBuffer; }
517 
518  QRhiTexture *depthTexture() const { return m_depthTexture; }
519  void setDepthTexture(QRhiTexture *texture) { m_depthTexture = texture; }
520 
521 private:
522  QVarLengthArray<QRhiColorAttachment, 8> m_colorAttachments;
523  QRhiRenderBuffer *m_depthStencilBuffer = nullptr;
524  QRhiTexture *m_depthTexture = nullptr;
525 };
526 
528 {
529 public:
534 
535  QImage image() const { return m_image; }
536  void setImage(const QImage &image) { m_image = image; }
537 
538  QByteArray data() const { return m_data; }
539  void setData(const QByteArray &data) { m_data = data; }
540 
541  quint32 dataStride() const { return m_dataStride; }
542  void setDataStride(quint32 stride) { m_dataStride = stride; }
543 
544  QPoint destinationTopLeft() const { return m_destinationTopLeft; }
545  void setDestinationTopLeft(const QPoint &p) { m_destinationTopLeft = p; }
546 
547  QSize sourceSize() const { return m_sourceSize; }
548  void setSourceSize(const QSize &size) { m_sourceSize = size; }
549 
550  QPoint sourceTopLeft() const { return m_sourceTopLeft; }
551  void setSourceTopLeft(const QPoint &p) { m_sourceTopLeft = p; }
552 
553 private:
554  QImage m_image;
555  QByteArray m_data;
556  quint32 m_dataStride = 0;
557  QPoint m_destinationTopLeft;
558  QSize m_sourceSize;
559  QPoint m_sourceTopLeft;
560 };
561 
563 
564 class Q_GUI_EXPORT QRhiTextureUploadEntry
565 {
566 public:
569 
570  int layer() const { return m_layer; }
571  void setLayer(int layer) { m_layer = layer; }
572 
573  int level() const { return m_level; }
574  void setLevel(int level) { m_level = level; }
575 
578 
579 private:
580  int m_layer = 0;
581  int m_level = 0;
583 };
584 
586 
588 {
589 public:
592  QRhiTextureUploadDescription(std::initializer_list<QRhiTextureUploadEntry> list);
593 
594  void setEntries(std::initializer_list<QRhiTextureUploadEntry> list) { m_entries = list; }
595  template<typename InputIterator>
596  void setEntries(InputIterator first, InputIterator last)
597  {
598  m_entries.clear();
599  std::copy(first, last, std::back_inserter(m_entries));
600  }
601  const QRhiTextureUploadEntry *cbeginEntries() const { return m_entries.cbegin(); }
602  const QRhiTextureUploadEntry *cendEntries() const { return m_entries.cend(); }
603 
604 private:
606 };
607 
608 class Q_GUI_EXPORT QRhiTextureCopyDescription
609 {
610 public:
612 
613  QSize pixelSize() const { return m_pixelSize; }
614  void setPixelSize(const QSize &sz) { m_pixelSize = sz; }
615 
616  int sourceLayer() const { return m_sourceLayer; }
617  void setSourceLayer(int layer) { m_sourceLayer = layer; }
618 
619  int sourceLevel() const { return m_sourceLevel; }
620  void setSourceLevel(int level) { m_sourceLevel = level; }
621 
622  QPoint sourceTopLeft() const { return m_sourceTopLeft; }
623  void setSourceTopLeft(const QPoint &p) { m_sourceTopLeft = p; }
624 
625  int destinationLayer() const { return m_destinationLayer; }
626  void setDestinationLayer(int layer) { m_destinationLayer = layer; }
627 
628  int destinationLevel() const { return m_destinationLevel; }
629  void setDestinationLevel(int level) { m_destinationLevel = level; }
630 
631  QPoint destinationTopLeft() const { return m_destinationTopLeft; }
632  void setDestinationTopLeft(const QPoint &p) { m_destinationTopLeft = p; }
633 
634 private:
635  QSize m_pixelSize;
636  int m_sourceLayer = 0;
637  int m_sourceLevel = 0;
638  QPoint m_sourceTopLeft;
639  int m_destinationLayer = 0;
640  int m_destinationLevel = 0;
641  QPoint m_destinationTopLeft;
642 };
643 
645 
646 class Q_GUI_EXPORT QRhiReadbackDescription
647 {
648 public:
651 
652  QRhiTexture *texture() const { return m_texture; }
653  void setTexture(QRhiTexture *tex) { m_texture = tex; }
654 
655  int layer() const { return m_layer; }
656  void setLayer(int layer) { m_layer = layer; }
657 
658  int level() const { return m_level; }
659  void setLevel(int level) { m_level = level; }
660 
661 private:
662  QRhiTexture *m_texture = nullptr;
663  int m_layer = 0;
664  int m_level = 0;
665 };
666 
668 
669 struct Q_GUI_EXPORT QRhiNativeHandles
670 {
671 };
672 
673 class Q_GUI_EXPORT QRhiResource
674 {
675 public:
676  enum Type {
688  CommandBuffer
689  };
690 
691  virtual ~QRhiResource();
692 
693  virtual Type resourceType() const = 0;
694 
695  virtual void destroy() = 0;
696 
697  void deleteLater();
698 
699  QByteArray name() const;
700  void setName(const QByteArray &name);
701 
702  quint64 globalResourceId() const;
703 
704 protected:
707  friend class QRhiImplementation;
708  QRhiImplementation *m_rhi = nullptr;
709  quint64 m_id;
710  QByteArray m_objectName;
711 };
712 
713 class Q_GUI_EXPORT QRhiBuffer : public QRhiResource
714 {
715 public:
716  enum Type {
719  Dynamic
720  };
721 
722  enum UsageFlag {
723  VertexBuffer = 1 << 0,
724  IndexBuffer = 1 << 1,
725  UniformBuffer = 1 << 2,
726  StorageBuffer = 1 << 3
727  };
728  Q_DECLARE_FLAGS(UsageFlags, UsageFlag)
729 
730  struct NativeBuffer {
731  const void *objects[3];
733  };
734 
735  QRhiResource::Type resourceType() const override;
736 
737  Type type() const { return m_type; }
738  void setType(Type t) { m_type = t; }
739 
740  UsageFlags usage() const { return m_usage; }
741  void setUsage(UsageFlags u) { m_usage = u; }
742 
743  int size() const { return m_size; }
744  void setSize(int sz) { m_size = sz; }
745 
746  virtual bool create() = 0;
747 
748  virtual NativeBuffer nativeBuffer();
749 
750  virtual char *beginFullDynamicBufferUpdateForCurrentFrame();
751  virtual void endFullDynamicBufferUpdateForCurrentFrame();
752 
753 protected:
754  QRhiBuffer(QRhiImplementation *rhi, Type type_, UsageFlags usage_, int size_);
756  UsageFlags m_usage;
757  int m_size;
758 };
759 
760 Q_DECLARE_OPERATORS_FOR_FLAGS(QRhiBuffer::UsageFlags)
761 
762 class Q_GUI_EXPORT QRhiTexture : public QRhiResource
763 {
764 public:
765  enum Flag {
766  RenderTarget = 1 << 0,
767  CubeMap = 1 << 2,
768  MipMapped = 1 << 3,
769  sRGB = 1 << 4,
770  UsedAsTransferSource = 1 << 5,
771  UsedWithGenerateMips = 1 << 6,
772  UsedWithLoadStore = 1 << 7,
773  UsedAsCompressedAtlas = 1 << 8,
774  ExternalOES = 1 << 9,
775  ThreeDimensional = 1 << 10,
776  TextureRectangleGL = 1 << 11,
777  TextureArray = 1 << 12
778  };
779  Q_DECLARE_FLAGS(Flags, Flag)
780 
781  enum Format {
783 
786  R8,
791 
796 
801 
809 
813 
827  ASTC_12x12
828  };
829 
830  struct NativeTexture {
832  int layout;
833  };
834 
835  QRhiResource::Type resourceType() const override;
836 
837  Format format() const { return m_format; }
838  void setFormat(Format fmt) { m_format = fmt; }
839 
840  QSize pixelSize() const { return m_pixelSize; }
841  void setPixelSize(const QSize &sz) { m_pixelSize = sz; }
842 
843  int depth() const { return m_depth; }
844  void setDepth(int depth) { m_depth = depth; }
845 
846  int arraySize() const { return m_arraySize; }
847  void setArraySize(int arraySize) { m_arraySize = arraySize; }
848 
849  Flags flags() const { return m_flags; }
850  void setFlags(Flags f) { m_flags = f; }
851 
852  int sampleCount() const { return m_sampleCount; }
853  void setSampleCount(int s) { m_sampleCount = s; }
854 
855  virtual bool create() = 0;
856  virtual NativeTexture nativeTexture();
857  virtual bool createFrom(NativeTexture src);
858  virtual void setNativeLayout(int layout);
859 
860 protected:
861  QRhiTexture(QRhiImplementation *rhi, Format format_, const QSize &pixelSize_, int depth_,
862  int arraySize_, int sampleCount_, Flags flags_);
865  int m_depth;
869 };
870 
872 
873 class Q_GUI_EXPORT QRhiSampler : public QRhiResource
874 {
875 public:
876  enum Filter {
879  Linear
880  };
881 
882  enum AddressMode {
886  };
887 
888  enum CompareOp {
896  Always
897  };
898 
899  QRhiResource::Type resourceType() const override;
900 
901  Filter magFilter() const { return m_magFilter; }
902  void setMagFilter(Filter f) { m_magFilter = f; }
903 
904  Filter minFilter() const { return m_minFilter; }
905  void setMinFilter(Filter f) { m_minFilter = f; }
906 
907  Filter mipmapMode() const { return m_mipmapMode; }
908  void setMipmapMode(Filter f) { m_mipmapMode = f; }
909 
910  AddressMode addressU() const { return m_addressU; }
911  void setAddressU(AddressMode mode) { m_addressU = mode; }
912 
913  AddressMode addressV() const { return m_addressV; }
914  void setAddressV(AddressMode mode) { m_addressV = mode; }
915 
916  AddressMode addressW() const { return m_addressW; }
917  void setAddressW(AddressMode mode) { m_addressW = mode; }
918 
919  CompareOp textureCompareOp() const { return m_compareOp; }
920  void setTextureCompareOp(CompareOp op) { m_compareOp = op; }
921 
922  virtual bool create() = 0;
923 
924 protected:
926  Filter magFilter_, Filter minFilter_, Filter mipmapMode_,
927  AddressMode u_, AddressMode v_, AddressMode w_);
935 };
936 
937 class Q_GUI_EXPORT QRhiRenderBuffer : public QRhiResource
938 {
939 public:
940  enum Type {
942  Color
943  };
944 
945  enum Flag {
946  UsedWithSwapChainOnly = 1 << 0
947  };
948  Q_DECLARE_FLAGS(Flags, Flag)
949 
952  };
953 
954  QRhiResource::Type resourceType() const override;
955 
956  Type type() const { return m_type; }
957  void setType(Type t) { m_type = t; }
958 
959  QSize pixelSize() const { return m_pixelSize; }
960  void setPixelSize(const QSize &sz) { m_pixelSize = sz; }
961 
962  int sampleCount() const { return m_sampleCount; }
963  void setSampleCount(int s) { m_sampleCount = s; }
964 
965  Flags flags() const { return m_flags; }
966  void setFlags(Flags h) { m_flags = h; }
967 
968  virtual bool create() = 0;
969  virtual bool createFrom(NativeRenderBuffer src);
970 
971  virtual QRhiTexture::Format backingFormat() const = 0;
972 
973 protected:
974  QRhiRenderBuffer(QRhiImplementation *rhi, Type type_, const QSize &pixelSize_,
975  int sampleCount_, Flags flags_, QRhiTexture::Format backingFormatHint_);
981 };
982 
984 
985 class Q_GUI_EXPORT QRhiRenderPassDescriptor : public QRhiResource
986 {
987 public:
988  QRhiResource::Type resourceType() const override;
989 
990  virtual bool isCompatible(const QRhiRenderPassDescriptor *other) const = 0;
991  virtual const QRhiNativeHandles *nativeHandles();
992 
994 
995  virtual QVector<quint32> serializedFormat() const = 0;
996 
997 protected:
999 };
1000 
1001 class Q_GUI_EXPORT QRhiRenderTarget : public QRhiResource
1002 {
1003 public:
1004  QRhiResource::Type resourceType() const override;
1005 
1006  virtual QSize pixelSize() const = 0;
1007  virtual float devicePixelRatio() const = 0;
1008  virtual int sampleCount() const = 0;
1009 
1010  QRhiRenderPassDescriptor *renderPassDescriptor() const { return m_renderPassDesc; }
1012 
1013 protected:
1015  QRhiRenderPassDescriptor *m_renderPassDesc = nullptr;
1016 };
1017 
1018 class Q_GUI_EXPORT QRhiTextureRenderTarget : public QRhiRenderTarget
1019 {
1020 public:
1021  enum Flag {
1022  PreserveColorContents = 1 << 0,
1023  PreserveDepthStencilContents = 1 << 1
1024  };
1025  Q_DECLARE_FLAGS(Flags, Flag)
1026 
1027  QRhiResource::Type resourceType() const override;
1028 
1031 
1032  Flags flags() const { return m_flags; }
1033  void setFlags(Flags f) { m_flags = f; }
1034 
1036 
1037  virtual bool create() = 0;
1038 
1039 protected:
1043 };
1044 
1046 
1047 class Q_GUI_EXPORT QRhiShaderResourceBindings : public QRhiResource
1048 {
1049 public:
1050  QRhiResource::Type resourceType() const override;
1051 
1052  void setBindings(std::initializer_list<QRhiShaderResourceBinding> list) { m_bindings = list; }
1053 
1054  template<typename InputIterator>
1055  void setBindings(InputIterator first, InputIterator last)
1056  {
1057  m_bindings.clear();
1058  std::copy(first, last, std::back_inserter(m_bindings));
1059  }
1060 
1061  const QRhiShaderResourceBinding *cbeginBindings() const { return m_bindings.cbegin(); }
1062  const QRhiShaderResourceBinding *cendBindings() const { return m_bindings.cend(); }
1063 
1064  bool isLayoutCompatible(const QRhiShaderResourceBindings *other) const;
1065 
1066  QVector<quint32> serializedLayoutDescription() const { return m_layoutDesc; }
1067 
1068  virtual bool create() = 0;
1069 
1070  enum UpdateFlag {
1071  BindingsAreSorted = 0x01
1072  };
1073  Q_DECLARE_FLAGS(UpdateFlags, UpdateFlag)
1074 
1075  virtual void updateResources(UpdateFlags flags = {}) = 0;
1076 
1077 protected:
1078  static const int BINDING_PREALLOC = 12;
1081  size_t m_layoutDescHash = 0;
1082  // Intentionally not using QVLA for m_layoutDesc: clients like Qt Quick are much
1083  // better served with an implicitly shared container here, because they will likely
1084  // throw this directly into structs serving as cache keys.
1086  friend class QRhiImplementation;
1087 #ifndef QT_NO_DEBUG_STREAM
1088  friend Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiShaderResourceBindings &);
1089 #endif
1090 };
1091 
1092 Q_DECLARE_OPERATORS_FOR_FLAGS(QRhiShaderResourceBindings::UpdateFlags)
1093 
1094 #ifndef QT_NO_DEBUG_STREAM
1095 Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiShaderResourceBindings &);
1096 #endif
1097 
1098 class Q_GUI_EXPORT QRhiGraphicsPipeline : public QRhiResource
1099 {
1100 public:
1101  enum Flag {
1102  UsesBlendConstants = 1 << 0,
1103  UsesStencilRef = 1 << 1,
1104  UsesScissor = 1 << 2,
1105  CompileShadersWithDebugInfo = 1 << 3
1106  };
1107  Q_DECLARE_FLAGS(Flags, Flag)
1108 
1109  enum Topology {
1115  Points
1116  };
1117 
1118  enum CullMode {
1121  Back
1122  };
1123 
1124  enum FrontFace {
1126  CW
1127  };
1128 
1130  R = 1 << 0,
1131  G = 1 << 1,
1132  B = 1 << 2,
1133  A = 1 << 3
1134  };
1135  Q_DECLARE_FLAGS(ColorMask, ColorMaskComponent)
1136 
1156  OneMinusSrc1Alpha
1157  };
1158 
1159  enum BlendOp {
1164  Max
1165  };
1166 
1167  struct TargetBlend {
1168  ColorMask colorWrite = ColorMask(0xF); // R | G | B | A
1169  bool enable = false;
1170  BlendFactor srcColor = One;
1171  BlendFactor dstColor = OneMinusSrcAlpha;
1172  BlendOp opColor = Add;
1174  BlendFactor dstAlpha = OneMinusSrcAlpha;
1175  BlendOp opAlpha = Add;
1176  };
1177 
1178  enum CompareOp {
1186  Always
1187  };
1188 
1189  enum StencilOp {
1197  DecrementAndWrap
1198  };
1199 
1201  StencilOp failOp = Keep;
1202  StencilOp depthFailOp = Keep;
1203  StencilOp passOp = Keep;
1204  CompareOp compareOp = Always;
1205  };
1206 
1207  QRhiResource::Type resourceType() const override;
1208 
1209  Flags flags() const { return m_flags; }
1210  void setFlags(Flags f) { m_flags = f; }
1211 
1212  Topology topology() const { return m_topology; }
1213  void setTopology(Topology t) { m_topology = t; }
1214 
1215  CullMode cullMode() const { return m_cullMode; }
1216  void setCullMode(CullMode mode) { m_cullMode = mode; }
1217 
1218  FrontFace frontFace() const { return m_frontFace; }
1219  void setFrontFace(FrontFace f) { m_frontFace = f; }
1220 
1221  void setTargetBlends(std::initializer_list<TargetBlend> list) { m_targetBlends = list; }
1222  template<typename InputIterator>
1223  void setTargetBlends(InputIterator first, InputIterator last)
1224  {
1225  m_targetBlends.clear();
1226  std::copy(first, last, std::back_inserter(m_targetBlends));
1227  }
1228  const TargetBlend *cbeginTargetBlends() const { return m_targetBlends.cbegin(); }
1229  const TargetBlend *cendTargetBlends() const { return m_targetBlends.cend(); }
1230 
1231  bool hasDepthTest() const { return m_depthTest; }
1232  void setDepthTest(bool enable) { m_depthTest = enable; }
1233 
1234  bool hasDepthWrite() const { return m_depthWrite; }
1235  void setDepthWrite(bool enable) { m_depthWrite = enable; }
1236 
1237  CompareOp depthOp() const { return m_depthOp; }
1238  void setDepthOp(CompareOp op) { m_depthOp = op; }
1239 
1240  bool hasStencilTest() const { return m_stencilTest; }
1241  void setStencilTest(bool enable) { m_stencilTest = enable; }
1242 
1243  StencilOpState stencilFront() const { return m_stencilFront; }
1244  void setStencilFront(const StencilOpState &state) { m_stencilFront = state; }
1245 
1246  StencilOpState stencilBack() const { return m_stencilBack; }
1247  void setStencilBack(const StencilOpState &state) { m_stencilBack = state; }
1248 
1249  quint32 stencilReadMask() const { return m_stencilReadMask; }
1250  void setStencilReadMask(quint32 mask) { m_stencilReadMask = mask; }
1251 
1252  quint32 stencilWriteMask() const { return m_stencilWriteMask; }
1253  void setStencilWriteMask(quint32 mask) { m_stencilWriteMask = mask; }
1254 
1255  int sampleCount() const { return m_sampleCount; }
1256  void setSampleCount(int s) { m_sampleCount = s; }
1257 
1258  float lineWidth() const { return m_lineWidth; }
1259  void setLineWidth(float width) { m_lineWidth = width; }
1260 
1261  int depthBias() const { return m_depthBias; }
1262  void setDepthBias(int bias) { m_depthBias = bias; }
1263 
1264  float slopeScaledDepthBias() const { return m_slopeScaledDepthBias; }
1265  void setSlopeScaledDepthBias(float bias) { m_slopeScaledDepthBias = bias; }
1266 
1267  void setShaderStages(std::initializer_list<QRhiShaderStage> list) { m_shaderStages = list; }
1268  template<typename InputIterator>
1269  void setShaderStages(InputIterator first, InputIterator last)
1270  {
1271  m_shaderStages.clear();
1272  std::copy(first, last, std::back_inserter(m_shaderStages));
1273  }
1274  const QRhiShaderStage *cbeginShaderStages() const { return m_shaderStages.cbegin(); }
1275  const QRhiShaderStage *cendShaderStages() const { return m_shaderStages.cend(); }
1276 
1277  QRhiVertexInputLayout vertexInputLayout() const { return m_vertexInputLayout; }
1278  void setVertexInputLayout(const QRhiVertexInputLayout &layout) { m_vertexInputLayout = layout; }
1279 
1280  QRhiShaderResourceBindings *shaderResourceBindings() const { return m_shaderResourceBindings; }
1281  void setShaderResourceBindings(QRhiShaderResourceBindings *srb) { m_shaderResourceBindings = srb; }
1282 
1283  QRhiRenderPassDescriptor *renderPassDescriptor() const { return m_renderPassDesc; }
1285 
1286  virtual bool create() = 0;
1287 
1288 protected:
1291  Topology m_topology = Triangles;
1292  CullMode m_cullMode = None;
1293  FrontFace m_frontFace = CCW;
1295  bool m_depthTest = false;
1296  bool m_depthWrite = false;
1297  CompareOp m_depthOp = Less;
1298  bool m_stencilTest = false;
1301  quint32 m_stencilReadMask = 0xFF;
1302  quint32 m_stencilWriteMask = 0xFF;
1303  int m_sampleCount = 1;
1304  float m_lineWidth = 1.0f;
1305  int m_depthBias = 0;
1306  float m_slopeScaledDepthBias = 0.0f;
1309  QRhiShaderResourceBindings *m_shaderResourceBindings = nullptr;
1310  QRhiRenderPassDescriptor *m_renderPassDesc = nullptr;
1311 };
1312 
1314 Q_DECLARE_OPERATORS_FOR_FLAGS(QRhiGraphicsPipeline::ColorMask)
1316 
1317 class Q_GUI_EXPORT QRhiSwapChain : public QRhiResource
1318 {
1319 public:
1320  enum Flag {
1321  SurfaceHasPreMulAlpha = 1 << 0,
1322  SurfaceHasNonPreMulAlpha = 1 << 1,
1323  sRGB = 1 << 2,
1324  UsedAsTransferSource = 1 << 3,
1325  NoVSync = 1 << 4,
1326  MinimalBufferCount = 1 << 5
1327  };
1328  Q_DECLARE_FLAGS(Flags, Flag)
1329 
1330  QRhiResource::Type resourceType() const override;
1331 
1332  QWindow *window() const { return m_window; }
1334 
1335  Flags flags() const { return m_flags; }
1336  void setFlags(Flags f) { m_flags = f; }
1337 
1338  QRhiRenderBuffer *depthStencil() const { return m_depthStencil; }
1339  void setDepthStencil(QRhiRenderBuffer *ds) { m_depthStencil = ds; }
1340 
1341  int sampleCount() const { return m_sampleCount; }
1342  void setSampleCount(int samples) { m_sampleCount = samples; }
1343 
1344  QRhiRenderPassDescriptor *renderPassDescriptor() const { return m_renderPassDesc; }
1346 
1347  QSize currentPixelSize() const { return m_currentPixelSize; }
1348 
1351  virtual QSize surfacePixelSize() = 0;
1353  virtual bool createOrResize() = 0;
1354 
1355 protected:
1357  QWindow *m_window = nullptr;
1359  QRhiRenderBuffer *m_depthStencil = nullptr;
1360  int m_sampleCount = 1;
1361  QRhiRenderPassDescriptor *m_renderPassDesc = nullptr;
1363 };
1364 
1366 
1367 class Q_GUI_EXPORT QRhiComputePipeline : public QRhiResource
1368 {
1369 public:
1370  enum Flag {
1371  CompileShadersWithDebugInfo = 1 << 0
1372  };
1373  Q_DECLARE_FLAGS(Flags, Flag)
1374 
1375  QRhiResource::Type resourceType() const override;
1376  virtual bool create() = 0;
1377 
1378  Flags flags() const { return m_flags; }
1379  void setFlags(Flags f) { m_flags = f; }
1380 
1381  QRhiShaderStage shaderStage() const { return m_shaderStage; }
1382  void setShaderStage(const QRhiShaderStage &stage) { m_shaderStage = stage; }
1383 
1384  QRhiShaderResourceBindings *shaderResourceBindings() const { return m_shaderResourceBindings; }
1385  void setShaderResourceBindings(QRhiShaderResourceBindings *srb) { m_shaderResourceBindings = srb; }
1386 
1387 protected:
1391  QRhiShaderResourceBindings *m_shaderResourceBindings = nullptr;
1392 };
1393 
1395 
1396 class Q_GUI_EXPORT QRhiCommandBuffer : public QRhiResource
1397 {
1398 public:
1401  IndexUInt32
1402  };
1403 
1405  ExternalContent = 0x01,
1406  DoNotTrackResourcesForCompute = 0x02
1407  };
1408  Q_DECLARE_FLAGS(BeginPassFlags, BeginPassFlag)
1409 
1410  QRhiResource::Type resourceType() const override;
1411 
1412  void resourceUpdate(QRhiResourceUpdateBatch *resourceUpdates);
1413 
1414  void beginPass(QRhiRenderTarget *rt,
1415  const QColor &colorClearValue,
1416  const QRhiDepthStencilClearValue &depthStencilClearValue,
1417  QRhiResourceUpdateBatch *resourceUpdates = nullptr,
1418  BeginPassFlags flags = {});
1419  void endPass(QRhiResourceUpdateBatch *resourceUpdates = nullptr);
1420 
1421  void setGraphicsPipeline(QRhiGraphicsPipeline *ps);
1422  using DynamicOffset = QPair<int, quint32>; // binding, offset
1423  void setShaderResources(QRhiShaderResourceBindings *srb = nullptr,
1424  int dynamicOffsetCount = 0,
1425  const DynamicOffset *dynamicOffsets = nullptr);
1426  using VertexInput = QPair<QRhiBuffer *, quint32>; // buffer, offset
1427  void setVertexInput(int startBinding, int bindingCount, const VertexInput *bindings,
1428  QRhiBuffer *indexBuf = nullptr, quint32 indexOffset = 0,
1429  IndexFormat indexFormat = IndexUInt16);
1430 
1431  void setViewport(const QRhiViewport &viewport);
1432  void setScissor(const QRhiScissor &scissor);
1433  void setBlendConstants(const QColor &c);
1434  void setStencilRef(quint32 refValue);
1435 
1436  void draw(quint32 vertexCount,
1437  quint32 instanceCount = 1,
1438  quint32 firstVertex = 0,
1439  quint32 firstInstance = 0);
1440 
1441  void drawIndexed(quint32 indexCount,
1442  quint32 instanceCount = 1,
1443  quint32 firstIndex = 0,
1444  qint32 vertexOffset = 0,
1445  quint32 firstInstance = 0);
1446 
1447  void debugMarkBegin(const QByteArray &name);
1448  void debugMarkEnd();
1449  void debugMarkMsg(const QByteArray &msg);
1450 
1451  void beginComputePass(QRhiResourceUpdateBatch *resourceUpdates = nullptr, BeginPassFlags flags = {});
1452  void endComputePass(QRhiResourceUpdateBatch *resourceUpdates = nullptr);
1453  void setComputePipeline(QRhiComputePipeline *ps);
1454  void dispatch(int x, int y, int z);
1455 
1456  const QRhiNativeHandles *nativeHandles();
1457  void beginExternal();
1458  void endExternal();
1459 
1460 protected:
1462 };
1463 
1464 Q_DECLARE_OPERATORS_FOR_FLAGS(QRhiCommandBuffer::BeginPassFlags)
1465 
1466 struct Q_GUI_EXPORT QRhiReadbackResult
1467 {
1468  std::function<void()> completed = nullptr;
1472 };
1473 
1474 struct Q_GUI_EXPORT QRhiBufferReadbackResult
1475 {
1476  std::function<void()> completed = nullptr;
1478 };
1479 
1480 class Q_GUI_EXPORT QRhiResourceUpdateBatch
1481 {
1482 public:
1484 
1485  void release();
1486 
1487  void merge(QRhiResourceUpdateBatch *other);
1488  bool hasOptimalCapacity() const;
1489 
1490  void updateDynamicBuffer(QRhiBuffer *buf, int offset, int size, const void *data);
1491  void uploadStaticBuffer(QRhiBuffer *buf, int offset, int size, const void *data);
1492  void uploadStaticBuffer(QRhiBuffer *buf, const void *data);
1493  void readBackBuffer(QRhiBuffer *buf, int offset, int size, QRhiBufferReadbackResult *result);
1494  void uploadTexture(QRhiTexture *tex, const QRhiTextureUploadDescription &desc);
1495  void uploadTexture(QRhiTexture *tex, const QImage &image);
1497  void readBackTexture(const QRhiReadbackDescription &rb, QRhiReadbackResult *result);
1498  void generateMips(QRhiTexture *tex);
1499 
1500 private:
1505  friend class QRhi;
1506 };
1507 
1508 struct Q_GUI_EXPORT QRhiDriverInfo
1509 {
1510  enum DeviceType {
1516  CpuDevice
1517  };
1518 
1520  quint64 deviceId = 0;
1521  quint64 vendorId = 0;
1522  DeviceType deviceType = UnknownDevice;
1523 };
1524 
1526 
1527 #ifndef QT_NO_DEBUG_STREAM
1528 Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiDriverInfo &);
1529 #endif
1530 
1531 struct Q_GUI_EXPORT QRhiInitParams
1532 {
1533 };
1534 
1535 class Q_GUI_EXPORT QRhi
1536 {
1537 public:
1543  Metal
1544  };
1545 
1546  enum Flag {
1547  EnableProfiling = 1 << 0,
1548  EnableDebugMarkers = 1 << 1,
1549  PreferSoftwareRenderer = 1 << 2,
1550  EnablePipelineCacheDataSave = 1 << 3
1551  };
1552  Q_DECLARE_FLAGS(Flags, Flag)
1553 
1555  FrameOpSuccess = 0,
1558  FrameOpDeviceLost
1559  };
1560 
1561  enum Feature {
1562  MultisampleTexture = 1,
1592  TextureArrays
1593  };
1594 
1596  };
1597  Q_DECLARE_FLAGS(BeginFrameFlags, BeginFrameFlag)
1598 
1600  SkipPresent = 1 << 0
1601  };
1602  Q_DECLARE_FLAGS(EndFrameFlags, EndFrameFlag)
1603 
1605  TextureSizeMin = 1,
1616  MaxUniformBufferRange
1617  };
1618 
1619  ~QRhi();
1620 
1621  static QRhi *create(Implementation impl,
1623  Flags flags = {},
1624  QRhiNativeHandles *importDevice = nullptr);
1625 
1626  Implementation backend() const;
1627  const char *backendName() const;
1628  QRhiDriverInfo driverInfo() const;
1629  QThread *thread() const;
1630 
1632  void addCleanupCallback(const CleanupCallback &callback);
1633  void runCleanup();
1634 
1635  QRhiGraphicsPipeline *newGraphicsPipeline();
1636  QRhiComputePipeline *newComputePipeline();
1637  QRhiShaderResourceBindings *newShaderResourceBindings();
1638 
1639  QRhiBuffer *newBuffer(QRhiBuffer::Type type,
1640  QRhiBuffer::UsageFlags usage,
1641  int size);
1642 
1643  QRhiRenderBuffer *newRenderBuffer(QRhiRenderBuffer::Type type,
1644  const QSize &pixelSize,
1645  int sampleCount = 1,
1647  QRhiTexture::Format backingFormatHint = QRhiTexture::UnknownFormat);
1648 
1650  const QSize &pixelSize,
1651  int sampleCount = 1,
1652  QRhiTexture::Flags flags = {});
1653 
1655  int width, int height, int depth,
1656  int sampleCount = 1,
1657  QRhiTexture::Flags flags = {});
1658 
1659  QRhiTexture *newTextureArray(QRhiTexture::Format format,
1660  int arraySize,
1661  const QSize &pixelSize,
1662  int sampleCount = 1,
1663  QRhiTexture::Flags flags = {});
1664 
1665  QRhiSampler *newSampler(QRhiSampler::Filter magFilter,
1666  QRhiSampler::Filter minFilter,
1667  QRhiSampler::Filter mipmapMode,
1668  QRhiSampler::AddressMode addressU,
1669  QRhiSampler::AddressMode addressV,
1671 
1672  QRhiTextureRenderTarget *newTextureRenderTarget(const QRhiTextureRenderTargetDescription &desc,
1674 
1675  QRhiSwapChain *newSwapChain();
1676  FrameOpResult beginFrame(QRhiSwapChain *swapChain, BeginFrameFlags flags = {});
1677  FrameOpResult endFrame(QRhiSwapChain *swapChain, EndFrameFlags flags = {});
1678  bool isRecordingFrame() const;
1679  int currentFrameSlot() const;
1680 
1681  FrameOpResult beginOffscreenFrame(QRhiCommandBuffer **cb, BeginFrameFlags flags = {});
1682  FrameOpResult endOffscreenFrame(EndFrameFlags flags = {});
1683 
1684  QRhi::FrameOpResult finish();
1685 
1686  QRhiResourceUpdateBatch *nextResourceUpdateBatch();
1687 
1688  QList<int> supportedSampleCounts() const;
1689 
1690  int ubufAlignment() const;
1691  int ubufAligned(int v) const;
1692 
1693  int mipLevelsForSize(const QSize &size) const;
1694  QSize sizeForMipLevel(int mipLevel, const QSize &baseLevelSize) const;
1695 
1696  bool isYUpInFramebuffer() const;
1697  bool isYUpInNDC() const;
1698  bool isClipDepthZeroToOne() const;
1699 
1700  QMatrix4x4 clipSpaceCorrMatrix() const;
1701 
1702  bool isTextureFormatSupported(QRhiTexture::Format format, QRhiTexture::Flags flags = {}) const;
1703  bool isFeatureSupported(QRhi::Feature feature) const;
1704  int resourceLimit(ResourceLimit limit) const;
1705 
1706  const QRhiNativeHandles *nativeHandles();
1707  bool makeThreadLocalNativeContextCurrent();
1708 
1709  QRhiProfiler *profiler();
1710 
1711  static const int MAX_MIP_LEVELS = 16; // a width and/or height of 65536 should be enough for everyone
1712 
1713  void releaseCachedResources();
1714 
1715  bool isDeviceLost() const;
1716 
1717  QByteArray pipelineCacheData();
1718  void setPipelineCacheData(const QByteArray &data);
1719 
1720 protected:
1721  QRhi();
1722 
1723 private:
1725  QRhiImplementation *d = nullptr;
1726 };
1727 
1729 Q_DECLARE_OPERATORS_FOR_FLAGS(QRhi::BeginFrameFlags)
1730 Q_DECLARE_OPERATORS_FOR_FLAGS(QRhi::EndFrameFlags)
1731 
1733 
1734 #endif
small capitals from c petite p scientific f u
Definition: afcover.h:88
const char msg[]
Definition: arch.cpp:46
#define G(r, i, a, b, c, d)
Definition: blake2b-ref.c:153
The QByteArray class provides an array of bytes.
Definition: qbytearray.h:85
The QColor class provides colors based on RGB, HSV or CMYK values.
Definition: qcolor.h:67
operator<<(QDataStream &ds, qfloat16 f)
Definition: qfloat16.cpp:327
The QDebug class provides an output stream for debugging information.
Definition: qdebug.h:65
template< typename Enum > bool operator!=(Enum lhs, QFlags< Enum > rhs)
template< typename Enum > size_t qHash(QFlags< Enum > flags, size_t seed=0) noexcept
template< typename Enum > bool operator==(Enum lhs, QFlags< Enum > rhs)
The QImage class provides a hardware-independent image representation that allows direct access to th...
Definition: qimage.h:73
Definition: qlist.h:108
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
Definition: qmatrix4x4.h:61
The QPoint class defines a point in the plane using integer precision.
Definition: qpoint.h:52
void setUsage(UsageFlags u)
Definition: qrhi_p.h:741
void setSize(int sz)
Definition: qrhi_p.h:744
UsageFlags m_usage
Definition: qrhi_p.h:756
Type m_type
Definition: qrhi_p.h:755
UsageFlags usage() const
Definition: qrhi_p.h:740
void setType(Type t)
Definition: qrhi_p.h:738
@ Immutable
Definition: qrhi_p.h:717
@ Static
Definition: qrhi_p.h:718
int size() const
Definition: qrhi_p.h:743
Type type() const
Definition: qrhi_p.h:737
int m_size
Definition: qrhi_p.h:757
virtual bool create()=0
QRhiTexture * resolveTexture() const
Definition: qrhi_p.h:475
void setTexture(QRhiTexture *tex)
Definition: qrhi_p.h:464
QRhiColorAttachment()=default
int resolveLevel() const
Definition: qrhi_p.h:481
void setLevel(int level)
Definition: qrhi_p.h:473
void setRenderBuffer(QRhiRenderBuffer *rb)
Definition: qrhi_p.h:467
int resolveLayer() const
Definition: qrhi_p.h:478
QRhiTexture * texture() const
Definition: qrhi_p.h:463
void setLayer(int layer)
Definition: qrhi_p.h:470
int level() const
Definition: qrhi_p.h:472
void setResolveLayer(int layer)
Definition: qrhi_p.h:479
void setResolveLevel(int level)
Definition: qrhi_p.h:482
void setResolveTexture(QRhiTexture *tex)
Definition: qrhi_p.h:476
int layer() const
Definition: qrhi_p.h:469
QRhiRenderBuffer * renderBuffer() const
Definition: qrhi_p.h:466
QPair< QRhiBuffer *, quint32 > VertexInput
Definition: qrhi_p.h:1426
QPair< int, quint32 > DynamicOffset
Definition: qrhi_p.h:1422
QRhiShaderStage m_shaderStage
Definition: qrhi_p.h:1390
virtual bool create()=0
Flags flags() const
Definition: qrhi_p.h:1378
QRhiShaderResourceBindings * shaderResourceBindings() const
Definition: qrhi_p.h:1384
void setShaderStage(const QRhiShaderStage &stage)
Definition: qrhi_p.h:1382
QRhiShaderStage shaderStage() const
Definition: qrhi_p.h:1381
void setFlags(Flags f)
Definition: qrhi_p.h:1379
void setShaderResourceBindings(QRhiShaderResourceBindings *srb)
Definition: qrhi_p.h:1385
void setDepthClearValue(float d)
Definition: qrhi_p.h:86
float depthClearValue() const
Definition: qrhi_p.h:85
quint32 stencilClearValue() const
Definition: qrhi_p.h:88
QRhiDepthStencilClearValue()=default
void setStencilClearValue(quint32 s)
Definition: qrhi_p.h:89
void setStencilFront(const StencilOpState &state)
Definition: qrhi_p.h:1244
void setCullMode(CullMode mode)
Definition: qrhi_p.h:1216
void setFrontFace(FrontFace f)
Definition: qrhi_p.h:1219
void setTargetBlends(std::initializer_list< TargetBlend > list)
Definition: qrhi_p.h:1221
QRhiRenderPassDescriptor * renderPassDescriptor() const
Definition: qrhi_p.h:1283
FrontFace frontFace() const
Definition: qrhi_p.h:1218
void setStencilTest(bool enable)
Definition: qrhi_p.h:1241
QRhiShaderResourceBindings * shaderResourceBindings() const
Definition: qrhi_p.h:1280
StencilOpState m_stencilFront
Definition: qrhi_p.h:1299
const TargetBlend * cendTargetBlends() const
Definition: qrhi_p.h:1229
void setDepthWrite(bool enable)
Definition: qrhi_p.h:1235
bool hasDepthWrite() const
Definition: qrhi_p.h:1234
void setShaderResourceBindings(QRhiShaderResourceBindings *srb)
Definition: qrhi_p.h:1281
StencilOpState stencilBack() const
Definition: qrhi_p.h:1246
StencilOpState stencilFront() const
Definition: qrhi_p.h:1243
void setDepthOp(CompareOp op)
Definition: qrhi_p.h:1238
void setSlopeScaledDepthBias(float bias)
Definition: qrhi_p.h:1265
void setVertexInputLayout(const QRhiVertexInputLayout &layout)
Definition: qrhi_p.h:1278
void setShaderStages(InputIterator first, InputIterator last)
Definition: qrhi_p.h:1269
void setStencilReadMask(quint32 mask)
Definition: qrhi_p.h:1250
QVarLengthArray< QRhiShaderStage, 4 > m_shaderStages
Definition: qrhi_p.h:1307
bool hasDepthTest() const
Definition: qrhi_p.h:1231
void setFlags(Flags f)
Definition: qrhi_p.h:1210
void setShaderStages(std::initializer_list< QRhiShaderStage > list)
Definition: qrhi_p.h:1267
QRhiVertexInputLayout m_vertexInputLayout
Definition: qrhi_p.h:1308
bool hasStencilTest() const
Definition: qrhi_p.h:1240
QVarLengthArray< TargetBlend, 8 > m_targetBlends
Definition: qrhi_p.h:1294
void setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)
Definition: qrhi_p.h:1284
int depthBias() const
Definition: qrhi_p.h:1261
void setSampleCount(int s)
Definition: qrhi_p.h:1256
void setTopology(Topology t)
Definition: qrhi_p.h:1213
quint32 stencilWriteMask() const
Definition: qrhi_p.h:1252
QRhiVertexInputLayout vertexInputLayout() const
Definition: qrhi_p.h:1277
StencilOpState m_stencilBack
Definition: qrhi_p.h:1300
Topology topology() const
Definition: qrhi_p.h:1212
int sampleCount() const
Definition: qrhi_p.h:1255
quint32 stencilReadMask() const
Definition: qrhi_p.h:1249
void setTargetBlends(InputIterator first, InputIterator last)
Definition: qrhi_p.h:1223
float lineWidth() const
Definition: qrhi_p.h:1258
virtual bool create()=0
void setDepthTest(bool enable)
Definition: qrhi_p.h:1232
CompareOp depthOp() const
Definition: qrhi_p.h:1237
void setDepthBias(int bias)
Definition: qrhi_p.h:1262
const QRhiShaderStage * cendShaderStages() const
Definition: qrhi_p.h:1275
float slopeScaledDepthBias() const
Definition: qrhi_p.h:1264
void setLineWidth(float width)
Definition: qrhi_p.h:1259
void setStencilWriteMask(quint32 mask)
Definition: qrhi_p.h:1253
const TargetBlend * cbeginTargetBlends() const
Definition: qrhi_p.h:1228
Flags flags() const
Definition: qrhi_p.h:1209
const QRhiShaderStage * cbeginShaderStages() const
Definition: qrhi_p.h:1274
void setStencilBack(const StencilOpState &state)
Definition: qrhi_p.h:1247
CullMode cullMode() const
Definition: qrhi_p.h:1215
Definition: qrhi_p.h:1536
Implementation
Definition: qrhi_p.h:1538
@ Vulkan
Definition: qrhi_p.h:1540
@ Null
Definition: qrhi_p.h:1539
@ D3D11
Definition: qrhi_p.h:1542
@ OpenGLES2
Definition: qrhi_p.h:1541
BeginFrameFlag
Definition: qrhi_p.h:1595
ResourceLimit
Definition: qrhi_p.h:1604
@ MaxThreadsPerThreadGroup
Definition: qrhi_p.h:1611
@ MaxThreadGroupZ
Definition: qrhi_p.h:1614
@ FramesInFlight
Definition: qrhi_p.h:1608
@ MaxThreadGroupsPerDimension
Definition: qrhi_p.h:1610
@ MaxAsyncReadbackFrames
Definition: qrhi_p.h:1609
@ TextureArraySizeMax
Definition: qrhi_p.h:1615
@ MaxColorAttachments
Definition: qrhi_p.h:1607
@ MaxThreadGroupY
Definition: qrhi_p.h:1613
@ MaxThreadGroupX
Definition: qrhi_p.h:1612
@ TextureSizeMax
Definition: qrhi_p.h:1606
EndFrameFlag
Definition: qrhi_p.h:1599
Feature
Definition: qrhi_p.h:1561
@ CustomInstanceStepRate
Definition: qrhi_p.h:1567
@ NonDynamicUniformBuffers
Definition: qrhi_p.h:1569
@ ElementIndexUint
Definition: qrhi_p.h:1573
@ RenderToNonBaseMipLevel
Definition: qrhi_p.h:1583
@ MultisampleRenderBuffer
Definition: qrhi_p.h:1563
@ RenderTo3DTextureSlice
Definition: qrhi_p.h:1591
@ IntAttributes
Definition: qrhi_p.h:1584
@ PipelineCacheDataLoadSave
Definition: qrhi_p.h:1587
@ ReadBackNonUniformBuffer
Definition: qrhi_p.h:1580
@ TexelFetch
Definition: qrhi_p.h:1582
@ BaseVertex
Definition: qrhi_p.h:1577
@ Compute
Definition: qrhi_p.h:1574
@ WideLines
Definition: qrhi_p.h:1575
@ TriangleFanTopology
Definition: qrhi_p.h:1579
@ ImageDataStride
Definition: qrhi_p.h:1588
@ BaseInstance
Definition: qrhi_p.h:1578
@ DebugMarkers
Definition: qrhi_p.h:1564
@ ReadBackNonBaseMipLevel
Definition: qrhi_p.h:1581
@ NonFourAlignedEffectiveIndexBufferOffset
Definition: qrhi_p.h:1570
@ RedOrAlpha8IsRed
Definition: qrhi_p.h:1572
@ Timestamps
Definition: qrhi_p.h:1565
@ ThreeDimensionalTextures
Definition: qrhi_p.h:1590
@ PrimitiveRestart
Definition: qrhi_p.h:1568
@ ReadBackAnyTextureFormat
Definition: qrhi_p.h:1586
@ RenderBufferImport
Definition: qrhi_p.h:1589
@ ScreenSpaceDerivatives
Definition: qrhi_p.h:1585
@ VertexShaderPointSize
Definition: qrhi_p.h:1576
@ NPOTTextureRepeat
Definition: qrhi_p.h:1571
@ Instancing
Definition: qrhi_p.h:1566
FrameOpResult
Definition: qrhi_p.h:1554
@ FrameOpSwapChainOutOfDate
Definition: qrhi_p.h:1557
@ FrameOpError
Definition: qrhi_p.h:1556
std::function< void(QRhi *)> CleanupCallback
Definition: qrhi_p.h:1631
Flag
Definition: qrhi_p.h:1546
QRhiReadbackDescription()=default
int layer() const
Definition: qrhi_p.h:655
void setLayer(int layer)
Definition: qrhi_p.h:656
void setLevel(int level)
Definition: qrhi_p.h:659
void setTexture(QRhiTexture *tex)
Definition: qrhi_p.h:653
int level() const
Definition: qrhi_p.h:658
QRhiTexture * texture() const
Definition: qrhi_p.h:652
void setPixelSize(const QSize &sz)
Definition: qrhi_p.h:960
void setFlags(Flags h)
Definition: qrhi_p.h:966
QSize pixelSize() const
Definition: qrhi_p.h:959
virtual QRhiTexture::Format backingFormat() const =0
void setType(Type t)
Definition: qrhi_p.h:957
int sampleCount() const
Definition: qrhi_p.h:962
int m_sampleCount
Definition: qrhi_p.h:978
QRhiTexture::Format m_backingFormatHint
Definition: qrhi_p.h:980
QSize m_pixelSize
Definition: qrhi_p.h:977
void setSampleCount(int s)
Definition: qrhi_p.h:963
Flags flags() const
Definition: qrhi_p.h:965
virtual bool create()=0
Flags m_flags
Definition: qrhi_p.h:979
Type type() const
Definition: qrhi_p.h:956
virtual QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() const =0
virtual bool isCompatible(const QRhiRenderPassDescriptor *other) const =0
virtual QVector< quint32 > serializedFormat() const =0
void setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)
Definition: qrhi_p.h:1011
virtual int sampleCount() const =0
virtual QSize pixelSize() const =0
virtual float devicePixelRatio() const =0
QRhiRenderPassDescriptor * renderPassDescriptor() const
Definition: qrhi_p.h:1010
@ RenderBuffer
Definition: qrhi_p.h:680
@ RenderPassDescriptor
Definition: qrhi_p.h:681
@ ComputePipeline
Definition: qrhi_p.h:687
@ GraphicsPipeline
Definition: qrhi_p.h:685
@ TextureRenderTarget
Definition: qrhi_p.h:683
@ ShaderResourceBindings
Definition: qrhi_p.h:684
@ RenderTarget
Definition: qrhi_p.h:682
virtual void destroy()=0
virtual Type resourceType() const =0
void setMipmapMode(Filter f)
Definition: qrhi_p.h:908
void setAddressW(AddressMode mode)
Definition: qrhi_p.h:917
virtual bool create()=0
Filter m_minFilter
Definition: qrhi_p.h:929
Filter minFilter() const
Definition: qrhi_p.h:904
AddressMode m_addressV
Definition: qrhi_p.h:932
AddressMode addressV() const
Definition: qrhi_p.h:913
Filter magFilter() const
Definition: qrhi_p.h:901
Filter mipmapMode() const
Definition: qrhi_p.h:907
Filter m_mipmapMode
Definition: qrhi_p.h:930
AddressMode m_addressU
Definition: qrhi_p.h:931
@ ClampToEdge
Definition: qrhi_p.h:884
void setMinFilter(Filter f)
Definition: qrhi_p.h:905
@ LessOrEqual
Definition: qrhi_p.h:892
@ GreaterOrEqual
Definition: qrhi_p.h:895
@ NotEqual
Definition: qrhi_p.h:894
AddressMode addressW() const
Definition: qrhi_p.h:916
void setTextureCompareOp(CompareOp op)
Definition: qrhi_p.h:920
CompareOp m_compareOp
Definition: qrhi_p.h:934
void setAddressU(AddressMode mode)
Definition: qrhi_p.h:911
AddressMode addressU() const
Definition: qrhi_p.h:910
AddressMode m_addressW
Definition: qrhi_p.h:933
void setAddressV(AddressMode mode)
Definition: qrhi_p.h:914
Filter m_magFilter
Definition: qrhi_p.h:928
CompareOp textureCompareOp() const
Definition: qrhi_p.h:919
void setMagFilter(Filter f)
Definition: qrhi_p.h:902
void setScissor(int x, int y, int w, int h)
Definition: qrhi_p.h:144
std::array< int, 4 > scissor() const
Definition: qrhi_p.h:143
QRhiScissor()=default
const Data * data() const
Definition: qrhi_p.h:426
static void serializeLayoutDescription(const QRhiShaderResourceBinding *first, const QRhiShaderResourceBinding *last, Output dst)
Definition: qrhi_p.h:431
QVarLengthArray< QRhiShaderResourceBinding, BINDING_PREALLOC > m_bindings
Definition: qrhi_p.h:1080
void setBindings(std::initializer_list< QRhiShaderResourceBinding > list)
Definition: qrhi_p.h:1052
void setBindings(InputIterator first, InputIterator last)
Definition: qrhi_p.h:1055
const QRhiShaderResourceBinding * cendBindings() const
Definition: qrhi_p.h:1062
const QRhiShaderResourceBinding * cbeginBindings() const
Definition: qrhi_p.h:1061
QVector< quint32 > serializedLayoutDescription() const
Definition: qrhi_p.h:1066
virtual bool create()=0
QVector< quint32 > m_layoutDesc
Definition: qrhi_p.h:1085
void setShaderVariant(QShader::Variant v)
Definition: qrhi_p.h:314
void setShader(const QShader &s)
Definition: qrhi_p.h:311
QRhiShaderStage()=default
QShader::Variant shaderVariant() const
Definition: qrhi_p.h:313
QShader shader() const
Definition: qrhi_p.h:310
Type type() const
Definition: qrhi_p.h:307
void setType(Type t)
Definition: qrhi_p.h:308
QSize currentPixelSize() const
Definition: qrhi_p.h:1347
void setDepthStencil(QRhiRenderBuffer *ds)
Definition: qrhi_p.h:1339
int sampleCount() const
Definition: qrhi_p.h:1341
virtual bool createOrResize()=0
virtual QRhiRenderTarget * currentFrameRenderTarget()=0
QWindow * window() const
Definition: qrhi_p.h:1332
virtual QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor()=0
virtual QSize surfacePixelSize()=0
void setSampleCount(int samples)
Definition: qrhi_p.h:1342
QSize m_currentPixelSize
Definition: qrhi_p.h:1362
void setFlags(Flags f)
Definition: qrhi_p.h:1336
Flags m_flags
Definition: qrhi_p.h:1358
Flags flags() const
Definition: qrhi_p.h:1335
void setWindow(QWindow *window)
Definition: qrhi_p.h:1333
virtual QRhiCommandBuffer * currentFrameCommandBuffer()=0
QRhiRenderBuffer * depthStencil() const
Definition: qrhi_p.h:1338
QRhiRenderPassDescriptor * renderPassDescriptor() const
Definition: qrhi_p.h:1344
void setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)
Definition: qrhi_p.h:1345
void setSourceLevel(int level)
Definition: qrhi_p.h:620
QPoint destinationTopLeft() const
Definition: qrhi_p.h:631
QPoint sourceTopLeft() const
Definition: qrhi_p.h:622
void setPixelSize(const QSize &sz)
Definition: qrhi_p.h:614
void setDestinationLevel(int level)
Definition: qrhi_p.h:629
void setDestinationTopLeft(const QPoint &p)
Definition: qrhi_p.h:632
int destinationLevel() const
Definition: qrhi_p.h:628
int sourceLevel() const
Definition: qrhi_p.h:619
QSize pixelSize() const
Definition: qrhi_p.h:613
void setDestinationLayer(int layer)
Definition: qrhi_p.h:626
int sourceLayer() const
Definition: qrhi_p.h:616
void setSourceTopLeft(const QPoint &p)
Definition: qrhi_p.h:623
int destinationLayer() const
Definition: qrhi_p.h:625
void setSourceLayer(int layer)
Definition: qrhi_p.h:617
QRhiTextureCopyDescription()=default
QSize m_pixelSize
Definition: qrhi_p.h:864
int m_arraySize
Definition: qrhi_p.h:866
int m_depth
Definition: qrhi_p.h:865
int arraySize() const
Definition: qrhi_p.h:846
void setFormat(Format fmt)
Definition: qrhi_p.h:838
int depth() const
Definition: qrhi_p.h:843
void setFlags(Flags f)
Definition: qrhi_p.h:850
void setDepth(int depth)
Definition: qrhi_p.h:844
int sampleCount() const
Definition: qrhi_p.h:852
virtual bool create()=0
@ ASTC_10x8
Definition: qrhi_p.h:824
@ ASTC_8x5
Definition: qrhi_p.h:819
@ ASTC_10x5
Definition: qrhi_p.h:822
@ ETC2_RGBA8
Definition: qrhi_p.h:812
@ ASTC_5x5
Definition: qrhi_p.h:816
@ ASTC_4x4
Definition: qrhi_p.h:814
@ ASTC_6x6
Definition: qrhi_p.h:818
@ ASTC_12x10
Definition: qrhi_p.h:826
@ ETC2_RGB8
Definition: qrhi_p.h:810
@ ASTC_5x4
Definition: qrhi_p.h:815
@ RED_OR_ALPHA8
Definition: qrhi_p.h:790
@ ASTC_6x5
Definition: qrhi_p.h:817
@ ASTC_8x8
Definition: qrhi_p.h:821
@ ASTC_10x6
Definition: qrhi_p.h:823
@ ASTC_10x10
Definition: qrhi_p.h:825
@ UnknownFormat
Definition: qrhi_p.h:782
@ ETC2_RGB8A1
Definition: qrhi_p.h:811
@ ASTC_8x6
Definition: qrhi_p.h:820
Flags flags() const
Definition: qrhi_p.h:849
void setArraySize(int arraySize)
Definition: qrhi_p.h:847
void setSampleCount(int s)
Definition: qrhi_p.h:853
QSize pixelSize() const
Definition: qrhi_p.h:840
Format m_format
Definition: qrhi_p.h:863
Format format() const
Definition: qrhi_p.h:837
Flags m_flags
Definition: qrhi_p.h:868
int m_sampleCount
Definition: qrhi_p.h:867
void setPixelSize(const QSize &sz)
Definition: qrhi_p.h:841
QRhiRenderBuffer * depthStencilBuffer() const
Definition: qrhi_p.h:515
void setDepthTexture(QRhiTexture *texture)
Definition: qrhi_p.h:519
void setDepthStencilBuffer(QRhiRenderBuffer *renderBuffer)
Definition: qrhi_p.h:516
QRhiTexture * depthTexture() const
Definition: qrhi_p.h:518
void setColorAttachments(InputIterator first, InputIterator last)
Definition: qrhi_p.h:506
void setColorAttachments(std::initializer_list< QRhiColorAttachment > list)
Definition: qrhi_p.h:504
const QRhiColorAttachment * cendColorAttachments() const
Definition: qrhi_p.h:512
const QRhiColorAttachment * colorAttachmentAt(int index) const
Definition: qrhi_p.h:513
const QRhiColorAttachment * cbeginColorAttachments() const
Definition: qrhi_p.h:511
Flags flags() const
Definition: qrhi_p.h:1032
void setDescription(const QRhiTextureRenderTargetDescription &desc)
Definition: qrhi_p.h:1030
void setFlags(Flags f)
Definition: qrhi_p.h:1033
QRhiTextureRenderTargetDescription m_desc
Definition: qrhi_p.h:1041
virtual QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor()=0
virtual bool create()=0
QRhiTextureRenderTargetDescription description() const
Definition: qrhi_p.h:1029
void setSourceTopLeft(const QPoint &p)
Definition: qrhi_p.h:551
void setDataStride(quint32 stride)
Definition: qrhi_p.h:542
void setDestinationTopLeft(const QPoint &p)
Definition: qrhi_p.h:545
void setData(const QByteArray &data)
Definition: qrhi_p.h:539
void setSourceSize(const QSize &size)
Definition: qrhi_p.h:548
void setImage(const QImage &image)
Definition: qrhi_p.h:536
const QRhiTextureUploadEntry * cbeginEntries() const
Definition: qrhi_p.h:601
void setEntries(std::initializer_list< QRhiTextureUploadEntry > list)
Definition: qrhi_p.h:594
const QRhiTextureUploadEntry * cendEntries() const
Definition: qrhi_p.h:602
void setEntries(InputIterator first, InputIterator last)
Definition: qrhi_p.h:596
Definition: qrhi_p.h:565
void setLevel(int level)
Definition: qrhi_p.h:574
void setDescription(const QRhiTextureSubresourceUploadDescription &desc)
Definition: qrhi_p.h:577
QRhiTextureSubresourceUploadDescription description() const
Definition: qrhi_p.h:576
int layer() const
Definition: qrhi_p.h:570
void setLayer(int layer)
Definition: qrhi_p.h:571
int level() const
Definition: qrhi_p.h:573
QRhiTextureUploadEntry()=default
int binding() const
Definition: qrhi_p.h:220
void setMatrixSlice(int slice)
Definition: qrhi_p.h:233
int matrixSlice() const
Definition: qrhi_p.h:232
void setLocation(int loc)
Definition: qrhi_p.h:224
QRhiVertexInputAttribute()=default
Format format() const
Definition: qrhi_p.h:226
void setFormat(Format f)
Definition: qrhi_p.h:227
void setBinding(int b)
Definition: qrhi_p.h:221
quint32 offset() const
Definition: qrhi_p.h:229
void setOffset(quint32 ofs)
Definition: qrhi_p.h:230
int location() const
Definition: qrhi_p.h:223
void setInstanceStepRate(int rate)
Definition: qrhi_p.h:179
void setClassification(Classification c)
Definition: qrhi_p.h:176
void setStride(quint32 s)
Definition: qrhi_p.h:173
Classification classification() const
Definition: qrhi_p.h:175
QRhiVertexInputBinding()=default
int instanceStepRate() const
Definition: qrhi_p.h:178
quint32 stride() const
Definition: qrhi_p.h:172
QRhiVertexInputLayout()=default
const QRhiVertexInputAttribute * cendAttributes() const
Definition: qrhi_p.h:276
void setAttributes(InputIterator first, InputIterator last)
Definition: qrhi_p.h:270
void setBindings(std::initializer_list< QRhiVertexInputBinding > list)
Definition: qrhi_p.h:257
const QRhiVertexInputBinding * cendBindings() const
Definition: qrhi_p.h:265
const QRhiVertexInputBinding * cbeginBindings() const
Definition: qrhi_p.h:264
void setAttributes(std::initializer_list< QRhiVertexInputAttribute > list)
Definition: qrhi_p.h:268
const QRhiVertexInputBinding * bindingAt(int index) const
Definition: qrhi_p.h:266
const QRhiVertexInputAttribute * cbeginAttributes() const
Definition: qrhi_p.h:275
void setBindings(InputIterator first, InputIterator last)
Definition: qrhi_p.h:259
void setMinDepth(float minDepth)
Definition: qrhi_p.h:117
float maxDepth() const
Definition: qrhi_p.h:119
void setMaxDepth(float maxDepth)
Definition: qrhi_p.h:120
float minDepth() const
Definition: qrhi_p.h:116
void setViewport(float x, float y, float w, float h)
Definition: qrhi_p.h:112
QRhiViewport()=default
std::array< float, 4 > viewport() const
Definition: qrhi_p.h:111
@ StandardShader
Definition: qshader_p.h:139
The QSize class defines the size of a two-dimensional object using integer point precision.
Definition: qsize.h:55
The QWindow class represents a window in the underlying windowing system.
Definition: qwindow.h:99
QRhiTexture * tex
QRhiShaderResourceBindings * srb
QRhiGraphicsPipeline * ps
employee setName("Richard Schmit")
else opt state
[0]
int sampleCount
Definition: examplefw.h:126
auto it unsigned count const
Definition: hb-iter.hh:848
QRhiTextureRenderTarget * rt
Definition: mrt.cpp:84
QRhiRenderBuffer * rb
@ Metal
Definition: multiwindow.cpp:90
@ Color
Definition: qcssparser_p.h:96
default
Definition: devices.py:76
Definition: image.cpp:51
set set set set set set set macro pixldst1 op
void
Definition: png.h:1080
int loc
Definition: property.cpp:46
std::pair< T1, T2 > QPair
Definition: qcontainerfwd.h:56
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction function
EGLOutputLayerEXT layer
#define Q_DECLARE_FLAGS(Flags, Enum)
Definition: qflags.h:210
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
Definition: qflags.h:227
Flags
unsigned int quint32
Definition: qglobal.h:288
int qint32
Definition: qglobal.h:287
unsigned long long quint64
Definition: qglobal.h:299
#define Q_DISABLE_COPY(Class)
Definition: qglobal.h:515
@ desc
GLenum type
Definition: qopengl.h:270
GLint location
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat z
GLint GLint GLint GLint GLint x
[0]
GLint GLenum GLsizei GLsizei GLsizei depth
GLsizei samples
GLenum mode
GLenum GLuint GLint level
GLfloat GLfloat GLfloat w
[0]
GLint GLsizei GLsizei height
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint index
[2]
GLuint sampler
GLenum GLenum GLenum GLenum dstAlpha
GLenum GLenum GLsizei count
GLfloat GLfloat f
GLenum GLenum GLenum srcAlpha
GLenum src
const void GLsizei GLsizei stride
GLint GLsizei width
GLenum GLenum dst
GLenum GLuint GLenum GLsizei const GLchar * buf
GLbitfield flags
GLboolean enable
GLenum GLuint texture
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLuint GLintptr offset
GLuint name
GLint first
GLint GLint GLint GLint GLint GLint GLint GLbitfield mask
GLint GLsizei GLsizei GLenum format
GLint y
GLfloat GLfloat GLfloat GLfloat h
void ** params
GLeglImageOES image
const GLubyte * c
Definition: qopenglext.h:12701
GLuint entry
Definition: qopenglext.h:11002
GLfloat bias
Definition: qopenglext.h:7943
GLuint GLenum * rate
Definition: qopenglext.h:11002
GLuint shader
Definition: qopenglext.h:665
GLint limit
Definition: qopenglext.h:9975
GLdouble GLdouble t
[9]
Definition: qopenglext.h:243
GLuint64EXT * result
[6]
Definition: qopenglext.h:10932
GLdouble s
[6]
Definition: qopenglext.h:235
GLfloat GLfloat p
[1]
Definition: qopenglext.h:12698
GLsizeiptr const void GLenum usage
Definition: qopenglext.h:543
Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiDepthStencilClearValue &)
Definition: qrhi.cpp:869
Q_GUI_EXPORT size_t qHash(const QRhiDepthStencilClearValue &v, size_t seed=0) noexcept
Q_GUI_EXPORT bool operator==(const QRhiDepthStencilClearValue &a, const QRhiDepthStencilClearValue &b) noexcept
Q_DECLARE_TYPEINFO(QRhiDepthStencilClearValue, Q_RELOCATABLE_TYPE)
SSL_CTX int(* cb)(SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg)
@ Q_PRIMITIVE_TYPE
Definition: qtypeinfo.h:155
@ Q_RELOCATABLE_TYPE
Definition: qtypeinfo.h:156
QVBoxLayout * layout
sem release()
Definition: main.cpp:48
QSharedPointer< T > other(t)
[5]
view viewport() -> scroll(dx, dy, deviceRect)
myFilter draw(painter, QPoint(0, 0), originalPixmap)
aWidget window() -> setWindowTitle("New Window Title")
[2]
view create()
QStringList list
[0]
Contains information about the underlying native resources of a buffer.
Definition: qrhi_p.h:730
QByteArray deviceName
Definition: qrhi_p.h:1519
@ IntegratedDevice
Definition: qrhi_p.h:1512
QByteArray data
Definition: qrhi_p.h:1471
QRhiTexture::Format format
Definition: qrhi_p.h:1469
StorageBufferData sbuf
Definition: qrhi_p.h:410
QRhiShaderResourceBinding::StageFlags stage
Definition: qrhi_p.h:384
SampledTextureData stex
Definition: qrhi_p.h:408
StorageImageData simage
Definition: qrhi_p.h:409
UniformBufferData ubuf
Definition: qrhi_p.h:407
Output serialize(Output dst) const
Definition: qrhi_p.h:414
QRhiShaderResourceBinding::Type type
Definition: qrhi_p.h:385
Contains information about the underlying native resources of a texture.
Definition: qrhi_p.h:830
Definition: moc.h:48
QWindow * m_window
Definition: main.mm:56
QRhiShaderResourceBinding bindings[2]
Definition: texuploads.cpp:72
@ One
Definition: tst_qflags.cpp:497