From 37ed2381867edb227bc980d7782fc0b67d2e3784 Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Mon, 20 Jan 2014 16:10:56 -0800 Subject: [PATCH] Fixing texture sizing (maybe). Need to do a custom slicing bit, probably. --- src/xenia/gpu/d3d11/d3d11_graphics_driver.cc | 11 +++++++---- src/xenia/gpu/d3d11/d3d11_graphics_driver.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc b/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc index ed4c4e017..c5fd9eac9 100644 --- a/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc +++ b/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc @@ -1058,14 +1058,17 @@ D3D11GraphicsDriver::TextureInfo D3D11GraphicsDriver::GetTextureInfo( // a2xx_sq_surfaceformat TextureInfo info; info.format = DXGI_FORMAT_UNKNOWN; + info.bpp = 0; info.block_width = 0; info.block_height = 0; switch (fetch.format) { case FMT_8_8_8_8: info.format = DXGI_FORMAT_R8G8B8A8_UNORM; + info.bpp = 4; break; case FMT_4_4_4_4: info.format = DXGI_FORMAT_B4G4R4A4_UNORM; + info.bpp = 2; break; case FMT_1_REVERSE: case FMT_1: @@ -1169,13 +1172,13 @@ int D3D11GraphicsDriver::FetchTexture2D( uint32_t height = fetch.size_2d.height; uint32_t data_pitch = XEROUNDUP(width, 256); // TODO(benvanik): block height rounding? - uint32_t data_height = height; - size_t data_size = data_pitch * data_height; + uint32_t data_height = XEROUNDUP(height, 256); + size_t data_size = data_pitch * data_height * info.bpp; D3D11_TEXTURE2D_DESC texture_desc; xe_zero_struct(&texture_desc, sizeof(texture_desc)); - texture_desc.Width = width; - texture_desc.Height = height; + texture_desc.Width = data_pitch; + texture_desc.Height = data_height; texture_desc.MipLevels = 1; texture_desc.ArraySize = 1; texture_desc.Format = info.format; diff --git a/src/xenia/gpu/d3d11/d3d11_graphics_driver.h b/src/xenia/gpu/d3d11/d3d11_graphics_driver.h index 8497740b8..56626b7d9 100644 --- a/src/xenia/gpu/d3d11/d3d11_graphics_driver.h +++ b/src/xenia/gpu/d3d11/d3d11_graphics_driver.h @@ -68,6 +68,7 @@ private: Shader::tex_buffer_desc_t& desc); typedef struct { DXGI_FORMAT format; + uint32_t bpp; uint32_t block_width; uint32_t block_height; } TextureInfo;