diff options
author | bunnei <bunneidev@gmail.com> | 2020-01-28 18:06:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-28 18:06:11 +0100 |
commit | bea6327d7492004229e7875b1f550ad65fcbea7f (patch) | |
tree | 1a073489f9ecc58f75e1adac9afa07e01ab0babc | |
parent | Merge pull request #3346 from bunnei/bsd-stub (diff) | |
parent | gl_texture_cache: Properly implement depth/stencil sampling (diff) | |
download | yuzu-bea6327d7492004229e7875b1f550ad65fcbea7f.tar yuzu-bea6327d7492004229e7875b1f550ad65fcbea7f.tar.gz yuzu-bea6327d7492004229e7875b1f550ad65fcbea7f.tar.bz2 yuzu-bea6327d7492004229e7875b1f550ad65fcbea7f.tar.lz yuzu-bea6327d7492004229e7875b1f550ad65fcbea7f.tar.xz yuzu-bea6327d7492004229e7875b1f550ad65fcbea7f.tar.zst yuzu-bea6327d7492004229e7875b1f550ad65fcbea7f.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 { |