| 20 | class NegativeMesh : public MeshTest {}; |
| 21 | |
| 22 | TEST_F(NegativeMesh, BasicUsage) { |
| 23 | TEST_DESCRIPTION("Test VK_EXT_mesh_shader."); |
| 24 | |
| 25 | SetTargetApiVersion(VK_API_VERSION_1_3); |
| 26 | AddRequiredExtensions(VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME); |
| 27 | AddRequiredExtensions(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); |
| 28 | AddRequiredExtensions(VK_KHR_MULTIVIEW_EXTENSION_NAME); |
| 29 | AddRequiredExtensions(VK_EXT_MESH_SHADER_EXTENSION_NAME); |
| 30 | AddRequiredExtensions(VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME); |
| 31 | AddRequiredFeature(vkt::Feature::vertexInputDynamicState); |
| 32 | AddRequiredFeature(vkt::Feature::extendedDynamicState2); |
| 33 | AddRequiredFeature(vkt::Feature::extendedDynamicState2PatchControlPoints); |
| 34 | AddRequiredFeature(vkt::Feature::maintenance4); |
| 35 | AddRequiredFeature(vkt::Feature::multiview); |
| 36 | AddRequiredFeature(vkt::Feature::transformFeedback); |
| 37 | AddRequiredFeature(vkt::Feature::taskShader); |
| 38 | AddRequiredFeature(vkt::Feature::meshShader); |
| 39 | AddRequiredFeature(vkt::Feature::dynamicRendering); |
| 40 | |
| 41 | RETURN_IF_SKIP(Init()); |
| 42 | InitRenderTarget(); |
| 43 | |
| 44 | const char vert_shader_text[] = R"glsl( |
| 45 | #version 460 |
| 46 | vec2 vertices[3]; |
| 47 | void main() { |
| 48 | vertices[0] = vec2(-1.0, -1.0); |
| 49 | vertices[1] = vec2( 1.0, -1.0); |
| 50 | vertices[2] = vec2( 0.0, 1.0); |
| 51 | gl_Position = vec4(vertices[gl_VertexIndex % 3], 0.0, 1.0); |
| 52 | gl_PointSize = 1.0f; |
| 53 | } |
| 54 | )glsl"; |
| 55 | |
| 56 | const char mesh_shader_text[] = R"glsl( |
| 57 | #version 460 |
| 58 | #extension GL_EXT_mesh_shader : require |
| 59 | layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; |
| 60 | layout(max_vertices = 3) out; |
| 61 | layout(max_primitives = 1) out; |
| 62 | layout(triangles) out; |
| 63 | void main() { |
| 64 | SetMeshOutputsEXT(3,1); |
| 65 | gl_MeshVerticesEXT[0].gl_Position = vec4(-1.0, -1.0, 0, 1); |
| 66 | gl_MeshVerticesEXT[1].gl_Position = vec4( 1.0, -1.0, 0, 1); |
| 67 | gl_MeshVerticesEXT[2].gl_Position = vec4( 0.0, 1.0, 0, 1); |
| 68 | gl_PrimitiveTriangleIndicesEXT[0] = uvec3(0,1,2); |
| 69 | } |
| 70 | )glsl"; |
| 71 | |
| 72 | const char mesh_shader_xfb_text[] = R"( |
| 73 | OpCapability MeshShadingEXT |
| 74 | OpCapability TransformFeedback |
| 75 | OpExtension "SPV_EXT_mesh_shader" |
| 76 | %1 = OpExtInstImport "GLSL.std.450" |
| 77 | OpMemoryModel Logical GLSL450 |
| 78 | OpEntryPoint MeshEXT %main "main" %tf |
| 79 | OpExecutionModeId %main LocalSizeId %uint_2 %uint_1 %uint_1 |
nothing calls this directly
no test coverage detected