summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2017-04-07 23:00:42 +1000
committerStenzek <stenzek@gmail.com>2017-04-07 23:03:14 +1000
commit2492f196a716d3594022a5ea8ca1ff0178ee23b5 (patch)
tree20f3b1bb3c5581c718493bec4b3827680d486a5a /Source/Core
parentf94cd57a7012bc6cce22f22f84356d9e260c0461 (diff)
TextureCache: Fix incomplete GPU texture decoding of non-square mips
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/VideoBackends/OGL/TextureCache.cpp3
-rw-r--r--Source/Core/VideoBackends/Vulkan/TextureConverter.cpp3
-rw-r--r--Source/Core/VideoCommon/TextureCacheBase.cpp2
3 files changed, 5 insertions, 3 deletions
diff --git a/Source/Core/VideoBackends/OGL/TextureCache.cpp b/Source/Core/VideoBackends/OGL/TextureCache.cpp
index bd6f99b2e8..33130da5c8 100644
--- a/Source/Core/VideoBackends/OGL/TextureCache.cpp
+++ b/Source/Core/VideoBackends/OGL/TextureCache.cpp
@@ -775,7 +775,8 @@ void TextureCache::DecodeTextureOnGPU(TCacheEntryBase* entry, u32 dst_level, con
glBindTexture(GL_TEXTURE_BUFFER, s_palette_resolv_texture);
}
- auto dispatch_groups = TextureConversionShader::GetDispatchCount(info.base_info, width, height);
+ auto dispatch_groups =
+ TextureConversionShader::GetDispatchCount(info.base_info, aligned_width, aligned_height);
glBindImageTexture(0, static_cast<TCacheEntry*>(entry)->texture, dst_level, GL_TRUE, 0,
GL_WRITE_ONLY, GL_RGBA8);
glDispatchCompute(dispatch_groups.first, dispatch_groups.second, 1);
diff --git a/Source/Core/VideoBackends/Vulkan/TextureConverter.cpp b/Source/Core/VideoBackends/Vulkan/TextureConverter.cpp
index cbe4322b1d..7765647b1f 100644
--- a/Source/Core/VideoBackends/Vulkan/TextureConverter.cpp
+++ b/Source/Core/VideoBackends/Vulkan/TextureConverter.cpp
@@ -517,7 +517,8 @@ void TextureConverter::DecodeTexture(TextureCache::TCacheEntry* entry, u32 dst_l
dispatcher.SetTexelBuffer(0, data_view);
if (has_palette)
dispatcher.SetTexelBuffer(1, m_texel_buffer_view_r16_uint);
- auto groups = TextureConversionShader::GetDispatchCount(iter->second.base_info, width, height);
+ auto groups = TextureConversionShader::GetDispatchCount(iter->second.base_info, aligned_width,
+ aligned_height);
dispatcher.Dispatch(groups.first, groups.second, 1);
// Copy from temporary texture to final destination.
diff --git a/Source/Core/VideoCommon/TextureCacheBase.cpp b/Source/Core/VideoCommon/TextureCacheBase.cpp
index 4894914b5c..dccdeffa20 100644
--- a/Source/Core/VideoCommon/TextureCacheBase.cpp
+++ b/Source/Core/VideoCommon/TextureCacheBase.cpp
@@ -870,7 +870,7 @@ TextureCacheBase::TCacheEntryBase* TextureCacheBase::Load(const u32 stage)
if (decode_on_gpu)
{
- u32 row_stride = bytes_per_block * (mip_width / bsw);
+ u32 row_stride = bytes_per_block * (expanded_mip_width / bsw);
g_texture_cache->DecodeTextureOnGPU(entry, level, mip_src_data, mip_size,
static_cast<TextureFormat>(texformat), mip_width,
mip_height, expanded_mip_width, expanded_mip_height,