In a scenario like:
CmdBindTransformFeedbackBuffers()
BeginTransformFeedback()
CmdDraw() --> streamout descriptors emitted
EndTransformFeedback() --> streamout descriptors emitted as 0 (disabled)
CmdDraw()
BeginTransformFeedback()
CmdDraw() --> streamout descriptor not re-emitted
EndTransformFeedback()
Fix this by re-emitting streamout descriptors when streamout is
enabled/disabled because a buffer size of 0 acts like a disable bit.
This fixes dEQP-VK.transform_feedback.simple.backward_dependency_indirect*
on NAVI31.
Cc: mesa-stable
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25583>
radv_emit_streamout_enable(cmd_buffer);
if (cmd_buffer->device->physical_device->use_ngg_streamout) {
- cmd_buffer->state.dirty |= RADV_CMD_DIRTY_SHADER_QUERY;
-
- /* Re-emit streamout buffers to unbind them. */
- if (!enable)
- cmd_buffer->state.dirty |= RADV_CMD_DIRTY_STREAMOUT_BUFFER;
+ /* Re-emit streamout desciptors because with NGG streamout, a buffer size of 0 acts like a
+ * disable bit and this is needed when streamout needs to be ignored in shaders.
+ */
+ cmd_buffer->state.dirty |= RADV_CMD_DIRTY_SHADER_QUERY | RADV_CMD_DIRTY_STREAMOUT_BUFFER;
}
}