diff options
| author | 2023-03-08 09:16:06 -0500 | |
|---|---|---|
| committer | 2023-03-08 09:16:06 -0500 | |
| commit | 3cf88a4d6ce9efd653ec9b49f1b06e3db4c81093 (patch) | |
| tree | 81f921ed23f4926c5d3352ab804a0db029970a89 /src/video_core/renderer_opengl | |
| parent | Merge pull request #9921 from liamwhite/override (diff) | |
| parent | Check all swizzle components for red, not just [0], pass float border color r... (diff) | |
| download | yuzu-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.cpp | 13 |
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 | ||
| 115 | GLenum TextureMode(PixelFormat format, bool is_first) { | 115 | GLenum 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: { |