SDL_shadercross: Pass name property through to SDL

From 281f5b357f54c893b4c0532bf62362dc9a82c85c Mon Sep 17 00:00:00 2001
From: cosmonaut <[EMAIL REDACTED]>
Date: Mon, 13 Jan 2025 19:47:56 -0800
Subject: [PATCH] Pass name property through to SDL

---
 src/SDL_shadercross.c | 54 ++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 48 insertions(+), 6 deletions(-)

diff --git a/src/SDL_shadercross.c b/src/SDL_shadercross.c
index 96df4dd..0150f9f 100644
--- a/src/SDL_shadercross.c
+++ b/src/SDL_shadercross.c
@@ -1979,7 +1979,6 @@ static void *SDL_ShaderCross_INTERNAL_CompileFromSPIRV(
             pipelineInfo);
         createInfo.entrypoint = transpileContext->cleansed_entrypoint;
         createInfo.format = targetFormat;
-        createInfo.props = 0;
         createInfo.num_samplers = pipelineInfo->num_samplers;
         createInfo.num_readonly_storage_textures = pipelineInfo->num_readonly_storage_textures;
         createInfo.num_readonly_storage_buffers = pipelineInfo->num_readonly_storage_buffers;
@@ -1990,6 +1989,12 @@ static void *SDL_ShaderCross_INTERNAL_CompileFromSPIRV(
         createInfo.threadcount_y = pipelineInfo->threadcount_y;
         createInfo.threadcount_z = pipelineInfo->threadcount_z;
 
+        createInfo.props = 0;
+        if (info->name != NULL) {
+            createInfo.props = SDL_CreateProperties();
+            SDL_SetStringProperty(createInfo.props, SDL_PROP_GPU_COMPUTEPIPELINE_CREATE_NAME_STRING, info->name);
+        }
+
         SDL_ShaderCross_HLSL_Info hlslInfo;
         hlslInfo.source = transpileContext->translated_source;
         hlslInfo.entrypoint = transpileContext->cleansed_entrypoint;
@@ -2015,6 +2020,10 @@ static void *SDL_ShaderCross_INTERNAL_CompileFromSPIRV(
         }
 
         shaderObject = SDL_CreateGPUComputePipeline(device, &createInfo);
+
+        if (createInfo.props != 0) {
+            SDL_DestroyProperties(createInfo.props);
+        }
     } else {
         SDL_GPUShaderCreateInfo createInfo;
         SDL_ShaderCross_GraphicsShaderMetadata *shaderInfo = (SDL_ShaderCross_GraphicsShaderMetadata *)metadata;
@@ -2025,12 +2034,17 @@ static void *SDL_ShaderCross_INTERNAL_CompileFromSPIRV(
         createInfo.entrypoint = transpileContext->cleansed_entrypoint;
         createInfo.format = targetFormat;
         createInfo.stage = (SDL_GPUShaderStage)info->shader_stage;
-        createInfo.props = 0;
         createInfo.num_samplers = shaderInfo->num_samplers;
         createInfo.num_storage_textures = shaderInfo->num_storage_textures;
         createInfo.num_storage_buffers = shaderInfo->num_storage_buffers;
         createInfo.num_uniform_buffers = shaderInfo->num_uniform_buffers;
 
+        createInfo.props = 0;
+        if (info->name != NULL) {
+            createInfo.props = SDL_CreateProperties();
+            SDL_SetStringProperty(createInfo.props, SDL_PROP_GPU_SHADER_CREATE_NAME_STRING, info->name);
+        }
+
         SDL_ShaderCross_HLSL_Info hlslInfo;
         hlslInfo.source = transpileContext->translated_source;
         hlslInfo.entrypoint = transpileContext->cleansed_entrypoint;
@@ -2056,6 +2070,10 @@ static void *SDL_ShaderCross_INTERNAL_CompileFromSPIRV(
         }
 
         shaderObject = SDL_CreateGPUShader(device, &createInfo);
+
+        if (createInfo.props != 0) {
+            SDL_DestroyProperties(createInfo.props);
+        }
     }
 
     SDL_ShaderCross_INTERNAL_DestroyTranspileContext(transpileContext);
@@ -2205,7 +2223,6 @@ static void *SDL_ShaderCross_INTERNAL_CreateShaderFromSPIRV(
             createInfo.code_size = info->bytecode_size;
             createInfo.entrypoint = info->entrypoint;
             createInfo.format = SDL_GPU_SHADERFORMAT_SPIRV;
-            createInfo.props = 0;
             createInfo.num_samplers = pipelineMetadata->num_samplers;
             createInfo.num_readonly_storage_textures = pipelineMetadata->num_readonly_storage_textures;
             createInfo.num_readonly_storage_buffers = pipelineMetadata->num_readonly_storage_buffers;
@@ -2215,7 +2232,20 @@ static void *SDL_ShaderCross_INTERNAL_CreateShaderFromSPIRV(
             createInfo.threadcount_x = pipelineMetadata->threadcount_x;
             createInfo.threadcount_y = pipelineMetadata->threadcount_y;
             createInfo.threadcount_z = pipelineMetadata->threadcount_z;
-            return SDL_CreateGPUComputePipeline(device, &createInfo);
+
+            createInfo.props = 0;
+            if (info->name != NULL) {
+                createInfo.props = SDL_CreateProperties();
+                SDL_SetStringProperty(createInfo.props, SDL_PROP_GPU_COMPUTEPIPELINE_CREATE_NAME_STRING, info->name);
+            }
+
+            SDL_GPUComputePipeline *result = SDL_CreateGPUComputePipeline(device, &createInfo);
+
+            if (createInfo.props != 0) {
+                SDL_DestroyProperties(createInfo.props);
+            }
+
+            return result;
         } else {
             SDL_GPUShaderCreateInfo createInfo;
             SDL_ShaderCross_GraphicsShaderMetadata *shaderMetadata = (SDL_ShaderCross_GraphicsShaderMetadata *)metadata;
@@ -2228,12 +2258,24 @@ static void *SDL_ShaderCross_INTERNAL_CreateShaderFromSPIRV(
             createInfo.entrypoint = info->entrypoint;
             createInfo.format = SDL_GPU_SHADERFORMAT_SPIRV;
             createInfo.stage = (SDL_GPUShaderStage)info->shader_stage;
-            createInfo.props = 0;
             createInfo.num_samplers = shaderMetadata->num_samplers;
             createInfo.num_storage_textures = shaderMetadata->num_storage_textures;
             createInfo.num_storage_buffers = shaderMetadata->num_storage_buffers;
             createInfo.num_uniform_buffers = shaderMetadata->num_uniform_buffers;
-            return SDL_CreateGPUShader(device, &createInfo);
+
+            createInfo.props = 0;
+            if (info->name != NULL) {
+                createInfo.props = SDL_CreateProperties();
+                SDL_SetStringProperty(createInfo.props, SDL_PROP_GPU_SHADER_CREATE_NAME_STRING, info->name);
+            }
+
+            SDL_GPUShader *result = SDL_CreateGPUShader(device, &createInfo);
+
+            if (createInfo.props != 0) {
+                SDL_DestroyProperties(createInfo.props);
+            }
+
+            return result;
         }
     } else if (shader_formats & SDL_GPU_SHADERFORMAT_MSL) {
         format = SDL_GPU_SHADERFORMAT_MSL;