mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
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:
parent
46335debf6
commit
8fcd506178
2 changed files with 31 additions and 0 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue