microsoft/compiler: Handle store_per_vertex_output for HS outputs

Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Bill Kristiansen <billkris@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14399>
This commit is contained in:
Jesse Natalie
2022-01-03 05:23:48 -08:00
committed by Marge Bot
parent 41af962099
commit ad2233616c
+5 -1
View File
@@ -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: