11
11
* http://www.apache.org/licenses/LICENSE-2.0
12
12
*/
13
13
14
+ #include < spirv-tools/libspirv.h>
14
15
#include " ../framework/layer_validation_tests.h"
15
16
#include " ../framework/pipeline_helper.h"
16
17
#include " ../framework/descriptor_helper.h"
@@ -2198,4 +2199,53 @@ TEST_F(PositiveGraphicsLibrary, DestroyImmutableSampler) {
2198
2199
VkGraphicsPipelineCreateInfo lib_ci = vku::InitStructHelper (&link_info);
2199
2200
lib_ci.layout = pipeline_layout2;
2200
2201
vkt::Pipeline exe_pipe (*m_device, lib_ci);
2201
- }
2202
+ }
2203
+
2204
+ TEST_F (PositiveGraphicsLibrary, Mesh) {
2205
+ TEST_DESCRIPTION (" https://gitlab.khronos.org/vulkan/vulkan/-/issues/4433" );
2206
+ SetTargetApiVersion (VK_API_VERSION_1_3);
2207
+ AddRequiredExtensions (VK_EXT_MESH_SHADER_EXTENSION_NAME);
2208
+ AddRequiredFeature (vkt::Feature::meshShader);
2209
+ AddRequiredFeature (vkt::Feature::maintenance4);
2210
+ RETURN_IF_SKIP (InitBasicGraphicsLibrary ());
2211
+ InitRenderTarget ();
2212
+
2213
+ VkPipelineLayout layout = VK_NULL_HANDLE;
2214
+
2215
+ CreatePipelineHelper pre_raster_lib (*this );
2216
+ {
2217
+ const auto ms_spv = GLSLToSPV (VK_SHADER_STAGE_MESH_BIT_EXT, kMeshMinimalGlsl , SPV_ENV_VULKAN_1_3);
2218
+ vkt::GraphicsPipelineLibraryStage ms_stage (ms_spv, VK_SHADER_STAGE_MESH_BIT_EXT);
2219
+ pre_raster_lib.InitPreRasterLibInfo (&ms_stage.stage_ci );
2220
+ pre_raster_lib.CreateGraphicsPipeline ();
2221
+ }
2222
+
2223
+ layout = pre_raster_lib.gp_ci_ .layout ;
2224
+
2225
+ CreatePipelineHelper frag_shader_lib (*this );
2226
+ {
2227
+ const auto fs_spv = GLSLToSPV (VK_SHADER_STAGE_FRAGMENT_BIT, kFragmentMinimalGlsl );
2228
+ vkt::GraphicsPipelineLibraryStage fs_stage (fs_spv, VK_SHADER_STAGE_FRAGMENT_BIT);
2229
+ frag_shader_lib.InitFragmentLibInfo (&fs_stage.stage_ci );
2230
+ frag_shader_lib.gp_ci_ .layout = layout;
2231
+ frag_shader_lib.CreateGraphicsPipeline (false );
2232
+ }
2233
+
2234
+ CreatePipelineHelper frag_out_lib (*this );
2235
+ frag_out_lib.InitFragmentOutputLibInfo ();
2236
+ frag_out_lib.CreateGraphicsPipeline (false );
2237
+
2238
+ // Vertex input lib not required for mesh
2239
+ VkPipeline libraries[3 ] = {
2240
+ pre_raster_lib,
2241
+ frag_shader_lib,
2242
+ frag_out_lib,
2243
+ };
2244
+ VkPipelineLibraryCreateInfoKHR link_info = vku::InitStructHelper ();
2245
+ link_info.libraryCount = size32 (libraries);
2246
+ link_info.pLibraries = libraries;
2247
+
2248
+ VkGraphicsPipelineCreateInfo exe_pipe_ci = vku::InitStructHelper (&link_info);
2249
+ exe_pipe_ci.layout = pre_raster_lib.gp_ci_ .layout ;
2250
+ vkt::Pipeline exe_pipe (*m_device, exe_pipe_ci);
2251
+ }
0 commit comments