12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
35
36
37
38
39
40
41
42
43
46 : offscreenCommandBuffer(
this)
68 Q_UNUSED(sampleCount);
69 return { QSize(1, 1) };
74 return new QNullSwapChain(
this);
77QRhiBuffer *
QRhiNull::createBuffer(QRhiBuffer::Type type, QRhiBuffer::UsageFlags usage, quint32 size)
79 return new QNullBuffer(
this, type, usage, size);
123 case QRhi::TextureSizeMin:
125 case QRhi::TextureSizeMax:
127 case QRhi::MaxColorAttachments:
129 case QRhi::FramesInFlight:
131 case QRhi::MaxAsyncReadbackFrames:
133 case QRhi::MaxThreadGroupsPerDimension:
135 case QRhi::MaxThreadsPerThreadGroup:
137 case QRhi::MaxThreadGroupX:
139 case QRhi::MaxThreadGroupY:
141 case QRhi::MaxThreadGroupZ:
143 case QRhi::TextureArraySizeMax:
145 case QRhi::MaxUniformBufferRange:
147 case QRhi::MaxVertexInputs:
149 case QRhi::MaxVertexOutputs:
151 case QRhi::MaxPushConstantsSize:
153 case QRhi::MaxVertexStorageBuffers:
154 case QRhi::MaxFragmentStorageBuffers:
156 case QRhi::ShadingRateImageTileSize:
160 Q_UNREACHABLE_RETURN(0);
165 return &nativeHandlesStruct;
171 info.deviceName = QByteArrayLiteral(
"Null");
186void QRhiNull::setQueueSubmitParams(QRhiNativeHandles *)
211QRhiRenderBuffer *
QRhiNull::createRenderBuffer(QRhiRenderBuffer::Type type,
const QSize &pixelSize,
212 int sampleCount, QRhiRenderBuffer::Flags flags,
213 QRhiTexture::Format backingFormatHint)
215 return new QNullRenderBuffer(
this, type, pixelSize, sampleCount, flags, backingFormatHint);
219 const QSize &pixelSize,
int depth,
int arraySize,
220 int sampleCount, QRhiTexture::Flags flags)
222 return new QNullTexture(
this, format, pixelSize, depth, arraySize, sampleCount, flags);
226 QRhiSampler::Filter mipmapMode,
227 QRhiSampler::AddressMode u, QRhiSampler::AddressMode v, QRhiSampler::AddressMode w)
229 return new QNullSampler(
this, magFilter, minFilter, mipmapMode, u, v, w);
233 QRhiTextureRenderTarget::Flags flags)
245 return new QNullGraphicsPipeline(
this);
250 return new QNullComputePipeline(
this);
255 return new QNullShaderResourceBindings(
this);
265 int dynamicOffsetCount,
266 const QRhiCommandBuffer::DynamicOffset *dynamicOffsets)
270 Q_UNUSED(dynamicOffsetCount);
271 Q_UNUSED(dynamicOffsets);
275 int startBinding,
int bindingCount,
const QRhiCommandBuffer::VertexInput *bindings,
276 QRhiBuffer *indexBuf, quint32 indexOffset, QRhiCommandBuffer::IndexFormat indexFormat)
279 Q_UNUSED(startBinding);
280 Q_UNUSED(bindingCount);
283 Q_UNUSED(indexOffset);
284 Q_UNUSED(indexFormat);
322 Q_UNUSED(coarsePixelSize);
326 quint32 instanceCount, quint32 firstVertex, quint32 firstInstance)
329 Q_UNUSED(vertexCount);
330 Q_UNUSED(instanceCount);
331 Q_UNUSED(firstVertex);
332 Q_UNUSED(firstInstance);
336 quint32 instanceCount, quint32 firstIndex, qint32 vertexOffset, quint32 firstInstance)
339 Q_UNUSED(indexCount);
340 Q_UNUSED(instanceCount);
341 Q_UNUSED(firstIndex);
342 Q_UNUSED(vertexOffset);
343 Q_UNUSED(firstInstance);
347 quint32 indirectBufferOffset, quint32 drawCount, quint32 stride)
350 Q_UNUSED(indirectBuffer);
351 Q_UNUSED(indirectBufferOffset);
357 quint32 indirectBufferOffset, quint32 drawCount, quint32 stride)
360 Q_UNUSED(indirectBuffer);
361 Q_UNUSED(indirectBufferOffset);
367 QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset,
368 QRhiBuffer *countBuffer, quint32 countBufferOffset,
369 quint32 maxDrawCount, quint32 stride)
372 Q_UNUSED(indirectBuffer);
373 Q_UNUSED(indirectBufferOffset);
374 Q_UNUSED(countBuffer);
375 Q_UNUSED(countBufferOffset);
376 Q_UNUSED(maxDrawCount);
381 QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset,
382 QRhiBuffer *countBuffer, quint32 countBufferOffset,
383 quint32 maxDrawCount, quint32 stride)
386 Q_UNUSED(indirectBuffer);
387 Q_UNUSED(indirectBufferOffset);
388 Q_UNUSED(countBuffer);
389 Q_UNUSED(countBufferOffset);
390 Q_UNUSED(maxDrawCount);
426 quint32 indirectBufferOffset)
429 Q_UNUSED(indirectBuffer);
430 Q_UNUSED(indirectBufferOffset);
459 return QRhi::FrameOpSuccess;
468 return QRhi::FrameOpSuccess;
474 *cb = &offscreenCommandBuffer;
475 return QRhi::FrameOpSuccess;
481 return QRhi::FrameOpSuccess;
486 return QRhi::FrameOpSuccess;
492 for (
const auto &subres : u.subresDesc) {
493 const int layer = subres.layer;
494 const int level = subres.level;
495 const QRhiTextureSubresourceUploadDescription &subresDesc(subres.desc);
496 if (!subresDesc.image().isNull()) {
497 const QImage src = subresDesc.image();
498 QPainter painter(&texD->image[layer][level]);
499 const QSize srcSize = subresDesc.sourceSize().isEmpty()
500 ? src.size() : subresDesc.sourceSize();
501 painter.setCompositionMode(QPainter::CompositionMode_Source);
502 painter.drawImage(subresDesc.destinationTopLeft(), src,
503 QRect(subresDesc.sourceTopLeft(), srcSize));
504 }
else if (!subresDesc.data().isEmpty()) {
505 const QSize subresSize = q->sizeForMipLevel(level, texD->pixelSize());
506 int w = subresSize.width();
507 int h = subresSize.height();
508 if (!subresDesc.sourceSize().isEmpty()) {
509 w = subresDesc.sourceSize().width();
510 h = subresDesc.sourceSize().height();
513 const QByteArray srcData = subresDesc.data();
514 const QPoint dstOffset = subresDesc.destinationTopLeft();
515 QSize size = clampedSubResourceUploadSize(QSize(w, h), dstOffset, level,
517 size = clampedSubResourceUploadSizeForSourceData(size, subresDesc.dataStride(),
523 const char *src = srcData.constData();
524 const int srcBpl = w * 4;
525 int srcStride = srcBpl;
526 if (subresDesc.dataStride())
527 srcStride = subresDesc.dataStride();
528 uchar *dst = texD->image[layer][level].bits();
529 const int dstBpl = texD->image[layer][level].bytesPerLine();
530 for (
int y = 0; y < h; ++y) {
531 memcpy(dst + dstOffset.x() * 4 + (y + dstOffset.y()) * dstBpl,
543 const QImage &srcImage(srcD->image[u.desc.sourceLayer()][u.desc.sourceLevel()]);
544 QImage &dstImage(dstD->image[u.desc.destinationLayer()][u.desc.destinationLevel()]);
545 const QPoint dstPos = u.desc.destinationTopLeft();
546 const QSize size = u.desc.pixelSize().isEmpty() ? srcD->pixelSize() : u.desc.pixelSize();
547 const QPoint srcPos = u.desc.sourceTopLeft();
549 QPainter painter(&dstImage);
550 painter.setCompositionMode(QPainter::CompositionMode_Source);
551 painter.drawImage(QRect(dstPos, size), srcImage, QRect(srcPos, size));
557 const QSize baseSize = texD->pixelSize();
558 const int levelCount = q->mipLevelsForSize(baseSize);
559 for (
int level = 1; level < levelCount; ++level)
560 texD->image[0][level] = texD->image[0][0].scaled(q->sizeForMipLevel(level, baseSize));
575 QRhiReadbackResult *result = u.result;
576 result->data.resize(u.readSize);
578 memcpy(result->data.data(), bufD
->data + u.offset, size_t(u.readSize));
579 if (result->completed)
584 memcpy(dstD
->data + u.offset, srcD
->data + u.srcOffset, size_t(u.readSize));
587 memset(bufD
->data + u.offset, u.fillValue, size_t(u.readSize));
593 if (u.dst->format() == QRhiTexture::RGBA8)
596 if (u.src->format() == QRhiTexture::RGBA8 && u.dst->format() == QRhiTexture::RGBA8)
599 QRhiReadbackResult *result = u.result;
602 result->format = texD->format();
603 if (u.rb.rect().isValid())
604 result->pixelSize = u.rb.rect().size();
606 result->pixelSize = q->sizeForMipLevel(u.rb.level(), texD->pixelSize());
609 result->format = QRhiTexture::RGBA8;
610 if (u.rb.rect().isValid())
611 result->pixelSize = u.rb.rect().size();
613 result->pixelSize = currentSwapChain->currentPixelSize();
615 quint32 bytesPerLine = 0;
616 quint32 byteSize = 0;
617 textureFormatInfo(result->format, result->pixelSize, &bytesPerLine, &byteSize,
nullptr);
618 if (texD && texD->format() == QRhiTexture::RGBA8) {
619 result->data.resize(
int(byteSize));
620 const QImage &src(texD->image[u.rb.layer()][u.rb.level()]);
621 char *dst = result->data.data();
622 for (
int y = 0, h = src.height(); y < h; ++y) {
623 memcpy(dst, src.constScanLine(y), bytesPerLine);
627 result->data.fill(0,
int(byteSize));
629 if (result->completed)
632 if (u.dst->format() == QRhiTexture::RGBA8)
640 QRhiRenderTarget *rt,
641 const QColor &colorClearValue,
642 const QRhiDepthStencilClearValue &depthStencilClearValue,
643 QRhiResourceUpdateBatch *resourceUpdates,
644 QRhiCommandBuffer::BeginPassFlags flags)
646 Q_UNUSED(colorClearValue);
647 Q_UNUSED(depthStencilClearValue);
653 if (rt->resourceType() == QRhiRenderTarget::TextureRenderTarget) {
655 if (!QRhiRenderTargetAttachmentTracker::isUpToDate<QNullTexture, QNullRenderBuffer>(rtTex->description(), rtTex->d.currentResIdList))
660void QRhiNull::
endPass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates)
667 QRhiResourceUpdateBatch *resourceUpdates,
668 QRhiCommandBuffer::BeginPassFlags flags)
698 rhiD->unregisterResource(
this);
706 data =
new char[m_size];
707 memset(
data, 0, m_size);
710 rhiD->registerResource(
this);
717 Q_ASSERT(m_type == Dynamic);
722 int sampleCount, QRhiRenderBuffer::Flags flags,
723 QRhiTexture::Format backingFormatHint)
739 rhiD->unregisterResource(
this);
751 rhiD->registerResource(
this);
758 return m_type == Color ? QRhiTexture::RGBA8 : QRhiTexture::UnknownFormat;
762 int arraySize,
int sampleCount, Flags flags)
778 rhiD->unregisterResource(
this);
789 const bool isCube = m_flags.testFlag(CubeMap);
790 const bool is3D = m_flags.testFlag(ThreeDimensional);
791 const bool isArray = m_flags.testFlag(TextureArray);
792 const bool hasMipMaps = m_flags.testFlag(MipMapped);
793 const bool is1D = m_flags.testFlags(OneDimensional);
794 QSize size = is1D ? QSize(qMax(1, m_pixelSize.width()), 1)
795 : (m_pixelSize.isEmpty() ? QSize(1, 1) : m_pixelSize);
796 const int mipLevelCount = hasMipMaps ? rhiD->q->mipLevelsForSize(size) : 1;
797 const int layerCount = is3D ? qMax(1, m_depth)
799 : (isArray ? qMax(0, m_arraySize)
802 if (!rhiD->textureFormatInfo(m_format, size,
nullptr,
nullptr,
nullptr)) {
807 if (m_format == RGBA8) {
808 image.resize(layerCount);
809 for (
int layer = 0; layer < layerCount; ++layer) {
810 for (
int level = 0; level < mipLevelCount; ++level) {
811 image[layer][level] = QImage(rhiD->q->sizeForMipLevel(level, size),
812 QImage::Format_RGBA8888_Premultiplied);
813 image[layer][level].fill(Qt::yellow);
820 rhiD->registerResource(
this);
836 rhiD->registerResource(
this);
842 AddressMode u, AddressMode v, AddressMode w)
856 rhiD->unregisterResource(
this);
862 rhiD->registerResource(
this);
880 rhiD->unregisterResource(
this);
893 rhiD->registerResource(rpD,
false);
933 const QRhiTextureRenderTargetDescription &desc,
949 rhiD->unregisterResource(
this);
956 rhiD->registerResource(rpD,
false);
963 d.rp =
QRHI_RES(QNullRenderPassDescriptor, m_renderPassDesc);
964 if (m_desc.cbeginColorAttachments() != m_desc.cendColorAttachments()) {
965 const QRhiColorAttachment *colorAtt = m_desc.cbeginColorAttachments();
966 QRhiTexture *tex = colorAtt->texture();
967 QRhiRenderBuffer *rb = colorAtt->renderBuffer();
968 d.pixelSize = tex ? rhiD->q->sizeForMipLevel(colorAtt->level(), tex->pixelSize()) : rb->pixelSize();
969 }
else if (m_desc.depthStencilBuffer()) {
970 d.pixelSize = m_desc.depthStencilBuffer()->pixelSize();
971 }
else if (m_desc.depthTexture()) {
972 d.pixelSize = m_desc.depthTexture()->pixelSize();
974 QRhiRenderTargetAttachmentTracker::updateResIdList<QNullTexture, QNullRenderBuffer>(m_desc, &d.currentResIdList);
975 rhiD->registerResource(
this);
981 if (!QRhiRenderTargetAttachmentTracker::isUpToDate<QNullTexture, QNullRenderBuffer>(m_desc, d.currentResIdList))
1011 rhiD->unregisterResource(
this);
1017 if (!rhiD->sanityCheckShaderResourceBindings(
this))
1020 rhiD->updateLayoutDesc(
this);
1022 rhiD->registerResource(
this,
false);
1045 rhiD->unregisterResource(
this);
1051 if (!rhiD->sanityCheckGraphicsPipeline(
this))
1054 rhiD->registerResource(
this);
1072 rhiD->unregisterResource(
this);
1078 rhiD->registerResource(
this);
1113 rhiD->unregisterResource(
this);
1128 return QSize(1280, 720);
1140 rhiD->registerResource(rpD,
false);
1146 const bool needsRegistration = !window || window != m_window;
1147 if (window && window != m_window)
1151 m_currentPixelSize = surfacePixelSize();
1152 rt.setRenderPassDescriptor(m_renderPassDesc);
1153 rt.d.rp =
QRHI_RES(QNullRenderPassDescriptor, m_renderPassDesc);
1154 rt.d.pixelSize = m_currentPixelSize;
1157 if (needsRegistration) {
1159 rhiD->registerResource(
this);
const char * constData() const
void setShaderResources(QRhiCommandBuffer *cb, QRhiShaderResourceBindings *srb, int dynamicOffsetCount, const QRhiCommandBuffer::DynamicOffset *dynamicOffsets) override
double lastCompletedGpuTime(QRhiCommandBuffer *cb) override
QRhi::FrameOpResult endOffscreenFrame(QRhi::EndFrameFlags flags) override
void setPushConstants(QRhiCommandBuffer *cb, quint32 offset, quint32 size, const void *data) override
void dispatchIndirect(QRhiCommandBuffer *cb, QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset) override
bool isFeatureSupported(QRhi::Feature feature) const override
void debugMarkMsg(QRhiCommandBuffer *cb, const QByteArray &msg) override
void dispatch(QRhiCommandBuffer *cb, int x, int y, int z) override
QRhi::FrameOpResult beginFrame(QRhiSwapChain *swapChain, QRhi::BeginFrameFlags flags) override
void resourceUpdate(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
void drawIndexed(QRhiCommandBuffer *cb, quint32 indexCount, quint32 instanceCount, quint32 firstIndex, qint32 vertexOffset, quint32 firstInstance) override
void beginComputePass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates, QRhiCommandBuffer::BeginPassFlags flags) override
void beginPass(QRhiCommandBuffer *cb, QRhiRenderTarget *rt, const QColor &colorClearValue, const QRhiDepthStencilClearValue &depthStencilClearValue, QRhiResourceUpdateBatch *resourceUpdates, QRhiCommandBuffer::BeginPassFlags flags) override
bool isClipDepthZeroToOne() const override
void endComputePass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
void endPass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
QRhi::FrameOpResult endFrame(QRhiSwapChain *swapChain, QRhi::EndFrameFlags flags) override
QRhi::FrameOpResult beginOffscreenFrame(QRhiCommandBuffer **cb, QRhi::BeginFrameFlags flags) override
bool isYUpInNDC() const override
QRhiDriverInfo driverInfo() const override
void setScissor(QRhiCommandBuffer *cb, const QRhiScissor &scissor) override
void simulateTextureUpload(const QRhiResourceUpdateBatchPrivate::TextureOp &u)
QRhiComputePipeline * createComputePipeline() override
void setPipelineCacheData(const QByteArray &data) override
void setVertexInput(QRhiCommandBuffer *cb, int startBinding, int bindingCount, const QRhiCommandBuffer::VertexInput *bindings, QRhiBuffer *indexBuf, quint32 indexOffset, QRhiCommandBuffer::IndexFormat indexFormat) override
void debugMarkBegin(QRhiCommandBuffer *cb, const QByteArray &name) override
void draw(QRhiCommandBuffer *cb, quint32 vertexCount, quint32 instanceCount, quint32 firstVertex, quint32 firstInstance) override
QByteArray pipelineCacheData() override
void drawIndirectCount(QRhiCommandBuffer *cb, QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset, QRhiBuffer *countBuffer, quint32 countBufferOffset, quint32 maxDrawCount, quint32 stride) override
void drawIndexedIndirectCount(QRhiCommandBuffer *cb, QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset, QRhiBuffer *countBuffer, quint32 countBufferOffset, quint32 maxDrawCount, quint32 stride) override
const QRhiNativeHandles * nativeHandles() override
void setGraphicsPipeline(QRhiCommandBuffer *cb, QRhiGraphicsPipeline *ps) override
void releaseCachedResources() override
void simulateTextureCopy(const QRhiResourceUpdateBatchPrivate::TextureOp &u)
QRhiTexture * createTexture(QRhiTexture::Format format, const QSize &pixelSize, int depth, int arraySize, int sampleCount, QRhiTexture::Flags flags) override
QList< QSize > supportedShadingRates(int sampleCount) const override
void simulateTextureGenMips(const QRhiResourceUpdateBatchPrivate::TextureOp &u)
void setShadingRate(QRhiCommandBuffer *cb, const QSize &coarsePixelSize) override
bool makeThreadLocalNativeContextCurrent() override
void drawIndirect(QRhiCommandBuffer *cb, QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset, quint32 drawCount, quint32 stride) override
const QRhiNativeHandles * nativeHandles(QRhiCommandBuffer *cb) override
bool isYUpInFramebuffer() const override
QRhi::FrameOpResult finish() override
void setComputePipeline(QRhiCommandBuffer *cb, QRhiComputePipeline *ps) override
QRhiStats statistics() override
QRhiShadingRateMap * createShadingRateMap() override
void beginExternal(QRhiCommandBuffer *cb) override
QRhiSwapChain * createSwapChain() override
void setViewport(QRhiCommandBuffer *cb, const QRhiViewport &viewport) override
QRhiTextureRenderTarget * createTextureRenderTarget(const QRhiTextureRenderTargetDescription &desc, QRhiTextureRenderTarget::Flags flags) override
QRhiGraphicsPipeline * createGraphicsPipeline() override
bool create(QRhi::Flags flags) override
void setStencilRef(QRhiCommandBuffer *cb, quint32 refValue) override
void debugMarkEnd(QRhiCommandBuffer *cb) override
QList< int > supportedSampleCounts() const override
QMatrix4x4 clipSpaceCorrMatrix() const override
QRhiSampler * createSampler(QRhiSampler::Filter magFilter, QRhiSampler::Filter minFilter, QRhiSampler::Filter mipmapMode, QRhiSampler::AddressMode u, QRhiSampler::AddressMode v, QRhiSampler::AddressMode w) override
void drawIndexedIndirect(QRhiCommandBuffer *cb, QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset, quint32 drawCount, quint32 stride) override
QRhiSwapChain * currentSwapChain
int ubufAlignment() const override
bool isTextureFormatSupported(QRhiTexture::Format format, QRhiTexture::Flags flags) const override
int resourceLimit(QRhi::ResourceLimit limit) const override
QRhiShaderResourceBindings * createShaderResourceBindings() override
void setBlendConstants(QRhiCommandBuffer *cb, const QColor &c) override
void endExternal(QRhiCommandBuffer *cb) override
bool isDeviceLost() const override
static QRhiResourceUpdateBatchPrivate * get(QRhiResourceUpdateBatch *b)
Combined button and popup list for selecting options.
QNullBuffer(QRhiImplementation *rhi, Type type, UsageFlags usage, quint32 size)
bool create() override
Creates the corresponding native graphics resources.
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
char * beginFullDynamicBufferUpdateForCurrentFrame() override
QNullCommandBuffer(QRhiImplementation *rhi)
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QNullComputePipeline(QRhiImplementation *rhi)
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
bool create() override
Creates the corresponding native graphics resources.
QNullGraphicsPipeline(QRhiImplementation *rhi)
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
bool create() override
Creates the corresponding native graphics resources.
QNullRenderBuffer(QRhiImplementation *rhi, Type type, const QSize &pixelSize, int sampleCount, QRhiRenderBuffer::Flags flags, QRhiTexture::Format backingFormatHint)
QRhiTexture::Format backingFormat() const override
QNullRenderPassDescriptor(QRhiImplementation *rhi)
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() const override
~QNullRenderPassDescriptor()
QVector< quint32 > serializedFormat() const override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
bool isCompatible(const QRhiRenderPassDescriptor *other) const override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QNullSampler(QRhiImplementation *rhi, Filter magFilter, Filter minFilter, Filter mipmapMode, AddressMode u, AddressMode v, AddressMode w)
QNullShaderResourceBindings(QRhiImplementation *rhi)
bool create() override
Creates the corresponding resource binding set.
void updateResources(UpdateFlags flags) override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
~QNullShaderResourceBindings()
QSize pixelSize() const override
float devicePixelRatio() const override
~QNullSwapChainRenderTarget()
QNullSwapChainRenderTarget(QRhiImplementation *rhi, QRhiSwapChain *swapchain)
int sampleCount() const override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
bool createOrResize() override
Creates the swapchain if not already done and resizes the swapchain buffers to match the current size...
QSize surfacePixelSize() override
bool isFormatSupported(Format f) override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QRhiCommandBuffer * currentFrameCommandBuffer() override
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() override
QRhiRenderTarget * currentFrameRenderTarget() override
QNullSwapChain(QRhiImplementation *rhi)
~QNullTextureRenderTarget()
QSize pixelSize() const override
int sampleCount() const override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() override
bool create() override
Creates the corresponding native graphics resources.
QNullTextureRenderTarget(QRhiImplementation *rhi, const QRhiTextureRenderTargetDescription &desc, Flags flags)
float devicePixelRatio() const override
bool create() override
Creates the corresponding native graphics resources.
bool createFrom(NativeTexture src) override
Similar to create(), except that no new native textures are created.
QNullTexture(QRhiImplementation *rhi, Format format, const QSize &pixelSize, int depth, int arraySize, int sampleCount, Flags flags)
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
\inmodule QtGuiPrivate \inheaderfile rhi/qrhi.h