|
@@ -27,6 +27,7 @@
|
|
|
|
|
|
// CHANGELOG
|
|
|
// (minor and older changes stripped away, please see git history for details)
|
|
|
+// 2025-09-26: Vulkan: Added a way to customize shaders by filling ImGui_ImplVulkan_InitInfo::CustomShaderVertCreateInfo/CustomShaderFragCreateInfo. (#8585)
|
|
|
// 2025-09-18: Call platform_io.ClearRendererHandlers() on shutdown.
|
|
|
// 2025-09-04: Vulkan: Added ImGui_ImplVulkan_CreateMainPipeline(). (#8110, #8111)
|
|
|
// 2025-07-27: Vulkan: Fixed texture update corruption introduced on 2025-06-11. (#8801, #8755, #8840)
|
|
@@ -887,24 +888,26 @@ void ImGui_ImplVulkan_UpdateTexture(ImTextureData* tex)
|
|
|
|
|
|
static void ImGui_ImplVulkan_CreateShaderModules(VkDevice device, const VkAllocationCallbacks* allocator)
|
|
|
{
|
|
|
- // Create the shader modules
|
|
|
ImGui_ImplVulkan_Data* bd = ImGui_ImplVulkan_GetBackendData();
|
|
|
+ ImGui_ImplVulkan_InitInfo* v = &bd->VulkanInitInfo;
|
|
|
if (bd->ShaderModuleVert == VK_NULL_HANDLE)
|
|
|
{
|
|
|
- VkShaderModuleCreateInfo vert_info = {};
|
|
|
- vert_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
|
|
- vert_info.codeSize = sizeof(__glsl_shader_vert_spv);
|
|
|
- vert_info.pCode = (uint32_t*)__glsl_shader_vert_spv;
|
|
|
- VkResult err = vkCreateShaderModule(device, &vert_info, allocator, &bd->ShaderModuleVert);
|
|
|
+ VkShaderModuleCreateInfo default_vert_info = {};
|
|
|
+ default_vert_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
|
|
+ default_vert_info.codeSize = sizeof(__glsl_shader_vert_spv);
|
|
|
+ default_vert_info.pCode = (uint32_t*)__glsl_shader_vert_spv;
|
|
|
+ VkShaderModuleCreateInfo* p_vert_info = (v->CustomShaderVertCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) ? &v->CustomShaderVertCreateInfo : &default_vert_info;
|
|
|
+ VkResult err = vkCreateShaderModule(device, p_vert_info, allocator, &bd->ShaderModuleVert);
|
|
|
check_vk_result(err);
|
|
|
}
|
|
|
if (bd->ShaderModuleFrag == VK_NULL_HANDLE)
|
|
|
{
|
|
|
- VkShaderModuleCreateInfo frag_info = {};
|
|
|
- frag_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
|
|
- frag_info.codeSize = sizeof(__glsl_shader_frag_spv);
|
|
|
- frag_info.pCode = (uint32_t*)__glsl_shader_frag_spv;
|
|
|
- VkResult err = vkCreateShaderModule(device, &frag_info, allocator, &bd->ShaderModuleFrag);
|
|
|
+ VkShaderModuleCreateInfo default_frag_info = {};
|
|
|
+ default_frag_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
|
|
+ default_frag_info.codeSize = sizeof(__glsl_shader_frag_spv);
|
|
|
+ default_frag_info.pCode = (uint32_t*)__glsl_shader_frag_spv;
|
|
|
+ VkShaderModuleCreateInfo* p_frag_info = (v->CustomShaderFragCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) ? &v->CustomShaderFragCreateInfo : &default_frag_info;
|
|
|
+ VkResult err = vkCreateShaderModule(device, p_frag_info, allocator, &bd->ShaderModuleFrag);
|
|
|
check_vk_result(err);
|
|
|
}
|
|
|
}
|