microsoft/compiler: Fix wave size control for SM6.6+

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27624>
This commit is contained in:
Jesse Natalie
2024-02-14 14:29:17 -08:00
committed by Marge Bot
parent 0daad70f9f
commit e21774eb0a

View File

@@ -1814,6 +1814,14 @@ emit_threads(struct ntd_context *ctx)
return dxil_get_metadata_node(&ctx->mod, threads_nodes, ARRAY_SIZE(threads_nodes));
}
static const struct dxil_mdnode *
emit_wave_size(struct ntd_context *ctx)
{
const nir_shader *s = ctx->shader;
const struct dxil_mdnode *wave_size_node = dxil_get_metadata_int32(&ctx->mod, s->info.subgroup_size);
return dxil_get_metadata_node(&ctx->mod, &wave_size_node, 1);
}
static int64_t
get_module_flags(struct ntd_context *ctx)
{
@@ -2040,8 +2048,7 @@ emit_metadata(struct ntd_context *ctx)
return false;
if (ctx->mod.minor_version >= 6 &&
ctx->shader->info.subgroup_size >= SUBGROUP_SIZE_REQUIRE_8 &&
!emit_tag(ctx, DXIL_SHADER_TAG_WAVE_SIZE,
dxil_get_metadata_int32(&ctx->mod, ctx->shader->info.subgroup_size)))
!emit_tag(ctx, DXIL_SHADER_TAG_WAVE_SIZE, emit_wave_size(ctx)))
return false;
}
@@ -6324,7 +6331,12 @@ void dxil_fill_validation_state(struct ntd_context *ctx,
sizeof(struct dxil_resource_v1) : sizeof(struct dxil_resource_v0);
state->num_resources = ctx->resources.size / resource_element_size;
state->resources.v0 = (struct dxil_resource_v0*)ctx->resources.data;
state->state.psv1.psv0.max_expected_wave_lane_count = UINT_MAX;
if (ctx->shader->info.subgroup_size >= SUBGROUP_SIZE_REQUIRE_8) {
state->state.psv1.psv0.max_expected_wave_lane_count = ctx->shader->info.subgroup_size;
state->state.psv1.psv0.min_expected_wave_lane_count = ctx->shader->info.subgroup_size;
} else {
state->state.psv1.psv0.max_expected_wave_lane_count = UINT_MAX;
}
state->state.psv1.shader_stage = (uint8_t)ctx->mod.shader_kind;
state->state.psv1.uses_view_id = (uint8_t)ctx->mod.feats.view_id;
state->state.psv1.sig_input_elements = (uint8_t)ctx->mod.num_sig_inputs;