From cdabd48e413be080ab0566b66756fca3bf4e1dc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Wed, 17 Jun 2026 13:28:55 +0200 Subject: [PATCH] Vulkan: Fix build with `use_volk=no` --- drivers/vulkan/godot_vulkan.h | 3 +++ .../vulkan/rendering_device_driver_vulkan.cpp | 23 +++++++++++-------- .../vulkan/rendering_device_driver_vulkan.h | 5 ++++ 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/drivers/vulkan/godot_vulkan.h b/drivers/vulkan/godot_vulkan.h index b3f057a21e..55a8a39c9b 100644 --- a/drivers/vulkan/godot_vulkan.h +++ b/drivers/vulkan/godot_vulkan.h @@ -37,5 +37,8 @@ #include #define VK_NO_STDINT_H #include +#ifdef VK_USE_PLATFORM_XLIB_KHR +#undef CursorShape // vulkan.h transitively includes Xlib.h. +#endif #endif // IWYU pragma: end_exports. diff --git a/drivers/vulkan/rendering_device_driver_vulkan.cpp b/drivers/vulkan/rendering_device_driver_vulkan.cpp index 9f48519b88..9d261ca5ad 100644 --- a/drivers/vulkan/rendering_device_driver_vulkan.cpp +++ b/drivers/vulkan/rendering_device_driver_vulkan.cpp @@ -1528,10 +1528,15 @@ Error RenderingDeviceDriverVulkan::_initialize_device(const LocalVectorbuild_info, max_primitive_counts.ptr(), &size_info); + device_functions.GetAccelerationStructureBuildSizesKHR(vk_device, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR, &accel_info->build_info, max_primitive_counts.ptr(), &size_info); _acceleration_structure_create(VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, size_info, accel_info); return AccelerationStructureID(accel_info); @@ -6363,7 +6368,7 @@ RDD::AccelerationStructureID RenderingDeviceDriverVulkan::tlas_create(uint32_t p VkAccelerationStructureBuildSizesInfoKHR size_info = {}; size_info.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR; - vkGetAccelerationStructureBuildSizesKHR(vk_device, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR, &accel_info->build_info, &p_max_instance_count, &size_info); + device_functions.GetAccelerationStructureBuildSizesKHR(vk_device, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR, &accel_info->build_info, &p_max_instance_count, &size_info); accel_info->range_infos.resize_initialized(1); @@ -6412,7 +6417,7 @@ void RenderingDeviceDriverVulkan::_acceleration_structure_create(VkAccelerationS accel_create_info.type = p_type; accel_create_info.size = p_size_info.accelerationStructureSize; accel_create_info.buffer = ((const BufferInfo *)buffer.id)->vk_buffer; - VkResult err = vkCreateAccelerationStructureKHR(vk_device, &accel_create_info, nullptr, &r_accel_info->vk_acceleration_structure); + VkResult err = device_functions.CreateAccelerationStructureKHR(vk_device, &accel_create_info, nullptr, &r_accel_info->vk_acceleration_structure); ERR_FAIL_COND_MSG(err, vformat("Couldn't create Vulkan raytracing acceleration structure (VkResult error %d).", err)); r_accel_info->build_info.dstAccelerationStructure = r_accel_info->vk_acceleration_structure; #endif @@ -6426,7 +6431,7 @@ void RenderingDeviceDriverVulkan::acceleration_structure_free(AccelerationStruct buffer_free(accel_info->buffer); } if (accel_info->vk_acceleration_structure) { - vkDestroyAccelerationStructureKHR(vk_device, accel_info->vk_acceleration_structure, nullptr); + device_functions.DestroyAccelerationStructureKHR(vk_device, accel_info->vk_acceleration_structure, nullptr); } VersatileResource::free(resources_allocator, accel_info); #endif @@ -6464,7 +6469,7 @@ void RenderingDeviceDriverVulkan::command_build_blas(CommandBufferID p_cmd_buffe const VkAccelerationStructureBuildRangeInfoKHR *range_infos = accel_info->range_infos.ptr(); - vkCmdBuildAccelerationStructuresKHR(command_buffer->vk_command_buffer, 1, build_info, &range_infos); + device_functions.CmdBuildAccelerationStructuresKHR(command_buffer->vk_command_buffer, 1, build_info, &range_infos); #endif } @@ -6482,7 +6487,7 @@ void RenderingDeviceDriverVulkan::command_build_tlas(CommandBufferID p_cmd_buffe const VkAccelerationStructureBuildRangeInfoKHR *range_infos = accel_info->range_infos.ptr(); - vkCmdBuildAccelerationStructuresKHR(command_buffer->vk_command_buffer, 1, build_info, &range_infos); + device_functions.CmdBuildAccelerationStructuresKHR(command_buffer->vk_command_buffer, 1, build_info, &range_infos); #endif } @@ -6505,7 +6510,7 @@ void RenderingDeviceDriverVulkan::command_trace_rays(CommandBufferID p_cmd_buffe VkStridedDeviceAddressRegionKHR miss_sbt = _sbt_to_vk_strided_device_address_region(p_miss_sbt); VkStridedDeviceAddressRegionKHR hit_sbt = _sbt_to_vk_strided_device_address_region(p_hit_sbt); VkStridedDeviceAddressRegionKHR callable_sbt = {}; - vkCmdTraceRaysKHR(command_buffer->vk_command_buffer, &raygen_sbt, &miss_sbt, &hit_sbt, &callable_sbt, p_width, p_height, p_depth); + device_functions.CmdTraceRaysKHR(command_buffer->vk_command_buffer, &raygen_sbt, &miss_sbt, &hit_sbt, &callable_sbt, p_width, p_height, p_depth); #endif } @@ -6601,7 +6606,7 @@ RDD::RaytracingPipelineID RenderingDeviceDriverVulkan::raytracing_pipeline_creat pipeline_create_info.maxPipelineRayRecursionDepth = p_max_trace_recursion_depth; VkPipeline vk_pipeline = VK_NULL_HANDLE; - VkResult err = vkCreateRayTracingPipelinesKHR(vk_device, VK_NULL_HANDLE, pipelines_cache.vk_cache, 1, &pipeline_create_info, nullptr, &vk_pipeline); + VkResult err = device_functions.CreateRaytracingPipelinesKHR(vk_device, VK_NULL_HANDLE, pipelines_cache.vk_cache, 1, &pipeline_create_info, nullptr, &vk_pipeline); ERR_FAIL_COND_V_MSG(err, RaytracingPipelineID(), vformat("Couldn't create Vulkan raytracing pipelines (VkResult error %d).", err)); return RaytracingPipelineID(vk_pipeline); @@ -6624,7 +6629,7 @@ bool RenderingDeviceDriverVulkan::raytracing_pipeline_get_shader_group_handles(R vformat("Data stride (%d) must be greater than or equal to the size of the shader group handles (%d).", p_data_stride_bytes, raytracing_capabilities.shader_group_handle_size)); for (uint32_t i = 0; i < p_group_indices.size(); i++) { - VkResult err = vkGetRayTracingShaderGroupHandlesKHR(vk_device, (VkPipeline)p_pipeline.id, p_group_index_offset + p_group_indices[i], 1, raytracing_capabilities.shader_group_handle_size, r_data); + VkResult err = device_functions.GetRayTracingShaderGroupHandlesKHR(vk_device, (VkPipeline)p_pipeline.id, p_group_index_offset + p_group_indices[i], 1, raytracing_capabilities.shader_group_handle_size, r_data); ERR_FAIL_COND_V_MSG(err != VK_SUCCESS, false, vformat("Couldn't get Vulkan raytracing shader group handles (VkResult error %d).", err)); r_data += p_data_stride_bytes; } diff --git a/drivers/vulkan/rendering_device_driver_vulkan.h b/drivers/vulkan/rendering_device_driver_vulkan.h index cf6ef9fd3b..6d17386d4e 100644 --- a/drivers/vulkan/rendering_device_driver_vulkan.h +++ b/drivers/vulkan/rendering_device_driver_vulkan.h @@ -129,7 +129,12 @@ class RenderingDeviceDriverVulkan : public RenderingDeviceDriver { // Raytracing extensions. PFN_vkCreateAccelerationStructureKHR CreateAccelerationStructureKHR = nullptr; + PFN_vkDestroyAccelerationStructureKHR DestroyAccelerationStructureKHR = nullptr; + PFN_vkGetAccelerationStructureBuildSizesKHR GetAccelerationStructureBuildSizesKHR = nullptr; + PFN_vkCmdBuildAccelerationStructuresKHR CmdBuildAccelerationStructuresKHR = nullptr; PFN_vkCreateRayTracingPipelinesKHR CreateRaytracingPipelinesKHR = nullptr; + PFN_vkGetRayTracingShaderGroupHandlesKHR GetRayTracingShaderGroupHandlesKHR = nullptr; + PFN_vkCmdTraceRaysKHR CmdTraceRaysKHR = nullptr; }; // Debug marker extensions. VkDebugReportObjectTypeEXT _convert_to_debug_report_objectType(VkObjectType p_object_type);