mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-11-13 17:30:12 +00:00
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:
2 files changed
+18
-9
No files matched your search
@@ -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());
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user