From 67140ee10022ed6116d33cdff322ebaa251379cb Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 25 Nov 2014 21:14:16 +0000 Subject: [PATCH] Add glMinSampleShading and renderstate value --- renderdoc/driver/gl/gl_common.h | 1 + renderdoc/driver/gl/gl_driver.cpp | 4 +++ renderdoc/driver/gl/gl_driver.h | 1 + renderdoc/driver/gl/gl_hookset.h | 1 + renderdoc/driver/gl/gl_hookset_defs.h | 3 +++ renderdoc/driver/gl/gl_renderstate.cpp | 3 +++ renderdoc/driver/gl/gl_renderstate.h | 1 + .../driver/gl/wrappers/gl_state_funcs.cpp | 25 +++++++++++++++++++ 8 files changed, 39 insertions(+) diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index 98a236feb..50a127aec 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -208,6 +208,7 @@ enum GLChunkType COLOR_MASKI, SAMPLE_MASK, SAMPLE_COVERAGE, + MIN_SAMPLE_SHADING, DEPTH_FUNC, DEPTH_MASK, DEPTH_RANGE, diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index bdfbf55cb..5e68b28ea 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -153,6 +153,7 @@ const char *GLChunkNames[] = "glColorMaski", "glSampleMaski", "glSampleCoverage", + "glMinSampleShading", "glDepthFunc", "glDepthMask", "glDepthRange", @@ -1885,6 +1886,9 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) case SAMPLE_COVERAGE: Serialise_glSampleCoverage(0.0f, 0); break; + case MIN_SAMPLE_SHADING: + Serialise_glMinSampleShading(0.0f); + break; case DEPTH_FUNC: Serialise_glDepthFunc(eGL_NONE); break; diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index 9a9c60fc9..fe66241a1 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -354,6 +354,7 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glColorMaski(GLuint buf, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)); IMPLEMENT_FUNCTION_SERIALISED(void, glSampleMaski(GLuint maskNumber, GLbitfield mask)); IMPLEMENT_FUNCTION_SERIALISED(void, glSampleCoverage(GLfloat value, GLboolean invert)); + IMPLEMENT_FUNCTION_SERIALISED(void, glMinSampleShading(GLfloat value)); IMPLEMENT_FUNCTION_SERIALISED(void, glClear(GLbitfield mask)); IMPLEMENT_FUNCTION_SERIALISED(void, glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)); IMPLEMENT_FUNCTION_SERIALISED(void, glClearDepth(GLdouble depth)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index 7849302bf..e6c793876 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -247,6 +247,7 @@ struct GLHookSet PFNGLCOLORMASKIPROC glColorMaski; PFNGLSAMPLEMASKIPROC glSampleMaski; PFNGLSAMPLECOVERAGEPROC glSampleCoverage; + PFNGLMINSAMPLESHADINGPROC glMinSampleShading; // aliases glMinSampleShadingARB PFNGLDEPTHRANGEPROC glDepthRange; PFNGLDEPTHRANGEFPROC glDepthRangef; PFNGLDEPTHRANGEINDEXEDPROC glDepthRangeIndexed; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index 6f01d4d6a..5ba785da6 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -267,6 +267,8 @@ HookExtension(PFNGLCOLORMASKIPROC, glColorMaski); \ HookExtension(PFNGLSAMPLEMASKIPROC, glSampleMaski); \ HookExtension(PFNGLSAMPLECOVERAGEPROC, glSampleCoverage); \ + HookExtension(PFNGLMINSAMPLESHADINGPROC, glMinSampleShading); \ + HookExtensionAlias(PFNGLMINSAMPLESHADINGPROC, glMinSampleShading, glMinSampleShadingARB); \ HookExtension(PFNGLDEPTHRANGEPROC, glDepthRange); \ HookExtension(PFNGLDEPTHRANGEFPROC, glDepthRangef); \ HookExtension(PFNGLDEPTHRANGEINDEXEDPROC, glDepthRangeIndexed); \ @@ -950,6 +952,7 @@ HookWrapper5(void, glColorMaski, GLuint, index, GLboolean, r, GLboolean, g, GLboolean, b, GLboolean, a); \ HookWrapper2(void, glSampleMaski, GLuint, maskNumber, GLbitfield, mask); \ HookWrapper2(void, glSampleCoverage, GLfloat, value, GLboolean, invert); \ + HookWrapper1(void, glMinSampleShading, GLfloat, value); \ HookWrapper2(void, glDepthRange, GLdouble, near, GLdouble, far); \ HookWrapper2(void, glDepthRangef, GLfloat, n, GLfloat, f); \ HookWrapper3(void, glDepthRangeIndexed, GLuint, index, GLdouble, n, GLdouble, f); \ diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index 28c50b48d..64b69cf35 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -273,6 +273,7 @@ void GLRenderState::FetchState() m_Real->glGetIntegeri_v(eGL_SAMPLE_MASK_VALUE, 0, (GLint *)&SampleMask[0]); m_Real->glGetIntegerv(eGL_SAMPLE_COVERAGE_VALUE, (GLint *)&SampleCoverage); m_Real->glGetIntegerv(eGL_SAMPLE_COVERAGE_INVERT, (GLint *)&boolread); SampleCoverageInvert = (boolread != 0); + m_Real->glGetFloatv(eGL_MIN_SAMPLE_SHADING_VALUE, &MinSampleShading); m_Real->glGetIntegerv(eGL_LOGIC_OP_MODE, (GLint *)&LogicOp); @@ -504,6 +505,7 @@ void GLRenderState::ApplyState() m_Real->glSampleMaski(0, (GLbitfield)SampleMask[0]); m_Real->glSampleCoverage(SampleCoverage, SampleCoverageInvert ? GL_TRUE : GL_FALSE); + m_Real->glMinSampleShading(MinSampleShading); m_Real->glLogicOp(LogicOp); @@ -779,6 +781,7 @@ void GLRenderState::Serialise(LogState state, void *ctx, WrappedOpenGL *gl) m_pSerialiser->Serialise<2>("GL_SAMPLE_MASK_VALUE", &SampleMask[0]); m_pSerialiser->Serialise("GL_SAMPLE_COVERAGE_VALUE", SampleCoverage); m_pSerialiser->Serialise("GL_SAMPLE_COVERAGE_INVERT", SampleCoverageInvert); + m_pSerialiser->Serialise("GL_MIN_SAMPLE_SHADING", MinSampleShading); m_pSerialiser->Serialise("GL_LOGIC_OP_MODE", LogicOp); diff --git a/renderdoc/driver/gl/gl_renderstate.h b/renderdoc/driver/gl/gl_renderstate.h index e5319d54f..438b11308 100644 --- a/renderdoc/driver/gl/gl_renderstate.h +++ b/renderdoc/driver/gl/gl_renderstate.h @@ -201,6 +201,7 @@ struct GLRenderState uint32_t SampleMask[2]; float SampleCoverage; bool SampleCoverageInvert; + float MinSampleShading; GLenum LogicOp; diff --git a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp index e2760e645..0fc3cb358 100644 --- a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp @@ -1087,6 +1087,31 @@ void WrappedOpenGL::glSampleCoverage(GLfloat value, GLboolean invert) } } +bool WrappedOpenGL::Serialise_glMinSampleShading(GLfloat value) +{ + SERIALISE_ELEMENT(float, Value, value); + + if(m_State <= EXECUTING) + { + m_Real.glMinSampleShading(Value); + } + + return true; +} + +void WrappedOpenGL::glMinSampleShading(GLfloat value) +{ + m_Real.glMinSampleShading(value); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(MIN_SAMPLE_SHADING); + Serialise_glMinSampleShading(value); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + bool WrappedOpenGL::Serialise_glPatchParameteri(GLenum pname, GLint value) { SERIALISE_ELEMENT(GLenum, PName, pname);