From 0dbc63fdb1c166c24242137c3d71c481a79494a7 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 24 Feb 2015 14:17:18 +0000 Subject: [PATCH] Persistent Map()s part 5 - add coherent map implicit barrier points * These are placed a little conservatively to be sure we pick up changes * They're placed on any drawcall, any buffer copy operation, any texture data operation that can source from a buffer via pixel unpack buffers, any texture copy or read (like framebuffer blits) since the buffer could be a texture buffer. Also on any function that returns the contents of a texture or buffer. --- .../driver/gl/wrappers/gl_buffer_funcs.cpp | 4 + .../driver/gl/wrappers/gl_draw_funcs.cpp | 86 +++++++++++++++++++ .../gl/wrappers/gl_framebuffer_funcs.cpp | 4 + renderdoc/driver/gl/wrappers/gl_get_funcs.cpp | 44 ++++++++++ .../driver/gl/wrappers/gl_state_funcs.cpp | 2 + .../driver/gl/wrappers/gl_texture_funcs.cpp | 42 +++++++++ 6 files changed, 182 insertions(+) diff --git a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp index 83715bc9a..063e3b8ff 100644 --- a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp @@ -761,6 +761,8 @@ bool WrappedOpenGL::Serialise_glNamedCopyBufferSubDataEXT(GLuint readBuffer, GLu void WrappedOpenGL::glNamedCopyBufferSubDataEXT(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) { + CoherentMapImplicitBarrier(); + m_Real.glNamedCopyBufferSubDataEXT(readBuffer, writeBuffer, readOffset, writeOffset, size); if(m_State >= WRITING) @@ -793,6 +795,8 @@ void WrappedOpenGL::glCopyNamedBufferSubData(GLuint readBuffer, GLuint writeBuff void WrappedOpenGL::glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) { + CoherentMapImplicitBarrier(); + m_Real.glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); if(m_State >= WRITING) diff --git a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp index 70407578e..f0394ea07 100644 --- a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp @@ -61,6 +61,8 @@ bool WrappedOpenGL::Serialise_glDispatchCompute(GLuint num_groups_x, GLuint num_ void WrappedOpenGL::glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) { + CoherentMapImplicitBarrier(); + m_Real.glDispatchCompute(num_groups_x, num_groups_y, num_groups_z); if(m_State == WRITING_CAPFRAME) @@ -113,6 +115,8 @@ bool WrappedOpenGL::Serialise_glDispatchComputeGroupSizeARB(GLuint num_groups_x, void WrappedOpenGL::glDispatchComputeGroupSizeARB(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z) { + CoherentMapImplicitBarrier(); + m_Real.glDispatchComputeGroupSizeARB(num_groups_x, num_groups_y, num_groups_z, group_size_x, group_size_y, group_size_z); if(m_State == WRITING_CAPFRAME) @@ -160,6 +164,8 @@ bool WrappedOpenGL::Serialise_glDispatchComputeIndirect(GLintptr indirect) void WrappedOpenGL::glDispatchComputeIndirect(GLintptr indirect) { + CoherentMapImplicitBarrier(); + m_Real.glDispatchComputeIndirect(indirect); if(m_State == WRITING_CAPFRAME) @@ -261,6 +267,8 @@ bool WrappedOpenGL::Serialise_glTextureBarrier() void WrappedOpenGL::glTextureBarrier() { + CoherentMapImplicitBarrier(); + m_Real.glTextureBarrier(); if(m_State == WRITING_CAPFRAME) @@ -314,6 +322,8 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedback(GLenum mode, GLuint id) void WrappedOpenGL::glDrawTransformFeedback(GLenum mode, GLuint id) { + CoherentMapImplicitBarrier(); + m_Real.glDrawTransformFeedback(mode, id); if(m_State == WRITING_CAPFRAME) @@ -368,6 +378,8 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackInstanced(GLenum mode, GLui void WrappedOpenGL::glDrawTransformFeedbackInstanced(GLenum mode, GLuint id, GLsizei instancecount) { + CoherentMapImplicitBarrier(); + m_Real.glDrawTransformFeedbackInstanced(mode, id, instancecount); if(m_State == WRITING_CAPFRAME) @@ -422,6 +434,8 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackStream(GLenum mode, GLuint void WrappedOpenGL::glDrawTransformFeedbackStream(GLenum mode, GLuint id, GLuint stream) { + CoherentMapImplicitBarrier(); + m_Real.glDrawTransformFeedbackStream(mode, id, stream); if(m_State == WRITING_CAPFRAME) @@ -477,6 +491,8 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackStreamInstanced(GLenum mode void WrappedOpenGL::glDrawTransformFeedbackStreamInstanced(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount) { + CoherentMapImplicitBarrier(); + m_Real.glDrawTransformFeedbackStreamInstanced(mode, id, stream, instancecount); if(m_State == WRITING_CAPFRAME) @@ -532,6 +548,8 @@ bool WrappedOpenGL::Serialise_glDrawArrays(GLenum mode, GLint first, GLsizei cou void WrappedOpenGL::glDrawArrays(GLenum mode, GLint first, GLsizei count) { + CoherentMapImplicitBarrier(); + m_Real.glDrawArrays(mode, first, count); if(m_State == WRITING_CAPFRAME) @@ -589,6 +607,8 @@ bool WrappedOpenGL::Serialise_glDrawArraysIndirect(GLenum mode, const void *indi void WrappedOpenGL::glDrawArraysIndirect(GLenum mode, const void *indirect) { + CoherentMapImplicitBarrier(); + m_Real.glDrawArraysIndirect(mode, indirect); if(m_State == WRITING_CAPFRAME) @@ -645,6 +665,8 @@ bool WrappedOpenGL::Serialise_glDrawArraysInstanced(GLenum mode, GLint first, GL void WrappedOpenGL::glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) { + CoherentMapImplicitBarrier(); + m_Real.glDrawArraysInstanced(mode, first, count, instancecount); if(m_State == WRITING_CAPFRAME) @@ -703,6 +725,8 @@ bool WrappedOpenGL::Serialise_glDrawArraysInstancedBaseInstance(GLenum mode, GLi void WrappedOpenGL::glDrawArraysInstancedBaseInstance(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance) { + CoherentMapImplicitBarrier(); + m_Real.glDrawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance); if(m_State == WRITING_CAPFRAME) @@ -765,6 +789,8 @@ bool WrappedOpenGL::Serialise_glDrawElements(GLenum mode, GLsizei count, GLenum void WrappedOpenGL::glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices) { + CoherentMapImplicitBarrier(); + m_Real.glDrawElements(mode, count, type, indices); if(m_State == WRITING_CAPFRAME) @@ -831,6 +857,8 @@ bool WrappedOpenGL::Serialise_glDrawElementsIndirect(GLenum mode, GLenum type, c void WrappedOpenGL::glDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect) { + CoherentMapImplicitBarrier(); + m_Real.glDrawElementsIndirect(mode, type, indirect); if(m_State == WRITING_CAPFRAME) @@ -895,6 +923,8 @@ bool WrappedOpenGL::Serialise_glDrawRangeElements(GLenum mode, GLuint start, GLu void WrappedOpenGL::glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices) { + CoherentMapImplicitBarrier(); + m_Real.glDrawRangeElements(mode, start, end, count, type, indices); if(m_State == WRITING_CAPFRAME) @@ -961,6 +991,8 @@ bool WrappedOpenGL::Serialise_glDrawRangeElementsBaseVertex(GLenum mode, GLuint void WrappedOpenGL::glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex) { + CoherentMapImplicitBarrier(); + m_Real.glDrawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex); if(m_State == WRITING_CAPFRAME) @@ -1025,6 +1057,8 @@ bool WrappedOpenGL::Serialise_glDrawElementsBaseVertex(GLenum mode, GLsizei coun void WrappedOpenGL::glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex) { + CoherentMapImplicitBarrier(); + m_Real.glDrawElementsBaseVertex(mode, count, type, indices, basevertex); if(m_State == WRITING_CAPFRAME) @@ -1089,6 +1123,8 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstanced(GLenum mode, GLsizei count void WrappedOpenGL::glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount) { + CoherentMapImplicitBarrier(); + m_Real.glDrawElementsInstanced(mode, count, type, indices, instancecount); if(m_State == WRITING_CAPFRAME) @@ -1155,6 +1191,8 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseInstance(GLenum mode, G void WrappedOpenGL::glDrawElementsInstancedBaseInstance(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance) { + CoherentMapImplicitBarrier(); + m_Real.glDrawElementsInstancedBaseInstance(mode, count, type, indices, instancecount, baseinstance); if(m_State == WRITING_CAPFRAME) @@ -1221,6 +1259,8 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertex(GLenum mode, GLs void WrappedOpenGL::glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex) { + CoherentMapImplicitBarrier(); + m_Real.glDrawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex); if(m_State == WRITING_CAPFRAME) @@ -1289,6 +1329,8 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertexBaseInstance(GLen void WrappedOpenGL::glDrawElementsInstancedBaseVertexBaseInstance(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance) { + CoherentMapImplicitBarrier(); + m_Real.glDrawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance); if(m_State == WRITING_CAPFRAME) @@ -1409,6 +1451,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawArrays(GLenum mode, const GLint *first, void WrappedOpenGL::glMultiDrawArrays(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount) { + CoherentMapImplicitBarrier(); + m_Real.glMultiDrawArrays(mode, first, count, drawcount); if(m_State == WRITING_CAPFRAME) @@ -1553,6 +1597,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawElements(GLenum mode, const GLsizei *co void WrappedOpenGL::glMultiDrawElements(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount) { + CoherentMapImplicitBarrier(); + m_Real.glMultiDrawElements(mode, count, type, indices, drawcount); if(m_State == WRITING_CAPFRAME) @@ -1708,6 +1754,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsBaseVertex(GLenum mode, const G void WrappedOpenGL::glMultiDrawElementsBaseVertex(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex) { + CoherentMapImplicitBarrier(); + m_Real.glMultiDrawElementsBaseVertex(mode, count, type, indices, drawcount, basevertex); if(m_State == WRITING_CAPFRAME) @@ -1851,6 +1899,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirect(GLenum mode, const void void WrappedOpenGL::glMultiDrawArraysIndirect(GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride) { + CoherentMapImplicitBarrier(); + m_Real.glMultiDrawArraysIndirect(mode, indirect, drawcount, stride); if(m_State == WRITING_CAPFRAME) @@ -2009,6 +2059,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirect(GLenum mode, GLenum ty void WrappedOpenGL::glMultiDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride) { + CoherentMapImplicitBarrier(); + m_Real.glMultiDrawElementsIndirect(mode, type, indirect, drawcount, stride); if(m_State == WRITING_CAPFRAME) @@ -2164,6 +2216,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirectCountARB(GLenum mode, GLi void WrappedOpenGL::glMultiDrawArraysIndirectCountARB(GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) { + CoherentMapImplicitBarrier(); + m_Real.glMultiDrawArraysIndirectCountARB(mode, indirect, drawcount, maxdrawcount, stride); if(m_State == WRITING_CAPFRAME) @@ -2333,6 +2387,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirectCountARB(GLenum mode, G void WrappedOpenGL::glMultiDrawElementsIndirectCountARB(GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) { + CoherentMapImplicitBarrier(); + m_Real.glMultiDrawElementsIndirectCountARB(mode, type, indirect, drawcount, maxdrawcount, stride); if(m_State == WRITING_CAPFRAME) @@ -2418,6 +2474,8 @@ bool WrappedOpenGL::Serialise_glClearNamedFramebufferfv(GLuint framebuffer, GLen void WrappedOpenGL::glClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value) { + CoherentMapImplicitBarrier(); + m_Real.glClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value); if(m_State == WRITING_CAPFRAME) @@ -2431,6 +2489,8 @@ void WrappedOpenGL::glClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, void WrappedOpenGL::glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value) { + CoherentMapImplicitBarrier(); + m_Real.glClearBufferfv(buffer, drawbuffer, value); if(m_State == WRITING_CAPFRAME) @@ -2520,6 +2580,8 @@ bool WrappedOpenGL::Serialise_glClearNamedFramebufferiv(GLuint framebuffer, GLen void WrappedOpenGL::glClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value) { + CoherentMapImplicitBarrier(); + m_Real.glClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value); if(m_State == WRITING_CAPFRAME) @@ -2533,6 +2595,8 @@ void WrappedOpenGL::glClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, void WrappedOpenGL::glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value) { + CoherentMapImplicitBarrier(); + m_Real.glClearBufferiv(buffer, drawbuffer, value); if(m_State == WRITING_CAPFRAME) @@ -2607,6 +2671,8 @@ bool WrappedOpenGL::Serialise_glClearNamedFramebufferuiv(GLuint framebuffer, GLe void WrappedOpenGL::glClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value) { + CoherentMapImplicitBarrier(); + m_Real.glClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value); if(m_State == WRITING_CAPFRAME) @@ -2620,6 +2686,8 @@ void WrappedOpenGL::glClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer void WrappedOpenGL::glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value) { + CoherentMapImplicitBarrier(); + m_Real.glClearBufferuiv(buffer, drawbuffer, value); if(m_State == WRITING_CAPFRAME) @@ -2680,6 +2748,8 @@ bool WrappedOpenGL::Serialise_glClearNamedFramebufferfi(GLuint framebuffer, GLen void WrappedOpenGL::glClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer, GLfloat depth, GLint stencil) { + CoherentMapImplicitBarrier(); + m_Real.glClearNamedFramebufferfi(framebuffer, buffer, depth, stencil); if(m_State == WRITING_CAPFRAME) @@ -2693,6 +2763,8 @@ void WrappedOpenGL::glClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer, void WrappedOpenGL::glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) { + CoherentMapImplicitBarrier(); + m_Real.glClearBufferfi(buffer, drawbuffer, depth, stencil); if(m_State == WRITING_CAPFRAME) @@ -2783,6 +2855,8 @@ bool WrappedOpenGL::Serialise_glClearNamedBufferDataEXT(GLuint buffer, GLenum in void WrappedOpenGL::glClearNamedBufferDataEXT(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data) { + CoherentMapImplicitBarrier(); + m_Real.glClearNamedBufferDataEXT(buffer, internalformat, format, type, data); if(m_State == WRITING_CAPFRAME) @@ -2796,6 +2870,8 @@ void WrappedOpenGL::glClearNamedBufferDataEXT(GLuint buffer, GLenum internalform void WrappedOpenGL::glClearBufferData(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data) { + CoherentMapImplicitBarrier(); + m_Real.glClearBufferData(target, internalformat, format, type, data); if(m_State == WRITING_CAPFRAME) @@ -2886,6 +2962,8 @@ bool WrappedOpenGL::Serialise_glClearNamedBufferSubDataEXT(GLuint buffer, GLenum void WrappedOpenGL::glClearNamedBufferSubDataEXT(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data) { + CoherentMapImplicitBarrier(); + m_Real.glClearNamedBufferSubDataEXT(buffer, internalformat, offset, size, format, type, data); if(m_State == WRITING_CAPFRAME) @@ -2905,6 +2983,8 @@ void WrappedOpenGL::glClearNamedBufferSubData(GLuint buffer, GLenum internalform void WrappedOpenGL::glClearBufferSubData(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data) { + CoherentMapImplicitBarrier(); + m_Real.glClearBufferSubData(target, internalformat, offset, size, format, type, data); if(m_State == WRITING_CAPFRAME) @@ -2973,6 +3053,8 @@ bool WrappedOpenGL::Serialise_glClear(GLbitfield mask) void WrappedOpenGL::glClear(GLbitfield mask) { + CoherentMapImplicitBarrier(); + m_Real.glClear(mask); if(m_State == WRITING_CAPFRAME) @@ -3058,6 +3140,8 @@ bool WrappedOpenGL::Serialise_glClearTexImage(GLuint texture, GLint level, GLenu void WrappedOpenGL::glClearTexImage(GLuint texture, GLint level, GLenum format, GLenum type, const void *data) { + CoherentMapImplicitBarrier(); + m_Real.glClearTexImage(texture, level, format, type, data); if(m_State == WRITING_CAPFRAME) @@ -3153,6 +3237,8 @@ bool WrappedOpenGL::Serialise_glClearTexSubImage(GLuint texture, GLint level, GL void WrappedOpenGL::glClearTexSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data) { + CoherentMapImplicitBarrier(); + m_Real.glClearTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data); if(m_State == WRITING_CAPFRAME) diff --git a/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp index 9a82c1228..7fabba1af 100644 --- a/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp @@ -1267,6 +1267,8 @@ void WrappedOpenGL::glBlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFr GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { + CoherentMapImplicitBarrier(); + if(m_State == WRITING_CAPFRAME) { SCOPED_SERIALISE_CONTEXT(BLIT_FRAMEBUFFER); @@ -1284,6 +1286,8 @@ void WrappedOpenGL::glBlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFr void WrappedOpenGL::glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { + CoherentMapImplicitBarrier(); + if(m_State == WRITING_CAPFRAME) { GLuint readFramebuffer = 0, drawFramebuffer = 0; diff --git a/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp index bbc601e7b..9eb762d9c 100644 --- a/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp @@ -45,11 +45,15 @@ GLuint WrappedOpenGL::glGetDebugMessageLog(GLuint count, GLsizei bufSize, GLenum void WrappedOpenGL::glFlush() { + CoherentMapImplicitBarrier(); + m_Real.glFlush(); } void WrappedOpenGL::glFinish() { + CoherentMapImplicitBarrier(); + m_Real.glFinish(); } @@ -281,41 +285,57 @@ void WrappedOpenGL::glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint *p void WrappedOpenGL::glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels) { + CoherentMapImplicitBarrier(); + m_Real.glGetTexImage(target, level, format, type, pixels); } void WrappedOpenGL::glGetCompressedTexImage(GLenum target, GLint level, void *img) { + CoherentMapImplicitBarrier(); + m_Real.glGetCompressedTexImage(target, level, img); } void WrappedOpenGL::glGetnCompressedTexImage(GLenum target, GLint lod, GLsizei bufSize, void *pixels) { + CoherentMapImplicitBarrier(); + m_Real.glGetnCompressedTexImage(target, lod, bufSize, pixels); } void WrappedOpenGL::glGetCompressedTextureImage(GLuint texture, GLint level, GLsizei bufSize, void *pixels) { + CoherentMapImplicitBarrier(); + m_Real.glGetCompressedTextureImage(texture, level, bufSize, pixels); } void WrappedOpenGL::glGetCompressedTextureSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels) { + CoherentMapImplicitBarrier(); + m_Real.glGetCompressedTextureSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels); } void WrappedOpenGL::glGetnTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels) { + CoherentMapImplicitBarrier(); + m_Real.glGetnTexImage(target, level, format, type, bufSize, pixels); } void WrappedOpenGL::glGetTextureImage(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels) { + CoherentMapImplicitBarrier(); + m_Real.glGetTextureImage(texture, level, format, type, bufSize, pixels); } void WrappedOpenGL::glGetTextureSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels) { + CoherentMapImplicitBarrier(); + m_Real.glGetTextureSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize, pixels); } @@ -361,11 +381,15 @@ void WrappedOpenGL::glGetBufferParameteriv(GLenum target, GLenum pname, GLint *p void WrappedOpenGL::glGetBufferPointerv(GLenum target, GLenum pname, void **params) { + CoherentMapImplicitBarrier(); + m_Real.glGetBufferPointerv(target, pname, params); } void WrappedOpenGL::glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void *data) { + CoherentMapImplicitBarrier(); + m_Real.glGetBufferSubData(target, offset, size, data); } @@ -421,6 +445,8 @@ void WrappedOpenGL::glGetQueryBufferObjectiv(GLuint id, GLuint buffer, GLenum pn void WrappedOpenGL::glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values) { + CoherentMapImplicitBarrier(); + m_Real.glGetSynciv(sync, pname, bufSize, length, values); } @@ -757,11 +783,15 @@ void WrappedOpenGL::glClampColor(GLenum target, GLenum clamp) void WrappedOpenGL::glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels) { + CoherentMapImplicitBarrier(); + m_Real.glReadPixels(x, y, width, height, format, type, pixels); } void WrappedOpenGL::glReadnPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *pixels) { + CoherentMapImplicitBarrier(); + m_Real.glReadnPixels(x, y, width, height, format, type, bufSize, pixels); } @@ -817,11 +847,15 @@ void WrappedOpenGL::glGetNamedRenderbufferParameterivEXT(GLuint renderbuffer, GL void WrappedOpenGL::glGetTextureImageEXT(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels) { + CoherentMapImplicitBarrier(); + m_Real.glGetTextureImageEXT(texture, target, level, format, type, pixels); } void WrappedOpenGL::glGetCompressedTextureImageEXT(GLuint texture, GLenum target, GLint level, void *img) { + CoherentMapImplicitBarrier(); + m_Real.glGetCompressedTextureImageEXT(texture, target, level, img); } @@ -837,11 +871,15 @@ void WrappedOpenGL::glGetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, void WrappedOpenGL::glGetNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, void *data) { + CoherentMapImplicitBarrier(); + m_Real.glGetNamedBufferSubDataEXT(buffer, offset, size, data); } void WrappedOpenGL::glGetNamedBufferSubData(GLuint buffer, GLintptr offset, GLsizei size, void *data) { + CoherentMapImplicitBarrier(); + m_Real.glGetNamedBufferSubData(buffer, offset, size, data); } @@ -912,6 +950,8 @@ void WrappedOpenGL::glGetFloatIndexedvEXT(GLenum target, GLuint index, GLfloat * void WrappedOpenGL::glGetMultiTexImageEXT(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels) { + CoherentMapImplicitBarrier(); + m_Real.glGetMultiTexImageEXT(texunit, target, level, format, type, pixels); } @@ -947,11 +987,15 @@ void WrappedOpenGL::glGetMultiTexLevelParameterivEXT(GLenum texunit, GLenum targ void WrappedOpenGL::glGetCompressedMultiTexImageEXT(GLenum texunit, GLenum target, GLint lod, void *img) { + CoherentMapImplicitBarrier(); + m_Real.glGetCompressedMultiTexImageEXT(texunit, target, lod, img); } void WrappedOpenGL::glGetNamedBufferPointervEXT(GLuint buffer, GLenum pname, void **params) { + CoherentMapImplicitBarrier(); + m_Real.glGetNamedBufferPointervEXT(buffer, pname, params); } diff --git a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp index 9c05ace17..51b6c813e 100644 --- a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp @@ -279,6 +279,8 @@ bool WrappedOpenGL::Serialise_glBlendBarrierKHR() void WrappedOpenGL::glBlendBarrierKHR() { + CoherentMapImplicitBarrier(); + m_Real.glBlendBarrierKHR(); if(m_State == WRITING_CAPFRAME) diff --git a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp index 96fa9c6b2..77f13042a 100644 --- a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp @@ -648,6 +648,8 @@ void WrappedOpenGL::Common_glGenerateTextureMipmapEXT(GLResourceRecord *record, { if(!record) return; + CoherentMapImplicitBarrier(); + if(m_State == WRITING_CAPFRAME) { SCOPED_SERIALISE_CONTEXT(GENERATE_MIPMAP); @@ -747,6 +749,8 @@ void WrappedOpenGL::glCopyImageSubData(GLuint srcName, GLenum srcTarget, GLint s GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) { + CoherentMapImplicitBarrier(); + m_Real.glCopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); @@ -795,6 +799,8 @@ void WrappedOpenGL::Common_glCopyTextureSubImage1DEXT(GLResourceRecord *record, { if(!record) return; + CoherentMapImplicitBarrier(); + if(m_State == WRITING_IDLE) { GetResourceManager()->MarkDirtyResource(record->GetResourceID()); @@ -867,6 +873,8 @@ void WrappedOpenGL::Common_glCopyTextureSubImage2DEXT(GLResourceRecord *record, { if(!record) return; + CoherentMapImplicitBarrier(); + if(m_State == WRITING_IDLE) { GetResourceManager()->MarkDirtyResource(record->GetResourceID()); @@ -940,6 +948,8 @@ void WrappedOpenGL::Common_glCopyTextureSubImage3DEXT(GLResourceRecord *record, { if(!record) return; + CoherentMapImplicitBarrier(); + if(m_State == WRITING_IDLE) { GetResourceManager()->MarkDirtyResource(record->GetResourceID()); @@ -1599,6 +1609,8 @@ void WrappedOpenGL::Common_glTextureImage1DEXT(ResourceId texId, GLenum target, { if(texId == ResourceId()) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(target) || internalformat == 0) return; @@ -1769,6 +1781,8 @@ void WrappedOpenGL::Common_glTextureImage2DEXT(ResourceId texId, GLenum target, { if(texId == ResourceId()) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(target) || internalformat == 0) return; @@ -1922,6 +1936,8 @@ void WrappedOpenGL::Common_glTextureImage3DEXT(ResourceId texId, GLenum target, { if(texId == ResourceId()) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(target) || internalformat == 0) return; @@ -2081,6 +2097,8 @@ void WrappedOpenGL::Common_glCompressedTextureImage1DEXT(ResourceId texId, GLenu { if(texId == ResourceId()) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(target) || internalformat == 0) return; @@ -2261,6 +2279,8 @@ void WrappedOpenGL::Common_glCompressedTextureImage2DEXT(ResourceId texId, GLenu { if(texId == ResourceId()) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(target) || internalformat == 0) return; @@ -2421,6 +2441,8 @@ void WrappedOpenGL::Common_glCompressedTextureImage3DEXT(ResourceId texId, GLenu { if(texId == ResourceId()) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(target) || internalformat == 0) return; @@ -2543,6 +2565,8 @@ void WrappedOpenGL::Common_glCopyTextureImage1DEXT(GLResourceRecord *record, GLe { if(!record) return; + CoherentMapImplicitBarrier(); + // not sure if proxy formats are valid, but ignore these anyway if(IsProxyTarget(target) || internalformat == 0) return; @@ -2649,6 +2673,8 @@ void WrappedOpenGL::Common_glCopyTextureImage2DEXT(GLResourceRecord *record, GLe { if(!record) return; + CoherentMapImplicitBarrier(); + // not sure if proxy formats are valid, but ignore these anyway if(IsProxyTarget(target) || internalformat == 0) return; @@ -3278,6 +3304,8 @@ void WrappedOpenGL::Common_glTextureSubImage1DEXT(GLResourceRecord *record, GLen { if(!record) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(format)) return; @@ -3422,6 +3450,8 @@ void WrappedOpenGL::Common_glTextureSubImage2DEXT(GLResourceRecord *record, GLen { if(!record) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(format)) return; @@ -3568,6 +3598,8 @@ void WrappedOpenGL::Common_glTextureSubImage3DEXT(GLResourceRecord *record, GLen { if(!record) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(format)) return; @@ -3692,6 +3724,8 @@ void WrappedOpenGL::Common_glCompressedTextureSubImage1DEXT(GLResourceRecord *re { if(!record) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(format)) return; @@ -3818,6 +3852,8 @@ void WrappedOpenGL::Common_glCompressedTextureSubImage2DEXT(GLResourceRecord *re { if(!record) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(format)) return; @@ -3946,6 +3982,8 @@ void WrappedOpenGL::Common_glCompressedTextureSubImage3DEXT(GLResourceRecord *re { if(!record) return; + CoherentMapImplicitBarrier(); + // proxy formats are used for querying texture capabilities, don't serialise these if(IsProxyTarget(format)) return; @@ -4058,6 +4096,8 @@ void WrappedOpenGL::Common_glTextureBufferRangeEXT(ResourceId texId, GLenum targ { if(texId == ResourceId()) return; + CoherentMapImplicitBarrier(); + if(m_State >= WRITING) { GLResourceRecord *record = GetResourceManager()->GetResourceRecord(texId); @@ -4159,6 +4199,8 @@ void WrappedOpenGL::Common_glTextureBufferEXT(ResourceId texId, GLenum target, G { if(texId == ResourceId()) return; + CoherentMapImplicitBarrier(); + if(m_State >= WRITING) { GLResourceRecord *record = GetResourceManager()->GetResourceRecord(texId);