diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-01-26 21:11:49 +0100 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-01-27 01:44:08 +0100 |
commit | d17dfa610418e2057e65b2fd3ab28a46249f4b83 (patch) | |
tree | 9d6e927970f1ee4d8a49a9932f5d439b3fb61d38 | |
parent | Merge pull request #3343 from FearlessTobi/ui-tab (diff) | |
download | yuzu-d17dfa610418e2057e65b2fd3ab28a46249f4b83.tar yuzu-d17dfa610418e2057e65b2fd3ab28a46249f4b83.tar.gz yuzu-d17dfa610418e2057e65b2fd3ab28a46249f4b83.tar.bz2 yuzu-d17dfa610418e2057e65b2fd3ab28a46249f4b83.tar.lz yuzu-d17dfa610418e2057e65b2fd3ab28a46249f4b83.tar.xz yuzu-d17dfa610418e2057e65b2fd3ab28a46249f4b83.tar.zst yuzu-d17dfa610418e2057e65b2fd3ab28a46249f4b83.zip |
-rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.cpp | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index e95eb069e..d9aae6dff 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp @@ -176,6 +176,19 @@ GLint GetSwizzleSource(SwizzleSource source) { return GL_NONE; } +GLenum GetComponent(PixelFormat format, bool is_first) { + switch (format) { + case PixelFormat::Z24S8: + case PixelFormat::Z32FS8: + return is_first ? GL_DEPTH_COMPONENT : GL_STENCIL_INDEX; + case PixelFormat::S8Z24: + return is_first ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT; + default: + UNREACHABLE(); + return GL_DEPTH_COMPONENT; + } +} + void ApplyTextureDefaults(const SurfaceParams& params, GLuint texture) { if (params.IsBuffer()) { return; @@ -416,11 +429,21 @@ void CachedSurfaceView::ApplySwizzle(SwizzleSource x_source, SwizzleSource y_sou if (new_swizzle == swizzle) return; swizzle = new_swizzle; - const std::array<GLint, 4> gl_swizzle = {GetSwizzleSource(x_source), GetSwizzleSource(y_source), - GetSwizzleSource(z_source), - GetSwizzleSource(w_source)}; + const std::array gl_swizzle = {GetSwizzleSource(x_source), GetSwizzleSource(y_source), + GetSwizzleSource(z_source), GetSwizzleSource(w_source)}; const GLuint handle = GetTexture(); - glTextureParameteriv(handle, GL_TEXTURE_SWIZZLE_RGBA, gl_swizzle.data()); + const PixelFormat format = surface.GetSurfaceParams().pixel_format; + switch (format) { + case PixelFormat::Z24S8: + case PixelFormat::Z32FS8: + case PixelFormat::S8Z24: + glTextureParameteri(handle, GL_DEPTH_STENCIL_TEXTURE_MODE, + GetComponent(format, x_source == SwizzleSource::R)); + break; + default: + glTextureParameteriv(handle, GL_TEXTURE_SWIZZLE_RGBA, gl_swizzle.data()); + break; + } } OGLTextureView CachedSurfaceView::CreateTextureView() const { |