SDL_shadercross: Xbox can link to dxcompiler directly, like other platforms do

From 42bb42832a745d8e878777e6b1fdb3bb5e1435eb Mon Sep 17 00:00:00 2001
From: Ethan Lee <[EMAIL REDACTED]>
Date: Fri, 20 Dec 2024 00:29:13 -0500
Subject: [PATCH] Xbox can link to dxcompiler directly, like other platforms do

---
 src/SDL_shadercross.c | 58 ++-----------------------------------------
 1 file changed, 2 insertions(+), 56 deletions(-)

diff --git a/src/SDL_shadercross.c b/src/SDL_shadercross.c
index 16df52c..7d954ba 100644
--- a/src/SDL_shadercross.c
+++ b/src/SDL_shadercross.c
@@ -49,18 +49,6 @@ typedef void IDxcBlobEncoding;   /* hack, unused */
 typedef void IDxcBlobWide;       /* hack, unused */
 typedef void IDxcIncludeHandler; /* hack, unused */
 
-/* Dynamic Library / Linking */
-#ifdef DXCOMPILER_DLL
-#undef DXCOMPILER_DLL
-#endif
-#if defined(_GAMING_XBOX_SCARLETT)
-#define DXCOMPILER_DLL "dxcompiler_xs.dll"
-#elif defined(_GAMING_XBOX_XBOXONE)
-#define DXCOMPILER_DLL "dxcompiler_x.dll"
-#else
-#define DXCOMPILER_DLL "dxcompiler.dll"
-#endif
-
 /* Unlike vkd3d-utils, libdxcompiler.so does not use msabi */
 #if !defined(_WIN32)
 #define __stdcall
@@ -320,14 +308,9 @@ struct IDxcUtils
 
 /* DXCompiler */
 #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
-static SDL_SharedObject *dxcompiler_dll = NULL;
-static DxcCreateInstanceProc SDL_DxcCreateInstance = NULL;
-typedef HRESULT(__stdcall *DxcCreateInstanceProc)(
-    REFCLSID rclsid,
-    REFIID riid,
-    LPVOID *ppv);
+extern HRESULT __stdcall DxcCreateInstance(REFCLSID rclsid, REFIID riid, LPVOID* ppv);
 #else
-HRESULT DxcCreateInstance(REFCLSID rclsid, REFIID riid, LPVOID *ppv);
+extern HRESULT DxcCreateInstance(REFCLSID rclsid, REFIID riid, LPVOID *ppv);
 #endif
 
 #endif /* SDL_SHADERCROSS_DXC */
@@ -356,21 +339,6 @@ static void *SDL_ShaderCross_INTERNAL_CompileUsingDXC(
     IDxcUtils *utils = NULL;
     IDxcIncludeHandler *includeHandler = NULL;
 
-    #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
-    if (SDL_DxcCreateInstance == NULL) {
-        SDL_SetError("%s", "DxcCreateInstance function not loaded. Did you forget to call Init?");
-        return NULL;
-    }
-    SDL_DxcCreateInstance(
-        &CLSID_DxcCompiler,
-        IID_IDxcCompiler3,
-        (void **)&dxcInstance);
-
-    SDL_DxcCreateInstance(
-        &CLSID_DxcUtils,
-        &IID_IDxcUtils,
-        (void **)(&utils));
-    #else
     DxcCreateInstance(
         &CLSID_DxcCompiler,
         IID_IDxcCompiler3,
@@ -380,7 +348,6 @@ static void *SDL_ShaderCross_INTERNAL_CompileUsingDXC(
         &CLSID_DxcUtils,
         &IID_IDxcUtils,
         (void **)(&utils));
-    #endif
 
     if (dxcInstance == NULL) {
         SDL_SetError("%s", "Could not create DXC instance!");
@@ -2294,18 +2261,6 @@ SDL_GPUComputePipeline *SDL_ShaderCross_CompileComputePipelineFromSPIRV(
 
 bool SDL_ShaderCross_Init(void)
 {
-    #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
-    dxcompiler_dll = SDL_LoadObject(DXCOMPILER_DLL);
-    if (dxcompiler_dll != NULL) {
-        SDL_DxcCreateInstance = (DxcCreateInstanceProc)SDL_LoadFunction(dxcompiler_dll, "DxcCreateInstance");
-
-        if (SDL_DxcCreateInstance == NULL) {
-            SDL_UnloadObject(dxcompiler_dll);
-            dxcompiler_dll = NULL;
-        }
-    }
-    #endif
-
     d3dcompiler_dll = SDL_LoadObject(D3DCOMPILER_DLL);
 
     if (d3dcompiler_dll != NULL) {
@@ -2328,15 +2283,6 @@ void SDL_ShaderCross_Quit(void)
 
         SDL_D3DCompile = NULL;
     }
-
-    #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
-    if (dxcompiler_dll != NULL) {
-        SDL_UnloadObject(dxcompiler_dll);
-        dxcompiler_dll = NULL;
-
-        SDL_DxcCreateInstance = NULL;
-    }
-    #endif
 }
 
 SDL_GPUShaderFormat SDL_ShaderCross_GetSPIRVShaderFormats(void)