From 7a6b044f109aa770423ce8ee742006da9af934da Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 23 Nov 2020 15:19:24 +0000 Subject: [PATCH] Use comparison state not shadow sampler type for pipeline state --- renderdoc/driver/gl/gl_common.cpp | 3 +-- renderdoc/driver/gl/gl_common.h | 2 +- renderdoc/driver/gl/gl_replay.cpp | 16 ++++++++++------ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/renderdoc/driver/gl/gl_common.cpp b/renderdoc/driver/gl/gl_common.cpp index 27393735a..e27efca08 100644 --- a/renderdoc/driver/gl/gl_common.cpp +++ b/renderdoc/driver/gl/gl_common.cpp @@ -1625,7 +1625,7 @@ AddressMode MakeAddressMode(GLenum addr) return AddressMode::Wrap; } -TextureFilter MakeFilter(GLenum minf, GLenum magf, bool shadowSampler, float maxAniso) +TextureFilter MakeFilter(GLenum minf, GLenum magf, float maxAniso) { TextureFilter ret; @@ -1653,7 +1653,6 @@ TextureFilter MakeFilter(GLenum minf, GLenum magf, bool shadowSampler, float max ret.magnify = (magf == eGL_LINEAR) ? FilterMode::Linear : FilterMode::Point; } - ret.filter = shadowSampler ? FilterFunction::Comparison : FilterFunction::Normal; return ret; } diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index 8b8c64e58..d9b9f4990 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -601,7 +601,7 @@ Topology MakePrimitiveTopology(GLenum Topo); GLenum MakeGLPrimitiveTopology(Topology Topo); BufferCategory MakeBufferCategory(GLenum bufferTarget); AddressMode MakeAddressMode(GLenum addr); -TextureFilter MakeFilter(GLenum minf, GLenum magf, bool shadowSampler, float maxAniso); +TextureFilter MakeFilter(GLenum minf, GLenum magf, float maxAniso); ShaderStage MakeShaderStage(GLenum type); CompareFunction MakeCompareFunc(GLenum func); StencilOperation MakeStencilOp(GLenum op); diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 9c23e7a27..4d2ab50cf 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -1195,8 +1195,6 @@ void GLReplay::SavePipelineState(uint32_t eventId) GLenum target = eGL_NONE; TextureType resType = TextureType::Unknown; - bool shadow = false; - for(size_t s = 0; s < ARRAY_COUNT(refls); s++) { if(refls[s] == NULL) @@ -1209,9 +1207,6 @@ void GLReplay::SavePipelineState(uint32_t eventId) { GLenum t = eGL_NONE; - if(strstr(res.variableType.descriptor.name.c_str(), "Shadow")) - shadow = true; - switch(res.resType) { case TextureType::Unknown: target = eGL_NONE; break; @@ -1432,7 +1427,16 @@ void GLReplay::SavePipelineState(uint32_t eventId) } pipe.samplers[unit].filter = - MakeFilter((GLenum)minf, (GLenum)magf, shadow, pipe.samplers[unit].maxAnisotropy); + MakeFilter((GLenum)minf, (GLenum)magf, pipe.samplers[unit].maxAnisotropy); + + v = 0; + if(samp != 0) + drv.glGetSamplerParameteriv(samp, eGL_TEXTURE_COMPARE_MODE, &v); + else + drv.glGetTextureParameterivEXT(tex, target, eGL_TEXTURE_COMPARE_MODE, &v); + pipe.samplers[unit].filter.filter = (GLenum)v == eGL_COMPARE_REF_TO_TEXTURE + ? FilterFunction::Comparison + : FilterFunction::Normal; if(samp != 0) drv.glGetSamplerParameterfv(samp, eGL_TEXTURE_MAX_LOD, &pipe.samplers[unit].maxLOD);