microsoft/compiler: Add a getter for a validator version from DXIL.dll

Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17603>
This commit is contained in:
Jesse Natalie 2022-07-17 11:08:04 -07:00 committed by Marge Bot
parent 46335debf6
commit 8fcd506178
2 changed files with 31 additions and 0 deletions

View file

@ -22,6 +22,8 @@ struct dxil_validator {
IDxcValidator *dxc_validator;
IDxcLibrary *dxc_library;
IDxcCompiler *dxc_compiler;
enum dxil_validator_version version;
};
extern "C" {
@ -84,6 +86,24 @@ create_dxc_validator(HMODULE dxil_mod)
return dxc_validator;
}
static enum dxil_validator_version
get_validator_version(IDxcValidator *val)
{
ComPtr<IDxcVersionInfo> version_info;
if (FAILED(val->QueryInterface(version_info.ReleaseAndGetAddressOf())))
return NO_DXIL_VALIDATION;
UINT32 major, minor;
if (FAILED(version_info->GetVersion(&major, &minor)))
return NO_DXIL_VALIDATION;
if (major == 1)
return (enum dxil_validator_version)(DXIL_VALIDATOR_1_0 + MIN2(minor, 7));
if (major > 1)
return DXIL_VALIDATOR_1_7;
return NO_DXIL_VALIDATION;
}
struct dxil_validator *
dxil_create_validator(const void *ctx)
{
@ -107,6 +127,8 @@ dxil_create_validator(const void *ctx)
if (!val->dxc_validator)
goto fail;
val->version = get_validator_version(val->dxc_validator);
/* Try to load dxcompiler.dll. This is just used for diagnostics, and
* will fail on most end-users install. So we do not error out if this
* fails.
@ -272,3 +294,9 @@ dxil_disasm_module(struct dxil_validator *val, void *data, size_t size)
str[blob_utf8->GetBufferSize() - 1] = 0;
return ralloc_strdup(val, str);
}
enum dxil_validator_version
dxil_get_validator_version(struct dxil_validator *val)
{
return val->version;
}

View file

@ -57,6 +57,9 @@ dxil_validate_module(struct dxil_validator *val, void *data,
char *
dxil_disasm_module(struct dxil_validator *val, void *data, size_t size);
enum dxil_validator_version
dxil_get_validator_version(struct dxil_validator *val);
#ifdef __cplusplus
}
#endif