diff --git a/src/compiler/nir/nir_passthrough_gs.c b/src/compiler/nir/nir_passthrough_gs.c index 4c378665f0c..6c0fea95e50 100644 --- a/src/compiler/nir/nir_passthrough_gs.c +++ b/src/compiler/nir/nir_passthrough_gs.c @@ -142,7 +142,7 @@ nir_create_passthrough_gs(const nir_shader_compiler_options *options, nir->info.has_transform_feedback_varyings = prev_stage->info.has_transform_feedback_varyings; memcpy(nir->info.xfb_stride, prev_stage->info.xfb_stride, sizeof(prev_stage->info.xfb_stride)); if (prev_stage->xfb_info) { - nir->xfb_info = mem_dup(prev_stage->xfb_info, sizeof(nir_xfb_info)); + nir->xfb_info = mem_dup(prev_stage->xfb_info, nir_xfb_info_size(prev_stage->xfb_info->output_count)); } bool handle_flat = nir->info.gs.output_primitive == MESA_PRIM_LINE_STRIP && diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 31a6247757a..1653c0f62d6 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -1214,7 +1214,7 @@ zink_create_quads_emulation_gs(const nir_shader_compiler_options *options, nir->info.has_transform_feedback_varyings = prev_stage->info.has_transform_feedback_varyings; memcpy(nir->info.xfb_stride, prev_stage->info.xfb_stride, sizeof(prev_stage->info.xfb_stride)); if (prev_stage->xfb_info) { - nir->xfb_info = mem_dup(prev_stage->xfb_info, sizeof(nir_xfb_info)); + nir->xfb_info = mem_dup(prev_stage->xfb_info, nir_xfb_info_size(prev_stage->xfb_info->output_count)); } nir_variable *in_vars[VARYING_SLOT_MAX];