diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index f4b387d0b..845b309e1 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -1084,17 +1084,20 @@ void GLReplay::InitDebugData() // these below need to be made on the replay context, as they are context-specific (not shared) // and will be used on the replay context. - drv.glGenTransformFeedbacks(1, &DebugData.feedbackObj); + if(HasExt[ARB_transform_feedback2]) + drv.glGenTransformFeedbacks(1, &DebugData.feedbackObj); drv.glGenBuffers(1, &DebugData.feedbackBuffer); DebugData.feedbackQueries.push_back(0); drv.glGenQueries(1, &DebugData.feedbackQueries[0]); - drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, DebugData.feedbackObj); + if(HasExt[ARB_transform_feedback2]) + drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, DebugData.feedbackObj); drv.glBindBuffer(eGL_TRANSFORM_FEEDBACK_BUFFER, DebugData.feedbackBuffer); drv.glNamedBufferDataEXT(DebugData.feedbackBuffer, (GLsizeiptr)DebugData.feedbackBufferSize, NULL, eGL_DYNAMIC_READ); drv.glBindBufferBase(eGL_TRANSFORM_FEEDBACK_BUFFER, 0, DebugData.feedbackBuffer); - drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, 0); + if(HasExt[ARB_transform_feedback2]) + drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, 0); RenderDoc::Inst().SetProgress(LoadProgress::DebugManagerInit, 1.0f); @@ -1153,7 +1156,8 @@ void GLReplay::DeleteDebugData() if(DebugData.discardProg[i]) drv.glDeleteProgram(DebugData.discardProg[i]); - drv.glDeleteTransformFeedbacks(1, &DebugData.feedbackObj); + if(HasExt[ARB_transform_feedback2]) + drv.glDeleteTransformFeedbacks(1, &DebugData.feedbackObj); drv.glDeleteBuffers(1, &DebugData.feedbackBuffer); drv.glDeleteQueries((GLsizei)DebugData.feedbackQueries.size(), DebugData.feedbackQueries.data()); diff --git a/renderdoc/driver/gl/gl_postvs.cpp b/renderdoc/driver/gl/gl_postvs.cpp index f02f2bfab..335b5635c 100644 --- a/renderdoc/driver/gl/gl_postvs.cpp +++ b/renderdoc/driver/gl/gl_postvs.cpp @@ -735,7 +735,8 @@ void GLReplay::InitPostVSBuffers(uint32_t eventId) drv.glUseProgram(feedbackProg); drv.glBindProgramPipeline(0); - drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, DebugData.feedbackObj); + if(HasExt[ARB_transform_feedback2]) + drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, DebugData.feedbackObj); GLuint idxBuf = 0; @@ -1021,7 +1022,8 @@ void GLReplay::InitPostVSBuffers(uint32_t eventId) drv.glBindBuffer(eGL_ARRAY_BUFFER, rs.BufferBindings[GLRenderState::eBufIdx_Array].name); drv.glBindBuffer(eGL_ELEMENT_ARRAY_BUFFER, elArrayBuffer); - drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, rs.FeedbackObj.name); + if(HasExt[ARB_transform_feedback2]) + drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, rs.FeedbackObj.name); if(!rs.Enabled[GLRenderState::eEnabled_RasterizerDiscard]) drv.glDisable(eGL_RASTERIZER_DISCARD); @@ -1406,7 +1408,8 @@ void GLReplay::InitPostVSBuffers(uint32_t eventId) drv.glUseProgram(feedbackProg); drv.glBindProgramPipeline(0); - drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, DebugData.feedbackObj); + if(HasExt[ARB_transform_feedback2]) + drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, DebugData.feedbackObj); // need to rebind this here because of an AMD bug that seems to ignore the buffer // bindings in the feedback object - or at least it errors if the default feedback @@ -1741,7 +1744,8 @@ void GLReplay::InitPostVSBuffers(uint32_t eventId) drv.glBindBuffer(eGL_ARRAY_BUFFER, rs.BufferBindings[GLRenderState::eBufIdx_Array].name); drv.glBindBuffer(eGL_ELEMENT_ARRAY_BUFFER, elArrayBuffer); - drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, rs.FeedbackObj.name); + if(HasExt[ARB_transform_feedback2]) + drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, rs.FeedbackObj.name); if(!rs.Enabled[GLRenderState::eEnabled_RasterizerDiscard]) drv.glDisable(eGL_RASTERIZER_DISCARD); @@ -1886,7 +1890,8 @@ void GLReplay::InitPostVSBuffers(uint32_t eventId) if(HasExt[ARB_query_buffer_object]) drv.glBindBuffer(eGL_QUERY_BUFFER, rs.BufferBindings[GLRenderState::eBufIdx_Query].name); - drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, rs.FeedbackObj.name); + if(HasExt[ARB_transform_feedback2]) + drv.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, rs.FeedbackObj.name); if(!rs.Enabled[GLRenderState::eEnabled_RasterizerDiscard]) drv.glDisable(eGL_RASTERIZER_DISCARD);