| 24 | class NegativeGpuAVRayQuery : public GpuAVRayQueryTest {}; |
| 25 | |
| 26 | TEST_F(NegativeGpuAVRayQuery, NegativeTmin) { |
| 27 | TEST_DESCRIPTION("Ray query with a negative value for Ray TMin"); |
| 28 | RETURN_IF_SKIP(InitGpuAVRayQuery()); |
| 29 | |
| 30 | const char* shader_source = R"glsl( |
| 31 | #version 460 |
| 32 | #extension GL_EXT_ray_query : require |
| 33 | |
| 34 | layout(set = 0, binding = 0) uniform accelerationStructureEXT tlas; |
| 35 | layout(set = 0, binding = 1) uniform Uniforms { |
| 36 | float t_min; |
| 37 | float t_max; |
| 38 | } trace_rays_params; |
| 39 | |
| 40 | void main() { |
| 41 | rayQueryEXT query; |
| 42 | rayQueryInitializeEXT(query, tlas, gl_RayFlagsTerminateOnFirstHitEXT, 0xff, vec3(0), |
| 43 | trace_rays_params.t_min, vec3(0,0,1), trace_rays_params.t_max); |
| 44 | rayQueryProceedEXT(query); |
| 45 | } |
| 46 | )glsl"; |
| 47 | |
| 48 | CreateComputePipelineHelper pipeline(*this); |
| 49 | pipeline.cs_ = VkShaderObj(*m_device, shader_source, VK_SHADER_STAGE_COMPUTE_BIT, SPV_ENV_VULKAN_1_2); |
| 50 | pipeline.dsl_bindings_ = {{0, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}, |
| 51 | {1, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}}; |
| 52 | pipeline.CreateComputePipeline(); |
| 53 | |
| 54 | vkt::as::BuildGeometryInfoKHR tlas = vkt::as::blueprint::BuildOnDeviceTopLevel(*m_device, *m_default_queue, m_command_buffer); |
| 55 | pipeline.descriptor_set_.WriteDescriptorAccelStruct(0, 1, &tlas.GetDstAS()->handle()); |
| 56 | |
| 57 | vkt::Buffer uniform_buffer(*m_device, 4096, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, kHostVisibleMemProps); |
| 58 | pipeline.descriptor_set_.WriteDescriptorBufferInfo(1, uniform_buffer, 0, VK_WHOLE_SIZE); |
| 59 | pipeline.descriptor_set_.UpdateDescriptorSets(); |
| 60 | |
| 61 | auto uniform_buffer_ptr = static_cast<float*>(uniform_buffer.Memory().Map()); |
| 62 | uniform_buffer_ptr[0] = -2.0f; // t_min |
| 63 | uniform_buffer_ptr[1] = 42.0f; // t_max |
| 64 | |
| 65 | m_command_buffer.Begin(); |
| 66 | vk::CmdBindPipeline(m_command_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline); |
| 67 | vk::CmdBindDescriptorSets(m_command_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline.pipeline_layout_, 0, 1, |
| 68 | &pipeline.descriptor_set_.set_, 0, nullptr); |
| 69 | vk::CmdDispatch(m_command_buffer, 1, 1, 1); |
| 70 | m_command_buffer.End(); |
| 71 | |
| 72 | m_errorMonitor->SetDesiredError("VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06349"); |
| 73 | m_default_queue->Submit(m_command_buffer); |
| 74 | m_device->Wait(); |
| 75 | m_errorMonitor->VerifyFound(); |
| 76 | } |
| 77 | |
| 78 | TEST_F(NegativeGpuAVRayQuery, TMaxLessThenTmin) { |
| 79 | TEST_DESCRIPTION("Ray query with a Ray TMax less than Ray TMin"); |
nothing calls this directly
no test coverage detected