radv: move streamout bindings to radv_streamout_state

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41152>
This commit is contained in:
Samuel Pitoiset 2026-04-24 11:58:08 +02:00 committed by Marge Bot
parent 02ec87672b
commit 5246eee299
2 changed files with 9 additions and 9 deletions

View file

@ -6973,7 +6973,6 @@ radv_flush_streamout_descriptors(struct radv_cmd_buffer *cmd_buffer)
{
struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
const struct radv_physical_device *pdev = radv_device_physical(device);
struct radv_streamout_binding *sb = cmd_buffer->streamout_bindings;
struct radv_streamout_state *so = &cmd_buffer->state.streamout;
unsigned so_offset;
uint64_t desc_va;
@ -6989,7 +6988,7 @@ radv_flush_streamout_descriptors(struct radv_cmd_buffer *cmd_buffer)
uint64_t va = 0;
if (so->enabled_mask & (1 << i)) {
va = sb[i].va;
va = so->bindings[i].va;
/* Set the descriptor.
*
@ -7003,7 +7002,7 @@ radv_flush_streamout_descriptors(struct radv_cmd_buffer *cmd_buffer)
/* With NGG streamout, the buffer size is used to determine the max emit per buffer
* and also acts as a disable bit when it's 0.
*/
size = radv_is_streamout_enabled(cmd_buffer) ? sb[i].size : 0;
size = radv_is_streamout_enabled(cmd_buffer) ? so->bindings[i].size : 0;
}
}
@ -15656,15 +15655,15 @@ radv_CmdBindTransformFeedbackBuffers2EXT(VkCommandBuffer commandBuffer, uint32_t
const VkBindTransformFeedbackBuffer2InfoEXT *pBindingInfos)
{
VK_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
struct radv_streamout_binding *sb = cmd_buffer->streamout_bindings;
struct radv_streamout_state *so = &cmd_buffer->state.streamout;
uint8_t enabled_mask = 0;
assert(firstBinding + bindingCount <= MAX_SO_BUFFERS);
for (uint32_t i = 0; i < bindingCount; i++) {
uint32_t idx = firstBinding + i;
sb[idx].va = pBindingInfos[i].addressRange.address;
sb[idx].size = pBindingInfos[i].addressRange.size;
so->bindings[idx].va = pBindingInfos[i].addressRange.address;
so->bindings[idx].size = pBindingInfos[i].addressRange.size;
enabled_mask |= 1 << idx;
}
@ -15799,7 +15798,6 @@ radv_CmdBeginTransformFeedback2EXT(VkCommandBuffer commandBuffer, uint32_t first
struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
const struct radv_physical_device *pdev = radv_device_physical(device);
const enum amd_ip_type ring = radv_queue_family_to_ring(pdev, cmd_buffer->qf);
struct radv_streamout_binding *sb = cmd_buffer->streamout_bindings;
struct radv_streamout_state *so = &cmd_buffer->state.streamout;
struct radv_cmd_stream *cs = cmd_buffer->cs;
@ -15853,7 +15851,7 @@ radv_CmdBeginTransformFeedback2EXT(VkCommandBuffer commandBuffer, uint32_t first
* VGT only counts primitives and tells the shader through
* SGPRs what to do.
*/
radeon_set_context_reg(R_028AD0_VGT_STRMOUT_BUFFER_SIZE_0 + 16 * i, sb[i].size >> 2);
radeon_set_context_reg(R_028AD0_VGT_STRMOUT_BUFFER_SIZE_0 + 16 * i, so->bindings[i].size >> 2);
cmd_buffer->cs->b->context_roll = true;

View file

@ -180,6 +180,9 @@ struct radv_streamout_binding {
};
struct radv_streamout_state {
/* Buffer bindings. */
struct radv_streamout_binding bindings[MAX_SO_BUFFERS];
/* Mask of bound streamout buffers. */
uint8_t enabled_mask;
@ -531,7 +534,6 @@ struct radv_cmd_buffer {
struct radv_cmd_stream *cs;
struct radv_cmd_state state;
struct radv_vertex_binding vertex_bindings[MAX_VBS];
struct radv_streamout_binding streamout_bindings[MAX_SO_BUFFERS];
enum radv_queue_family qf;
uint8_t push_constants[MAX_PUSH_CONSTANTS_SIZE];