mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 19:40:10 +01:00
microsoft/compiler: Always emit a shader at the max-supported shader model
Reviewed-by: Giancarlo Devich <gdevich@microsoft.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18022>
This commit is contained in:
parent
6abadd27ec
commit
ebb9ff2165
1 changed files with 13 additions and 24 deletions
|
|
@ -5546,8 +5546,11 @@ emit_module(struct ntd_context *ctx, const struct nir_to_dxil_options *opts)
|
|||
ctx->mod.feats.array_layer_from_vs_or_ds = true;
|
||||
}
|
||||
|
||||
if (ctx->mod.feats.native_low_precision)
|
||||
ctx->mod.minor_version = MAX2(ctx->mod.minor_version, 2);
|
||||
if (ctx->mod.feats.native_low_precision && ctx->mod.minor_version < 2) {
|
||||
ctx->logger->log(ctx->logger->priv,
|
||||
"Shader uses 16bit, which requires shader model 6.2, but 6.2 is unsupported\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
return emit_metadata(ctx) &&
|
||||
dxil_emit_module(&ctx->mod);
|
||||
|
|
@ -5802,13 +5805,6 @@ type_size_vec4(const struct glsl_type *type, bool bindless)
|
|||
return glsl_count_attribute_slots(type, false);
|
||||
}
|
||||
|
||||
static bool
|
||||
dxil_validator_can_validate_shader_model(unsigned sm_minor, unsigned val_minor)
|
||||
{
|
||||
/* Currently the validators are versioned such that val 1.x is needed for SM6.x */
|
||||
return sm_minor <= val_minor;
|
||||
}
|
||||
|
||||
static const unsigned dxil_validator_min_capable_version = DXIL_VALIDATOR_1_4;
|
||||
static const unsigned dxil_validator_max_capable_version = DXIL_VALIDATOR_1_7;
|
||||
|
||||
|
|
@ -5826,6 +5822,11 @@ nir_to_dxil(struct nir_shader *s, const struct nir_to_dxil_options *opts,
|
|||
return false;
|
||||
}
|
||||
|
||||
if (opts->shader_model_max > SHADER_MODEL_6_2) {
|
||||
debug_printf("D3D12: cannot support emitting higher than shader model 6.2\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (opts->validator_version_max != NO_DXIL_VALIDATION &&
|
||||
opts->validator_version_max < dxil_validator_min_capable_version) {
|
||||
debug_printf("D3D12: Invalid validator version %d.%d, must be 1.4 or greater\n",
|
||||
|
|
@ -5864,7 +5865,9 @@ nir_to_dxil(struct nir_shader *s, const struct nir_to_dxil_options *opts,
|
|||
dxil_module_init(&ctx->mod, ctx->ralloc_ctx);
|
||||
ctx->mod.shader_kind = get_dxil_shader_kind(s);
|
||||
ctx->mod.major_version = 6;
|
||||
ctx->mod.minor_version = 1;
|
||||
/* Use the highest shader model that's supported and can be validated */
|
||||
ctx->mod.minor_version =
|
||||
MIN2(opts->shader_model_max & 0xffff, validator_version & 0xffff);
|
||||
ctx->mod.major_validator = validator_version >> 16;
|
||||
ctx->mod.minor_validator = validator_version & 0xffff;
|
||||
|
||||
|
|
@ -5919,20 +5922,6 @@ nir_to_dxil(struct nir_shader *s, const struct nir_to_dxil_options *opts,
|
|||
goto out;
|
||||
}
|
||||
|
||||
assert(ctx->mod.major_version == 6 && ctx->mod.minor_version >= 1);
|
||||
if ((ctx->mod.major_version << 16 | ctx->mod.minor_version) > opts->shader_model_max) {
|
||||
debug_printf("D3D12: max shader model exceeded\n");
|
||||
retval = false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
assert(ctx->mod.major_validator == 1);
|
||||
if (!dxil_validator_can_validate_shader_model(ctx->mod.minor_version, ctx->mod.minor_validator)) {
|
||||
debug_printf("D3D12: shader model exceeds max that can be validated\n");
|
||||
retval = false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (debug_dxil & DXIL_DEBUG_DUMP_MODULE) {
|
||||
struct dxil_dumper *dumper = dxil_dump_create();
|
||||
dxil_dump_module(dumper, &ctx->mod);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue