diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp index 69a58fdc7..ea8e18bfb 100644 --- a/src/renderer_d3d11.cpp +++ b/src/renderer_d3d11.cpp @@ -4659,8 +4659,9 @@ BX_PRAGMA_DIAGNOSTIC_POP(); const uint32_t subres = _mip + ( (layer + _side) * m_numMips); const uint32_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) ); - const uint32_t rectpitch = _rect.m_width*bpp/8; - const uint32_t srcpitch = UINT16_MAX == _pitch ? rectpitch : _pitch; + const uint32_t rectpitch = _rect.m_width*bpp/8; + const uint32_t srcpitch = UINT16_MAX == _pitch ? rectpitch : _pitch; + const uint32_t slicepitch = rectpitch*_rect.m_height; const bool convert = m_textureFormat != m_requestedFormat; @@ -4669,12 +4670,19 @@ BX_PRAGMA_DIAGNOSTIC_POP(); if (convert) { - temp = (uint8_t*)BX_ALLOC(g_allocator, rectpitch*_rect.m_height); + temp = (uint8_t*)BX_ALLOC(g_allocator, slicepitch); imageDecodeToBgra8(temp, data, _rect.m_width, _rect.m_height, srcpitch, TextureFormat::Enum(m_requestedFormat) ); data = temp; } - deviceCtx->UpdateSubresource(m_ptr, subres, &box, data, srcpitch, 0); + deviceCtx->UpdateSubresource( + m_ptr + , subres + , &box + , data + , srcpitch + , TextureD3D11::Texture3D == m_type ? slicepitch : 0 + ); if (NULL != temp) { @@ -4729,7 +4737,8 @@ BX_PRAGMA_DIAGNOSTIC_POP(); m_dsv = NULL; m_swapChain = NULL; - m_numTh = _num; + m_denseIdx = UINT16_MAX; + m_numTh = _num; m_needPresent = false; memcpy(m_attachment, _attachment, _num*sizeof(Attachment) ); diff --git a/src/renderer_d3d12.cpp b/src/renderer_d3d12.cpp index 750692c8e..3ba361956 100644 --- a/src/renderer_d3d12.cpp +++ b/src/renderer_d3d12.cpp @@ -4429,6 +4429,7 @@ data.NumQualityLevels = 0; void FrameBufferD3D12::create(uint8_t _num, const Attachment* _attachment) { + m_denseIdx = UINT16_MAX; m_numTh = _num; memcpy(m_attachment, _attachment, _num*sizeof(Attachment) ); diff --git a/src/renderer_d3d9.cpp b/src/renderer_d3d9.cpp index e503815f4..58e45db90 100644 --- a/src/renderer_d3d9.cpp +++ b/src/renderer_d3d9.cpp @@ -3154,6 +3154,7 @@ namespace bgfx { namespace d3d9 m_surface[ii] = NULL; } + m_denseIdx = UINT16_MAX; m_dsIdx = UINT8_MAX; m_num = 0; m_numTh = _num; diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 467edeac3..93a714ea1 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -5812,6 +5812,7 @@ namespace bgfx { namespace gl { GL_CHECK(glGenFramebuffers(1, &m_fbo[0]) ); + m_denseIdx = UINT16_MAX; m_numTh = _num; memcpy(m_attachment, _attachment, _num*sizeof(Attachment) ); diff --git a/src/renderer_mtl.mm b/src/renderer_mtl.mm index fccb15d45..1c1749700 100644 --- a/src/renderer_mtl.mm +++ b/src/renderer_mtl.mm @@ -2689,6 +2689,7 @@ namespace bgfx { namespace mtl void FrameBufferMtl::create(uint8_t _num, const Attachment* _attachment) { + m_denseIdx = UINT16_MAX; m_num = 0; m_width = 0; m_height = 0;