From aae1aa48887663ba32d65e9f1ac0013a8d37b4dc Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Wed, 22 Jan 2025 12:20:02 +0000 Subject: [PATCH] d3d12: store only once in d3d12_emit_points d3d12_lower_point_sprite expects a single store for each output, each dominating the emit_vertex. Signed-off-by: Rhys Perry Reviewed-by: Jesse Natalie Part-of: --- src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt | 1 - src/gallium/drivers/d3d12/d3d12_gs_variant.cpp | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt b/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt index 2281207d343..f4ea140ced9 100644 --- a/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt +++ b/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt @@ -43,7 +43,6 @@ spec@!opengl 3.2@gl-3.2-adj-prims pv-last,Fail spec@arb_draw_indirect@arb_draw_indirect-api-errors,Crash spec@arb_framebuffer_object@fbo-blit-scaled-linear,Fail spec@arb_get_program_binary@restore-sso-program,Fail -spec@arb_point_sprite@arb_point_sprite-mipmap,Fail spec@arb_program_interface_query@arb_program_interface_query-getprogramresourceindex,Fail spec@arb_program_interface_query@arb_program_interface_query-getprogramresourceindex@'vs_input2' on GL_PROGRAM_INPUT,Fail spec@arb_program_interface_query@arb_program_interface_query-getprogramresourceindex@'vs_input2[1][0]' on GL_PROGRAM_INPUT,Fail diff --git a/src/gallium/drivers/d3d12/d3d12_gs_variant.cpp b/src/gallium/drivers/d3d12/d3d12_gs_variant.cpp index 45a3090f08f..5b93b25af06 100644 --- a/src/gallium/drivers/d3d12/d3d12_gs_variant.cpp +++ b/src/gallium/drivers/d3d12/d3d12_gs_variant.cpp @@ -373,11 +373,12 @@ d3d12_emit_points(struct d3d12_context *ctx, struct d3d12_gs_variant_key *key) nir_deref_instr *in_value = nir_build_deref_array(b, nir_build_deref_var(b, emit_ctx.in[i]), index); if (emit_ctx.in[i]->data.location == VARYING_SLOT_POS && emit_ctx.edgeflag_cmp) { nir_if *edge_check = nir_push_if(b, emit_ctx.edgeflag_cmp); - copy_vars(b, nir_build_deref_var(b, emit_ctx.out[i]), in_value); + nir_def *pos_then = nir_load_deref(b, in_value); nir_if *edge_else = nir_push_else(b, edge_check); - nir_store_deref(b, nir_build_deref_var(b, emit_ctx.out[i]), - nir_imm_vec4(b, -2.0, -2.0, 0.0, 1.0), 0xf); + nir_def *pos_else = nir_imm_vec4(b, -2.0, -2.0, 0.0, 1.0); nir_pop_if(b, edge_else); + nir_def *pos = nir_if_phi(b, pos_then, pos_else); + nir_store_deref(b, nir_build_deref_var(b, emit_ctx.out[i]), pos, 0xf); } else { copy_vars(b, nir_build_deref_var(b, emit_ctx.out[i]), in_value); }