microsoft/compiler: Handle load_invocation_id for GS and HS

Reviewed-by: Sil Vilerino <sivileri@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14624>
This commit is contained in:
Jesse Natalie
2022-01-03 04:58:17 -08:00
committed by Marge Bot
parent fe6f7b5265
commit 7502b08900
2 changed files with 16 additions and 0 deletions
+2
View File
@@ -71,6 +71,8 @@ static struct predefined_func_descr predefined_funcs[] = {
{"dx.op.atomicCompareExchange", "O", "i@iiiii", DXIL_ATTR_KIND_READ_NONE},
{"dx.op.textureStore", "v", "i@iiiOOOOc", DXIL_ATTR_KIND_NONE},
{"dx.op.primitiveID", "i", "i", DXIL_ATTR_KIND_READ_NONE},
{"dx.op.outputControlPointID", "i", "i", DXIL_ATTR_KIND_READ_NONE},
{"dx.op.gsInstanceID", "i", "i", DXIL_ATTR_KIND_READ_NONE},
{"dx.op.legacyF16ToF32", "f", "ii", DXIL_ATTR_KIND_READ_ONLY},
{"dx.op.legacyF32ToF16", "i", "if", DXIL_ATTR_KIND_READ_ONLY},
{"dx.op.makeDouble", "g", "iii", DXIL_ATTR_KIND_READ_NONE},
+14
View File
@@ -274,9 +274,12 @@ enum dxil_intr {
DXIL_INTR_EMIT_STREAM = 97,
DXIL_INTR_CUT_STREAM = 98,
DXIL_INTR_GS_INSTANCE_ID = 100,
DXIL_INTR_MAKE_DOUBLE = 101,
DXIL_INTR_SPLIT_DOUBLE = 102,
DXIL_INTR_OUTPUT_CONTROL_POINT_ID = 107,
DXIL_INTR_PRIMITIVE_ID = 108,
DXIL_INTR_LEGACY_F32TOF16 = 130,
@@ -3760,6 +3763,17 @@ emit_intrinsic(struct ntd_context *ctx, nir_intrinsic_instr *intr)
case nir_intrinsic_load_sample_id:
return emit_load_unary_external_function(ctx, intr, "dx.op.sampleIndex",
DXIL_INTR_SAMPLE_INDEX);
case nir_intrinsic_load_invocation_id:
switch (ctx->mod.shader_kind) {
case DXIL_HULL_SHADER:
return emit_load_unary_external_function(ctx, intr, "dx.op.outputControlPointID",
DXIL_INTR_OUTPUT_CONTROL_POINT_ID);
case DXIL_GEOMETRY_SHADER:
return emit_load_unary_external_function(ctx, intr, "dx.op.gsInstanceID",
DXIL_INTR_GS_INSTANCE_ID);
default:
unreachable("Unexpected shader kind for invocation ID");
}
case nir_intrinsic_load_sample_mask_in:
return emit_load_sample_mask_in(ctx, intr);
case nir_intrinsic_load_shared_dxil: