From 2a504a4b9ec5492a447335839c82cbff42ab2ac9 Mon Sep 17 00:00:00 2001
From: Evan Hemsley <[EMAIL REDACTED]>
Date: Fri, 20 Dec 2024 20:02:10 -0800
Subject: [PATCH] HLSL compile warnings are no longer fatal (#74)
---
src/SDL_shadercross.c | 48 +++++++++++++++++++++++++++----------------
1 file changed, 30 insertions(+), 18 deletions(-)
diff --git a/src/SDL_shadercross.c b/src/SDL_shadercross.c
index 7d954ba..a42dd1f 100644
--- a/src/SDL_shadercross.c
+++ b/src/SDL_shadercross.c
@@ -492,36 +492,48 @@ static void *SDL_ShaderCross_INTERNAL_CompileUsingDXC(
return NULL;
}
- dxcResult->lpVtbl->GetOutput(
- dxcResult,
- DXC_OUT_ERRORS,
- IID_IDxcBlobUtf8,
- (void **)&errors,
- NULL);
-
- if (errors != NULL && errors->lpVtbl->GetBufferSize(errors) != 0) {
- SDL_SetError(
- "HLSL compilation failed: %s",
- (char *)errors->lpVtbl->GetBufferPointer(errors));
- dxcResult->lpVtbl->Release(dxcResult);
- dxcInstance->lpVtbl->Release(dxcInstance);
- utils->lpVtbl->Release(utils);
- return NULL;
- }
-
ret = dxcResult->lpVtbl->GetOutput(dxcResult,
DXC_OUT_OBJECT,
IID_IDxcBlob,
(void **)&blob,
NULL);
if (ret < 0) {
- SDL_SetError("%s", "IDxcBlob fetch failed");
+ // Compilation failed, display errors
+ dxcResult->lpVtbl->GetOutput(
+ dxcResult,
+ DXC_OUT_ERRORS,
+ IID_IDxcBlobUtf8,
+ (void **)&errors,
+ NULL);
+
+ if (errors != NULL && errors->lpVtbl->GetBufferSize(errors) != 0) {
+ SDL_SetError(
+ "HLSL compilation failed: %s",
+ (char *)errors->lpVtbl->GetBufferPointer(errors));
+ } else {
+ SDL_SetError("%s", "Compilation failed with unknown error");
+ }
+
+ // teardown
dxcResult->lpVtbl->Release(dxcResult);
dxcInstance->lpVtbl->Release(dxcInstance);
utils->lpVtbl->Release(utils);
return NULL;
}
+ // If compilation succeeded, but there are errors, those are warnings
+ dxcResult->lpVtbl->GetOutput(
+ dxcResult,
+ DXC_OUT_ERRORS,
+ IID_IDxcBlobUtf8,
+ (void **)&errors,
+ NULL);
+
+ if (errors != NULL && errors->lpVtbl->GetBufferSize(errors) != 0) {
+ SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, "HLSL compiled with warnings: %s",
+ (char *)errors->lpVtbl->GetBufferPointer(errors));
+ }
+
*size = blob->lpVtbl->GetBufferSize(blob);
void *buffer = SDL_malloc(*size);
SDL_memcpy(buffer, blob->lpVtbl->GetBufferPointer(blob), *size);