From a447863e4fb9834e91cdd803a9052e188d1ef9ac Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 14 Mar 2025 10:27:50 -0700 Subject: [PATCH] Set a default shader entry point The default should be the entrypoint generated by SDL_shadercross. That way it doesn't need to be hand-specified in the common workflow. (cherry picked from commit dcb97a5f49a336f871828672be7a905502778dbc) --- src/gpu/d3d12/SDL_gpu_d3d12.c | 1 - src/gpu/metal/SDL_gpu_metal.m | 4 ++++ src/gpu/vulkan/SDL_gpu_vulkan.c | 14 +++++++------- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/gpu/d3d12/SDL_gpu_d3d12.c b/src/gpu/d3d12/SDL_gpu_d3d12.c index e003952264..ab7554cd70 100644 --- a/src/gpu/d3d12/SDL_gpu_d3d12.c +++ b/src/gpu/d3d12/SDL_gpu_d3d12.c @@ -8103,7 +8103,6 @@ static void D3D12_INTERNAL_InitBlitResources( shaderCreateInfo.code_size = sizeof(D3D12_FullscreenVert); shaderCreateInfo.stage = SDL_GPU_SHADERSTAGE_VERTEX; shaderCreateInfo.format = SDL_GPU_SHADERFORMAT_DXBC; - shaderCreateInfo.entrypoint = "main"; renderer->blitVertexShader = D3D12_CreateShader( (SDL_GPURenderer *)renderer, diff --git a/src/gpu/metal/SDL_gpu_metal.m b/src/gpu/metal/SDL_gpu_metal.m index de9df7274c..0e3f6efa7e 100644 --- a/src/gpu/metal/SDL_gpu_metal.m +++ b/src/gpu/metal/SDL_gpu_metal.m @@ -840,6 +840,10 @@ static MetalLibraryFunction METAL_INTERNAL_CompileShader( dispatch_data_t data; id function; + if (!entrypoint) { + entrypoint = "main0"; + } + if (format == SDL_GPU_SHADERFORMAT_MSL) { NSString *codeString = [[NSString alloc] initWithBytes:code diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c index 8638dd82ca..6b13a26cca 100644 --- a/src/gpu/vulkan/SDL_gpu_vulkan.c +++ b/src/gpu/vulkan/SDL_gpu_vulkan.c @@ -606,7 +606,7 @@ typedef struct VulkanSampler typedef struct VulkanShader { VkShaderModule shaderModule; - const char *entrypointName; + char *entrypointName; SDL_GPUShaderStage stage; Uint32 numSamplers; Uint32 numStorageTextures; @@ -3175,7 +3175,7 @@ static void VULKAN_INTERNAL_DestroyShader( vulkanShader->shaderModule, NULL); - SDL_free((void *)vulkanShader->entrypointName); + SDL_free(vulkanShader->entrypointName); SDL_free(vulkanShader); } @@ -6694,7 +6694,6 @@ static SDL_GPUShader *VULKAN_CreateShader( VkResult vulkanResult; VkShaderModuleCreateInfo vkShaderModuleCreateInfo; VulkanRenderer *renderer = (VulkanRenderer *)driverData; - size_t entryPointNameLength; vulkanShader = SDL_malloc(sizeof(VulkanShader)); vkShaderModuleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; @@ -6714,10 +6713,11 @@ static SDL_GPUShader *VULKAN_CreateShader( CHECK_VULKAN_ERROR_AND_RETURN(vulkanResult, vkCreateShaderModule, NULL); } - entryPointNameLength = SDL_strlen(createinfo->entrypoint) + 1; - vulkanShader->entrypointName = SDL_malloc(entryPointNameLength); - SDL_utf8strlcpy((char *)vulkanShader->entrypointName, createinfo->entrypoint, entryPointNameLength); - + const char *entrypoint = createinfo->entrypoint; + if (!entrypoint) { + entrypoint = "main"; + } + vulkanShader->entrypointName = SDL_strdup(entrypoint); vulkanShader->stage = createinfo->stage; vulkanShader->numSamplers = createinfo->num_samplers; vulkanShader->numStorageTextures = createinfo->num_storage_textures;