Mesa (main): microsoft/compiler: Add a getter for a validator version from DXIL.dll

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sat Jul 23 15:39:15 UTC 2022


Module: Mesa
Branch: main
Commit: 8fcd506178fd40611f8f91d42930135fd7a8e3e0
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8fcd506178fd40611f8f91d42930135fd7a8e3e0

Author: Jesse Natalie <jenatali at microsoft.com>
Date:   Sun Jul 17 11:08:04 2022 -0700

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

Reviewed-by: Erik Faye-Lund <erik.faye-lund at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17603>

---

 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<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;
+}
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



More information about the mesa-commit mailing list