diff --git a/renderdoc/driver/gl/gl_common.cpp b/renderdoc/driver/gl/gl_common.cpp index 7a0b7daeb..6b63f5025 100644 --- a/renderdoc/driver/gl/gl_common.cpp +++ b/renderdoc/driver/gl/gl_common.cpp @@ -77,6 +77,7 @@ void DoVendorChecks(const GLHookSet &gl, GLWindowingData context) EXT_CHECK(ARB_clip_control); EXT_CHECK(ARB_enhanced_layouts); + EXT_CHECK(EXT_polygon_offset_clamp); #undef EXT_CHECK } diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index a7dfdcc77..e211b9aba 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -97,6 +97,7 @@ enum ExtensionCheckEnum { ExtensionSupported_ARB_enhanced_layouts = 0, ExtensionSupported_ARB_clip_control, + ExtensionSupported_EXT_polygon_offset_clamp, ExtensionSupported_Count, }; extern bool ExtensionSupported[ExtensionSupported_Count]; @@ -247,6 +248,7 @@ enum GLChunkType CLEARTEXSUBIMAGE, POLYGON_MODE, POLYGON_OFFSET, + POLYGON_OFFSET_CLAMP, CULL_FACE, HINT, ENABLE, diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index f8831a5c0..7b5b9a177 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -143,6 +143,7 @@ const char *GLChunkNames[] = "glClearTexSubImage", "glPolygonMode", "glPolygonOffset", + "glPolygonOffsetClampEXT", "glCullFace", "glHint", "glEnable", @@ -453,6 +454,7 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs) globalExts.push_back("GL_EXT_framebuffer_blit"); globalExts.push_back("GL_EXT_framebuffer_object"); globalExts.push_back("GL_EXT_pixel_buffer_object"); + globalExts.push_back("GL_EXT_polygon_offset_clamp"); globalExts.push_back("GL_EXT_texture_compression_s3tc"); globalExts.push_back("GL_EXT_texture_filter_anisotropic"); globalExts.push_back("GL_EXT_texture_mirror_clamp"); @@ -2151,6 +2153,9 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) case POLYGON_OFFSET: Serialise_glPolygonOffset(0, 0); break; + case POLYGON_OFFSET_CLAMP: + Serialise_glPolygonOffsetClampEXT(0, 0, 0); + break; case CULL_FACE: Serialise_glCullFace(eGL_NONE); break; diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index 92bca1526..5d324486c 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -418,6 +418,7 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glPixelStoref(GLenum pname, GLfloat param)); IMPLEMENT_FUNCTION_SERIALISED(void, glPolygonMode(GLenum face, GLenum mode)); IMPLEMENT_FUNCTION_SERIALISED(void, glPolygonOffset(GLfloat factor, GLfloat units)); + IMPLEMENT_FUNCTION_SERIALISED(void, glPolygonOffsetClampEXT(GLfloat factor, GLfloat units, GLfloat clamp)); IMPLEMENT_FUNCTION_SERIALISED(void, glPatchParameteri(GLenum pname, GLint param)); IMPLEMENT_FUNCTION_SERIALISED(void, glPatchParameterfv(GLenum pname, const GLfloat *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glPointParameterf(GLenum pname, GLfloat param)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index 11bbb0992..b19b35e97 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -248,6 +248,7 @@ struct GLHookSet PFNGLDEPTHRANGEINDEXEDPROC glDepthRangeIndexed; PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv; PFNGLDEPTHBOUNDSEXTPROC glDepthBoundsEXT; + PFNGLPOLYGONOFFSETCLAMPEXTPROC glPolygonOffsetClampEXT; PFNGLCLIPCONTROLPROC glClipControl; PFNGLPROVOKINGVERTEXPROC glProvokingVertex; PFNGLPRIMITIVERESTARTINDEXPROC glPrimitiveRestartIndex; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index 7ea47fecc..d42b3affc 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -861,6 +861,7 @@ HookExtension(PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC, glVertexArrayVertexBindingDivisorEXT); \ HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC, glVertexArrayVertexAttribLOffsetEXT); \ HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC, glVertexArrayVertexAttribDivisorEXT); \ + HookExtension(PFNGLPOLYGONOFFSETCLAMPEXTPROC, glPolygonOffsetClampEXT); \ HookExtension(PFNGLCULLFACEPROC, glCullFace); \ HookExtension(PFNGLFRONTFACEPROC, glFrontFace); \ HookExtension(PFNGLHINTPROC, glHint); \ @@ -1632,6 +1633,7 @@ HookWrapper3(void, glVertexArrayVertexBindingDivisorEXT, GLuint, vaobj, GLuint, bindingindex, GLuint, divisor); \ HookWrapper7(void, glVertexArrayVertexAttribLOffsetEXT, GLuint, vaobj, GLuint, buffer, GLuint, index, GLint, size, GLenum, type, GLsizei, stride, GLintptr, offset); \ HookWrapper3(void, glVertexArrayVertexAttribDivisorEXT, GLuint, vaobj, GLuint, index, GLuint, divisor); \ + HookWrapper3(void, glPolygonOffsetClampEXT, GLfloat, factor, GLfloat, units, GLfloat, clamp); \ @@ -1709,6 +1711,10 @@ HookWrapper2(void, glcreatesamplers, GLsizei, n, GLuint *, samplers); \ HookWrapper2(void, glcreateprogrampipelines, GLsizei, n, GLuint *, pipelines); \ HookWrapper3(void, glcreatequeries, GLenum, target, GLsizei, n, GLuint *, ids); \ + HookWrapper4(void, glgetquerybufferobjecti64v, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ + HookWrapper4(void, glgetquerybufferobjectiv, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ + HookWrapper4(void, glgetquerybufferobjectui64v, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ + HookWrapper4(void, glgetquerybufferobjectuiv, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ HookWrapper1(GLuint64, glgettexturehandlearb, GLuint, texture); \ HookWrapper2(GLuint64, glgettexturesamplerhandlearb, GLuint, texture, GLuint, sampler); \ HookWrapper1(void, glmaketexturehandleresidentarb, GLuint64, handle); \ @@ -1735,9 +1741,9 @@ HookWrapper2(GLboolean, glisnamedstringarb, GLint, namelen, const GLchar *, name); \ HookWrapper5(void, glgetnamedstringarb, GLint, namelen, const GLchar *, name, GLsizei, bufSize, GLint *, stringlen, GLchar *, string); \ HookWrapper4(void, glgetnamedstringivarb, GLint, namelen, const GLchar *, name, GLenum, pname, GLint *, params); \ - HookWrapper4(void, glbufferpagecommitmentarb, GLenum, target, GLintptr, offset, GLsizei, size, GLboolean, commit); \ - HookWrapper4(void, glnamedbufferpagecommitmentext, GLuint, buffer, GLintptr, offset, GLsizei, size, GLboolean, commit); \ - HookWrapper4(void, glnamedbufferpagecommitmentarb, GLuint, buffer, GLintptr, offset, GLsizei, size, GLboolean, commit); \ + HookWrapper4(void, glbufferpagecommitmentarb, GLenum, target, GLintptr, offset, GLsizeiptr, size, GLboolean, commit); \ + HookWrapper4(void, glnamedbufferpagecommitmentext, GLuint, buffer, GLintptr, offset, GLsizeiptr, size, GLboolean, commit); \ + HookWrapper4(void, glnamedbufferpagecommitmentarb, GLuint, buffer, GLintptr, offset, GLsizeiptr, size, GLboolean, commit); \ HookWrapper9(void, gltexpagecommitmentarb, GLenum, target, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLboolean, resident); \ HookWrapper1(void, glclientactivetexture, GLenum, texture); \ HookWrapper2(void, glmultitexcoord1d, GLenum, target, GLdouble, s); \ @@ -2600,6 +2606,7 @@ HookWrapper2(void, glpointparameterfvext, GLenum, pname, const GLfloat *, params); \ HookWrapper2(void, glpolygonoffsetext, GLfloat, factor, GLfloat, bias); \ HookWrapper1(void, glprovokingvertexext, GLenum, mode); \ + HookWrapper2(void, glrastersamplesext, GLuint, samples, GLboolean, fixedsamplelocations); \ HookWrapper3(void, glsecondarycolor3bext, GLbyte, red, GLbyte, green, GLbyte, blue); \ HookWrapper1(void, glsecondarycolor3bvext, const GLbyte *, v); \ HookWrapper3(void, glsecondarycolor3dext, GLdouble, red, GLdouble, green, GLdouble, blue); \ @@ -2800,6 +2807,7 @@ HookWrapper0(void, glblendbarriernv); \ HookWrapper2(void, glbeginconditionalrendernv, GLuint, id, GLenum, mode); \ HookWrapper0(void, glendconditionalrendernv); \ + HookWrapper2(void, glsubpixelprecisionbiasnv, GLuint, xbits, GLuint, ybits); \ HookWrapper15(void, glcopyimagesubdatanv, GLuint, srcName, GLenum, srcTarget, GLint, srcLevel, GLint, srcX, GLint, srcY, GLint, srcZ, GLuint, dstName, GLenum, dstTarget, GLint, dstLevel, GLint, dstX, GLint, dstY, GLint, dstZ, GLsizei, width, GLsizei, height, GLsizei, depth); \ HookWrapper2(void, gldepthrangednv, GLdouble, zNear, GLdouble, zFar); \ HookWrapper1(void, glcleardepthdnv, GLdouble, depth); \ @@ -2824,12 +2832,16 @@ HookWrapper3(void, glgetfenceivnv, GLuint, fence, GLenum, pname, GLint *, params); \ HookWrapper1(void, glfinishfencenv, GLuint, fence); \ HookWrapper2(void, glsetfencenv, GLuint, fence, GLenum, condition); \ + HookWrapper1(void, glfragmentcoveragecolornv, GLuint, color); \ HookWrapper7(void, glprogramnamedparameter4fnv, GLuint, id, GLsizei, len, const GLubyte *, name, GLfloat, x, GLfloat, y, GLfloat, z, GLfloat, w); \ HookWrapper4(void, glprogramnamedparameter4fvnv, GLuint, id, GLsizei, len, const GLubyte *, name, const GLfloat *, v); \ HookWrapper7(void, glprogramnamedparameter4dnv, GLuint, id, GLsizei, len, const GLubyte *, name, GLdouble, x, GLdouble, y, GLdouble, z, GLdouble, w); \ HookWrapper4(void, glprogramnamedparameter4dvnv, GLuint, id, GLsizei, len, const GLubyte *, name, const GLdouble *, v); \ HookWrapper4(void, glgetprogramnamedparameterfvnv, GLuint, id, GLsizei, len, const GLubyte *, name, GLfloat *, params); \ HookWrapper4(void, glgetprogramnamedparameterdvnv, GLuint, id, GLsizei, len, const GLubyte *, name, GLdouble *, params); \ + HookWrapper2(void, glcoveragemodulationtablenv, GLsizei, n, const GLfloat *, v); \ + HookWrapper2(void, glgetcoveragemodulationtablenv, GLsizei, bufsize, GLfloat *, v); \ + HookWrapper1(void, glcoveragemodulationnv, GLenum, components); \ HookWrapper6(void, glrenderbufferstoragemultisamplecoveragenv, GLenum, target, GLsizei, coverageSamples, GLsizei, colorSamples, GLenum, internalformat, GLsizei, width, GLsizei, height); \ HookWrapper2(void, glprogramvertexlimitnv, GLenum, target, GLint, limit); \ HookWrapper4(void, glframebuffertextureext, GLenum, target, GLenum, attachment, GLuint, texture, GLint, level); \ @@ -2898,6 +2910,7 @@ HookWrapper3(void, glvertexattribs2hvnv, GLuint, index, GLsizei, n, const GLhalfNV *, v); \ HookWrapper3(void, glvertexattribs3hvnv, GLuint, index, GLsizei, n, const GLhalfNV *, v); \ HookWrapper3(void, glvertexattribs4hvnv, GLuint, index, GLsizei, n, const GLhalfNV *, v); \ + HookWrapper6(void, glgetinternalformatsampleivnv, GLenum, target, GLenum, internalformat, GLsizei, samples, GLenum, pname, GLsizei, bufSize, GLint *, params); \ HookWrapper2(void, glgenocclusionqueriesnv, GLsizei, n, GLuint *, ids); \ HookWrapper2(void, gldeleteocclusionqueriesnv, GLsizei, n, const GLuint *, ids); \ HookWrapper1(GLboolean, glisocclusionquerynv, GLuint, id); \ @@ -2934,9 +2947,6 @@ HookWrapper8(void, glstencilfillpathinstancednv, GLsizei, numPaths, GLenum, pathNameType, const void *, paths, GLuint, pathBase, GLenum, fillMode, GLuint, mask, GLenum, transformType, const GLfloat *, transformValues); \ HookWrapper8(void, glstencilstrokepathinstancednv, GLsizei, numPaths, GLenum, pathNameType, const void *, paths, GLuint, pathBase, GLint, reference, GLuint, mask, GLenum, transformType, const GLfloat *, transformValues); \ HookWrapper1(void, glpathcoverdepthfuncnv, GLenum, func); \ - HookWrapper4(void, glpathcolorgennv, GLenum, color, GLenum, genMode, GLenum, colorFormat, const GLfloat *, coeffs); \ - HookWrapper4(void, glpathtexgennv, GLenum, texCoordSet, GLenum, genMode, GLint, components, const GLfloat *, coeffs); \ - HookWrapper1(void, glpathfoggennv, GLenum, genMode); \ HookWrapper2(void, glcoverfillpathnv, GLuint, path, GLenum, coverMode); \ HookWrapper2(void, glcoverstrokepathnv, GLuint, path, GLenum, coverMode); \ HookWrapper7(void, glcoverfillpathinstancednv, GLsizei, numPaths, GLenum, pathNameType, const void *, paths, GLuint, pathBase, GLenum, coverMode, GLenum, transformType, const GLfloat *, transformValues); \ @@ -2949,10 +2959,6 @@ HookWrapper7(void, glgetpathmetricsnv, GLbitfield, metricQueryMask, GLsizei, numPaths, GLenum, pathNameType, const void *, paths, GLuint, pathBase, GLsizei, stride, GLfloat *, metrics); \ HookWrapper5(void, glgetpathmetricrangenv, GLbitfield, metricQueryMask, GLuint, firstPathName, GLsizei, numPaths, GLsizei, stride, GLfloat *, metrics); \ HookWrapper9(void, glgetpathspacingnv, GLenum, pathListMode, GLsizei, numPaths, GLenum, pathNameType, const void *, paths, GLuint, pathBase, GLfloat, advanceScale, GLfloat, kerningScale, GLenum, transformType, GLfloat *, returnedSpacing); \ - HookWrapper3(void, glgetpathcolorgenivnv, GLenum, color, GLenum, pname, GLint *, value); \ - HookWrapper3(void, glgetpathcolorgenfvnv, GLenum, color, GLenum, pname, GLfloat *, value); \ - HookWrapper3(void, glgetpathtexgenivnv, GLenum, texCoordSet, GLenum, pname, GLint *, value); \ - HookWrapper3(void, glgetpathtexgenfvnv, GLenum, texCoordSet, GLenum, pname, GLfloat *, value); \ HookWrapper4(GLboolean, glispointinfillpathnv, GLuint, path, GLuint, mask, GLfloat, x, GLfloat, y); \ HookWrapper3(GLboolean, glispointinstrokepathnv, GLuint, path, GLfloat, x, GLfloat, y); \ HookWrapper3(GLfloat, glgetpathlengthnv, GLuint, path, GLsizei, startSegment, GLsizei, numSegments); \ @@ -2972,6 +2978,13 @@ HookWrapper9(GLenum, glpathmemoryglyphindexarraynv, GLuint, firstPathName, GLenum, fontTarget, GLsizeiptr, fontSize, const void *, fontData, GLsizei, faceIndex, GLuint, firstGlyphIndex, GLsizei, numGlyphs, GLuint, pathParameterTemplate, GLfloat, emScale); \ HookWrapper5(void, glprogrampathfragmentinputgennv, GLuint, program, GLint, location, GLenum, genMode, GLint, components, const GLfloat *, coeffs); \ HookWrapper8(void, glgetprogramresourcefvnv, GLuint, program, GLenum, programInterface, GLuint, index, GLsizei, propCount, const GLenum *, props, GLsizei, bufSize, GLsizei *, length, GLfloat *, params); \ + HookWrapper4(void, glpathcolorgennv, GLenum, color, GLenum, genMode, GLenum, colorFormat, const GLfloat *, coeffs); \ + HookWrapper4(void, glpathtexgennv, GLenum, texCoordSet, GLenum, genMode, GLint, components, const GLfloat *, coeffs); \ + HookWrapper1(void, glpathfoggennv, GLenum, genMode); \ + HookWrapper3(void, glgetpathcolorgenivnv, GLenum, color, GLenum, pname, GLint *, value); \ + HookWrapper3(void, glgetpathcolorgenfvnv, GLenum, color, GLenum, pname, GLfloat *, value); \ + HookWrapper3(void, glgetpathtexgenivnv, GLenum, texCoordSet, GLenum, pname, GLint *, value); \ + HookWrapper3(void, glgetpathtexgenfvnv, GLenum, texCoordSet, GLenum, pname, GLfloat *, value); \ HookWrapper3(void, glpixeldatarangenv, GLenum, target, GLsizei, length, const void *, pointer); \ HookWrapper1(void, glflushpixeldatarangenv, GLenum, target); \ HookWrapper2(void, glpointparameterinv, GLenum, pname, GLint, param); \ @@ -2999,6 +3012,9 @@ HookWrapper3(void, glgetfinalcombinerinputparameterivnv, GLenum, variable, GLenum, pname, GLint *, params); \ HookWrapper3(void, glcombinerstageparameterfvnv, GLenum, stage, GLenum, pname, const GLfloat *, params); \ HookWrapper3(void, glgetcombinerstageparameterfvnv, GLenum, stage, GLenum, pname, GLfloat *, params); \ + HookWrapper4(void, glframebuffersamplelocationsfvnv, GLenum, target, GLuint, start, GLsizei, count, const GLfloat *, v); \ + HookWrapper4(void, glnamedframebuffersamplelocationsfvnv, GLuint, framebuffer, GLuint, start, GLsizei, count, const GLfloat *, v); \ + HookWrapper0(void, glresolvedepthvaluesnv); \ HookWrapper2(void, glmakebufferresidentnv, GLenum, target, GLenum, access); \ HookWrapper1(void, glmakebuffernonresidentnv, GLenum, target); \ HookWrapper1(GLboolean, glisbufferresidentnv, GLenum, target); \ @@ -3392,6 +3408,10 @@ HandleUnsupported(PFNGLCREATESAMPLERSPROC, glcreatesamplers); \ HandleUnsupported(PFNGLCREATEPROGRAMPIPELINESPROC, glcreateprogrampipelines); \ HandleUnsupported(PFNGLCREATEQUERIESPROC, glcreatequeries); \ + HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTI64VPROC, glgetquerybufferobjecti64v); \ + HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTIVPROC, glgetquerybufferobjectiv); \ + HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTUI64VPROC, glgetquerybufferobjectui64v); \ + HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTUIVPROC, glgetquerybufferobjectuiv); \ HandleUnsupported(PFNGLGETTEXTUREHANDLEARBPROC, glgettexturehandlearb); \ HandleUnsupported(PFNGLGETTEXTURESAMPLERHANDLEARBPROC, glgettexturesamplerhandlearb); \ HandleUnsupported(PFNGLMAKETEXTUREHANDLERESIDENTARBPROC, glmaketexturehandleresidentarb); \ @@ -4283,6 +4303,7 @@ HandleUnsupported(PFNGLPOINTPARAMETERFVEXTPROC, glpointparameterfvext); \ HandleUnsupported(PFNGLPOLYGONOFFSETEXTPROC, glpolygonoffsetext); \ HandleUnsupported(PFNGLPROVOKINGVERTEXEXTPROC, glprovokingvertexext); \ + HandleUnsupported(PFNGLRASTERSAMPLESEXTPROC, glrastersamplesext); \ HandleUnsupported(PFNGLSECONDARYCOLOR3BEXTPROC, glsecondarycolor3bext); \ HandleUnsupported(PFNGLSECONDARYCOLOR3BVEXTPROC, glsecondarycolor3bvext); \ HandleUnsupported(PFNGLSECONDARYCOLOR3DEXTPROC, glsecondarycolor3dext); \ @@ -4483,6 +4504,7 @@ HandleUnsupported(PFNGLBLENDBARRIERNVPROC, glblendbarriernv); \ HandleUnsupported(PFNGLBEGINCONDITIONALRENDERNVPROC, glbeginconditionalrendernv); \ HandleUnsupported(PFNGLENDCONDITIONALRENDERNVPROC, glendconditionalrendernv); \ + HandleUnsupported(PFNGLSUBPIXELPRECISIONBIASNVPROC, glsubpixelprecisionbiasnv); \ HandleUnsupported(PFNGLCOPYIMAGESUBDATANVPROC, glcopyimagesubdatanv); \ HandleUnsupported(PFNGLDEPTHRANGEDNVPROC, gldepthrangednv); \ HandleUnsupported(PFNGLCLEARDEPTHDNVPROC, glcleardepthdnv); \ @@ -4507,12 +4529,16 @@ HandleUnsupported(PFNGLGETFENCEIVNVPROC, glgetfenceivnv); \ HandleUnsupported(PFNGLFINISHFENCENVPROC, glfinishfencenv); \ HandleUnsupported(PFNGLSETFENCENVPROC, glsetfencenv); \ + HandleUnsupported(PFNGLFRAGMENTCOVERAGECOLORNVPROC, glfragmentcoveragecolornv); \ HandleUnsupported(PFNGLPROGRAMNAMEDPARAMETER4FNVPROC, glprogramnamedparameter4fnv); \ HandleUnsupported(PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC, glprogramnamedparameter4fvnv); \ HandleUnsupported(PFNGLPROGRAMNAMEDPARAMETER4DNVPROC, glprogramnamedparameter4dnv); \ HandleUnsupported(PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC, glprogramnamedparameter4dvnv); \ HandleUnsupported(PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC, glgetprogramnamedparameterfvnv); \ HandleUnsupported(PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC, glgetprogramnamedparameterdvnv); \ + HandleUnsupported(PFNGLCOVERAGEMODULATIONTABLENVPROC, glcoveragemodulationtablenv); \ + HandleUnsupported(PFNGLGETCOVERAGEMODULATIONTABLENVPROC, glgetcoveragemodulationtablenv); \ + HandleUnsupported(PFNGLCOVERAGEMODULATIONNVPROC, glcoveragemodulationnv); \ HandleUnsupported(PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC, glrenderbufferstoragemultisamplecoveragenv); \ HandleUnsupported(PFNGLPROGRAMVERTEXLIMITNVPROC, glprogramvertexlimitnv); \ HandleUnsupported(PFNGLFRAMEBUFFERTEXTUREEXTPROC, glframebuffertextureext); \ @@ -4581,6 +4607,7 @@ HandleUnsupported(PFNGLVERTEXATTRIBS2HVNVPROC, glvertexattribs2hvnv); \ HandleUnsupported(PFNGLVERTEXATTRIBS3HVNVPROC, glvertexattribs3hvnv); \ HandleUnsupported(PFNGLVERTEXATTRIBS4HVNVPROC, glvertexattribs4hvnv); \ + HandleUnsupported(PFNGLGETINTERNALFORMATSAMPLEIVNVPROC, glgetinternalformatsampleivnv); \ HandleUnsupported(PFNGLGENOCCLUSIONQUERIESNVPROC, glgenocclusionqueriesnv); \ HandleUnsupported(PFNGLDELETEOCCLUSIONQUERIESNVPROC, gldeleteocclusionqueriesnv); \ HandleUnsupported(PFNGLISOCCLUSIONQUERYNVPROC, glisocclusionquerynv); \ @@ -4617,9 +4644,6 @@ HandleUnsupported(PFNGLSTENCILFILLPATHINSTANCEDNVPROC, glstencilfillpathinstancednv); \ HandleUnsupported(PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC, glstencilstrokepathinstancednv); \ HandleUnsupported(PFNGLPATHCOVERDEPTHFUNCNVPROC, glpathcoverdepthfuncnv); \ - HandleUnsupported(PFNGLPATHCOLORGENNVPROC, glpathcolorgennv); \ - HandleUnsupported(PFNGLPATHTEXGENNVPROC, glpathtexgennv); \ - HandleUnsupported(PFNGLPATHFOGGENNVPROC, glpathfoggennv); \ HandleUnsupported(PFNGLCOVERFILLPATHNVPROC, glcoverfillpathnv); \ HandleUnsupported(PFNGLCOVERSTROKEPATHNVPROC, glcoverstrokepathnv); \ HandleUnsupported(PFNGLCOVERFILLPATHINSTANCEDNVPROC, glcoverfillpathinstancednv); \ @@ -4632,10 +4656,6 @@ HandleUnsupported(PFNGLGETPATHMETRICSNVPROC, glgetpathmetricsnv); \ HandleUnsupported(PFNGLGETPATHMETRICRANGENVPROC, glgetpathmetricrangenv); \ HandleUnsupported(PFNGLGETPATHSPACINGNVPROC, glgetpathspacingnv); \ - HandleUnsupported(PFNGLGETPATHCOLORGENIVNVPROC, glgetpathcolorgenivnv); \ - HandleUnsupported(PFNGLGETPATHCOLORGENFVNVPROC, glgetpathcolorgenfvnv); \ - HandleUnsupported(PFNGLGETPATHTEXGENIVNVPROC, glgetpathtexgenivnv); \ - HandleUnsupported(PFNGLGETPATHTEXGENFVNVPROC, glgetpathtexgenfvnv); \ HandleUnsupported(PFNGLISPOINTINFILLPATHNVPROC, glispointinfillpathnv); \ HandleUnsupported(PFNGLISPOINTINSTROKEPATHNVPROC, glispointinstrokepathnv); \ HandleUnsupported(PFNGLGETPATHLENGTHNVPROC, glgetpathlengthnv); \ @@ -4655,6 +4675,13 @@ HandleUnsupported(PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC, glpathmemoryglyphindexarraynv); \ HandleUnsupported(PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC, glprogrampathfragmentinputgennv); \ HandleUnsupported(PFNGLGETPROGRAMRESOURCEFVNVPROC, glgetprogramresourcefvnv); \ + HandleUnsupported(PFNGLPATHCOLORGENNVPROC, glpathcolorgennv); \ + HandleUnsupported(PFNGLPATHTEXGENNVPROC, glpathtexgennv); \ + HandleUnsupported(PFNGLPATHFOGGENNVPROC, glpathfoggennv); \ + HandleUnsupported(PFNGLGETPATHCOLORGENIVNVPROC, glgetpathcolorgenivnv); \ + HandleUnsupported(PFNGLGETPATHCOLORGENFVNVPROC, glgetpathcolorgenfvnv); \ + HandleUnsupported(PFNGLGETPATHTEXGENIVNVPROC, glgetpathtexgenivnv); \ + HandleUnsupported(PFNGLGETPATHTEXGENFVNVPROC, glgetpathtexgenfvnv); \ HandleUnsupported(PFNGLPIXELDATARANGENVPROC, glpixeldatarangenv); \ HandleUnsupported(PFNGLFLUSHPIXELDATARANGENVPROC, glflushpixeldatarangenv); \ HandleUnsupported(PFNGLPOINTPARAMETERINVPROC, glpointparameterinv); \ @@ -4682,6 +4709,9 @@ HandleUnsupported(PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC, glgetfinalcombinerinputparameterivnv); \ HandleUnsupported(PFNGLCOMBINERSTAGEPARAMETERFVNVPROC, glcombinerstageparameterfvnv); \ HandleUnsupported(PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC, glgetcombinerstageparameterfvnv); \ + HandleUnsupported(PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC, glframebuffersamplelocationsfvnv); \ + HandleUnsupported(PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC, glnamedframebuffersamplelocationsfvnv); \ + HandleUnsupported(PFNGLRESOLVEDEPTHVALUESNVPROC, glresolvedepthvaluesnv); \ HandleUnsupported(PFNGLMAKEBUFFERRESIDENTNVPROC, glmakebufferresidentnv); \ HandleUnsupported(PFNGLMAKEBUFFERNONRESIDENTNVPROC, glmakebuffernonresidentnv); \ HandleUnsupported(PFNGLISBUFFERRESIDENTNVPROC, glisbufferresidentnv); \ diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index baff8605f..562e9ad65 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -296,6 +296,10 @@ void GLRenderState::FetchState(void *ctx, WrappedOpenGL *gl) m_Real->glGetFloatv(eGL_POLYGON_OFFSET_FACTOR, &PolygonOffset[0]); m_Real->glGetFloatv(eGL_POLYGON_OFFSET_UNITS, &PolygonOffset[1]); + if(ExtensionSupported[ExtensionSupported_EXT_polygon_offset_clamp]) + m_Real->glGetFloatv(eGL_POLYGON_OFFSET_CLAMP_EXT, &PolygonOffset[2]); + else + PolygonOffset[2] = 0.0f; m_Real->glGetIntegerv(eGL_FRONT_FACE, (GLint *)&FrontFace); m_Real->glGetIntegerv(eGL_CULL_FACE_MODE, (GLint *)&CullFace); @@ -539,7 +543,10 @@ void GLRenderState::ApplyState(void *ctx, WrappedOpenGL *gl) m_Real->glPatchParameterfv(eGL_PATCH_DEFAULT_OUTER_LEVEL, PatchParams.defaultOuterLevel); m_Real->glPolygonMode(eGL_FRONT_AND_BACK, PolygonMode); - m_Real->glPolygonOffset(PolygonOffset[0], PolygonOffset[1]); + if(ExtensionSupported[ExtensionSupported_EXT_polygon_offset_clamp]) + m_Real->glPolygonOffsetClampEXT(PolygonOffset[0], PolygonOffset[1], PolygonOffset[2]); + else + m_Real->glPolygonOffset(PolygonOffset[0], PolygonOffset[1]); m_Real->glFrontFace(FrontFace); m_Real->glCullFace(CullFace); @@ -837,6 +844,7 @@ void GLRenderState::Serialise(LogState state, void *ctx, WrappedOpenGL *gl) m_pSerialiser->Serialise("GL_POLYGON_MODE", PolygonMode); m_pSerialiser->Serialise("GL_POLYGON_OFFSET_FACTOR", PolygonOffset[0]); m_pSerialiser->Serialise("GL_POLYGON_OFFSET_UNITS", PolygonOffset[1]); + m_pSerialiser->Serialise("GL_POLYGON_OFFSET_CLAMP_EXT", PolygonOffset[2]); m_pSerialiser->Serialise("GL_FRONT_FACE", FrontFace); m_pSerialiser->Serialise("GL_CULL_FACE_MODE", CullFace); diff --git a/renderdoc/driver/gl/gl_renderstate.h b/renderdoc/driver/gl/gl_renderstate.h index 9e962de12..36464578b 100644 --- a/renderdoc/driver/gl/gl_renderstate.h +++ b/renderdoc/driver/gl/gl_renderstate.h @@ -170,7 +170,7 @@ struct GLRenderState } PatchParams; GLenum PolygonMode; - float PolygonOffset[2]; // Factor, Units + float PolygonOffset[3]; // Factor, Units, (extension) Clamp uint8_t DepthWriteMask; float DepthClearValue; diff --git a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp index 0fc3cb358..fa47db6eb 100644 --- a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp @@ -1508,3 +1508,30 @@ void WrappedOpenGL::glPolygonOffset(GLfloat factor, GLfloat units) m_ContextRecord->AddChunk(scope.Get()); } } + +bool WrappedOpenGL::Serialise_glPolygonOffsetClampEXT(GLfloat factor, GLfloat units, GLfloat clamp) +{ + SERIALISE_ELEMENT(float, f, factor); + SERIALISE_ELEMENT(float, u, units); + SERIALISE_ELEMENT(float, c, clamp); + + if(m_State <= EXECUTING) + { + m_Real.glPolygonOffsetClampEXT(f, u, c); + } + + return true; +} + +void WrappedOpenGL::glPolygonOffsetClampEXT(GLfloat factor, GLfloat units, GLfloat clamp) +{ + m_Real.glPolygonOffsetClampEXT(factor, units, clamp); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(POLYGON_OFFSET_CLAMP); + Serialise_glPolygonOffsetClampEXT(factor, units, clamp); + + m_ContextRecord->AddChunk(scope.Get()); + } +}