diff options
Diffstat (limited to 'src/gui/rhi/qrhinull.cpp')
-rw-r--r-- | src/gui/rhi/qrhinull.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/gui/rhi/qrhinull.cpp b/src/gui/rhi/qrhinull.cpp index 894caf8f35..c160958493 100644 --- a/src/gui/rhi/qrhinull.cpp +++ b/src/gui/rhi/qrhinull.cpp @@ -162,6 +162,8 @@ int QRhiNull::resourceLimit(QRhi::ResourceLimit limit) const return 0; case QRhi::MaxThreadGroupZ: return 0; + case QRhi::TextureArraySizeMax: + return 2048; default: Q_UNREACHABLE(); return 0; @@ -219,10 +221,10 @@ QRhiRenderBuffer *QRhiNull::createRenderBuffer(QRhiRenderBuffer::Type type, cons } QRhiTexture *QRhiNull::createTexture(QRhiTexture::Format format, - const QSize &pixelSize, int depth, + const QSize &pixelSize, int depth, int arraySize, int sampleCount, QRhiTexture::Flags flags) { - return new QNullTexture(this, format, pixelSize, depth, sampleCount, flags); + return new QNullTexture(this, format, pixelSize, depth, arraySize, sampleCount, flags); } QRhiSampler *QRhiNull::createSampler(QRhiSampler::Filter magFilter, QRhiSampler::Filter minFilter, @@ -671,8 +673,8 @@ QRhiTexture::Format QNullRenderBuffer::backingFormat() const } QNullTexture::QNullTexture(QRhiImplementation *rhi, Format format, const QSize &pixelSize, int depth, - int sampleCount, Flags flags) - : QRhiTexture(rhi, format, pixelSize, depth, sampleCount, flags) + int arraySize, int sampleCount, Flags flags) + : QRhiTexture(rhi, format, pixelSize, depth, arraySize, sampleCount, flags) { } @@ -703,11 +705,13 @@ bool QNullTexture::create() QRHI_RES_RHI(QRhiNull); const bool isCube = m_flags.testFlag(CubeMap); const bool is3D = m_flags.testFlag(ThreeDimensional); + const bool isArray = m_flags.testFlag(TextureArray); const bool hasMipMaps = m_flags.testFlag(MipMapped); QSize size = m_pixelSize.isEmpty() ? QSize(1, 1) : m_pixelSize; m_depth = qMax(1, m_depth); const int mipLevelCount = hasMipMaps ? rhiD->q->mipLevelsForSize(size) : 1; - const int layerCount = is3D ? m_depth : (isCube ? 6 : 1); + m_arraySize = qMax(0, m_arraySize); + const int layerCount = is3D ? m_depth : (isCube ? 6 : (isArray ? m_arraySize : 1)); if (m_format == RGBA8) { image.resize(layerCount); @@ -737,12 +741,13 @@ bool QNullTexture::createFrom(QRhiTexture::NativeTexture src) QRHI_RES_RHI(QRhiNull); const bool isCube = m_flags.testFlag(CubeMap); + const bool isArray = m_flags.testFlag(TextureArray); const bool hasMipMaps = m_flags.testFlag(MipMapped); QSize size = m_pixelSize.isEmpty() ? QSize(1, 1) : m_pixelSize; const int mipLevelCount = hasMipMaps ? rhiD->q->mipLevelsForSize(size) : 1; QRHI_PROF; - QRHI_PROF_F(newTexture(this, false, mipLevelCount, isCube ? 6 : 1, 1)); + QRHI_PROF_F(newTexture(this, false, mipLevelCount, isCube ? 6 : (isArray ? m_arraySize : 1), 1)); rhiD->registerResource(this); return true; |