D3D1x: Fixed update surface size when texture is transcoded.

This commit is contained in:
Branimir Karadžić
2021-11-11 15:46:29 -08:00
parent 17bb4dce49
commit 67d1cce8f8
2 changed files with 16 additions and 10 deletions

View File

@@ -4751,9 +4751,10 @@ namespace bgfx { namespace d3d11
uint32_t rectpitch = _rect.m_width*bpp/8;
if (bimg::isCompressed(bimg::TextureFormat::Enum(m_textureFormat)))
{
const bimg::ImageBlockInfo& blockInfo = bimg::getBlockInfo(bimg::TextureFormat::Enum(m_textureFormat));
const bimg::ImageBlockInfo& blockInfo = bimg::getBlockInfo(bimg::TextureFormat::Enum(m_textureFormat) );
rectpitch = (_rect.m_width / blockInfo.blockWidth)*blockInfo.blockSize;
}
const uint32_t srcpitch = UINT16_MAX == _pitch ? rectpitch : _pitch;
const uint32_t slicepitch = rectpitch*_rect.m_height;
@@ -4767,6 +4768,9 @@ namespace bgfx { namespace d3d11
temp = (uint8_t*)BX_ALLOC(g_allocator, slicepitch);
bimg::imageDecodeToBgra8(g_allocator, temp, data, _rect.m_width, _rect.m_height, srcpitch, bimg::TextureFormat::Enum(m_requestedFormat) );
data = temp;
box.right = bx::max(1u, m_width >> _mip);
box.bottom = bx::max(1u, m_height >> _mip);
}
deviceCtx->UpdateSubresource(

View File

@@ -5105,6 +5105,14 @@ namespace bgfx { namespace d3d12
const bool convert = m_textureFormat != m_requestedFormat;
D3D12_BOX box;
box.left = 0;
box.top = 0;
box.right = box.left + _rect.m_width;
box.bottom = box.top + _rect.m_height;
box.front = _z;
box.back = _z + _depth;
uint8_t* srcData = _mem->data;
uint8_t* temp = NULL;
@@ -5113,8 +5121,10 @@ namespace bgfx { namespace d3d12
temp = (uint8_t*)BX_ALLOC(g_allocator, slicepitch);
bimg::imageDecodeToBgra8(g_allocator, temp, srcData, _rect.m_width, _rect.m_height, srcpitch, bimg::TextureFormat::Enum(m_requestedFormat));
srcData = temp;
}
box.right = bx::max(1u, m_width >> _mip);
box.bottom = bx::max(1u, m_height >> _mip);
}
D3D12_RESOURCE_DESC desc = getResourceDesc(m_ptr);
@@ -5155,14 +5165,6 @@ namespace bgfx { namespace d3d12
D3D12_RANGE writeRange = { 0, numRows*rowPitch };
staging->Unmap(0, &writeRange);
D3D12_BOX box;
box.left = 0;
box.top = 0;
box.right = box.left + _rect.m_width;
box.bottom = box.top + _rect.m_height;
box.front = _z;
box.back = _z+_depth;
D3D12_TEXTURE_COPY_LOCATION dst = { m_ptr, D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, { } };
dst.SubresourceIndex = subres;
D3D12_TEXTURE_COPY_LOCATION src = { staging, D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT, { layout } };