summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Bacci <luca.bacci@outlook.com>2023-03-27 17:53:11 +0200
committerMarge Bot <emma+marge@anholt.net>2023-05-17 15:33:17 +0000
commit098342ce53f692b719dd3aeb876737ad886c37f0 (patch)
tree8994036e7c9409db71245b20d5f8249fb9b34b36
parent7f7b2fc53ab430a05fa284b209ab71c57b21c548 (diff)
downloadmesa-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.cpp3
-rw-r--r--src/microsoft/compiler/dxil_validator.cpp11
-rw-r--r--src/microsoft/vulkan/dzn_device.c3
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)