From 32e86e1bff1b0c5c17742149ed4432cbad2ab37e Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Fri, 7 Jul 2023 17:59:35 +0200 Subject: [PATCH] lavapipe: Advertise VK_KHR_acceleration_structure Acked-By: Mike Blumenkrantz Part-of: --- src/gallium/frontends/lavapipe/lvp_device.c | 20 +++++++++++++++++- src/gallium/frontends/lavapipe/lvp_formats.c | 22 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index c3e665754ef..1f2fd351b09 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -96,6 +96,7 @@ static const struct vk_instance_extension_table lvp_instance_extensions_supporte static const struct vk_device_extension_table lvp_device_extensions_supported = { .KHR_8bit_storage = true, .KHR_16bit_storage = true, + .KHR_acceleration_structure = true, .KHR_bind_memory2 = true, .KHR_buffer_device_address = true, .KHR_create_renderpass2 = true, @@ -396,6 +397,13 @@ lvp_get_features(const struct lvp_physical_device *pdevice, .shaderIntegerDotProduct = true, .maintenance4 = true, + /* VK_KHR_acceleration_structure */ + .accelerationStructure = true, + .accelerationStructureCaptureReplay = false, + .accelerationStructureIndirectBuild = false, + .accelerationStructureHostCommands = false, + .descriptorBindingAccelerationStructureUpdateAfterBind = true, + /* VK_EXT_descriptor_buffer */ .descriptorBuffer = true, .descriptorBufferCaptureReplay = false, @@ -994,7 +1002,7 @@ lvp_get_properties(const struct lvp_physical_device *device, struct vk_propertie .storageBufferDescriptorSize = sizeof(struct lp_descriptor), .robustStorageBufferDescriptorSize = sizeof(struct lp_descriptor), .inputAttachmentDescriptorSize = sizeof(struct lp_descriptor), - .accelerationStructureDescriptorSize = 0, + .accelerationStructureDescriptorSize = sizeof(struct lp_descriptor), .maxSamplerDescriptorBufferRange = UINT32_MAX, .maxResourceDescriptorBufferRange = UINT32_MAX, .resourceDescriptorBufferAddressSpaceSize = UINT32_MAX, @@ -1053,6 +1061,16 @@ lvp_get_properties(const struct lvp_physical_device *device, struct vk_propertie .maxExecutionGraphShaderPayloadCount = LVP_MAX_EXEC_GRAPH_PAYLOADS, .executionGraphDispatchAddressAlignment = 4, #endif + + /* VK_KHR_acceleration_structure */ + .maxGeometryCount = (1 << 24) - 1, + .maxInstanceCount = (1 << 24) - 1, + .maxPrimitiveCount = (1 << 24) - 1, + .maxPerStageDescriptorAccelerationStructures = MAX_DESCRIPTORS, + .maxPerStageDescriptorUpdateAfterBindAccelerationStructures = MAX_DESCRIPTORS, + .maxDescriptorSetAccelerationStructures = MAX_DESCRIPTORS, + .maxDescriptorSetUpdateAfterBindAccelerationStructures = MAX_DESCRIPTORS, + .minAccelerationStructureScratchOffsetAlignment = 128, }; /* Vulkan 1.0 */ diff --git a/src/gallium/frontends/lavapipe/lvp_formats.c b/src/gallium/frontends/lavapipe/lvp_formats.c index b797f4ea2c6..a22ef4b68ae 100644 --- a/src/gallium/frontends/lavapipe/lvp_formats.c +++ b/src/gallium/frontends/lavapipe/lvp_formats.c @@ -204,6 +204,28 @@ lvp_physical_device_get_format_properties(struct lvp_physical_device *physical_d VK_FORMAT_FEATURE_2_BLIT_DST_BIT); } + switch (format) { + case VK_FORMAT_R32G32_SFLOAT: + case VK_FORMAT_R32G32B32_SFLOAT: + case VK_FORMAT_R32G32B32A32_SFLOAT: + case VK_FORMAT_R16G16_SFLOAT: + case VK_FORMAT_R16G16B16_SFLOAT: + case VK_FORMAT_R16G16B16A16_SFLOAT: + case VK_FORMAT_R16G16_SNORM: + case VK_FORMAT_R16G16_UNORM: + case VK_FORMAT_R16G16B16A16_SNORM: + case VK_FORMAT_R16G16B16A16_UNORM: + case VK_FORMAT_R8G8_SNORM: + case VK_FORMAT_R8G8_UNORM: + case VK_FORMAT_R8G8B8A8_SNORM: + case VK_FORMAT_R8G8B8A8_UNORM: + case VK_FORMAT_A2B10G10R10_UNORM_PACK32: + buffer_features |= VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR; + break; + default: + break; + } + out_properties->linearTilingFeatures = features; out_properties->optimalTilingFeatures = features; out_properties->bufferFeatures = buffer_features;