From 8fcd506178fd40611f8f91d42930135fd7a8e3e0 Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Sun, 17 Jul 2022 11:08:04 -0700 Subject: [PATCH] microsoft/compiler: Add a getter for a validator version from DXIL.dll Reviewed-by: Erik Faye-Lund Part-of: --- src/microsoft/compiler/dxil_validator.cpp | 28 +++++++++++++++++++++++ src/microsoft/compiler/dxil_validator.h | 3 +++ 2 files changed, 31 insertions(+) diff --git a/src/microsoft/compiler/dxil_validator.cpp b/src/microsoft/compiler/dxil_validator.cpp index 7a1f60e2a19..bb01af57fd7 100644 --- a/src/microsoft/compiler/dxil_validator.cpp +++ b/src/microsoft/compiler/dxil_validator.cpp @@ -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 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; +} diff --git a/src/microsoft/compiler/dxil_validator.h b/src/microsoft/compiler/dxil_validator.h index 827aec7396d..8a7db43b212 100644 --- a/src/microsoft/compiler/dxil_validator.h +++ b/src/microsoft/compiler/dxil_validator.h @@ -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