diff options
author | Luca Bacci <luca.bacci@outlook.com> | 2023-03-27 17:53:11 +0200 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2023-05-17 15:33:17 +0000 |
commit | 098342ce53f692b719dd3aeb876737ad886c37f0 (patch) | |
tree | 8994036e7c9409db71245b20d5f8249fb9b34b36 | |
parent | 7f7b2fc53ab430a05fa284b209ab71c57b21c548 (diff) | |
download | mesa-098342ce53f692b719dd3aeb876737ad886c37f0.tar.gz |
Add checks for NULL dxil_validator
Fixes https://gitlab.freedesktop.org/mesa/mesa/-/issues/8718
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22141>
-rw-r--r-- | src/gallium/drivers/d3d12/d3d12_context.cpp | 3 | ||||
-rw-r--r-- | src/microsoft/compiler/dxil_validator.cpp | 11 | ||||
-rw-r--r-- | src/microsoft/vulkan/dzn_device.c | 3 |
3 files changed, 12 insertions, 5 deletions
diff --git a/src/gallium/drivers/d3d12/d3d12_context.cpp b/src/gallium/drivers/d3d12/d3d12_context.cpp index 871c98ff56f..ed4f2bafb31 100644 --- a/src/gallium/drivers/d3d12/d3d12_context.cpp +++ b/src/gallium/drivers/d3d12/d3d12_context.cpp @@ -75,8 +75,7 @@ d3d12_context_destroy(struct pipe_context *pctx) mtx_unlock(&screen->submit_mutex); #ifdef _WIN32 - if (ctx->dxil_validator) - dxil_destroy_validator(ctx->dxil_validator); + dxil_destroy_validator(ctx->dxil_validator); #endif #ifndef _GAMING_XBOX diff --git a/src/microsoft/compiler/dxil_validator.cpp b/src/microsoft/compiler/dxil_validator.cpp index 4b68957a7da..c19b395aae1 100644 --- a/src/microsoft/compiler/dxil_validator.cpp +++ b/src/microsoft/compiler/dxil_validator.cpp @@ -237,6 +237,9 @@ fail: void dxil_destroy_validator(struct dxil_validator *val) { + if (!val) + return; + /* if we have a validator, we have these */ val->dxc_validator->Release(); FreeLibrary(val->dxil_mod); @@ -299,6 +302,9 @@ public: bool dxil_validate_module(struct dxil_validator *val, void *data, size_t size, char **error) { + if (!val) + return false; + ShaderBlob source(data, size); ComPtr<IDxcOperationResult> result; @@ -337,6 +343,9 @@ dxil_validate_module(struct dxil_validator *val, void *data, size_t size, char * char * dxil_disasm_module(struct dxil_validator *val, void *data, size_t size) { + if (!val) + return NULL; + if (!val->dxc_compiler || !val->dxc_library) { fprintf(stderr, "DXIL: disassembly requires IDxcLibrary and " "IDxcCompiler from dxcompiler.dll\n"); @@ -364,5 +373,5 @@ dxil_disasm_module(struct dxil_validator *val, void *data, size_t size) enum dxil_validator_version dxil_get_validator_version(struct dxil_validator *val) { - return val->version; + return val ? val->version : NO_DXIL_VALIDATION; } diff --git a/src/microsoft/vulkan/dzn_device.c b/src/microsoft/vulkan/dzn_device.c index 00d455b474f..0f37f4759dd 100644 --- a/src/microsoft/vulkan/dzn_device.c +++ b/src/microsoft/vulkan/dzn_device.c @@ -219,8 +219,7 @@ dzn_instance_destroy(struct dzn_instance *instance, const VkAllocationCallbacks vk_instance_finish(&instance->vk); #ifdef _WIN32 - if (instance->dxil_validator) - dxil_destroy_validator(instance->dxil_validator); + dxil_destroy_validator(instance->dxil_validator); #endif if (instance->factory) |