summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon
diff options
context:
space:
mode:
authorNeoBrainX <NeoBrainX@googlemail.com>2011-12-10 16:08:26 +0100
committerNeoBrainX <NeoBrainX@googlemail.com>2011-12-10 16:08:26 +0100
commit3d9c35f58e84aa2c1b69bf4dfe381a9b526a3dd2 (patch)
treed7b02c2e94877da6e2d7ccdf0b8441b13055f47b /Source/Core/VideoCommon
parentc04c3bd9d3a2b7642b8a7ac4b052598b2a856a28 (diff)
VideoCommon: Fix upper and lower depth bytes being switched when performing Z16L EFB copies (EFB to texture only).
Fixes issue 4989. Fixes issue 5056.
Diffstat (limited to 'Source/Core/VideoCommon')
-rw-r--r--Source/Core/VideoCommon/Src/TextureCacheBase.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp
index d3b7ca14ba..3550227389 100644
--- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp
+++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp
@@ -429,7 +429,7 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat
float colmat[28] = {0};
float *const fConstAdd = colmat + 16;
float *const ColorMask = colmat + 20;
- ColorMask[0] = ColorMask[1] = ColorMask[2] = ColorMask[3] = 255.0f;
+ ColorMask[0] = ColorMask[1] = ColorMask[2] = ColorMask[3] = 255.0f;
ColorMask[4] = ColorMask[5] = ColorMask[6] = ColorMask[7] = 1.0f / 255.0f;
unsigned int cbufid = -1;
@@ -437,7 +437,7 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat
{
switch (dstFormat)
{
- case 0: // Z4
+ case 0: // Z4
colmat[3] = colmat[7] = colmat[11] = colmat[15] = 1.0f;
cbufid = 0;
break;
@@ -447,7 +447,7 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat
cbufid = 1;
break;
- case 3: // Z16
+ case 3: // Z16
colmat[1] = colmat[5] = colmat[9] = colmat[12] = 1.0f;
cbufid = 24;
break;
@@ -472,8 +472,10 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat
cbufid = 5;
break;
- case 12: // Z16L
- colmat[2] = colmat[6] = colmat[10] = colmat[13] = 1.0f;
+ case 12: // Z16L - copy lower 16 depth bits
+ // expected to be used as an IA8 texture (upper 8 bits stored as intensity, lower 8 bits stored as alpha)
+ // Used e.g. in Zelda: Skyward Sword
+ colmat[1] = colmat[5] = colmat[9] = colmat[14] = 1.0f;
cbufid = 6;
break;
@@ -483,7 +485,6 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat
cbufid = 7;
break;
}
-
}
else if (isIntensity)
{