layers: Add accel structure tracking and validation
Adds tracking and validation for ray tracing acceleration structures in
manner similar to buffers and images (adds memory links on bind commands,
adds usage links in build and copy commands).
More extension information:
- https://www.khronos.org/registry/vulkan/specs/1.1-extensions/
html/vkspec.html#VK_NV_ray_tracing
Change-Id: I6c86f753e01e90de93aef7046fb83b44c03a8bca
diff --git a/layers/stateless_validation.h b/layers/stateless_validation.h
index ae4aea2..7f0bd57 100644
--- a/layers/stateless_validation.h
+++ b/layers/stateless_validation.h
@@ -97,6 +97,7 @@
struct DeviceExtensionProperties {
VkPhysicalDeviceShadingRateImagePropertiesNV shading_rate_image_props;
VkPhysicalDeviceMeshShaderPropertiesNV mesh_shader_props;
+ VkPhysicalDeviceRayTracingPropertiesNV ray_tracing_props;
};
DeviceExtensionProperties phys_dev_ext_props = {};
@@ -899,6 +900,8 @@
bool ValidateDeviceQueueFamily(uint32_t queue_family, const char *cmd_name, const char *parameter_name,
const std::string &error_code, bool optional);
+ bool ValidateAccelerationStructureInfoNV(const VkAccelerationStructureInfoNV &info);
+
bool OutputExtensionError(const std::string &api_name, const std::string &extension_name);
void PostCallRecordCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo,
@@ -949,7 +952,7 @@
bool manual_PreCallValidateUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount,
const VkWriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount,
const VkCopyDescriptorSet *pDescriptorCopies);
- ;
+
bool manual_PreCallValidateFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount,
const VkDescriptorSet *pDescriptorSets);
@@ -1051,6 +1054,13 @@
const VkAccelerationStructureCreateInfoNV *pCreateInfo,
const VkAllocationCallbacks *pAllocator,
VkAccelerationStructureNV *pAccelerationStructure);
+ bool manual_PreCallValidateCmdBuildAccelerationStructureNV(VkCommandBuffer commandBuffer,
+ const VkAccelerationStructureInfoNV *pInfo, VkBuffer instanceData,
+ VkDeviceSize instanceOffset, VkBool32 update,
+ VkAccelerationStructureNV dst, VkAccelerationStructureNV src,
+ VkBuffer scratch, VkDeviceSize scratchOffset);
+ bool manual_PreCallValidateGetAccelerationStructureHandleNV(VkDevice device, VkAccelerationStructureNV accelerationStructure,
+ size_t dataSize, void *pData);
bool manual_PreCallValidateCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount,
const VkRayTracingPipelineCreateInfoNV *pCreateInfos,
const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines);