lavapipe: Advertise VK_KHR_acceleration_structure

Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25616>
This commit is contained in:
Konstantin Seurer 2023-07-07 17:59:35 +02:00 committed by Marge Bot
parent 09bf35e3c4
commit 32e86e1bff
2 changed files with 41 additions and 1 deletions

View file

@ -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 */

View file

@ -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;