From b7a08337735a0807f0d10d073431b743e5cf1a82 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 7 Aug 2023 14:18:56 -0400 Subject: [PATCH] nir/zink: fix gs emulation xfb_info sizing cc: mesa-stable Reviewed-by: Dave Airlie Part-of: (cherry picked from commit df238e8fc092a9be6c9994c1d681eb3aa03d966f) --- .pick_status.json | 2 +- src/compiler/nir/nir_passthrough_gs.c | 2 +- src/gallium/drivers/zink/zink_compiler.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 47f99752770..322670974ef 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -580,7 +580,7 @@ "description": "nir/zink: fix gs emulation xfb_info sizing", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/compiler/nir/nir_passthrough_gs.c b/src/compiler/nir/nir_passthrough_gs.c index 6df653a3685..dd78621341e 100644 --- a/src/compiler/nir/nir_passthrough_gs.c +++ b/src/compiler/nir/nir_passthrough_gs.c @@ -175,7 +175,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 == SHADER_PRIM_LINE_STRIP && diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 51b00a4db9b..b1660695c5f 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -1239,7 +1239,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];