| 19 | class NegativeGpuAVMesh : public GpuAVMesh {}; |
| 20 | |
| 21 | TEST_F(NegativeGpuAVMesh, PrimitiveCount) { |
| 22 | RETURN_IF_SKIP(InitBasicMeshAndTask()); |
| 23 | InitRenderTarget(); |
| 24 | |
| 25 | const char* mesh_source = R"glsl( |
| 26 | #version 450 |
| 27 | #extension GL_EXT_mesh_shader : require |
| 28 | layout(triangles, max_vertices = 3, max_primitives = 1) out; |
| 29 | layout(set = 0, binding = 0) buffer SSBO { |
| 30 | uint v; |
| 31 | uint p; |
| 32 | }; |
| 33 | void main() { |
| 34 | SetMeshOutputsEXT(v, p); |
| 35 | gl_MeshVerticesEXT[0].gl_Position = vec4(0); |
| 36 | gl_PrimitiveTriangleIndicesEXT[0] = uvec3(0, 1, 2); |
| 37 | } |
| 38 | )glsl"; |
| 39 | |
| 40 | VkShaderObj ms(*m_device, mesh_source, VK_SHADER_STAGE_MESH_BIT_EXT, SPV_ENV_VULKAN_1_2); |
| 41 | VkShaderObj fs(*m_device, kFragmentMinimalGlsl, VK_SHADER_STAGE_FRAGMENT_BIT, SPV_ENV_VULKAN_1_2); |
| 42 | |
| 43 | OneOffDescriptorSet descriptor_set(m_device, {{0, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_ALL, nullptr}}); |
| 44 | vkt::PipelineLayout pipeline_layout(*m_device, {&descriptor_set.layout_}); |
| 45 | |
| 46 | vkt::Buffer buffer(*m_device, 64, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, kHostVisibleMemProps); |
| 47 | uint32_t* buffer_ptr = (uint32_t*)buffer.Memory().Map(); |
| 48 | buffer_ptr[0] = 60; |
| 49 | buffer_ptr[1] = 1; |
| 50 | |
| 51 | descriptor_set.WriteDescriptorBufferInfo(0, buffer, 0, VK_WHOLE_SIZE, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); |
| 52 | descriptor_set.UpdateDescriptorSets(); |
| 53 | |
| 54 | CreatePipelineHelper pipe(*this); |
| 55 | pipe.gp_ci_.layout = pipeline_layout; |
| 56 | pipe.shader_stages_ = {ms.GetStageCreateInfo(), fs.GetStageCreateInfo()}; |
| 57 | pipe.CreateGraphicsPipeline(); |
| 58 | |
| 59 | m_command_buffer.Begin(); |
| 60 | m_command_buffer.BeginRenderPass(m_renderPassBeginInfo); |
| 61 | vk::CmdBindDescriptorSets(m_command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_layout, 0, 1, &descriptor_set.set_, 0, |
| 62 | nullptr); |
| 63 | vk::CmdBindPipeline(m_command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipe); |
| 64 | vk::CmdDrawMeshTasksEXT(m_command_buffer, 1, 1, 1); |
| 65 | m_command_buffer.EndRenderPass(); |
| 66 | m_command_buffer.End(); |
| 67 | |
| 68 | m_errorMonitor->SetDesiredError("VUID-RuntimeSpirv-MeshEXT-07332"); |
| 69 | m_default_queue->SubmitAndWait(m_command_buffer); |
| 70 | m_errorMonitor->VerifyFound(); |
| 71 | } |
| 72 | |
| 73 | TEST_F(NegativeGpuAVMesh, DISABLED_TaskPayloadSharedMissing) { |
| 74 | RETURN_IF_SKIP(InitBasicMeshAndTask()); |
nothing calls this directly
no test coverage detected