Don't use separate xfb objects without ARB_transform_feedback2 extension

* EXT_transform_feedback allow us to use what we want and is core in the minimum
  replay version (3.0 for GL/GLES), but it doesn't include separate xfb objects.
This commit is contained in:
baldurk committed 2020-09-07 16:58:49 +01:00
1 parent 9b46bf7c91
commit 8def317971
2 files changed
+18 -9

No files matched your search

+8 -4
View File
@@ -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());
+10 -5
View File
@@ -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);