From ad2233616c17ff36728deb357237b7a8799de156 Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Mon, 3 Jan 2022 05:23:48 -0800 Subject: [PATCH] microsoft/compiler: Handle store_per_vertex_output for HS outputs Reviewed-by: Boris Brezillon Reviewed-by: Bill Kristiansen Part-of: --- src/microsoft/compiler/nir_to_dxil.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/microsoft/compiler/nir_to_dxil.c b/src/microsoft/compiler/nir_to_dxil.c index 0990601868a..6ba33901205 100644 --- a/src/microsoft/compiler/nir_to_dxil.c +++ b/src/microsoft/compiler/nir_to_dxil.c @@ -2922,6 +2922,8 @@ emit_load_ubo_dxil(struct ntd_context *ctx, nir_intrinsic_instr *intr) static bool emit_store_output_via_intrinsic(struct ntd_context *ctx, nir_intrinsic_instr *intr) { + assert(intr->intrinsic == nir_intrinsic_store_output || + ctx->mod.shader_kind == DXIL_HULL_SHADER); nir_alu_type out_type = nir_intrinsic_src_type(intr); enum overload_type overload = get_overload(out_type, intr->src[0].ssa->bit_size); const struct dxil_func *func = dxil_get_function(&ctx->mod, "dx.op.storeOutput", overload); @@ -2931,7 +2933,8 @@ emit_store_output_via_intrinsic(struct ntd_context *ctx, nir_intrinsic_instr *in const struct dxil_value *opcode = dxil_module_get_int32_const(&ctx->mod, DXIL_INTR_STORE_OUTPUT); const struct dxil_value *output_id = dxil_module_get_int32_const(&ctx->mod, nir_intrinsic_base(intr)); - const struct dxil_value *row = get_src(ctx, &intr->src[1], 0, nir_type_int); + unsigned row_index = intr->intrinsic == nir_intrinsic_store_output ? 1 : 2; + const struct dxil_value *row = get_src(ctx, &intr->src[row_index], 0, nir_type_int); bool success = true; uint32_t writemask = nir_intrinsic_write_mask(intr); @@ -3948,6 +3951,7 @@ emit_intrinsic(struct ntd_context *ctx, nir_intrinsic_instr *intr) case nir_intrinsic_load_per_vertex_input: return emit_load_input_via_intrinsic(ctx, intr); case nir_intrinsic_store_output: + case nir_intrinsic_store_per_vertex_output: return emit_store_output_via_intrinsic(ctx, intr); case nir_intrinsic_load_barycentric_at_offset: