summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_opengl
diff options
context:
space:
mode:
authorGravatar liamwhite2023-03-08 09:16:06 -0500
committerGravatar GitHub2023-03-08 09:16:06 -0500
commit3cf88a4d6ce9efd653ec9b49f1b06e3db4c81093 (patch)
tree81f921ed23f4926c5d3352ab804a0db029970a89 /src/video_core/renderer_opengl
parentMerge pull request #9921 from liamwhite/override (diff)
parentCheck all swizzle components for red, not just [0], pass float border color r... (diff)
downloadyuzu-3cf88a4d6ce9efd653ec9b49f1b06e3db4c81093.tar.gz
yuzu-3cf88a4d6ce9efd653ec9b49f1b06e3db4c81093.tar.xz
yuzu-3cf88a4d6ce9efd653ec9b49f1b06e3db4c81093.zip
Merge pull request #9896 from Kelebek1/d24s8
Check all swizzle components for red, not just [0]
Diffstat (limited to 'src/video_core/renderer_opengl')
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp
index b047e7b3d..d3eabd686 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp
@@ -112,13 +112,17 @@ GLenum ImageTarget(Shader::TextureType type, int num_samples = 1) {
112 return GL_NONE; 112 return GL_NONE;
113} 113}
114 114
115GLenum TextureMode(PixelFormat format, bool is_first) { 115GLenum TextureMode(PixelFormat format, std::array<SwizzleSource, 4> swizzle) {
116 bool any_r =
117 std::ranges::any_of(swizzle, [](SwizzleSource s) { return s == SwizzleSource::R; });
116 switch (format) { 118 switch (format) {
117 case PixelFormat::D24_UNORM_S8_UINT: 119 case PixelFormat::D24_UNORM_S8_UINT:
118 case PixelFormat::D32_FLOAT_S8_UINT: 120 case PixelFormat::D32_FLOAT_S8_UINT:
119 return is_first ? GL_DEPTH_COMPONENT : GL_STENCIL_INDEX; 121 // R = depth, G = stencil
122 return any_r ? GL_DEPTH_COMPONENT : GL_STENCIL_INDEX;
120 case PixelFormat::S8_UINT_D24_UNORM: 123 case PixelFormat::S8_UINT_D24_UNORM:
121 return is_first ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT; 124 // R = stencil, G = depth
125 return any_r ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT;
122 default: 126 default:
123 ASSERT(false); 127 ASSERT(false);
124 return GL_DEPTH_COMPONENT; 128 return GL_DEPTH_COMPONENT;
@@ -208,8 +212,7 @@ void ApplySwizzle(GLuint handle, PixelFormat format, std::array<SwizzleSource, 4
208 case PixelFormat::D32_FLOAT_S8_UINT: 212 case PixelFormat::D32_FLOAT_S8_UINT:
209 case PixelFormat::S8_UINT_D24_UNORM: 213 case PixelFormat::S8_UINT_D24_UNORM:
210 UNIMPLEMENTED_IF(swizzle[0] != SwizzleSource::R && swizzle[0] != SwizzleSource::G); 214 UNIMPLEMENTED_IF(swizzle[0] != SwizzleSource::R && swizzle[0] != SwizzleSource::G);
211 glTextureParameteri(handle, GL_DEPTH_STENCIL_TEXTURE_MODE, 215 glTextureParameteri(handle, GL_DEPTH_STENCIL_TEXTURE_MODE, TextureMode(format, swizzle));
212 TextureMode(format, swizzle[0] == SwizzleSource::R));
213 std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed); 216 std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed);
214 break; 217 break;
215 case PixelFormat::A5B5G5R1_UNORM: { 218 case PixelFormat::A5B5G5R1_UNORM: {