// Copyright 2019-2021 The Khronos Group Inc. // // SPDX-License-Identifier: CC-BY-4.0 // Common Valid Usage // Common to KHR trace rays commands * [[VUID-{refpage}-maxPipelineRayRecursionDepth-03679]] This command must: not cause a shader call instruction to be executed from a shader invocation with a <> greater than the value of pname:maxPipelineRayRecursionDepth used to create the bound ray tracing pipeline * [[VUID-{refpage}-pRayGenShaderBindingTable-03680]] If the buffer from which pname:pRayGenShaderBindingTable->deviceAddress was queried is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object * [[VUID-{refpage}-pRayGenShaderBindingTable-03681]] The buffer from which the pname:pRayGenShaderBindingTable->deviceAddress is queried must: have been created with the ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag * [[VUID-{refpage}-pRayGenShaderBindingTable-03682]] pname:pRayGenShaderBindingTable->deviceAddress must: be a multiple of sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment * [[VUID-{refpage}-size-04023]] The pname:size member of pname:pRayGenShaderBindingTable must: be equal to its pname:stride member * [[VUID-{refpage}-pMissShaderBindingTable-03683]] If the buffer from which pname:pMissShaderBindingTable->deviceAddress was queried is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object * [[VUID-{refpage}-pMissShaderBindingTable-03684]] The buffer from which the pname:pMissShaderBindingTable->deviceAddress is queried must: have been created with the ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag * [[VUID-{refpage}-pMissShaderBindingTable-03685]] pname:pMissShaderBindingTable->deviceAddress must: be a multiple of sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment * [[VUID-{refpage}-stride-03686]] The pname:stride member of pname:pMissShaderBindingTable must: be a multiple of sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment * [[VUID-{refpage}-stride-04029]] The pname:stride member of pname:pMissShaderBindingTable must: be less than or equal to sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxShaderGroupStride * [[VUID-{refpage}-pHitShaderBindingTable-03687]] If the buffer from which pname:pHitShaderBindingTable->deviceAddress was queried is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object * [[VUID-{refpage}-pHitShaderBindingTable-03688]] The buffer from which the pname:pHitShaderBindingTable->deviceAddress is queried must: have been created with the ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag * [[VUID-{refpage}-pHitShaderBindingTable-03689]] pname:pHitShaderBindingTable->deviceAddress must: be a multiple of sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment * [[VUID-{refpage}-stride-03690]] The pname:stride member of pname:pHitShaderBindingTable must: be a multiple of sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment * [[VUID-{refpage}-stride-04035]] The pname:stride member of pname:pHitShaderBindingTable must: be less than or equal to sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxShaderGroupStride * [[VUID-{refpage}-pCallableShaderBindingTable-03691]] If the buffer from which pname:pCallableShaderBindingTable->deviceAddress was queried is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object * [[VUID-{refpage}-pCallableShaderBindingTable-03692]] The buffer from which the pname:pCallableShaderBindingTable->deviceAddress is queried must: have been created with the ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag * [[VUID-{refpage}-pCallableShaderBindingTable-03693]] pname:pCallableShaderBindingTable->deviceAddress must: be a multiple of sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment * [[VUID-{refpage}-stride-03694]] The pname:stride member of pname:pCallableShaderBindingTable must: be a multiple of sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment * [[VUID-{refpage}-stride-04041]] The pname:stride member of pname:pCallableShaderBindingTable must: be less than or equal to sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxShaderGroupStride * [[VUID-{refpage}-flags-03696]] If the currently bound ray tracing pipeline was created with pname:flags that included ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the pname:deviceAddress member of pname:pHitShaderBindingTable must: not be zero * [[VUID-{refpage}-flags-03697]] If the currently bound ray tracing pipeline was created with pname:flags that included ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the pname:deviceAddress member of pname:pHitShaderBindingTable must: not be zero * [[VUID-{refpage}-flags-03511]] If the currently bound ray tracing pipeline was created with pname:flags that included ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, the shader group handle identified by pname:pMissShaderBindingTable must: not be set to zero * [[VUID-{refpage}-flags-03512]] If the currently bound ray tracing pipeline was created with pname:flags that included ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, entries in pname:pHitShaderBindingTable accessed as a result of this command in order to execute an any-hit shader must: not be set to zero * [[VUID-{refpage}-flags-03513]] If the currently bound ray tracing pipeline was created with pname:flags that included ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, entries in pname:pHitShaderBindingTable accessed as a result of this command in order to execute a closest hit shader must: not be set to zero * [[VUID-{refpage}-flags-03514]] If the currently bound ray tracing pipeline was created with pname:flags that included ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, entries in pname:pHitShaderBindingTable accessed as a result of this command in order to execute an intersection shader must: not be set to zero * [[VUID-{refpage}-pHitShaderBindingTable-04735]] Any non-zero hit shader group entries in pname:pHitShaderBindingTable accessed by this call from a geometry with a pname:geometryType of ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR must: have been created with ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR * [[VUID-{refpage}-pHitShaderBindingTable-04736]] Any non-zero hit shader group entries in pname:pHitShaderBindingTable accessed by this call from a geometry with a pname:geometryType of ename:VK_GEOMETRY_TYPE_AABBS_KHR must: have been created with ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR // Common Valid Usage