From 74b343afe3703598906d9263e20d45a2f04b42e7 Mon Sep 17 00:00:00 2001 From: Janos Pantos Date: Thu, 20 Jul 2017 17:56:14 +0200 Subject: [PATCH] Add support for glBlendBarrier GLES core function --- renderdoc/driver/gl/gl_driver.h | 1 + renderdoc/driver/gl/gl_hookset.h | 3 ++- renderdoc/driver/gl/gl_hookset_defs.h | 8 ++++--- .../driver/gl/wrappers/gl_state_funcs.cpp | 22 ++++++++++++++++++- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index f7b96ae28..54be5a77d 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -617,6 +617,7 @@ public: IMPLEMENT_FUNCTION_SERIALISED(void, glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha)); IMPLEMENT_FUNCTION_SERIALISED(void, glBlendBarrierKHR()); + IMPLEMENT_FUNCTION_SERIALISED(void, glBlendBarrier()); IMPLEMENT_FUNCTION_SERIALISED(void, glLogicOp(GLenum opcode)); IMPLEMENT_FUNCTION_SERIALISED(void, glStencilFunc(GLenum func, GLint ref, GLuint mask)); IMPLEMENT_FUNCTION_SERIALISED(void, glStencilMask(GLuint mask)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index aae0ee6e7..c40aeb3c1 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -604,7 +604,8 @@ struct GLHookSet PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; // aliases glBlitFramebufferEXT // GLES core - PFNGLPRIMITIVEBOUNDINGBOXEXTPROC glPrimitiveBoundingBox; // aliases glPrimitiveBoundingBoxEXT, glPrimitiveBoundingBoxOES + PFNGLPRIMITIVEBOUNDINGBOXPROC glPrimitiveBoundingBox; // aliases glPrimitiveBoundingBoxEXT, glPrimitiveBoundingBoxOES + PFNGLBLENDBARRIERPROC glBlendBarrier; // GLES: EXT_multisampled_render_to_texture PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC glFramebufferTexture2DMultisampleEXT; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index 2a3c17d28..d1a6d9966 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -1156,9 +1156,10 @@ HookExtension(PFNGLRASTERSAMPLESEXTPROC, glRasterSamplesEXT); \ HookExtension(PFNGLFRAMETERMINATORGREMEDYPROC, glFrameTerminatorGREMEDY); \ HookExtension(PFNGLSTRINGMARKERGREMEDYPROC, glStringMarkerGREMEDY); \ - HookExtension(PFNGLPRIMITIVEBOUNDINGBOXOESPROC, glPrimitiveBoundingBox); \ - HookExtensionAlias(PFNGLPRIMITIVEBOUNDINGBOXOESPROC, glPrimitiveBoundingBox, glPrimitiveBoundingBoxEXT); \ - HookExtensionAlias(PFNGLPRIMITIVEBOUNDINGBOXOESPROC, glPrimitiveBoundingBox, glPrimitiveBoundingBoxOES); \ + HookExtension(PFNGLBLENDBARRIERPROC, glBlendBarrier); \ + HookExtension(PFNGLPRIMITIVEBOUNDINGBOXPROC, glPrimitiveBoundingBox); \ + HookExtensionAlias(PFNGLPRIMITIVEBOUNDINGBOXPROC, glPrimitiveBoundingBox, glPrimitiveBoundingBoxEXT); \ + HookExtensionAlias(PFNGLPRIMITIVEBOUNDINGBOXPROC, glPrimitiveBoundingBox, glPrimitiveBoundingBoxOES); \ HookExtension(PFNGLDISCARDFRAMEBUFFEREXTPROC, glDiscardFramebufferEXT); \ HookExtension(PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC, glFramebufferTexture2DMultisampleEXT); \ HookExtension(PFNWGLDXSETRESOURCESHAREHANDLENVPROC, wglDXSetResourceShareHandleNV); \ @@ -2013,6 +2014,7 @@ HookWrapper2(void, glRasterSamplesEXT, GLuint, samples, GLboolean, fixedsamplelocations); \ HookWrapper0(void, glFrameTerminatorGREMEDY); \ HookWrapper2(void, glStringMarkerGREMEDY, GLsizei, len, const void *, string); \ + HookWrapper0(void, glBlendBarrier); \ HookWrapper8(void, glPrimitiveBoundingBox, GLfloat, minX, GLfloat, minY, GLfloat, minZ, GLfloat, minW, GLfloat, maxX, GLfloat, maxY, GLfloat, maxZ, GLfloat, maxW); \ HookWrapper3(void, glDiscardFramebufferEXT, GLenum, target, GLsizei, numAttachments, const GLenum *, attachments); \ HookWrapper6(void, glFramebufferTexture2DMultisampleEXT, GLenum, target, GLenum, attachment, GLenum, textarget, GLuint, texture, GLint, level, GLsizei, samples); \ diff --git a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp index 0665c8de5..d7d010fb1 100644 --- a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp @@ -276,7 +276,12 @@ void WrappedOpenGL::glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum bool WrappedOpenGL::Serialise_glBlendBarrierKHR() { if(m_State <= EXECUTING) - m_Real.glBlendBarrierKHR(); + { + if(IsGLES && m_Real.glBlendBarrier) + m_Real.glBlendBarrier(); + else + m_Real.glBlendBarrierKHR(); + } return true; } @@ -296,6 +301,21 @@ void WrappedOpenGL::glBlendBarrierKHR() } } +void WrappedOpenGL::glBlendBarrier() +{ + CoherentMapImplicitBarrier(); + + m_Real.glBlendBarrier(); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(BLEND_BARRIER); + Serialise_glBlendBarrierKHR(); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + bool WrappedOpenGL::Serialise_glLogicOp(GLenum opcode) { SERIALISE_ELEMENT(GLenum, Op, opcode);