From c4a1408e305b2a2bfda33702b813d799ab2a36d9 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 16 Jan 2026 14:19:36 -0500 Subject: [PATCH] zink: move xfb stride off zink_shader_info struct Part-of: --- src/gallium/drivers/zink/zink_compiler.c | 6 +++--- src/gallium/drivers/zink/zink_draw.cpp | 2 +- src/gallium/drivers/zink/zink_program.c | 2 +- src/gallium/drivers/zink/zink_types.h | 3 +-- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 6500f1a9ee4..852da889b0b 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -1885,7 +1885,7 @@ update_so_info(struct zink_shader *zs, nir_shader *nir, uint64_t outputs_written const nir_xfb_output_info *output = &nir->xfb_info->outputs[i]; unsigned xfb_components = util_bitcount(output->component_mask); /* always set stride to be used during draw */ - zs->sinfo.stride[output->buffer] = nir->xfb_info->buffers[output->buffer].stride; + zs->xfb_stride[output->buffer] = nir->xfb_info->buffers[output->buffer].stride; for (unsigned c = 0; !is_inlined(inlined[output->location], output) && c < xfb_components; c++) { unsigned slot = output->location; if (inlined[slot][output->component_offset + c]) @@ -1920,7 +1920,7 @@ update_so_info(struct zink_shader *zs, nir_shader *nir, uint64_t outputs_written (num_components > xfb_components && xfb_components == 4))) { var->data.explicit_xfb_buffer = 1; var->data.xfb.buffer = output->buffer; - var->data.xfb.stride = zs->sinfo.stride[output->buffer]; + var->data.xfb.stride = zs->xfb_stride[output->buffer]; var->data.offset = (output->offset + c * sizeof(uint32_t)); var->data.stream = nir->xfb_info->buffer_to_stream[output->buffer]; for (unsigned j = 0; j < MIN2(num_components, xfb_components); j++) @@ -1990,7 +1990,7 @@ update_so_info(struct zink_shader *zs, nir_shader *nir, uint64_t outputs_written /* this output can be consolidated: blast out all the data inlined */ var->data.explicit_xfb_buffer = 1; var->data.xfb.buffer = output->buffer; - var->data.xfb.stride = zs->sinfo.stride[output->buffer]; + var->data.xfb.stride = zs->xfb_stride[output->buffer]; var->data.offset = output->offset; var->data.stream = nir->xfb_info->buffer_to_stream[output->buffer]; /* mark all slot components inlined to skip subsequent loop iterations */ diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp index f15f92834e3..4dc2d1679f4 100644 --- a/src/gallium/drivers/zink/zink_draw.cpp +++ b/src/gallium/drivers/zink/zink_draw.cpp @@ -847,7 +847,7 @@ zink_draw(struct pipe_context *pctx, counter_buffers[i] = VK_NULL_HANDLE; if (t) { struct zink_resource *res = zink_resource(t->counter_buffer); - t->stride = ctx->last_vertex_stage->sinfo.stride[i]; + t->stride = ctx->last_vertex_stage->xfb_stride[i]; zink_batch_reference_resource_rw(ctx, res, true); if (!ctx->unordered_blitting) res->obj->unordered_read = res->obj->unordered_write = false; diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 20b4f74ee97..ca2aa30442b 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -2859,7 +2859,7 @@ zink_set_primitive_emulation_keys(struct zink_context *ctx) shader->non_fs.is_generated = true; shader->non_fs.parent = ctx->gfx_stages[prev_vertex_stage]; shader->can_inline = true; - memcpy(shader->sinfo.stride, ctx->gfx_stages[prev_vertex_stage]->sinfo.stride, sizeof(shader->sinfo.stride)); + memcpy(shader->xfb_stride, ctx->gfx_stages[prev_vertex_stage]->xfb_stride, sizeof(shader->xfb_stride)); } ctx->base.bind_gs_state(&ctx->base, diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index 4e639fc3bb5..4b0591a4cf4 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -769,8 +769,6 @@ struct zink_framebuffer_clear { /** compiler types */ struct zink_shader_info { - uint16_t stride[PIPE_MAX_SO_BUFFERS]; - uint32_t sampler_mask; bool have_sparse; bool have_vulkan_memory_model; bool have_workgroup_memory_explicit_layout; @@ -808,6 +806,7 @@ struct zink_shader { nir_shader *nir; struct zink_shader_info sinfo; + uint16_t xfb_stride[PIPE_MAX_SO_BUFFERS]; struct { int index;