Vulkan: Fix build with use_volk=no
This commit is contained in:
@@ -37,5 +37,8 @@
|
||||
#include <cstdint>
|
||||
#define VK_NO_STDINT_H
|
||||
#include <vulkan/vulkan.h>
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
#undef CursorShape // vulkan.h transitively includes Xlib.h.
|
||||
#endif
|
||||
#endif
|
||||
// IWYU pragma: end_exports.
|
||||
|
||||
@@ -1528,10 +1528,15 @@ Error RenderingDeviceDriverVulkan::_initialize_device(const LocalVector<VkDevice
|
||||
// Device raytracing extensions.
|
||||
if (enabled_device_extension_names.has(VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME)) {
|
||||
device_functions.CreateAccelerationStructureKHR = PFN_vkCreateAccelerationStructureKHR(functions.GetDeviceProcAddr(vk_device, "vkCreateAccelerationStructureKHR"));
|
||||
device_functions.DestroyAccelerationStructureKHR = PFN_vkDestroyAccelerationStructureKHR(functions.GetDeviceProcAddr(vk_device, "vkDestroyAccelerationStructureKHR"));
|
||||
device_functions.GetAccelerationStructureBuildSizesKHR = PFN_vkGetAccelerationStructureBuildSizesKHR(functions.GetDeviceProcAddr(vk_device, "vkGetAccelerationStructureBuildSizesKHR"));
|
||||
device_functions.CmdBuildAccelerationStructuresKHR = PFN_vkCmdBuildAccelerationStructuresKHR(functions.GetDeviceProcAddr(vk_device, "vkCmdBuildAccelerationStructuresKHR"));
|
||||
}
|
||||
|
||||
if (enabled_device_extension_names.has(VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME)) {
|
||||
device_functions.CreateRaytracingPipelinesKHR = PFN_vkCreateRayTracingPipelinesKHR(functions.GetDeviceProcAddr(vk_device, "vkCreateRayTracingPipelinesKHR"));
|
||||
device_functions.GetRayTracingShaderGroupHandlesKHR = PFN_vkGetRayTracingShaderGroupHandlesKHR(functions.GetDeviceProcAddr(vk_device, "vkGetRayTracingShaderGroupHandlesKHR"));
|
||||
device_functions.CmdTraceRaysKHR = PFN_vkCmdTraceRaysKHR(functions.GetDeviceProcAddr(vk_device, "vkCmdTraceRaysKHR"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6318,7 +6323,7 @@ RDD::AccelerationStructureID RenderingDeviceDriverVulkan::blas_create(VectorView
|
||||
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, 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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user