external/vulkancts/framework/vulkan/vkNoRenderDocUtil.cpp \
external/vulkancts/framework/vulkan/vkNullDriver.cpp \
external/vulkancts/framework/vulkan/vkObjUtil.cpp \
+ external/vulkancts/framework/vulkan/vkPipelineConstructionUtil.cpp \
external/vulkancts/framework/vulkan/vkPlatform.cpp \
external/vulkancts/framework/vulkan/vkPrograms.cpp \
external/vulkancts/framework/vulkan/vkQueryUtil.cpp \
dEQP-VK.ubo.random.8bit.scalar.97
dEQP-VK.ubo.random.8bit.scalar.98
dEQP-VK.ubo.random.8bit.scalar.99
-dEQP-VK.dynamic_state.vp_state.viewport
-dEQP-VK.dynamic_state.vp_state.scissor
-dEQP-VK.dynamic_state.vp_state.viewport_array
-dEQP-VK.dynamic_state.rs_state.depth_bias
-dEQP-VK.dynamic_state.rs_state.depth_bias_clamp
-dEQP-VK.dynamic_state.rs_state.line_width
-dEQP-VK.dynamic_state.cb_state.blend_constants
-dEQP-VK.dynamic_state.ds_state.depth_bounds_1
-dEQP-VK.dynamic_state.ds_state.depth_bounds_2
-dEQP-VK.dynamic_state.ds_state.stencil_params_basic_1
-dEQP-VK.dynamic_state.ds_state.stencil_params_basic_2
-dEQP-VK.dynamic_state.ds_state.stencil_params_advanced
-dEQP-VK.dynamic_state.general_state.state_switch
-dEQP-VK.dynamic_state.general_state.bind_order
-dEQP-VK.dynamic_state.general_state.state_persistence
+dEQP-VK.dynamic_state.monolithic.vp_state.viewport
+dEQP-VK.dynamic_state.monolithic.vp_state.scissor
+dEQP-VK.dynamic_state.monolithic.vp_state.viewport_array
+dEQP-VK.dynamic_state.monolithic.rs_state.depth_bias
+dEQP-VK.dynamic_state.monolithic.rs_state.depth_bias_clamp
+dEQP-VK.dynamic_state.monolithic.rs_state.line_width
+dEQP-VK.dynamic_state.monolithic.cb_state.blend_constants
+dEQP-VK.dynamic_state.monolithic.ds_state.depth_bounds_1
+dEQP-VK.dynamic_state.monolithic.ds_state.depth_bounds_2
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_basic_1
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_basic_2
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_advanced
+dEQP-VK.dynamic_state.monolithic.general_state.state_switch
+dEQP-VK.dynamic_state.monolithic.general_state.bind_order
+dEQP-VK.dynamic_state.monolithic.general_state.state_persistence
dEQP-VK.ssbo.layout.single_basic_type.std140.lowp_float
dEQP-VK.ssbo.layout.single_basic_type.std140.mediump_float
dEQP-VK.ssbo.layout.single_basic_type.std140.highp_float
-dEQP-VK.dynamic_state.vp_state.viewport
-dEQP-VK.dynamic_state.vp_state.scissor
-dEQP-VK.dynamic_state.vp_state.viewport_array
-dEQP-VK.dynamic_state.rs_state.depth_bias
-dEQP-VK.dynamic_state.rs_state.depth_bias_clamp
-dEQP-VK.dynamic_state.rs_state.line_width
-dEQP-VK.dynamic_state.cb_state.blend_constants
-dEQP-VK.dynamic_state.ds_state.depth_bounds_1
-dEQP-VK.dynamic_state.ds_state.depth_bounds_2
-dEQP-VK.dynamic_state.ds_state.stencil_params_basic_1
-dEQP-VK.dynamic_state.ds_state.stencil_params_basic_2
-dEQP-VK.dynamic_state.ds_state.stencil_params_advanced
-dEQP-VK.dynamic_state.general_state.state_switch
-dEQP-VK.dynamic_state.general_state.bind_order
-dEQP-VK.dynamic_state.general_state.state_persistence
+dEQP-VK.dynamic_state.monolithic.vp_state.viewport
+dEQP-VK.dynamic_state.monolithic.vp_state.scissor
+dEQP-VK.dynamic_state.monolithic.vp_state.viewport_array
+dEQP-VK.dynamic_state.monolithic.rs_state.depth_bias
+dEQP-VK.dynamic_state.monolithic.rs_state.depth_bias_clamp
+dEQP-VK.dynamic_state.monolithic.rs_state.line_width
+dEQP-VK.dynamic_state.monolithic.cb_state.blend_constants
+dEQP-VK.dynamic_state.monolithic.ds_state.depth_bounds_1
+dEQP-VK.dynamic_state.monolithic.ds_state.depth_bounds_2
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_basic_1
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_basic_2
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_advanced
+dEQP-VK.dynamic_state.monolithic.general_state.state_switch
+dEQP-VK.dynamic_state.monolithic.general_state.bind_order
+dEQP-VK.dynamic_state.monolithic.general_state.state_persistence
-dEQP-VK.dynamic_state.rs_state.nonzero_depth_bias_constant
-dEQP-VK.dynamic_state.rs_state.nonzero_depth_bias_clamp
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_width.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_width.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bias.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bias.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.blend_constants.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.blend_constants.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_compare_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_compare_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_write_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_write_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_reference.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_reference.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.discard_rectangle_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.discard_rectangle_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.sample_locations_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.sample_locations_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.fragment_shading_rate_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.fragment_shading_rate_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_stipple_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_stipple_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.cull_mode_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.cull_mode_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.front_face_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.front_face_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.primitive_topology_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.primitive_topology_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.vertex_input_binding_stride_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.vertex_input_binding_stride_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_write_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_write_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_compare_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_compare_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_w_scaling_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_w_scaling_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_shading_rate_palette_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_shading_rate_palette_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_coarse_sample_order_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_coarse_sample_order_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.exclusive_scissor_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.exclusive_scissor_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_width.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_width.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bias.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bias.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.blend_constants.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.blend_constants.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_compare_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_compare_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_write_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_write_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_reference.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_reference.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.discard_rectangle_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.discard_rectangle_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.sample_locations_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.sample_locations_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.fragment_shading_rate_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.fragment_shading_rate_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_stipple_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_stipple_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.cull_mode_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.cull_mode_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.front_face_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.front_face_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.primitive_topology_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.primitive_topology_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.vertex_input_binding_stride_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.vertex_input_binding_stride_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_write_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_write_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_compare_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_compare_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_w_scaling_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_w_scaling_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.exclusive_scissor_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.exclusive_scissor_nv.after
-dEQP-VK.dynamic_state.compute_transfer.multi.compute.before
-dEQP-VK.dynamic_state.compute_transfer.multi.compute.after
-dEQP-VK.dynamic_state.compute_transfer.multi.transfer.before
-dEQP-VK.dynamic_state.compute_transfer.multi.transfer.after
-dEQP-VK.dynamic_state.inheritance.baseline
-dEQP-VK.dynamic_state.inheritance.primary
-dEQP-VK.dynamic_state.inheritance.secondary
-dEQP-VK.dynamic_state.inheritance.split
-dEQP-VK.dynamic_state.inheritance.primary_with_count
-dEQP-VK.dynamic_state.inheritance.secondary_with_count
+dEQP-VK.dynamic_state.monolithic.rs_state.nonzero_depth_bias_constant
+dEQP-VK.dynamic_state.monolithic.rs_state.nonzero_depth_bias_clamp
+dEQP-VK.dynamic_state.monolithic.inheritance.baseline
+dEQP-VK.dynamic_state.monolithic.inheritance.primary
+dEQP-VK.dynamic_state.monolithic.inheritance.secondary
+dEQP-VK.dynamic_state.monolithic.inheritance.split
+dEQP-VK.dynamic_state.monolithic.inheritance.primary_with_count
+dEQP-VK.dynamic_state.monolithic.inheritance.secondary_with_count
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_width.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_width.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bias.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bias.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.blend_constants.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.blend_constants.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_compare_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_compare_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_write_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_write_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_reference.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_reference.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.discard_rectangle_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.discard_rectangle_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.sample_locations_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.sample_locations_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.fragment_shading_rate_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.fragment_shading_rate_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_stipple_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_stipple_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.cull_mode_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.cull_mode_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.front_face_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.front_face_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.primitive_topology_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.primitive_topology_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.vertex_input_binding_stride_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.vertex_input_binding_stride_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_write_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_write_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_compare_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_compare_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_w_scaling_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_w_scaling_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_shading_rate_palette_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_shading_rate_palette_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_coarse_sample_order_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_coarse_sample_order_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.exclusive_scissor_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.exclusive_scissor_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_width.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_width.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bias.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bias.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.blend_constants.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.blend_constants.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_compare_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_compare_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_write_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_write_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_reference.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_reference.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.discard_rectangle_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.discard_rectangle_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.sample_locations_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.sample_locations_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.fragment_shading_rate_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.fragment_shading_rate_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_stipple_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_stipple_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.cull_mode_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.cull_mode_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.front_face_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.front_face_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.primitive_topology_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.primitive_topology_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.vertex_input_binding_stride_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.vertex_input_binding_stride_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_write_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_write_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_compare_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_compare_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_w_scaling_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_w_scaling_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.exclusive_scissor_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.exclusive_scissor_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.compute.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.compute.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.transfer.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.transfer.after
+dEQP-VK.dynamic_state.pipeline_library.vp_state.viewport
+dEQP-VK.dynamic_state.pipeline_library.vp_state.scissor
+dEQP-VK.dynamic_state.pipeline_library.vp_state.viewport_array
+dEQP-VK.dynamic_state.pipeline_library.rs_state.depth_bias
+dEQP-VK.dynamic_state.pipeline_library.rs_state.depth_bias_clamp
+dEQP-VK.dynamic_state.pipeline_library.rs_state.line_width
+dEQP-VK.dynamic_state.pipeline_library.rs_state.nonzero_depth_bias_constant
+dEQP-VK.dynamic_state.pipeline_library.rs_state.nonzero_depth_bias_clamp
+dEQP-VK.dynamic_state.pipeline_library.cb_state.blend_constants
+dEQP-VK.dynamic_state.pipeline_library.ds_state.depth_bounds_1
+dEQP-VK.dynamic_state.pipeline_library.ds_state.depth_bounds_2
+dEQP-VK.dynamic_state.pipeline_library.ds_state.stencil_params_basic_1
+dEQP-VK.dynamic_state.pipeline_library.ds_state.stencil_params_basic_2
+dEQP-VK.dynamic_state.pipeline_library.ds_state.stencil_params_advanced
+dEQP-VK.dynamic_state.pipeline_library.general_state.state_switch
+dEQP-VK.dynamic_state.pipeline_library.general_state.bind_order
+dEQP-VK.dynamic_state.pipeline_library.general_state.state_persistence
+dEQP-VK.dynamic_state.pipeline_library.inheritance.baseline
+dEQP-VK.dynamic_state.pipeline_library.inheritance.primary
+dEQP-VK.dynamic_state.pipeline_library.inheritance.secondary
+dEQP-VK.dynamic_state.pipeline_library.inheritance.split
+dEQP-VK.dynamic_state.pipeline_library.inheritance.primary_with_count
+dEQP-VK.dynamic_state.pipeline_library.inheritance.secondary_with_count
+dEQP-VK.dynamic_state.fast_linked_library.vp_state.viewport
+dEQP-VK.dynamic_state.fast_linked_library.vp_state.scissor
+dEQP-VK.dynamic_state.fast_linked_library.vp_state.viewport_array
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.depth_bias
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.depth_bias_clamp
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.line_width
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.nonzero_depth_bias_constant
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.nonzero_depth_bias_clamp
+dEQP-VK.dynamic_state.fast_linked_library.cb_state.blend_constants
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.depth_bounds_1
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.depth_bounds_2
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.stencil_params_basic_1
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.stencil_params_basic_2
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.stencil_params_advanced
+dEQP-VK.dynamic_state.fast_linked_library.general_state.state_switch
+dEQP-VK.dynamic_state.fast_linked_library.general_state.bind_order
+dEQP-VK.dynamic_state.fast_linked_library.general_state.state_persistence
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.baseline
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.primary
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.secondary
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.split
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.primary_with_count
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.secondary_with_count
-dEQP-VK.dynamic_state.vp_state.viewport
-dEQP-VK.dynamic_state.vp_state.scissor
-dEQP-VK.dynamic_state.vp_state.viewport_array
-dEQP-VK.dynamic_state.rs_state.depth_bias
-dEQP-VK.dynamic_state.rs_state.depth_bias_clamp
-dEQP-VK.dynamic_state.rs_state.line_width
-dEQP-VK.dynamic_state.rs_state.nonzero_depth_bias_constant
-dEQP-VK.dynamic_state.rs_state.nonzero_depth_bias_clamp
-dEQP-VK.dynamic_state.cb_state.blend_constants
-dEQP-VK.dynamic_state.ds_state.depth_bounds_1
-dEQP-VK.dynamic_state.ds_state.depth_bounds_2
-dEQP-VK.dynamic_state.ds_state.stencil_params_basic_1
-dEQP-VK.dynamic_state.ds_state.stencil_params_basic_2
-dEQP-VK.dynamic_state.ds_state.stencil_params_advanced
-dEQP-VK.dynamic_state.general_state.state_switch
-dEQP-VK.dynamic_state.general_state.bind_order
-dEQP-VK.dynamic_state.general_state.state_persistence
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_width.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_width.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bias.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bias.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.blend_constants.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.blend_constants.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_compare_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_compare_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_write_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_write_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_reference.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_reference.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.discard_rectangle_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.discard_rectangle_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.sample_locations_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.sample_locations_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.fragment_shading_rate_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.fragment_shading_rate_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_stipple_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_stipple_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.cull_mode_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.cull_mode_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.front_face_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.front_face_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.primitive_topology_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.primitive_topology_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.vertex_input_binding_stride_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.vertex_input_binding_stride_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_write_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_write_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_compare_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_compare_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_w_scaling_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_w_scaling_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_shading_rate_palette_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_shading_rate_palette_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_coarse_sample_order_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_coarse_sample_order_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.exclusive_scissor_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.exclusive_scissor_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_width.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_width.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bias.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bias.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.blend_constants.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.blend_constants.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_compare_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_compare_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_write_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_write_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_reference.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_reference.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.discard_rectangle_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.discard_rectangle_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.sample_locations_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.sample_locations_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.fragment_shading_rate_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.fragment_shading_rate_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_stipple_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_stipple_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.cull_mode_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.cull_mode_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.front_face_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.front_face_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.primitive_topology_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.primitive_topology_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.vertex_input_binding_stride_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.vertex_input_binding_stride_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_write_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_write_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_compare_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_compare_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_w_scaling_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_w_scaling_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.exclusive_scissor_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.exclusive_scissor_nv.after
-dEQP-VK.dynamic_state.compute_transfer.multi.compute.before
-dEQP-VK.dynamic_state.compute_transfer.multi.compute.after
-dEQP-VK.dynamic_state.compute_transfer.multi.transfer.before
-dEQP-VK.dynamic_state.compute_transfer.multi.transfer.after
-dEQP-VK.dynamic_state.inheritance.baseline
-dEQP-VK.dynamic_state.inheritance.primary
-dEQP-VK.dynamic_state.inheritance.secondary
-dEQP-VK.dynamic_state.inheritance.split
-dEQP-VK.dynamic_state.inheritance.primary_with_count
-dEQP-VK.dynamic_state.inheritance.secondary_with_count
+dEQP-VK.dynamic_state.monolithic.vp_state.viewport
+dEQP-VK.dynamic_state.monolithic.vp_state.scissor
+dEQP-VK.dynamic_state.monolithic.vp_state.viewport_array
+dEQP-VK.dynamic_state.monolithic.rs_state.depth_bias
+dEQP-VK.dynamic_state.monolithic.rs_state.depth_bias_clamp
+dEQP-VK.dynamic_state.monolithic.rs_state.line_width
+dEQP-VK.dynamic_state.monolithic.rs_state.nonzero_depth_bias_constant
+dEQP-VK.dynamic_state.monolithic.rs_state.nonzero_depth_bias_clamp
+dEQP-VK.dynamic_state.monolithic.cb_state.blend_constants
+dEQP-VK.dynamic_state.monolithic.ds_state.depth_bounds_1
+dEQP-VK.dynamic_state.monolithic.ds_state.depth_bounds_2
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_basic_1
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_basic_2
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_advanced
+dEQP-VK.dynamic_state.monolithic.general_state.state_switch
+dEQP-VK.dynamic_state.monolithic.general_state.bind_order
+dEQP-VK.dynamic_state.monolithic.general_state.state_persistence
+dEQP-VK.dynamic_state.monolithic.inheritance.baseline
+dEQP-VK.dynamic_state.monolithic.inheritance.primary
+dEQP-VK.dynamic_state.monolithic.inheritance.secondary
+dEQP-VK.dynamic_state.monolithic.inheritance.split
+dEQP-VK.dynamic_state.monolithic.inheritance.primary_with_count
+dEQP-VK.dynamic_state.monolithic.inheritance.secondary_with_count
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_width.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_width.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bias.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bias.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.blend_constants.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.blend_constants.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_compare_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_compare_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_write_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_write_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_reference.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_reference.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.discard_rectangle_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.discard_rectangle_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.sample_locations_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.sample_locations_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.fragment_shading_rate_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.fragment_shading_rate_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_stipple_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_stipple_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.cull_mode_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.cull_mode_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.front_face_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.front_face_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.primitive_topology_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.primitive_topology_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.vertex_input_binding_stride_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.vertex_input_binding_stride_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_write_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_write_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_compare_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_compare_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_w_scaling_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_w_scaling_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_shading_rate_palette_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_shading_rate_palette_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_coarse_sample_order_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_coarse_sample_order_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.exclusive_scissor_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.exclusive_scissor_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_width.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_width.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bias.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bias.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.blend_constants.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.blend_constants.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_compare_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_compare_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_write_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_write_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_reference.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_reference.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.discard_rectangle_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.discard_rectangle_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.sample_locations_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.sample_locations_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.fragment_shading_rate_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.fragment_shading_rate_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_stipple_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_stipple_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.cull_mode_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.cull_mode_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.front_face_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.front_face_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.primitive_topology_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.primitive_topology_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.vertex_input_binding_stride_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.vertex_input_binding_stride_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_write_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_write_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_compare_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_compare_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_w_scaling_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_w_scaling_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.exclusive_scissor_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.exclusive_scissor_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.compute.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.compute.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.transfer.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.transfer.after
+dEQP-VK.dynamic_state.pipeline_library.vp_state.viewport
+dEQP-VK.dynamic_state.pipeline_library.vp_state.scissor
+dEQP-VK.dynamic_state.pipeline_library.vp_state.viewport_array
+dEQP-VK.dynamic_state.pipeline_library.rs_state.depth_bias
+dEQP-VK.dynamic_state.pipeline_library.rs_state.depth_bias_clamp
+dEQP-VK.dynamic_state.pipeline_library.rs_state.line_width
+dEQP-VK.dynamic_state.pipeline_library.rs_state.nonzero_depth_bias_constant
+dEQP-VK.dynamic_state.pipeline_library.rs_state.nonzero_depth_bias_clamp
+dEQP-VK.dynamic_state.pipeline_library.cb_state.blend_constants
+dEQP-VK.dynamic_state.pipeline_library.ds_state.depth_bounds_1
+dEQP-VK.dynamic_state.pipeline_library.ds_state.depth_bounds_2
+dEQP-VK.dynamic_state.pipeline_library.ds_state.stencil_params_basic_1
+dEQP-VK.dynamic_state.pipeline_library.ds_state.stencil_params_basic_2
+dEQP-VK.dynamic_state.pipeline_library.ds_state.stencil_params_advanced
+dEQP-VK.dynamic_state.pipeline_library.general_state.state_switch
+dEQP-VK.dynamic_state.pipeline_library.general_state.bind_order
+dEQP-VK.dynamic_state.pipeline_library.general_state.state_persistence
+dEQP-VK.dynamic_state.pipeline_library.inheritance.baseline
+dEQP-VK.dynamic_state.pipeline_library.inheritance.primary
+dEQP-VK.dynamic_state.pipeline_library.inheritance.secondary
+dEQP-VK.dynamic_state.pipeline_library.inheritance.split
+dEQP-VK.dynamic_state.pipeline_library.inheritance.primary_with_count
+dEQP-VK.dynamic_state.pipeline_library.inheritance.secondary_with_count
+dEQP-VK.dynamic_state.fast_linked_library.vp_state.viewport
+dEQP-VK.dynamic_state.fast_linked_library.vp_state.scissor
+dEQP-VK.dynamic_state.fast_linked_library.vp_state.viewport_array
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.depth_bias
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.depth_bias_clamp
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.line_width
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.nonzero_depth_bias_constant
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.nonzero_depth_bias_clamp
+dEQP-VK.dynamic_state.fast_linked_library.cb_state.blend_constants
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.depth_bounds_1
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.depth_bounds_2
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.stencil_params_basic_1
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.stencil_params_basic_2
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.stencil_params_advanced
+dEQP-VK.dynamic_state.fast_linked_library.general_state.state_switch
+dEQP-VK.dynamic_state.fast_linked_library.general_state.bind_order
+dEQP-VK.dynamic_state.fast_linked_library.general_state.state_persistence
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.baseline
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.primary
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.secondary
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.split
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.primary_with_count
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.secondary_with_count
vkDeviceProperties.inl
vkRayTracingUtil.hpp
vkRayTracingUtil.cpp
+ vkPipelineConstructionUtil.hpp
+ vkPipelineConstructionUtil.cpp
)
set(VKUTIL_SRCS
--- /dev/null
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Wrapper that can construct monolithic pipeline or use
+ VK_KHR_graphics_pipeline_library for pipeline construction
+ *//*--------------------------------------------------------------------*/
+
+#include "vkRefUtil.hpp"
+#include "vkQueryUtil.hpp"
+#include "deSharedPtr.hpp"
+#include "tcuVector.hpp"
+#include "tcuVectorType.hpp"
+#include "vkPipelineConstructionUtil.hpp"
+
+namespace vk
+{
+
+static const VkVertexInputBindingDescription defaultVertexInputBindingDescription
+{
+ 0u, // deUint32 binding
+ sizeof(tcu::Vec4), // deUint32 stride
+ VK_VERTEX_INPUT_RATE_VERTEX, // VkVertexInputRate inputRate
+};
+
+static const VkVertexInputAttributeDescription defaultVertexInputAttributeDescription
+{
+ 0u, // deUint32 location
+ 0u, // deUint32 binding
+ VK_FORMAT_R32G32B32A32_SFLOAT, // VkFormat format
+ 0u // deUint32 offset
+};
+
+static const VkPipelineVertexInputStateCreateInfo defaultVertexInputState
+{
+ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ (VkPipelineVertexInputStateCreateFlags)0, // VkPipelineVertexInputStateCreateFlags flags
+ 1u, // deUint32 vertexBindingDescriptionCount
+ &defaultVertexInputBindingDescription, // const VkVertexInputBindingDescription* pVertexBindingDescriptions
+ 1u, // deUint32 vertexAttributeDescriptionCount
+ &defaultVertexInputAttributeDescription // const VkVertexInputAttributeDescription* pVertexAttributeDescriptions
+};
+
+static const VkStencilOpState defaultStencilOpState
+{
+ VK_STENCIL_OP_KEEP, // VkStencilOp failOp
+ VK_STENCIL_OP_KEEP, // VkStencilOp passOp
+ VK_STENCIL_OP_KEEP, // VkStencilOp depthFailOp
+ VK_COMPARE_OP_NEVER, // VkCompareOp compareOp
+ 0u, // deUint32 compareMask
+ 0u, // deUint32 writeMask
+ 0u // deUint32 reference
+};
+
+static const VkPipelineDepthStencilStateCreateInfo defaultDepthStencilState
+{
+ VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ 0u, // VkPipelineDepthStencilStateCreateFlags flags
+ VK_FALSE, // VkBool32 depthTestEnable
+ VK_FALSE, // VkBool32 depthWriteEnable
+ VK_COMPARE_OP_LESS_OR_EQUAL, // VkCompareOp depthCompareOp
+ VK_FALSE, // VkBool32 depthBoundsTestEnable
+ VK_FALSE, // VkBool32 stencilTestEnable
+ defaultStencilOpState, // VkStencilOpState front
+ defaultStencilOpState, // VkStencilOpState back
+ 0.0f, // float minDepthBounds
+ 1.0f, // float maxDepthBounds
+};
+
+static const VkPipelineMultisampleStateCreateInfo defaultMultisampleState
+{
+ VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ 0u, // VkPipelineMultisampleStateCreateFlags flags
+ VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits rasterizationSamples
+ VK_FALSE, // VkBool32 sampleShadingEnable
+ 1.0f, // float minSampleShading
+ DE_NULL, // const VkSampleMask* pSampleMask
+ VK_FALSE, // VkBool32 alphaToCoverageEnable
+ VK_FALSE // VkBool32 alphaToOneEnable
+};
+
+static const VkPipelineColorBlendAttachmentState defaultColorBlendAttachmentState
+{
+ VK_FALSE, // VkBool32 blendEnable
+ VK_BLEND_FACTOR_ZERO, // VkBlendFactor srcColorBlendFactor
+ VK_BLEND_FACTOR_ZERO, // VkBlendFactor dstColorBlendFactor
+ VK_BLEND_OP_ADD, // VkBlendOp colorBlendOp
+ VK_BLEND_FACTOR_ZERO, // VkBlendFactor srcAlphaBlendFactor
+ VK_BLEND_FACTOR_ZERO, // VkBlendFactor dstAlphaBlendFactor
+ VK_BLEND_OP_ADD, // VkBlendOp alphaBlendOp
+ 0xf // VkColorComponentFlags colorWriteMask
+};
+
+static const VkPipelineColorBlendStateCreateInfo defaultColorBlendState
+{
+ VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ 0u, // VkPipelineColorBlendStateCreateFlags flags
+ VK_FALSE, // VkBool32 logicOpEnable
+ VK_LOGIC_OP_CLEAR, // VkLogicOp logicOp
+ 1u, // deUint32 attachmentCount
+ &defaultColorBlendAttachmentState, // const VkPipelineColorBlendAttachmentState* pAttachments
+ { 0.0f, 0.0f, 0.0f, 0.0f } // float blendConstants[4]
+};
+
+VkGraphicsPipelineLibraryCreateInfoKHR makeGraphicsPipelineLibraryCreateInfo(const VkGraphicsPipelineLibraryFlagsKHR flags)
+{
+ return
+ {
+ VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_KHR, // VkStructureType sType;
+ DE_NULL, // void* pNext;
+ flags, // VkGraphicsPipelineLibraryFlagsKHR flags;
+ };
+}
+
+// Structure storing *CreateInfo structures that do not need to exist in memory after pipeline was constructed.
+struct GraphicsPipelineWrapper::InternalData
+{
+ const DeviceInterface& vk;
+ VkDevice device;
+ const PipelineConstructionType pipelineConstructionType;
+ const VkPipelineCreateFlags pipelineFlags;
+
+ // attribute used for making sure pipeline is configured in correct order
+ VkGraphicsPipelineLibraryFlagsKHR setupStates;
+
+ std::vector<VkPipelineShaderStageCreateInfo> pipelineShaderStages;
+ VkPipelineInputAssemblyStateCreateInfo inputAssemblyState;
+ VkPipelineRasterizationStateCreateInfo defaultRasterizationState;
+ VkPipelineViewportStateCreateInfo viewportState;
+ VkPipelineTessellationStateCreateInfo tessellationState;
+ VkPipelineFragmentShadingRateStateCreateInfoKHR* pFragmentShadingRateState;
+ const VkPipelineDynamicStateCreateInfo* pDynamicState;
+
+ deBool useViewportState;
+ deBool useDefaultRasterizationState;
+ deBool useDefaultDepthStencilState;
+ deBool useDefaultColorBlendState;
+ deBool useDefaultMultisampleState;
+
+ VkGraphicsPipelineCreateInfo monolithicPipelineCreateInfo;
+
+ // initialize with most common values
+ InternalData(const DeviceInterface& vkd, VkDevice vkDevice, const PipelineConstructionType constructionType, const VkPipelineCreateFlags pipelineCreateFlags)
+ : vk (vkd)
+ , device (vkDevice)
+ , pipelineConstructionType (constructionType)
+ , pipelineFlags (pipelineCreateFlags)
+ , setupStates (0u)
+ , inputAssemblyState
+ {
+ VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ 0u, // VkPipelineInputAssemblyStateCreateFlags flags
+ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, // VkPrimitiveTopology topology
+ VK_FALSE // VkBool32 primitiveRestartEnable
+ }
+ , defaultRasterizationState
+ {
+ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ 0u, // VkPipelineRasterizationStateCreateFlags flags
+ VK_FALSE, // VkBool32 depthClampEnable
+ VK_FALSE, // VkBool32 rasterizerDiscardEnable
+ VK_POLYGON_MODE_FILL, // VkPolygonMode polygonMode
+ VK_CULL_MODE_NONE, // VkCullModeFlags cullMode
+ VK_FRONT_FACE_COUNTER_CLOCKWISE, // VkFrontFace frontFace
+ VK_FALSE, // VkBool32 depthBiasEnable
+ 0.0f, // float depthBiasConstantFactor
+ 0.0f, // float depthBiasClamp
+ 0.0f, // float depthBiasSlopeFactor
+ 1.0f // float lineWidth
+ }
+ , viewportState
+ {
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ (VkPipelineViewportStateCreateFlags)0, // VkPipelineViewportStateCreateFlags flags
+ 1u, // deUint32 viewportCount
+ DE_NULL, // const VkViewport* pViewports
+ 1u, // deUint32 scissorCount
+ DE_NULL // const VkRect2D* pScissors
+ }
+ , tessellationState
+ {
+ VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ 0u, // VkPipelineTessellationStateCreateFlags flags
+ 3u // deUint32 patchControlPoints
+ }
+ , pFragmentShadingRateState (DE_NULL)
+ , pDynamicState (DE_NULL)
+ , useViewportState (DE_TRUE)
+ , useDefaultRasterizationState (DE_FALSE)
+ , useDefaultDepthStencilState (DE_FALSE)
+ , useDefaultColorBlendState (DE_FALSE)
+ , useDefaultMultisampleState (DE_FALSE)
+ {
+ monolithicPipelineCreateInfo = initVulkanStructure();
+ }
+};
+
+GraphicsPipelineWrapper::GraphicsPipelineWrapper(const DeviceInterface& vk,
+ VkDevice device,
+ const PipelineConstructionType pipelineConstructionType,
+ const VkPipelineCreateFlags flags)
+ : m_internalData (new InternalData(vk, device, pipelineConstructionType, flags))
+{
+}
+
+GraphicsPipelineWrapper::GraphicsPipelineWrapper(GraphicsPipelineWrapper&& pw)
+ : m_pipelineFinal (pw.m_pipelineFinal)
+ , m_internalData (pw.m_internalData)
+{
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setMonolithicPipelineLayout(const VkPipelineLayout layout)
+{
+ // make sure pipeline was not already built
+ DE_ASSERT(m_pipelineFinal.get() == DE_NULL);
+
+ m_internalData->monolithicPipelineCreateInfo.layout = layout;
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setDynamicState(const VkPipelineDynamicStateCreateInfo* dynamicState)
+{
+ // make sure states are not yet setup - all pipeline states must know about dynamic state
+ DE_ASSERT(m_internalData && m_internalData->setupStates == 0u);
+
+ m_internalData->pDynamicState = dynamicState;
+ m_internalData->monolithicPipelineCreateInfo.pDynamicState = dynamicState;
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setDefaultTopology(const VkPrimitiveTopology topology)
+{
+ // topology is needed by vertex input state, make sure vertex input state was not setup yet
+ DE_ASSERT(m_internalData && (m_internalData->setupStates == 0u));
+
+ m_internalData->inputAssemblyState.topology = topology;
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setDefaultPatchControlPoints(const deUint32 patchControlPoints)
+{
+ // patchControlPoints are needed by pre-rasterization shader state, make sure pre-rasterization state was not setup yet
+ DE_ASSERT(m_internalData && (m_internalData->setupStates < VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_KHR));
+
+ m_internalData->tessellationState.patchControlPoints = patchControlPoints;
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setDefaultRasterizerDiscardEnable(const deBool rasterizerDiscardEnable)
+{
+ // rasterizerDiscardEnable is used in pre-rasterization shader state, make sure pre-rasterization state was not setup yet
+ DE_ASSERT(m_internalData && (m_internalData->setupStates < VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_KHR));
+
+ m_internalData->defaultRasterizationState.rasterizerDiscardEnable = rasterizerDiscardEnable;
+
+ return *this;
+}
+
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setDefaultRasterizationState()
+{
+ // RasterizationState is used in pre-rasterization shader state, make sure this state was not setup yet
+ DE_ASSERT(m_internalData && (m_internalData->setupStates < VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_KHR));
+
+ m_internalData->useDefaultRasterizationState = DE_TRUE;
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setDefaultDepthStencilState()
+{
+ // DepthStencilState is used in fragment shader state, make sure fragment shader state was not setup yet
+ DE_ASSERT(m_internalData && (m_internalData->setupStates < VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_KHR));
+
+ m_internalData->useDefaultDepthStencilState = DE_TRUE;
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setDefaultColorBlendState()
+{
+ // ColorBlendState is used in fragment shader state, make sure fragment shader state was not setup yet
+ DE_ASSERT(m_internalData && (m_internalData->setupStates < VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_KHR));
+
+ m_internalData->useDefaultColorBlendState = DE_TRUE;
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setDefaultMultisampleState()
+{
+ // MultisampleState is used in fragment shader state, make sure fragment shader state was not setup yet
+ DE_ASSERT(m_internalData && (m_internalData->setupStates < VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_KHR));
+
+ m_internalData->useDefaultMultisampleState = DE_TRUE;
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setDefaultViewportsCount(deUint32 viewportCount)
+{
+ // ViewportState is used in pre-rasterization shader state, make sure pre-rasterization state was not setup yet
+ DE_ASSERT(m_internalData && (m_internalData->setupStates < VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_KHR));
+
+ m_internalData->viewportState.viewportCount = viewportCount;
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setDefaultScissorsCount(deUint32 scissorCount)
+{
+ // ViewportState is used in pre-rasterization shader state, make sure pre-rasterization state was not setup yet
+ DE_ASSERT(m_internalData && (m_internalData->setupStates < VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_KHR));
+
+ m_internalData->viewportState.scissorCount = scissorCount;
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::disableViewportState()
+{
+ // ViewportState is used in pre-rasterization shader state, make sure pre-rasterization state was not setup yet
+ DE_ASSERT(m_internalData && (m_internalData->setupStates < VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_KHR));
+
+ m_internalData->useViewportState = DE_FALSE;
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setupVertexInputStete(const VkPipelineVertexInputStateCreateInfo* vertexInputState,
+ const VkPipelineInputAssemblyStateCreateInfo* inputAssemblyState)
+{
+ // make sure pipeline was not already build
+ DE_ASSERT(m_pipelineFinal.get() == DE_NULL);
+
+ // make sure states are set in order - no need to complicate logic to support out of order specification - this state needs to be set first
+ DE_ASSERT(m_internalData && (m_internalData->setupStates == 0u));
+ m_internalData->setupStates = VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_KHR;
+
+ const auto pVertexInputState = vertexInputState ? vertexInputState : &defaultVertexInputState;
+ const auto pInputAssemblyState = inputAssemblyState ? inputAssemblyState : &m_internalData->inputAssemblyState;
+
+ if (m_internalData->pipelineConstructionType == PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC)
+ {
+ m_internalData->monolithicPipelineCreateInfo.pVertexInputState = pVertexInputState;
+ m_internalData->monolithicPipelineCreateInfo.pInputAssemblyState = pInputAssemblyState;
+ }
+ else
+ {
+ const auto libraryCreateInfo = makeGraphicsPipelineLibraryCreateInfo(VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_KHR);
+
+ VkGraphicsPipelineCreateInfo pipelinePartCreateInfo = initVulkanStructure();
+ pipelinePartCreateInfo.pNext = &libraryCreateInfo;
+ pipelinePartCreateInfo.flags = m_internalData->pipelineFlags | VK_PIPELINE_CREATE_LIBRARY_BIT_KHR;
+ pipelinePartCreateInfo.pVertexInputState = pVertexInputState;
+ pipelinePartCreateInfo.pInputAssemblyState = pInputAssemblyState;
+ pipelinePartCreateInfo.pDynamicState = m_internalData->pDynamicState;
+
+ if (m_internalData->pipelineConstructionType == PIPELINE_CONSTRUCTION_TYPE_FAST_LINKED_LIBRARY)
+ pipelinePartCreateInfo.flags |= VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_KHR;
+
+ m_pipelineParts[0] = createGraphicsPipeline(m_internalData->vk, m_internalData->device, DE_NULL, &pipelinePartCreateInfo);
+ }
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setupPreRasterizationShaderState(const std::vector<VkViewport>& viewports,
+ const std::vector<VkRect2D>& scissors,
+ const VkPipelineLayout layout,
+ const VkRenderPass renderPass,
+ const deUint32 subpass,
+ const VkShaderModule vertexShaderModule,
+ const VkPipelineRasterizationStateCreateInfo* rasterizationState,
+ const VkShaderModule tessellationControlShaderModule,
+ const VkShaderModule tessellationEvalShaderModule,
+ const VkShaderModule geometryShaderModule,
+ const VkSpecializationInfo* specializationInfo)
+{
+ // make sure pipeline was not already build
+ DE_ASSERT(m_pipelineFinal.get() == DE_NULL);
+
+ // make sure states are set in order - no need to complicate logic to support out of order specification - this state needs to be set second
+ DE_ASSERT(m_internalData && (m_internalData->setupStates == VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_KHR));
+ m_internalData->setupStates |= VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_KHR;
+
+ const bool hasTesc = (tessellationControlShaderModule != DE_NULL);
+ const bool hasTese = (tessellationEvalShaderModule != DE_NULL);
+ const bool hasGeom = (geometryShaderModule != DE_NULL);
+
+ const auto pRasterizationState = rasterizationState ? rasterizationState
+ : (m_internalData->useDefaultRasterizationState ? &m_internalData->defaultRasterizationState : DE_NULL);
+ const auto pTessellationState = (hasTesc || hasTese) ? &m_internalData->tessellationState : DE_NULL;
+ const auto pViewportState = m_internalData->useViewportState ? &m_internalData->viewportState : DE_NULL;
+
+ // reserve space for all stages including fragment - this is needed when we create monolithic pipeline
+ m_internalData->pipelineShaderStages = std::vector<VkPipelineShaderStageCreateInfo>(2u + hasTesc + hasTese + hasGeom,
+ {
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ 0u, // VkPipelineShaderStageCreateFlags flags
+ VK_SHADER_STAGE_VERTEX_BIT, // VkShaderStageFlagBits stage
+ vertexShaderModule, // VkShaderModule module
+ "main", // const char* pName
+ specializationInfo // const VkSpecializationInfo* pSpecializationInfo
+ });
+
+ std::vector<VkPipelineShaderStageCreateInfo>::iterator currStage = m_internalData->pipelineShaderStages.begin() + 1;
+ if (hasTesc)
+ {
+ currStage->stage = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT;
+ currStage->module = tessellationControlShaderModule;
+ ++currStage;
+ }
+ if (hasTese)
+ {
+ currStage->stage = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT;
+ currStage->module = tessellationEvalShaderModule;
+ ++currStage;
+ }
+ if (hasGeom)
+ {
+ currStage->stage = VK_SHADER_STAGE_GEOMETRY_BIT;
+ currStage->module = geometryShaderModule;
+ }
+
+ if (pViewportState)
+ {
+ if (!viewports.empty())
+ {
+ pViewportState->viewportCount = (deUint32)viewports.size();
+ pViewportState->pViewports = &viewports[0];
+ }
+ if (!scissors.empty())
+ {
+ pViewportState->scissorCount = (deUint32)scissors.size();
+ pViewportState->pScissors = &scissors[0];
+ }
+ }
+
+ if (m_internalData->pipelineConstructionType == PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC)
+ {
+ // make sure we dont overwrite layout specified with setupMonolithicPipelineLayout
+ if (m_internalData->monolithicPipelineCreateInfo.layout == 0)
+ m_internalData->monolithicPipelineCreateInfo.layout = layout;
+
+ m_internalData->monolithicPipelineCreateInfo.renderPass = renderPass;
+ m_internalData->monolithicPipelineCreateInfo.subpass = subpass;
+ m_internalData->monolithicPipelineCreateInfo.pRasterizationState = pRasterizationState;
+ m_internalData->monolithicPipelineCreateInfo.pViewportState = pViewportState;
+ m_internalData->monolithicPipelineCreateInfo.stageCount = 1u + hasTesc + hasTese + hasGeom;
+ m_internalData->monolithicPipelineCreateInfo.pStages = m_internalData->pipelineShaderStages.data();
+ m_internalData->monolithicPipelineCreateInfo.pTessellationState = pTessellationState;
+ }
+ else
+ {
+ const auto libraryCreateInfo = makeGraphicsPipelineLibraryCreateInfo(VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_KHR);
+
+ VkGraphicsPipelineCreateInfo pipelinePartCreateInfo = initVulkanStructure();
+ pipelinePartCreateInfo.pNext = &libraryCreateInfo;
+ pipelinePartCreateInfo.flags = m_internalData->pipelineFlags | VK_PIPELINE_CREATE_LIBRARY_BIT_KHR;
+ pipelinePartCreateInfo.layout = layout;
+ pipelinePartCreateInfo.renderPass = renderPass;
+ pipelinePartCreateInfo.subpass = subpass;
+ pipelinePartCreateInfo.pRasterizationState = pRasterizationState;
+ pipelinePartCreateInfo.pViewportState = pViewportState;
+ pipelinePartCreateInfo.stageCount = 1u + hasTesc + hasTese + hasGeom;
+ pipelinePartCreateInfo.pStages = m_internalData->pipelineShaderStages.data();
+ pipelinePartCreateInfo.pTessellationState = pTessellationState;
+ pipelinePartCreateInfo.pDynamicState = m_internalData->pDynamicState;
+
+ if (m_internalData->pipelineConstructionType == PIPELINE_CONSTRUCTION_TYPE_FAST_LINKED_LIBRARY)
+ pipelinePartCreateInfo.flags |= VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_KHR;
+
+ m_pipelineParts[1] = createGraphicsPipeline(m_internalData->vk, m_internalData->device, DE_NULL, &pipelinePartCreateInfo);
+ }
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setupFragmentShaderState(const VkPipelineLayout layout,
+ const VkRenderPass renderPass,
+ const deUint32 subpass,
+ const VkShaderModule fragmentShaderModule,
+ const VkPipelineDepthStencilStateCreateInfo* depthStencilState,
+ const VkPipelineMultisampleStateCreateInfo* multisampleState,
+ VkPipelineFragmentShadingRateStateCreateInfoKHR* fragmentShadingRateState,
+ const VkSpecializationInfo* specializationInfo)
+{
+ // make sure pipeline was not already build
+ DE_ASSERT(m_pipelineFinal.get() == DE_NULL);
+
+ // make sure states are set in order - no need to complicate logic to support out of order specification - this state needs to be set third
+ DE_ASSERT(m_internalData && (m_internalData->setupStates == (VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_KHR |
+ VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_KHR)));
+ m_internalData->setupStates |= VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_KHR;
+
+ m_internalData->pFragmentShadingRateState = fragmentShadingRateState;
+
+ const auto pDepthStencilState = depthStencilState ? depthStencilState
+ : (m_internalData->useDefaultDepthStencilState ? &defaultDepthStencilState : DE_NULL);
+ const auto pMultisampleState = multisampleState ? multisampleState
+ : (m_internalData->useDefaultMultisampleState ? &defaultMultisampleState : DE_NULL);
+ const bool hasFrag = (fragmentShaderModule != DE_NULL);
+
+ deUint32 stageIndex = 1;
+ if (hasFrag)
+ {
+ // find free space for fragment shader
+ for (; stageIndex < 5; ++stageIndex)
+ {
+ if (m_internalData->pipelineShaderStages[stageIndex].stage == VK_SHADER_STAGE_VERTEX_BIT)
+ {
+ m_internalData->pipelineShaderStages[stageIndex].stage = VK_SHADER_STAGE_FRAGMENT_BIT;
+ m_internalData->pipelineShaderStages[stageIndex].module = fragmentShaderModule;
+ m_internalData->pipelineShaderStages[stageIndex].pSpecializationInfo = specializationInfo;
+ break;
+ }
+ }
+ }
+
+ if (m_internalData->pipelineConstructionType == PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC)
+ {
+ m_internalData->monolithicPipelineCreateInfo.pNext = m_internalData->pFragmentShadingRateState;
+ m_internalData->monolithicPipelineCreateInfo.pDepthStencilState = pDepthStencilState;
+ m_internalData->monolithicPipelineCreateInfo.pMultisampleState = pMultisampleState;
+ m_internalData->monolithicPipelineCreateInfo.stageCount += !!fragmentShaderModule;
+ }
+ else
+ {
+ auto libraryCreateInfo = makeGraphicsPipelineLibraryCreateInfo(VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_KHR);
+ libraryCreateInfo.pNext = m_internalData->pFragmentShadingRateState;
+
+ VkGraphicsPipelineCreateInfo pipelinePartCreateInfo = initVulkanStructure();
+ pipelinePartCreateInfo.pNext = &libraryCreateInfo;
+ pipelinePartCreateInfo.flags = m_internalData->pipelineFlags | VK_PIPELINE_CREATE_LIBRARY_BIT_KHR;
+ pipelinePartCreateInfo.layout = layout;
+ pipelinePartCreateInfo.renderPass = renderPass;
+ pipelinePartCreateInfo.subpass = subpass;
+ pipelinePartCreateInfo.pDepthStencilState = pDepthStencilState;
+ pipelinePartCreateInfo.pMultisampleState = pMultisampleState;
+ pipelinePartCreateInfo.stageCount = hasFrag;
+ pipelinePartCreateInfo.pStages = hasFrag ? &m_internalData->pipelineShaderStages[stageIndex] : DE_NULL;
+ pipelinePartCreateInfo.pDynamicState = m_internalData->pDynamicState;
+
+ if (m_internalData->pipelineConstructionType == PIPELINE_CONSTRUCTION_TYPE_FAST_LINKED_LIBRARY)
+ pipelinePartCreateInfo.flags |= VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_KHR;
+
+ m_pipelineParts[2] = createGraphicsPipeline(m_internalData->vk, m_internalData->device, DE_NULL, &pipelinePartCreateInfo);
+ }
+
+ return *this;
+}
+
+GraphicsPipelineWrapper& GraphicsPipelineWrapper::setupFragmentOutputState(const VkRenderPass renderPass,
+ const deUint32 subpass,
+ const VkPipelineColorBlendStateCreateInfo* colorBlendState,
+ const VkPipelineMultisampleStateCreateInfo* multisampleState)
+{
+ // make sure pipeline was not already build
+ DE_ASSERT(m_pipelineFinal.get() == DE_NULL);
+
+ // make sure states are set in order - no need to complicate logic to support out of order specification - this state needs to be set last
+ DE_ASSERT(m_internalData && (m_internalData->setupStates == (VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_KHR |
+ VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_KHR |
+ VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_KHR)));
+ m_internalData->setupStates |= VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_KHR;
+
+ const auto pColorBlendState = colorBlendState ? colorBlendState
+ : (m_internalData->useDefaultColorBlendState ? &defaultColorBlendState : DE_NULL);
+ const auto pMultisampleState = multisampleState ? multisampleState
+ : (m_internalData->useDefaultMultisampleState ? &defaultMultisampleState : DE_NULL);
+
+ if (m_internalData->pipelineConstructionType == PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC)
+ {
+ m_internalData->monolithicPipelineCreateInfo.pNext = m_internalData->pFragmentShadingRateState;
+ m_internalData->monolithicPipelineCreateInfo.flags = m_internalData->pipelineFlags;
+ m_internalData->monolithicPipelineCreateInfo.pColorBlendState = pColorBlendState;
+ m_internalData->monolithicPipelineCreateInfo.pMultisampleState = pMultisampleState;
+ }
+ else
+ {
+ auto libraryCreateInfo = makeGraphicsPipelineLibraryCreateInfo(VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_KHR);
+ libraryCreateInfo.pNext = m_internalData->pFragmentShadingRateState;
+
+ VkGraphicsPipelineCreateInfo pipelinePartCreateInfo = initVulkanStructure();
+ pipelinePartCreateInfo.pNext = &libraryCreateInfo;
+ pipelinePartCreateInfo.flags = m_internalData->pipelineFlags | VK_PIPELINE_CREATE_LIBRARY_BIT_KHR;
+ pipelinePartCreateInfo.renderPass = renderPass;
+ pipelinePartCreateInfo.subpass = subpass;
+ pipelinePartCreateInfo.pColorBlendState = pColorBlendState;
+ pipelinePartCreateInfo.pMultisampleState = pMultisampleState;
+ pipelinePartCreateInfo.pDynamicState = m_internalData->pDynamicState;
+
+ if (m_internalData->pipelineConstructionType == PIPELINE_CONSTRUCTION_TYPE_FAST_LINKED_LIBRARY)
+ pipelinePartCreateInfo.flags |= VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_KHR;
+
+ m_pipelineParts[3] = createGraphicsPipeline(m_internalData->vk, m_internalData->device, DE_NULL, &pipelinePartCreateInfo);
+ }
+
+ return *this;
+}
+
+void GraphicsPipelineWrapper::buildPipeline(const VkPipelineCache pipelineCache,
+ const VkPipeline basePipelineHandle,
+ const deInt32 basePipelineIndex,
+ const VkPipelineCreationFeedbackCreateInfoEXT* creationFeedback)
+{
+ // make sure we are not trying to build pipeline second time
+ DE_ASSERT(m_pipelineFinal.get() == DE_NULL);
+
+ // make sure all states were set
+ DE_ASSERT(m_internalData && (m_internalData->setupStates == (VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_KHR |
+ VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_KHR |
+ VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_KHR |
+ VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_KHR)));
+
+ VkGraphicsPipelineCreateInfo* pointerToCreateInfo = &m_internalData->monolithicPipelineCreateInfo;
+ VkGraphicsPipelineCreateInfo linkedCreateInfo = initVulkanStructure();
+ VkPipeline rawPipelines[4];
+ VkPipelineLibraryCreateInfoKHR linkingInfo
+ {
+ VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR, // VkStructureType sType;
+ creationFeedback, // const void* pNext;
+ 4, // deUint32 libraryCount;
+ rawPipelines // const VkPipeline* pLibraries;
+ };
+
+ if (m_internalData->pipelineConstructionType != PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC)
+ {
+ for (deUint32 i = 0; i < 4; ++i)
+ rawPipelines[i] = m_pipelineParts[i].get();
+
+ linkedCreateInfo.pNext = &linkingInfo;
+ linkedCreateInfo.flags = m_internalData->pipelineFlags;
+ pointerToCreateInfo = &linkedCreateInfo;
+ }
+ else if (creationFeedback)
+ {
+ // if pNext is not NULL logic to handle pNext chain should be added
+ DE_ASSERT(pointerToCreateInfo->pNext == DE_NULL);
+ pointerToCreateInfo->pNext = creationFeedback;
+ }
+
+ pointerToCreateInfo->basePipelineHandle = basePipelineHandle;
+ pointerToCreateInfo->basePipelineIndex = basePipelineIndex;
+
+ m_pipelineFinal = createGraphicsPipeline(m_internalData->vk, m_internalData->device, pipelineCache, pointerToCreateInfo);
+
+ // pipeline was created - we can free CreateInfo structures
+ m_internalData.clear();
+}
+
+deBool GraphicsPipelineWrapper::wasBuild() const
+{
+ return !!m_pipelineFinal.get();
+}
+
+VkPipeline GraphicsPipelineWrapper::getPipeline() const
+{
+ DE_ASSERT(m_pipelineFinal.get() != DE_NULL);
+ return m_pipelineFinal.get();
+}
+
+void GraphicsPipelineWrapper::destroyPipeline(void)
+{
+ DE_ASSERT(m_pipelineFinal.get() != DE_NULL);
+
+ m_pipelineFinal = Move<VkPipeline>();
+}
+
+} // vk
--- /dev/null
+#ifndef _VKPIPELINECONSTRUCTIONUTIL_HPP
+#define _VKPIPELINECONSTRUCTIONUTIL_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Wrapper that can construct monolithic pipeline or use
+ VK_KHR_graphics_pipeline_library for pipeline construction.
+ *//*--------------------------------------------------------------------*/
+
+#include "vkRef.hpp"
+#include "vkDefs.hpp"
+#include "tcuDefs.hpp"
+#include "deSharedPtr.hpp"
+#include <vector>
+
+namespace vk
+{
+
+enum PipelineConstructionType
+{
+ PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC = 0, // Construct legacy - monolithic pipeline
+ PIPELINE_CONSTRUCTION_TYPE_OPTIMISED_LIBRARY, // Use VK_KHR_graphics_pipeline_library and construc pipeline out of 4 pipeline parts
+ PIPELINE_CONSTRUCTION_TYPE_FAST_LINKED_LIBRARY // Same as PIPELINE_CONSTRUCTION_TYPE_OPTIMISED_LIBRARY but with fast linking
+};
+
+// Class that can build monolithic pipeline or fully separated pipeline libraries
+// depending on PipelineType specified in the constructor.
+// Rarely needed configuration was extracted to setDefault*/disable* functions while common
+// state setup is provided as arguments of four setup* functions - one for each state group.
+class GraphicsPipelineWrapper
+{
+public:
+ GraphicsPipelineWrapper (const DeviceInterface& vk,
+ VkDevice device,
+ const PipelineConstructionType pipelineConstructionType,
+ const VkPipelineCreateFlags flags = 0u);
+
+ GraphicsPipelineWrapper (GraphicsPipelineWrapper&&);
+
+ ~GraphicsPipelineWrapper (void) = default;
+
+
+ // By default pipelineLayout used for monotlithic pipeline is taken from layout specified
+ // in setupPreRasterizationShaderState but when there are also descriptor sets needed for fragment
+ // shader bindings then separate pipeline layout for monolithic pipeline must be provided
+ GraphicsPipelineWrapper& setMonolithicPipelineLayout (const VkPipelineLayout layout);
+
+
+ // By default dynamic state has to be specified before specifying other CreateInfo structures
+ GraphicsPipelineWrapper& setDynamicState (const VkPipelineDynamicStateCreateInfo* dynamicState);
+
+ // Specify topology that is used by default InputAssemblyState in vertex input state. This needs to be
+ // specified only when there is no custom InputAssemblyState provided in setupVertexInputStete and when
+ // topology is diferent then VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST which is used by default.
+ GraphicsPipelineWrapper& setDefaultTopology (const VkPrimitiveTopology topology);
+
+ // Specify patch control points that is used by default TessellationState in pre-rasterization shader state.
+ // This can to be specified only when there is no custom TessellationState provided in
+ // setupPreRasterizationShaderState and when patchControlPoints is diferent then 3 which is used by default.
+ GraphicsPipelineWrapper& setDefaultPatchControlPoints (const deUint32 patchControlPoints);
+
+ // Enable discarding of primitives that is used by default RasterizationState in pre-rasterization shader state.
+ // This can be specified only when there is no custom RasterizationState provided in setupPreRasterizationShaderState.
+ GraphicsPipelineWrapper& setDefaultRasterizerDiscardEnable (const deBool rasterizerDiscardEnable = DE_TRUE);
+
+ // When some states are not provided then default structures can be used. This behaviour can be turned on by one of below methods.
+ // Some tests require those states to be NULL so we can't assume using default versions.
+ GraphicsPipelineWrapper& setDefaultRasterizationState (void);
+ GraphicsPipelineWrapper& setDefaultDepthStencilState (void);
+ GraphicsPipelineWrapper& setDefaultColorBlendState (void);
+ GraphicsPipelineWrapper& setDefaultMultisampleState (void);
+
+ // Pre-rasterization shader state uses provieded viewports and scissors to create ViewportState. By default
+ // number of viewports and scissors is same as number of items in vector but when vectors are empty then by
+ // default count of viewports/scissors is set to 1. This can be changed by below functions.
+ GraphicsPipelineWrapper& setDefaultViewportsCount (deUint32 viewportCount = 0u);
+ GraphicsPipelineWrapper& setDefaultScissorsCount (deUint32 scissorCount = 0u);
+
+ // Pre-rasterization shader state uses provieded viewports and scissors to create ViewportState. When disableViewportState
+ // is used then ViewportState won't be constructed and NULL will be used.
+ GraphicsPipelineWrapper& disableViewportState (void);
+
+
+ // Setup vertex input state. When VertexInputState or InputAssemblyState are not provided then default structures will be used.
+ GraphicsPipelineWrapper& setupVertexInputStete (const VkPipelineVertexInputStateCreateInfo* vertexInputState = DE_NULL,
+ const VkPipelineInputAssemblyStateCreateInfo* inputAssemblyState = DE_NULL);
+
+ // Setup pre-rasterization shader state.
+ GraphicsPipelineWrapper& setupPreRasterizationShaderState (const std::vector<VkViewport>& viewports,
+ const std::vector<VkRect2D>& scissors,
+ const VkPipelineLayout layout,
+ const VkRenderPass renderPass,
+ const deUint32 subpass,
+ const VkShaderModule vertexShaderModule,
+ const VkPipelineRasterizationStateCreateInfo* rasterizationState = DE_NULL,
+ const VkShaderModule tessellationControlShaderModule = DE_NULL,
+ const VkShaderModule tessellationEvalShaderModule = DE_NULL,
+ const VkShaderModule geometryShaderModule = DE_NULL,
+ const VkSpecializationInfo* specializationInfo = DE_NULL);
+
+ // Setup fragment shader state.
+ GraphicsPipelineWrapper& setupFragmentShaderState (const VkPipelineLayout layout,
+ const VkRenderPass renderPass,
+ const deUint32 subpass,
+ const VkShaderModule fragmentShaderModule,
+ const VkPipelineDepthStencilStateCreateInfo* depthStencilState = DE_NULL,
+ const VkPipelineMultisampleStateCreateInfo* multisampleState = DE_NULL,
+ VkPipelineFragmentShadingRateStateCreateInfoKHR* fragmentShadingRateState = DE_NULL,
+ const VkSpecializationInfo* specializationInfo = DE_NULL);
+
+ // Setup fragment output state.
+ GraphicsPipelineWrapper& setupFragmentOutputState (const VkRenderPass renderPass,
+ const deUint32 subpass = 0u,
+ const VkPipelineColorBlendStateCreateInfo* colorBlendState = DE_NULL,
+ const VkPipelineMultisampleStateCreateInfo* multisampleState = DE_NULL/*,
+ const VkPipelineRenderingCreateInfoKHR* rendering = DE_NULL*/);
+
+
+ // Build pipeline object out of provided state.
+ void buildPipeline (const VkPipelineCache pipelineCache = DE_NULL,
+ const VkPipeline basePipelineHandle = DE_NULL,
+ const deInt32 basePipelineIndex = 0,
+ const VkPipelineCreationFeedbackCreateInfoEXT* creationFeedback = DE_NULL);
+
+ // Returns true when pipeline was build using buildPipeline method.
+ deBool wasBuild (void) const;
+
+ // Get compleate pipeline. GraphicsPipelineWrapper preserves ovnership and will desroy pipeline in its destructor.
+ vk::VkPipeline getPipeline (void) const;
+
+ // Destroy compleate pipeline - pipeline parts are not destroyed.
+ void destroyPipeline (void);
+
+protected:
+
+ // No default constructor - use parametrized constructor or emplace_back in case of vectors.
+ GraphicsPipelineWrapper() = default;
+
+ struct InternalData;
+
+protected:
+
+ // Store partial pipelines when non monolithic construction was used.
+ Move<VkPipeline> m_pipelineParts[4];
+
+ // Store monolithic pipeline or linked pipeline libraries.
+ Move<VkPipeline> m_pipelineFinal;
+
+ // Store internal data that is needed only for pipeline construction.
+ de::SharedPtr<InternalData> m_internalData;
+};
+} // vk
+
+#endif // _VKPIPELINECONSTRUCTIONUTIL_HPP
include_directories(
..
../draw
+ ../util
)
set(DEQP_VK_DYNAMIC_STATE_SRCS
using namespace Draw;
-DynamicStateBaseClass::DynamicStateBaseClass (Context& context, const char* vertexShaderName, const char* fragmentShaderName)
+DynamicStateBaseClass::DynamicStateBaseClass (Context& context, vk::PipelineConstructionType pipelineConstructionType, const char* vertexShaderName, const char* fragmentShaderName)
: TestInstance (context)
- , m_colorAttachmentFormat (vk::VK_FORMAT_R8G8B8A8_UNORM)
+ , m_colorAttachmentFormat (vk::VK_FORMAT_R8G8B8A8_UNORM)
, m_topology (vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
, m_vk (context.getDeviceInterface())
+ , m_pipeline (context.getDeviceInterface(), context.getDevice(), pipelineConstructionType)
, m_vertexShaderName (vertexShaderName)
, m_fragmentShaderName (fragmentShaderName)
{
void DynamicStateBaseClass::initPipeline (const vk::VkDevice device)
{
- const vk::Unique<vk::VkShaderModule> vs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0));
- const vk::Unique<vk::VkShaderModule> fs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0));
-
- const PipelineCreateInfo::ColorBlendState::Attachment vkCbAttachmentState;
-
- PipelineCreateInfo pipelineCreateInfo(*m_pipelineLayout, *m_renderPass, 0, 0);
- pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*vs, "main", vk::VK_SHADER_STAGE_VERTEX_BIT));
- pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*fs, "main", vk::VK_SHADER_STAGE_FRAGMENT_BIT));
- pipelineCreateInfo.addState(PipelineCreateInfo::VertexInputState(m_vertexInputState));
- pipelineCreateInfo.addState(PipelineCreateInfo::InputAssemblerState(m_topology));
- pipelineCreateInfo.addState(PipelineCreateInfo::ColorBlendState(1, &vkCbAttachmentState));
- pipelineCreateInfo.addState(PipelineCreateInfo::ViewportState(1));
- pipelineCreateInfo.addState(PipelineCreateInfo::DepthStencilState());
- pipelineCreateInfo.addState(PipelineCreateInfo::RasterizerState());
- pipelineCreateInfo.addState(PipelineCreateInfo::MultiSampleState());
- pipelineCreateInfo.addState(PipelineCreateInfo::DynamicState());
-
- m_pipeline = vk::createGraphicsPipeline(m_vk, device, DE_NULL, &pipelineCreateInfo);
+ const PipelineCreateInfo::ColorBlendState::Attachment attachmentState;
+ const PipelineCreateInfo::ColorBlendState colorBlendState(1, &attachmentState);
+ const PipelineCreateInfo::RasterizerState rasterizerState;
+ const PipelineCreateInfo::DepthStencilState depthStencilState;
+ const PipelineCreateInfo::DynamicState dynamicState;
+
+ const vk::Unique<vk::VkShaderModule> vs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0));
+ const vk::Unique<vk::VkShaderModule> fs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0));
+ std::vector<vk::VkViewport> viewports { { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f } };
+ std::vector<vk::VkRect2D> scissors { { { 0u, 0u }, { 0u, 0u } }};
+
+ m_pipeline.setDefaultTopology(m_topology)
+ .setDynamicState(static_cast<const vk::VkPipelineDynamicStateCreateInfo*>(&dynamicState))
+ .setDefaultMultisampleState()
+ .setupVertexInputStete(&m_vertexInputState)
+ .setupPreRasterizationShaderState(viewports,
+ scissors,
+ *m_pipelineLayout,
+ *m_renderPass,
+ 0u,
+ *vs,
+ static_cast<const vk::VkPipelineRasterizationStateCreateInfo*>(&rasterizerState))
+ .setupFragmentShaderState(*m_pipelineLayout, *m_renderPass, 0u, *fs, static_cast<const vk::VkPipelineDepthStencilStateCreateInfo*>(&depthStencilState))
+ .setupFragmentOutputState(*m_renderPass, 0u, static_cast<const vk::VkPipelineColorBlendStateCreateInfo*>(&colorBlendState))
+ .buildPipeline();
}
tcu::TestStatus DynamicStateBaseClass::iterate (void)
#include "vktDrawImageObjectUtil.hpp"
#include "vktDrawBufferObjectUtil.hpp"
#include "vktDrawCreateInfoUtil.hpp"
+#include "vkPipelineConstructionUtil.hpp"
namespace vkt
{
class DynamicStateBaseClass : public TestInstance
{
public:
- DynamicStateBaseClass (Context& context, const char* vertexShaderName, const char* fragmentShaderName);
+ DynamicStateBaseClass (Context& context, vk::PipelineConstructionType pipelineConstructionType,
+ const char* vertexShaderName, const char* fragmentShaderName);
protected:
void initialize (void);
const vk::DeviceInterface& m_vk;
- vk::Move<vk::VkPipeline> m_pipeline;
+ vk::GraphicsPipelineWrapper m_pipeline;
vk::Move<vk::VkPipelineLayout> m_pipelineLayout;
de::SharedPtr<Draw::Image> m_colorTargetImage;
class BlendConstantsTestInstance : public DynamicStateBaseClass
{
public:
- BlendConstantsTestInstance (Context& context, ShaderMap shaders)
- : DynamicStateBaseClass (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ BlendConstantsTestInstance (Context& context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : DynamicStateBaseClass (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
{
m_topology = vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP;
virtual void initPipeline (const vk::VkDevice device)
{
- const vk::Unique<vk::VkShaderModule> vs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0));
- const vk::Unique<vk::VkShaderModule> fs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0));
-
- const vk::VkPipelineColorBlendAttachmentState VkPipelineColorBlendAttachmentState =
- PipelineCreateInfo::ColorBlendState::Attachment(VK_TRUE,
- vk::VK_BLEND_FACTOR_SRC_ALPHA, vk::VK_BLEND_FACTOR_CONSTANT_COLOR, vk::VK_BLEND_OP_ADD,
- vk::VK_BLEND_FACTOR_SRC_ALPHA, vk::VK_BLEND_FACTOR_CONSTANT_ALPHA, vk::VK_BLEND_OP_ADD);
-
- PipelineCreateInfo pipelineCreateInfo(*m_pipelineLayout, *m_renderPass, 0, 0);
- pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*vs, "main", vk::VK_SHADER_STAGE_VERTEX_BIT));
- pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*fs, "main", vk::VK_SHADER_STAGE_FRAGMENT_BIT));
- pipelineCreateInfo.addState(PipelineCreateInfo::VertexInputState(m_vertexInputState));
- pipelineCreateInfo.addState(PipelineCreateInfo::InputAssemblerState(m_topology));
- pipelineCreateInfo.addState(PipelineCreateInfo::ColorBlendState(1, &VkPipelineColorBlendAttachmentState));
- pipelineCreateInfo.addState(PipelineCreateInfo::ViewportState(1));
- pipelineCreateInfo.addState(PipelineCreateInfo::DepthStencilState());
- pipelineCreateInfo.addState(PipelineCreateInfo::RasterizerState());
- pipelineCreateInfo.addState(PipelineCreateInfo::MultiSampleState());
- pipelineCreateInfo.addState(PipelineCreateInfo::DynamicState());
-
- m_pipeline = vk::createGraphicsPipeline(m_vk, device, DE_NULL, &pipelineCreateInfo);
+ const vk::Unique<vk::VkShaderModule> vs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0));
+ const vk::Unique<vk::VkShaderModule> fs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0));
+ std::vector<vk::VkViewport> viewports { { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f } };
+ std::vector<vk::VkRect2D> scissors { { { 0u, 0u }, { 0u, 0u } } };
+
+ const PipelineCreateInfo::ColorBlendState::Attachment attachmentState(VK_TRUE,
+ vk::VK_BLEND_FACTOR_SRC_ALPHA, vk::VK_BLEND_FACTOR_CONSTANT_COLOR, vk::VK_BLEND_OP_ADD,
+ vk::VK_BLEND_FACTOR_SRC_ALPHA, vk::VK_BLEND_FACTOR_CONSTANT_ALPHA, vk::VK_BLEND_OP_ADD);
+ const PipelineCreateInfo::ColorBlendState colorBlendState(1, static_cast<const vk::VkPipelineColorBlendAttachmentState*>(&attachmentState));
+ const PipelineCreateInfo::RasterizerState rasterizerState;
+ const PipelineCreateInfo::DepthStencilState depthStencilState;
+ const PipelineCreateInfo::DynamicState dynamicState;
+
+ m_pipeline.setDefaultTopology(m_topology)
+ .setDynamicState(static_cast<const vk::VkPipelineDynamicStateCreateInfo*>(&dynamicState))
+ .setDefaultMultisampleState()
+ .setupVertexInputStete(&m_vertexInputState)
+ .setupPreRasterizationShaderState(viewports,
+ scissors,
+ *m_pipelineLayout,
+ *m_renderPass,
+ 0u,
+ *vs,
+ static_cast<const vk::VkPipelineRasterizationStateCreateInfo*>(&rasterizerState))
+ .setupFragmentShaderState(*m_pipelineLayout, *m_renderPass, 0u, *fs, static_cast<const vk::VkPipelineDepthStencilStateCreateInfo*>(&depthStencilState))
+ .setupFragmentOutputState(*m_renderPass, 0u, static_cast<const vk::VkPipelineColorBlendStateCreateInfo*>(&colorBlendState))
+ .buildPipeline();
}
virtual tcu::TestStatus iterate (void)
const vk::VkClearColorValue clearColor = { { 1.0f, 1.0f, 1.0f, 1.0f } };
beginRenderPassWithClearColor(clearColor);
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline.getPipeline());
// bind states here
setDynamicViewportState(WIDTH, HEIGHT);
} //anonymous
-DynamicStateCBTests::DynamicStateCBTests (tcu::TestContext& testCtx)
- : TestCaseGroup (testCtx, "cb_state", "Tests for color blend state")
+DynamicStateCBTests::DynamicStateCBTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType)
+ : TestCaseGroup (testCtx, "cb_state", "Tests for color blend state")
+ , m_pipelineConstructionType (pipelineConstructionType)
{
/* Left blank on purpose */
}
ShaderMap shaderPaths;
shaderPaths[glu::SHADERTYPE_VERTEX] = "vulkan/dynamic_state/VertexFetch.vert";
shaderPaths[glu::SHADERTYPE_FRAGMENT] = "vulkan/dynamic_state/VertexFetch.frag";
- addChild(new InstanceFactory<BlendConstantsTestInstance>(m_testCtx, "blend_constants", "Check if blend constants are working properly", shaderPaths));
+ addChild(new InstanceFactory<BlendConstantsTestInstance>(m_testCtx, "blend_constants", "Check if blend constants are working properly", m_pipelineConstructionType, shaderPaths));
}
} // DynamicState
#include "tcuDefs.hpp"
#include "vktTestCase.hpp"
+#include "vkPipelineConstructionUtil.hpp"
namespace vkt
{
class DynamicStateCBTests : public tcu::TestCaseGroup
{
public:
- DynamicStateCBTests (tcu::TestContext& testCtx);
+ DynamicStateCBTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType);
~DynamicStateCBTests (void);
void init (void);
private:
DynamicStateCBTests (const DynamicStateCBTests &other);
DynamicStateCBTests& operator= (const DynamicStateCBTests &other);
+
+ vk::PipelineConstructionType m_pipelineConstructionType;
};
} // DynamicState
class DepthStencilBaseCase : public TestInstance
{
public:
- DepthStencilBaseCase (Context& context, const char* vertexShaderName, const char* fragmentShaderName)
+ DepthStencilBaseCase (Context& context, vk::PipelineConstructionType pipelineConstructionType, const char* vertexShaderName, const char* fragmentShaderName)
: TestInstance (context)
, m_colorAttachmentFormat (vk::VK_FORMAT_R8G8B8A8_UNORM)
, m_depthStencilAttachmentFormat (vk::VK_FORMAT_UNDEFINED)
, m_topology (vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
, m_vk (context.getDeviceInterface())
+ , m_pipeline_1 (m_vk, context.getDevice(), pipelineConstructionType)
+ , m_pipeline_2 (m_vk, context.getDevice(), pipelineConstructionType)
, m_vertexShaderName (vertexShaderName)
, m_fragmentShaderName (fragmentShaderName)
{
const vk::DeviceInterface& m_vk;
- vk::Move<vk::VkPipeline> m_pipeline_1;
- vk::Move<vk::VkPipeline> m_pipeline_2;
+ vk::GraphicsPipelineWrapper m_pipeline_1;
+ vk::GraphicsPipelineWrapper m_pipeline_2;
vk::Move<vk::VkPipelineLayout> m_pipelineLayout;
de::SharedPtr<Image> m_colorTargetImage;
2,
vertexInputAttributeDescriptions);
- const PipelineCreateInfo::ColorBlendState::Attachment vkCbAttachmentState;
-
- PipelineCreateInfo pipelineCreateInfo_1(*m_pipelineLayout, *m_renderPass, 0, 0);
- pipelineCreateInfo_1.addShader(PipelineCreateInfo::PipelineShaderStage(*vs, "main", vk::VK_SHADER_STAGE_VERTEX_BIT));
- pipelineCreateInfo_1.addShader(PipelineCreateInfo::PipelineShaderStage(*fs, "main", vk::VK_SHADER_STAGE_FRAGMENT_BIT));
- pipelineCreateInfo_1.addState(PipelineCreateInfo::VertexInputState(m_vertexInputState));
- pipelineCreateInfo_1.addState(PipelineCreateInfo::InputAssemblerState(m_topology));
- pipelineCreateInfo_1.addState(PipelineCreateInfo::ColorBlendState(1, &vkCbAttachmentState));
- pipelineCreateInfo_1.addState(PipelineCreateInfo::ViewportState(1));
- pipelineCreateInfo_1.addState(m_depthStencilState_1);
- pipelineCreateInfo_1.addState(PipelineCreateInfo::RasterizerState());
- pipelineCreateInfo_1.addState(PipelineCreateInfo::MultiSampleState());
- pipelineCreateInfo_1.addState(PipelineCreateInfo::DynamicState());
-
- PipelineCreateInfo pipelineCreateInfo_2(*m_pipelineLayout, *m_renderPass, 0, 0);
- pipelineCreateInfo_2.addShader(PipelineCreateInfo::PipelineShaderStage(*vs, "main", vk::VK_SHADER_STAGE_VERTEX_BIT));
- pipelineCreateInfo_2.addShader(PipelineCreateInfo::PipelineShaderStage(*fs, "main", vk::VK_SHADER_STAGE_FRAGMENT_BIT));
- pipelineCreateInfo_2.addState(PipelineCreateInfo::VertexInputState(m_vertexInputState));
- pipelineCreateInfo_2.addState(PipelineCreateInfo::InputAssemblerState(m_topology));
- pipelineCreateInfo_2.addState(PipelineCreateInfo::ColorBlendState(1, &vkCbAttachmentState));
- pipelineCreateInfo_2.addState(PipelineCreateInfo::ViewportState(1));
- pipelineCreateInfo_2.addState(m_depthStencilState_2);
- pipelineCreateInfo_2.addState(PipelineCreateInfo::RasterizerState());
- pipelineCreateInfo_2.addState(PipelineCreateInfo::MultiSampleState());
- pipelineCreateInfo_2.addState(PipelineCreateInfo::DynamicState());
-
- m_pipeline_1 = vk::createGraphicsPipeline(m_vk, device, DE_NULL, &pipelineCreateInfo_1);
- m_pipeline_2 = vk::createGraphicsPipeline(m_vk, device, DE_NULL, &pipelineCreateInfo_2);
+ std::vector<vk::VkViewport> viewports { { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f } };
+ std::vector<vk::VkRect2D> scissors { { { 0u, 0u }, { 0u, 0u } } };
+
+ const PipelineCreateInfo::ColorBlendState::Attachment attachmentState;
+ const PipelineCreateInfo::ColorBlendState colorBlendState(1u, static_cast<const vk::VkPipelineColorBlendAttachmentState*>(&attachmentState));
+ const PipelineCreateInfo::RasterizerState rasterizerState;
+ PipelineCreateInfo::DynamicState dynamicState;
+
+ m_pipeline_1.setDefaultTopology(m_topology)
+ .setDynamicState(static_cast<const vk::VkPipelineDynamicStateCreateInfo*>(&dynamicState))
+ .setDefaultMultisampleState()
+ .setupVertexInputStete(&m_vertexInputState)
+ .setupPreRasterizationShaderState(viewports,
+ scissors,
+ *m_pipelineLayout,
+ *m_renderPass,
+ 0u,
+ *vs,
+ static_cast<const vk::VkPipelineRasterizationStateCreateInfo*>(&rasterizerState))
+ .setupFragmentShaderState(*m_pipelineLayout, *m_renderPass, 0u, *fs, static_cast<const vk::VkPipelineDepthStencilStateCreateInfo*>(&m_depthStencilState_1))
+ .setupFragmentOutputState(*m_renderPass, 0u, static_cast<const vk::VkPipelineColorBlendStateCreateInfo*>(&colorBlendState))
+ .buildPipeline();
+
+ m_pipeline_2.setDefaultTopology(m_topology)
+ .setDynamicState(static_cast<const vk::VkPipelineDynamicStateCreateInfo*>(&dynamicState))
+ .setDefaultMultisampleState()
+ .setupVertexInputStete(&m_vertexInputState)
+ .setupPreRasterizationShaderState(viewports,
+ scissors,
+ *m_pipelineLayout,
+ *m_renderPass,
+ 0u,
+ *vs,
+ static_cast<const vk::VkPipelineRasterizationStateCreateInfo*>(&rasterizerState))
+ .setupFragmentShaderState(*m_pipelineLayout, *m_renderPass, 0u, *fs, static_cast<const vk::VkPipelineDepthStencilStateCreateInfo*>(&m_depthStencilState_2))
+ .setupFragmentOutputState(*m_renderPass, 0u, static_cast<const vk::VkPipelineColorBlendStateCreateInfo*>(&colorBlendState))
+ .buildPipeline();
std::vector<vk::VkImageView> attachments(2);
attachments[0] = *m_colorTargetView;
class DepthBoundsParamTestInstance : public DepthStencilBaseCase
{
public:
- DepthBoundsParamTestInstance (Context &context, ShaderMap shaders)
- : DepthStencilBaseCase (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ DepthBoundsParamTestInstance (Context &context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : DepthStencilBaseCase (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
{
m_data.push_back(PositionColorVertex(tcu::Vec4(-1.0f, 1.0f, 0.375f, 1.0f), tcu::RGBA::green().toVec()));
m_data.push_back(PositionColorVertex(tcu::Vec4(0.0f, 1.0f, 0.375f, 1.0f), tcu::RGBA::green().toVec()));
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
m_vk.cmdBindVertexBuffers(*m_cmdBuffer, 0, 1, &vertexBuffer, &vertexBufferOffset);
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline_1);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline_1.getPipeline());
m_vk.cmdDraw(*m_cmdBuffer, 4, 1, 0, 0);
m_vk.cmdDraw(*m_cmdBuffer, 4, 1, 4, 0);
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline_2);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline_2.getPipeline());
m_vk.cmdDraw(*m_cmdBuffer, 4, 1, 8, 0);
endRenderPass(m_vk, *m_cmdBuffer);
};
static const float depthBounds[DEPTH_BOUNDS_COUNT];
- DepthBoundsTestInstance (Context& context,
- ShaderMap shaders);
+ DepthBoundsTestInstance (Context& context,
+ vk::PipelineConstructionType pipelineConstructionType,
+ ShaderMap shaders);
virtual void initRenderPass (const vk::VkDevice device);
virtual void initFramebuffer (const vk::VkDevice device);
virtual void initPipeline (const vk::VkDevice device);
0.9f
};
-DepthBoundsTestInstance::DepthBoundsTestInstance(Context& context, ShaderMap shaders)
- : DynamicStateBaseClass (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+DepthBoundsTestInstance::DepthBoundsTestInstance(Context& context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : DynamicStateBaseClass (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
, m_depthAttachmentFormat (vk::VK_FORMAT_D16_UNORM)
{
const vk::VkDevice device = m_context.getDevice();
void DepthBoundsTestInstance::initPipeline (const vk::VkDevice device)
{
- const vk::Unique<vk::VkShaderModule> vs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0));
- const vk::Unique<vk::VkShaderModule> fs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0));
-
- const PipelineCreateInfo::ColorBlendState::Attachment vkCbAttachmentState;
-
- PipelineCreateInfo pipelineCreateInfo(*m_pipelineLayout, *m_renderPass, 0, 0);
- pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*vs, "main", vk::VK_SHADER_STAGE_VERTEX_BIT));
- pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*fs, "main", vk::VK_SHADER_STAGE_FRAGMENT_BIT));
- pipelineCreateInfo.addState(PipelineCreateInfo::VertexInputState(m_vertexInputState));
- pipelineCreateInfo.addState(PipelineCreateInfo::InputAssemblerState(m_topology));
- pipelineCreateInfo.addState(PipelineCreateInfo::ColorBlendState(1, &vkCbAttachmentState));
- pipelineCreateInfo.addState(PipelineCreateInfo::ViewportState(1));
- pipelineCreateInfo.addState(PipelineCreateInfo::DepthStencilState(false, false, vk::VK_COMPARE_OP_NEVER, true));
- pipelineCreateInfo.addState(PipelineCreateInfo::RasterizerState());
- pipelineCreateInfo.addState(PipelineCreateInfo::MultiSampleState());
- pipelineCreateInfo.addState(PipelineCreateInfo::DynamicState());
-
- m_pipeline = vk::createGraphicsPipeline(m_vk, device, DE_NULL, &pipelineCreateInfo);
+ const vk::Unique<vk::VkShaderModule> vs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0));
+ const vk::Unique<vk::VkShaderModule> fs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0));
+ std::vector<vk::VkViewport> viewports { { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f } };
+ std::vector<vk::VkRect2D> scissors { { { 0u, 0u }, { 0u, 0u } } };
+
+ const PipelineCreateInfo::ColorBlendState::Attachment attachmentState;
+ const PipelineCreateInfo::ColorBlendState colorBlendState(1u, static_cast<const vk::VkPipelineColorBlendAttachmentState*>(&attachmentState));
+ const PipelineCreateInfo::RasterizerState rasterizerState;
+ const PipelineCreateInfo::DepthStencilState depthStencilState(false, false, vk::VK_COMPARE_OP_NEVER, true);
+ const PipelineCreateInfo::DynamicState dynamicState;
+
+ m_pipeline.setDefaultTopology(m_topology)
+ .setDynamicState(static_cast<const vk::VkPipelineDynamicStateCreateInfo*>(&dynamicState))
+ .setDefaultMultisampleState()
+ .setupVertexInputStete(&m_vertexInputState)
+ .setupPreRasterizationShaderState(viewports,
+ scissors,
+ *m_pipelineLayout,
+ *m_renderPass,
+ 0u,
+ *vs,
+ static_cast<const vk::VkPipelineRasterizationStateCreateInfo*>(&rasterizerState))
+ .setupFragmentShaderState(*m_pipelineLayout, *m_renderPass, 0u, *fs, static_cast<const vk::VkPipelineDepthStencilStateCreateInfo*>(&depthStencilState))
+ .setupFragmentOutputState(*m_renderPass, 0u, static_cast<const vk::VkPipelineColorBlendStateCreateInfo*>(&colorBlendState))
+ .buildPipeline();
}
-
tcu::TestStatus DepthBoundsTestInstance::iterate (void)
{
tcu::TestLog &log = m_context.getTestContext().getLog();
setDynamicBlendState();
setDynamicDepthStencilState(depthBounds[DEPTH_BOUNDS_MIN], depthBounds[DEPTH_BOUNDS_MAX]);
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline.getPipeline());
const vk::VkDeviceSize vertexBufferOffset = 0;
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
tcu::Vec4 m_expectedColor;
public:
- StencilParamsBasicTestInstance (Context& context, const char* vertexShaderName, const char* fragmentShaderName,
+ StencilParamsBasicTestInstance (Context& context, vk::PipelineConstructionType pipelineConstructionType,
+ const char* vertexShaderName, const char* fragmentShaderName,
const deUint32 writeMask, const deUint32 readMask,
const deUint32 expectedValue, const tcu::Vec4 expectedColor)
- : DepthStencilBaseCase (context, vertexShaderName, fragmentShaderName)
+ : DepthStencilBaseCase (context, pipelineConstructionType, vertexShaderName, fragmentShaderName)
, m_expectedColor (1.0f, 1.0f, 1.0f, 1.0f)
{
m_writeMask = writeMask;
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
m_vk.cmdBindVertexBuffers(*m_cmdBuffer, 0, 1, &vertexBuffer, &vertexBufferOffset);
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline_1);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline_1.getPipeline());
setDynamicDepthStencilState(-1.0f, 1.0f, 0xFF, m_writeMask, 0x0F, 0xFF, m_writeMask, 0x0F);
m_vk.cmdDraw(*m_cmdBuffer, 4, 1, 0, 0);
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline_2);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline_2.getPipeline());
setDynamicDepthStencilState(-1.0f, 1.0f, m_readMask, 0xFF, m_expectedValue, m_readMask, 0xFF, m_expectedValue);
m_vk.cmdDraw(*m_cmdBuffer, 4, 1, 4, 0);
protected:
TestInstance* createInstance(Context& context) const
{
- return new StencilParamsBasicTestInstance(context, "VertexFetch.vert", "VertexFetch.frag",
+ return new StencilParamsBasicTestInstance(context, m_pipelineConstructionType, "VertexFetch.vert", "VertexFetch.frag",
m_writeMask, m_readMask, m_expectedValue, m_expectedColor);
}
glu::FragmentSource(ShaderSourceProvider::getSource(m_testCtx.getArchive(), "vulkan/dynamic_state/VertexFetch.frag"));
}
- deUint32 m_writeMask;
- deUint32 m_readMask;
- deUint32 m_expectedValue;
- tcu::Vec4 m_expectedColor;
+ virtual void checkSupport(Context& context) const
+ {
+ if (m_pipelineConstructionType != vk::PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC)
+ {
+ context.requireDeviceFunctionality("VK_KHR_graphics_pipeline_library");
+ if ((m_pipelineConstructionType == vk::PIPELINE_CONSTRUCTION_TYPE_FAST_LINKED_LIBRARY) &&
+ !context.getGraphicsPipelineLibraryProperties().graphicsPipelineLibraryFastLinking)
+ TCU_THROW(NotSupportedError, "graphicsPipelineLibraryFastLinking is not supported");
+ }
+ }
+
+ vk::PipelineConstructionType m_pipelineConstructionType;
+ deUint32 m_writeMask;
+ deUint32 m_readMask;
+ deUint32 m_expectedValue;
+ tcu::Vec4 m_expectedColor;
public:
StencilParamsBasicTestCase (tcu::TestContext& context, const char *name, const char *description,
+ const vk::PipelineConstructionType pipelineConstructionType,
const deUint32 writeMask, const deUint32 readMask,
const deUint32 expectedValue, const tcu::Vec4 expectedColor)
- : TestCase (context, name, description)
- , m_writeMask (writeMask)
- , m_readMask (readMask)
- , m_expectedValue (expectedValue)
- , m_expectedColor (expectedColor)
+ : TestCase (context, name, description)
+ , m_pipelineConstructionType (pipelineConstructionType)
+ , m_writeMask (writeMask)
+ , m_readMask (readMask)
+ , m_expectedValue (expectedValue)
+ , m_expectedColor (expectedColor)
{
}
};
class StencilParamsAdvancedTestInstance : public DepthStencilBaseCase
{
public:
- StencilParamsAdvancedTestInstance (Context& context, ShaderMap shaders)
- : DepthStencilBaseCase (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ StencilParamsAdvancedTestInstance (Context& context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : DepthStencilBaseCase (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
{
m_data.push_back(PositionColorVertex(tcu::Vec4(-0.5f, 0.5f, 1.0f, 1.0f), tcu::RGBA::green().toVec()));
m_data.push_back(PositionColorVertex(tcu::Vec4(0.5f, 0.5f, 1.0f, 1.0f), tcu::RGBA::green().toVec()));
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
m_vk.cmdBindVertexBuffers(*m_cmdBuffer, 0, 1, &vertexBuffer, &vertexBufferOffset);
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline_1);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline_1.getPipeline());
setDynamicDepthStencilState(-1.0f, 1.0f, 0xFF, 0x0E, 0x0F, 0xFF, 0x0E, 0x0F);
m_vk.cmdDraw(*m_cmdBuffer, 4, 1, 0, 0);
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline_2);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline_2.getPipeline());
setDynamicDepthStencilState(-1.0f, 1.0f, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0x0E);
m_vk.cmdDraw(*m_cmdBuffer, 4, 1, 4, 0);
} //anonymous
-DynamicStateDSTests::DynamicStateDSTests (tcu::TestContext& testCtx)
- : TestCaseGroup (testCtx, "ds_state", "Tests for depth stencil state")
+DynamicStateDSTests::DynamicStateDSTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType)
+ : TestCaseGroup (testCtx, "ds_state", "Tests for depth stencil state")
+ , m_pipelineConstructionType (pipelineConstructionType)
{
/* Left blank on purpose */
}
shaderPaths[glu::SHADERTYPE_VERTEX] = "vulkan/dynamic_state/VertexFetch.vert";
shaderPaths[glu::SHADERTYPE_FRAGMENT] = "vulkan/dynamic_state/VertexFetch.frag";
- addChild(new InstanceFactory<DepthBoundsParamTestInstance, FunctionSupport0>(m_testCtx, "depth_bounds_1", "Perform depth bounds test 1", shaderPaths, checkDepthBoundsSupport));
- addChild(new InstanceFactory<DepthBoundsTestInstance, FunctionSupport0>(m_testCtx, "depth_bounds_2", "Perform depth bounds test 1", shaderPaths, checkDepthBoundsSupport));
- addChild(new StencilParamsBasicTestCase(m_testCtx, "stencil_params_basic_1", "Perform basic stencil test 1", 0x0D, 0x06, 0x05, tcu::Vec4(0.0f, 0.0f, 1.0f, 1.0f)));
- addChild(new StencilParamsBasicTestCase(m_testCtx, "stencil_params_basic_2", "Perform basic stencil test 2", 0x06, 0x02, 0x05, tcu::Vec4(0.0f, 1.0f, 0.0f, 1.0f)));
- addChild(new InstanceFactory<StencilParamsAdvancedTestInstance>(m_testCtx, "stencil_params_advanced", "Perform advanced stencil test", shaderPaths));
+ addChild(new InstanceFactory<DepthBoundsParamTestInstance, FunctionSupport0>(m_testCtx, "depth_bounds_1", "Perform depth bounds test 1", m_pipelineConstructionType, shaderPaths, checkDepthBoundsSupport));
+ addChild(new InstanceFactory<DepthBoundsTestInstance, FunctionSupport0>(m_testCtx, "depth_bounds_2", "Perform depth bounds test 1", m_pipelineConstructionType, shaderPaths, checkDepthBoundsSupport));
+ addChild(new StencilParamsBasicTestCase(m_testCtx, "stencil_params_basic_1", "Perform basic stencil test 1", m_pipelineConstructionType, 0x0D, 0x06, 0x05, tcu::Vec4(0.0f, 0.0f, 1.0f, 1.0f)));
+ addChild(new StencilParamsBasicTestCase(m_testCtx, "stencil_params_basic_2", "Perform basic stencil test 2", m_pipelineConstructionType, 0x06, 0x02, 0x05, tcu::Vec4(0.0f, 1.0f, 0.0f, 1.0f)));
+ addChild(new InstanceFactory<StencilParamsAdvancedTestInstance>(m_testCtx, "stencil_params_advanced", "Perform advanced stencil test", m_pipelineConstructionType, shaderPaths));
}
} // DynamicState
#include "tcuDefs.hpp"
#include "vktTestCase.hpp"
+#include "vkPipelineConstructionUtil.hpp"
namespace vkt
{
class DynamicStateDSTests : public tcu::TestCaseGroup
{
public:
- DynamicStateDSTests (tcu::TestContext& testCtx);
+ DynamicStateDSTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType);
~DynamicStateDSTests (void);
void init (void);
private:
DynamicStateDSTests (const DynamicStateDSTests& other);
DynamicStateDSTests& operator= (const DynamicStateDSTests& other);
+
+ vk::PipelineConstructionType m_pipelineConstructionType;
};
} // DynamicState
class StateSwitchTestInstance : public DynamicStateBaseClass
{
public:
- StateSwitchTestInstance (Context &context, ShaderMap shaders)
- : DynamicStateBaseClass (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ StateSwitchTestInstance (Context &context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : DynamicStateBaseClass (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
{
m_topology = vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP;
setDynamicBlendState();
setDynamicDepthStencilState();
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline.getPipeline());
const vk::VkDeviceSize vertexBufferOffset = 0;
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
class BindOrderTestInstance : public DynamicStateBaseClass
{
public:
- BindOrderTestInstance (Context& context, ShaderMap shaders)
- : DynamicStateBaseClass (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ BindOrderTestInstance (Context& context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : DynamicStateBaseClass (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
{
m_topology = vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP;
setDynamicDepthStencilState();
setDynamicViewportState(1, &viewport, &scissor_1);
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline.getPipeline());
const vk::VkDeviceSize vertexBufferOffset = 0;
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
class StatePersistenceTestInstance : public DynamicStateBaseClass
{
protected:
- vk::Move<vk::VkPipeline> m_pipelineAdditional;
+ vk::GraphicsPipelineWrapper m_pipelineAdditional;
public:
- StatePersistenceTestInstance (Context& context, ShaderMap shaders)
- : DynamicStateBaseClass (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ StatePersistenceTestInstance (Context& context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : DynamicStateBaseClass (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ , m_pipelineAdditional (context.getDeviceInterface(), context.getDevice(), pipelineConstructionType)
{
m_data.push_back(PositionColorVertex(tcu::Vec4(-1.0f, 1.0f, 1.0f, 1.0f), tcu::RGBA::green().toVec()));
m_data.push_back(PositionColorVertex(tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f), tcu::RGBA::green().toVec()));
}
virtual void initPipeline (const vk::VkDevice device)
{
- // shaders
- const vk::Unique<vk::VkShaderModule> vs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0));
- const vk::Unique<vk::VkShaderModule> fs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0));
-
- const PipelineCreateInfo::ColorBlendState::Attachment vkCbAttachmentState;
-
- PipelineCreateInfo pipelineCreateInfo_1(*m_pipelineLayout, *m_renderPass, 0, 0);
- pipelineCreateInfo_1.addShader(PipelineCreateInfo::PipelineShaderStage(*vs, "main", vk::VK_SHADER_STAGE_VERTEX_BIT));
- pipelineCreateInfo_1.addShader(PipelineCreateInfo::PipelineShaderStage(*fs, "main", vk::VK_SHADER_STAGE_FRAGMENT_BIT));
- pipelineCreateInfo_1.addState(PipelineCreateInfo::VertexInputState(m_vertexInputState));
- pipelineCreateInfo_1.addState(PipelineCreateInfo::InputAssemblerState(vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP));
- pipelineCreateInfo_1.addState(PipelineCreateInfo::ColorBlendState(1, &vkCbAttachmentState));
- pipelineCreateInfo_1.addState(PipelineCreateInfo::ViewportState(1));
- pipelineCreateInfo_1.addState(PipelineCreateInfo::DepthStencilState());
- pipelineCreateInfo_1.addState(PipelineCreateInfo::RasterizerState());
- pipelineCreateInfo_1.addState(PipelineCreateInfo::MultiSampleState());
- pipelineCreateInfo_1.addState(PipelineCreateInfo::DynamicState());
-
- PipelineCreateInfo pipelineCreateInfo_2(*m_pipelineLayout, *m_renderPass, 0, 0);
- pipelineCreateInfo_2.addShader(PipelineCreateInfo::PipelineShaderStage(*vs, "main", vk::VK_SHADER_STAGE_VERTEX_BIT));
- pipelineCreateInfo_2.addShader(PipelineCreateInfo::PipelineShaderStage(*fs, "main", vk::VK_SHADER_STAGE_FRAGMENT_BIT));
- pipelineCreateInfo_2.addState(PipelineCreateInfo::VertexInputState(m_vertexInputState));
- pipelineCreateInfo_2.addState(PipelineCreateInfo::InputAssemblerState(vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST));
- pipelineCreateInfo_2.addState(PipelineCreateInfo::ColorBlendState(1, &vkCbAttachmentState));
- pipelineCreateInfo_2.addState(PipelineCreateInfo::ViewportState(1));
- pipelineCreateInfo_2.addState(PipelineCreateInfo::DepthStencilState());
- pipelineCreateInfo_2.addState(PipelineCreateInfo::RasterizerState());
- pipelineCreateInfo_2.addState(PipelineCreateInfo::MultiSampleState());
- pipelineCreateInfo_2.addState(PipelineCreateInfo::DynamicState());
-
- m_pipeline = vk::createGraphicsPipeline(m_vk, device, DE_NULL, &pipelineCreateInfo_1);
- m_pipelineAdditional = vk::createGraphicsPipeline(m_vk, device, DE_NULL, &pipelineCreateInfo_2);
+ const vk::Unique<vk::VkShaderModule> vs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0));
+ const vk::Unique<vk::VkShaderModule> fs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0));
+ std::vector<vk::VkViewport> viewports { { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f } };
+ std::vector<vk::VkRect2D> scissors { { { 0u, 0u }, { 0u, 0u } } };
+
+ const PipelineCreateInfo::ColorBlendState::Attachment attachmentState;
+ const PipelineCreateInfo::ColorBlendState colorBlendState(1, static_cast<const vk::VkPipelineColorBlendAttachmentState*>(&attachmentState));
+ const PipelineCreateInfo::RasterizerState rasterizerState;
+ const PipelineCreateInfo::DepthStencilState depthStencilState;
+ const PipelineCreateInfo::DynamicState dynamicState;
+
+ m_pipeline.setDefaultTopology(vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
+ .setDynamicState(static_cast<const vk::VkPipelineDynamicStateCreateInfo*>(&dynamicState))
+ .setDefaultMultisampleState()
+ .setupVertexInputStete(&m_vertexInputState)
+ .setupPreRasterizationShaderState(viewports,
+ scissors,
+ *m_pipelineLayout,
+ *m_renderPass,
+ 0u,
+ *vs,
+ static_cast<const vk::VkPipelineRasterizationStateCreateInfo*>(&rasterizerState))
+ .setupFragmentShaderState(*m_pipelineLayout, *m_renderPass, 0u, *fs, static_cast<const vk::VkPipelineDepthStencilStateCreateInfo*>(&depthStencilState))
+ .setupFragmentOutputState(*m_renderPass, 0u, static_cast<const vk::VkPipelineColorBlendStateCreateInfo*>(&colorBlendState))
+ .buildPipeline();
+
+ m_pipelineAdditional.setDefaultTopology(vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
+ .setDynamicState(static_cast<const vk::VkPipelineDynamicStateCreateInfo*>(&dynamicState))
+ .setDefaultMultisampleState()
+ .setupVertexInputStete(&m_vertexInputState)
+ .setupPreRasterizationShaderState(viewports,
+ scissors,
+ *m_pipelineLayout,
+ *m_renderPass,
+ 0u,
+ *vs,
+ static_cast<const vk::VkPipelineRasterizationStateCreateInfo*>(&rasterizerState))
+ .setupFragmentShaderState(*m_pipelineLayout, *m_renderPass, 0u, *fs, static_cast<const vk::VkPipelineDepthStencilStateCreateInfo*>(&depthStencilState))
+ .setupFragmentOutputState(*m_renderPass, 0u, static_cast<const vk::VkPipelineColorBlendStateCreateInfo*>(&colorBlendState))
+ .buildPipeline();
}
virtual tcu::TestStatus iterate(void)
setDynamicBlendState();
setDynamicDepthStencilState();
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline.getPipeline());
const vk::VkDeviceSize vertexBufferOffset = 0;
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
// draw quad using vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP
m_vk.cmdDraw(*m_cmdBuffer, 4, 1, 0, 0);
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineAdditional);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipelineAdditional.getPipeline());
// bind second state
setDynamicViewportState(1, &viewport, &scissor_2);
} //anonymous
-DynamicStateGeneralTests::DynamicStateGeneralTests (tcu::TestContext& testCtx)
- : TestCaseGroup (testCtx, "general_state", "General tests for dynamic states")
+DynamicStateGeneralTests::DynamicStateGeneralTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType)
+ : TestCaseGroup (testCtx, "general_state", "General tests for dynamic states")
+ , m_pipelineConstructionType (pipelineConstructionType)
{
/* Left blank on purpose */
}
shaderPaths[glu::SHADERTYPE_VERTEX] = "vulkan/dynamic_state/VertexFetch.vert";
shaderPaths[glu::SHADERTYPE_FRAGMENT] = "vulkan/dynamic_state/VertexFetch.frag";
- addChild(new InstanceFactory<StateSwitchTestInstance>(m_testCtx, "state_switch", "Perform multiple draws with different VP states (scissor test)", shaderPaths));
- addChild(new InstanceFactory<BindOrderTestInstance>(m_testCtx, "bind_order", "Check if binding order is not important for pipeline configuration", shaderPaths));
- addChild(new InstanceFactory<StatePersistenceTestInstance>(m_testCtx, "state_persistence", "Check if bound states are persistent across pipelines", shaderPaths));
+ addChild(new InstanceFactory<StateSwitchTestInstance>(m_testCtx, "state_switch", "Perform multiple draws with different VP states (scissor test)", m_pipelineConstructionType, shaderPaths));
+ addChild(new InstanceFactory<BindOrderTestInstance>(m_testCtx, "bind_order", "Check if binding order is not important for pipeline configuration", m_pipelineConstructionType, shaderPaths));
+ addChild(new InstanceFactory<StatePersistenceTestInstance>(m_testCtx, "state_persistence", "Check if bound states are persistent across pipelines", m_pipelineConstructionType, shaderPaths));
}
} // DynamicState
#include "tcuDefs.hpp"
#include "vktTestCase.hpp"
+#include "vkPipelineConstructionUtil.hpp"
namespace vkt
{
class DynamicStateGeneralTests : public tcu::TestCaseGroup
{
public:
- DynamicStateGeneralTests (tcu::TestContext& testCtx);
+ DynamicStateGeneralTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType);
~DynamicStateGeneralTests (void);
void init (void);
private:
DynamicStateGeneralTests (const DynamicStateGeneralTests& other);
DynamicStateGeneralTests& operator= (const DynamicStateGeneralTests& other);
+
+ vk::PipelineConstructionType m_pipelineConstructionType;
};
} // DynamicState
// Shader modules for graphics pipelines.
Move<VkShaderModule> m_vertModule, m_geomModule, m_fragModule;
- // Vertex, geometry, fragment stages for creating the pipeline.
- VkPipelineShaderStageCreateInfo m_stages[3];
-
// Geometry shader pipeline, converts points into rasterized
// struct Rectangles using geometry shader, which also selects the
// viewport to use. Pipeline array maps viewport/scissor count to
// the pipeline to use (special value 0 indicates that
// viewport/scissor count is dynamic state).
- Move<VkPipelineLayout> m_rectanglePipelineLayout;
- Move<VkPipeline> m_rectanglePipelines[kMaxViewports + 1];
+ Move<VkPipelineLayout> m_rectanglePipelineLayout;
+ std::vector<GraphicsPipelineWrapper> m_rectanglePipelines;
// Command pool
Move<VkCommandPool> m_cmdPool;
float m_cpuDepthBuffer[kHeight][kWidth];
public:
- InheritanceTestInstance(Context& context, InheritanceMode inheritanceMode);
+ InheritanceTestInstance(Context& context, PipelineConstructionType pipelineConstructionType, InheritanceMode inheritanceMode);
tcu::TestStatus iterate(void);
private:
VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, NULL,
0, 1, &binding, 4, attributes };
-static const VkPipelineInputAssemblyStateCreateInfo assembly {
- VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, NULL,
- 0, VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_FALSE };
-
-static const VkPipelineViewportStateCreateInfo viewportTemplate = {
- VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, NULL,
- 0, 0, NULL, 0, NULL };
-
static const VkPipelineRasterizationStateCreateInfo rasterization = {
VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, NULL,
0,
VK_FRONT_FACE_COUNTER_CLOCKWISE,
VK_FALSE, 0.0f, 0.0f, 0.0f, 1.0f };
-static const VkPipelineMultisampleStateCreateInfo multisample = {
- VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, NULL,
- 0, VK_SAMPLE_COUNT_1_BIT, VK_FALSE, 0.0f, NULL, VK_FALSE, VK_FALSE };
-
static const VkPipelineDepthStencilStateCreateInfo depthStencil = {
VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, NULL,
0, VK_TRUE, VK_TRUE, VK_COMPARE_OP_LESS,
VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, NULL,
0, 2, dynamicStateWithCountData };
-// Fill in the given graphics pipeline state. The caller needs to
-// provide space to store the generated
-// VkPipelineViewportStateCreateInfo, and provide the render pass,
-// pipeline layout, shader modules, and the viewport/scissor count (0
-// to use VK_DYNAMIC_STATE_VIEWPORT/SCISSOR_WITH_COUNT_EXT)
-static void fill(VkRenderPass renderPass,
- VkPipelineLayout layout,
- deUint32 staticViewportScissorCount,
- deUint32 stageCount,
- const VkPipelineShaderStageCreateInfo* pStages,
- VkGraphicsPipelineCreateInfo* outCreateInfo,
- VkPipelineViewportStateCreateInfo* outViewportState)
-{
- outCreateInfo->sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
- outCreateInfo->pNext = NULL;
- outCreateInfo->flags = 0;
- outCreateInfo->stageCount = stageCount;
- outCreateInfo->pStages = pStages;
- outCreateInfo->pVertexInputState = &vertexInput;
- outCreateInfo->pInputAssemblyState = &assembly;
- outCreateInfo->pTessellationState = NULL;
- outCreateInfo->pViewportState = outViewportState;
- outCreateInfo->pRasterizationState = &rasterization;
- outCreateInfo->pMultisampleState = &multisample;
- outCreateInfo->pDepthStencilState = &depthStencil;
- outCreateInfo->pColorBlendState = &blend;
- outCreateInfo->pDynamicState = staticViewportScissorCount == 0 ? &dynamicStateWithCount : &dynamicState;
- outCreateInfo->layout = layout;
- outCreateInfo->renderPass = renderPass;
- outCreateInfo->subpass = 0;
- outCreateInfo->basePipelineHandle = 0;
- outCreateInfo->basePipelineIndex = 0;
-
- VkPipelineViewportStateCreateInfo viewportState = viewportTemplate;
- viewportState.viewportCount = staticViewportScissorCount;
- viewportState.scissorCount = staticViewportScissorCount;
- *outViewportState = viewportState;
-}
-
} // end namespace pipelinestate
}
-
// Initialize the Vulkan state for the tests.
-InheritanceTestInstance::InheritanceTestInstance(Context& context, InheritanceMode inheritanceMode)
+InheritanceTestInstance::InheritanceTestInstance(Context& context, PipelineConstructionType pipelineConstructionType, InheritanceMode inheritanceMode)
: TestInstance(context)
, m_in(context.getInstanceInterface())
, m_vk(context.getDeviceInterface())
// Compile graphics pipeline stages.
m_vertModule = vk::createShaderModule(m_vk, dev, m_context.getBinaryCollection().get("vert"), 0u);
- m_stages[0].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
- m_stages[0].pNext = NULL;
- m_stages[0].flags = 0;
- m_stages[0].stage = VK_SHADER_STAGE_VERTEX_BIT;
- m_stages[0].module = m_vertModule.get();
- m_stages[0].pName = "main";
- m_stages[0].pSpecializationInfo = NULL;
-
m_geomModule = vk::createShaderModule(m_vk, dev, m_context.getBinaryCollection().get("geom"), 0u);
- m_stages[1].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
- m_stages[1].pNext = NULL;
- m_stages[1].flags = 0;
- m_stages[1].stage = VK_SHADER_STAGE_GEOMETRY_BIT;
- m_stages[1].module = m_geomModule.get();
- m_stages[1].pName = "main";
- m_stages[1].pSpecializationInfo = NULL;
-
m_fragModule = vk::createShaderModule(m_vk, dev, m_context.getBinaryCollection().get("frag"), 0u);
- m_stages[2].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
- m_stages[2].pNext = NULL;
- m_stages[2].flags = 0;
- m_stages[2].stage = VK_SHADER_STAGE_FRAGMENT_BIT;
- m_stages[2].module = m_fragModule.get();
- m_stages[2].pName = "main";
- m_stages[2].pSpecializationInfo = NULL;
// Set up pipeline layout (empty)
VkPipelineLayoutCreateInfo pipelineLayoutInfo{ };
pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
m_rectanglePipelineLayout = createPipelineLayout(m_vk, dev, &pipelineLayoutInfo, NULL);
+
// Graphics pipelines are created on-the-fly later.
+ deUint32 size = kMaxViewports + 1;
+ m_rectanglePipelines.reserve(size);
+ for (deUint32 i = 0; i < size; ++i)
+ m_rectanglePipelines.emplace_back(m_vk, m_context.getDevice(), pipelineConstructionType);
// Command pool and command buffers.
VkCommandPoolCreateInfo poolInfo {
staticViewportCount = 0;
break;
}
- VkPipeline graphicsPipeline = m_rectanglePipelines[staticViewportCount].get();
- if (!graphicsPipeline)
+ DE_ASSERT(staticViewportCount < m_rectanglePipelines.size());
+ if (!m_rectanglePipelines[staticViewportCount].wasBuild())
{
- VkGraphicsPipelineCreateInfo pipelineInfo;
- VkPipelineViewportStateCreateInfo viewportInfo;
- pipelinestate::fill(
- m_renderPass.get(), m_rectanglePipelineLayout.get(), staticViewportCount,
- 3, m_stages,
- &pipelineInfo, &viewportInfo);
- m_rectanglePipelines[staticViewportCount] = createGraphicsPipeline(m_vk, m_context.getDevice(), 0, &pipelineInfo, NULL);
- graphicsPipeline = m_rectanglePipelines[staticViewportCount].get();
+ const std::vector<VkViewport> viewports;
+ const std::vector<VkRect2D> scissors;
+
+ m_rectanglePipelines[staticViewportCount]
+ .setDynamicState((staticViewportCount == 0) ? &pipelinestate::dynamicStateWithCount : &pipelinestate::dynamicState)
+ .setDefaultTopology(VK_PRIMITIVE_TOPOLOGY_POINT_LIST)
+ .setDefaultViewportsCount(staticViewportCount)
+ .setDefaultScissorsCount(staticViewportCount)
+ .setDefaultMultisampleState()
+ .setDefaultColorBlendState()
+ .setupVertexInputStete(&pipelinestate::vertexInput)
+ .setupPreRasterizationShaderState(viewports,
+ scissors,
+ *m_rectanglePipelineLayout,
+ *m_renderPass,
+ 0u,
+ *m_vertModule,
+ &pipelinestate::rasterization,
+ DE_NULL,
+ DE_NULL,
+ *m_geomModule)
+ .setupFragmentShaderState(*m_rectanglePipelineLayout,
+ *m_renderPass,
+ 0u,
+ *m_fragModule,
+ &pipelinestate::depthStencil)
+ .setupFragmentOutputState(*m_renderPass, 0u, &pipelinestate::blend)
+ .buildPipeline();
}
+ const VkPipeline graphicsPipeline = m_rectanglePipelines[staticViewportCount].getPipeline();
m_vk.cmdBindPipeline(m_subpassCmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline);
// Bind vertex buffer and draw.
class InheritanceTestCase : public TestCase
{
public:
- InheritanceTestCase (tcu::TestContext& testCtx, InheritanceMode inheritanceMode,
+ InheritanceTestCase (tcu::TestContext& testCtx,
+ vk::PipelineConstructionType pipelineConstructionType, InheritanceMode inheritanceMode,
const char* name, const char* description)
- : TestCase(testCtx, name, description), m_inheritanceMode(inheritanceMode)
+ : TestCase(testCtx, name, description)
+ , m_pipelineConstructionType (pipelineConstructionType)
+ , m_inheritanceMode (inheritanceMode)
{
}
TestInstance* createInstance (Context& context) const
{
- return new InheritanceTestInstance(context, m_inheritanceMode);
+ return new InheritanceTestInstance(context, m_pipelineConstructionType, m_inheritanceMode);
}
virtual void checkSupport (Context& context) const
{
context.requireDeviceFunctionality("VK_EXT_extended_dynamic_state");
}
+
+ if (m_pipelineConstructionType != PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC)
+ {
+ context.requireDeviceFunctionality("VK_KHR_graphics_pipeline_library");
+ if ((m_pipelineConstructionType == PIPELINE_CONSTRUCTION_TYPE_FAST_LINKED_LIBRARY) &&
+ !context.getGraphicsPipelineLibraryProperties().graphicsPipelineLibraryFastLinking)
+ TCU_THROW(NotSupportedError, "graphicsPipelineLibraryFastLinking is not supported");
+ }
}
virtual void initPrograms (vk::SourceCollections& programCollection) const
programCollection.glslSources.add("frag") << glu::FragmentSource(pipelinestate::frag_glsl);
}
private:
- InheritanceMode m_inheritanceMode;
+ vk::PipelineConstructionType m_pipelineConstructionType;
+ InheritanceMode m_inheritanceMode;
};
} // anonymous namespace
-DynamicStateInheritanceTests::DynamicStateInheritanceTests (tcu::TestContext& testCtx)
- : TestCaseGroup(testCtx, "inheritance", "Tests for inherited viewport/scissor state")
+DynamicStateInheritanceTests::DynamicStateInheritanceTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType)
+ : TestCaseGroup (testCtx, "inheritance", "Tests for inherited viewport/scissor state")
+ , m_pipelineConstructionType (pipelineConstructionType)
{
}
void DynamicStateInheritanceTests::init (void)
{
- addChild(new InheritanceTestCase(m_testCtx, kInheritanceDisabled, "baseline",
- "Baseline, no viewport/scissor inheritance"));
- addChild(new InheritanceTestCase(m_testCtx, kInheritFromPrimary, "primary",
- "Inherit viewport/scissor from calling primary command buffer"));
- addChild(new InheritanceTestCase(m_testCtx, kInheritFromSecondary, "secondary",
- "Inherit viewport/scissor from another secondary command buffer"));
- addChild(new InheritanceTestCase(m_testCtx, kSplitInheritance, "split",
- "Inherit some viewports/scissors from primary, some from secondary"));
- addChild(new InheritanceTestCase(m_testCtx, kInheritFromPrimaryWithCount, "primary_with_count",
- "Inherit viewport/scissor with count from calling primary command buffer"));
- addChild(new InheritanceTestCase(m_testCtx, kInheritFromSecondaryWithCount, "secondary_with_count",
- "Inherit viewport/scissor with count from another secondary command buffer"));
+ addChild(new InheritanceTestCase(m_testCtx, m_pipelineConstructionType, kInheritanceDisabled,
+ "baseline", "Baseline, no viewport/scissor inheritance"));
+ addChild(new InheritanceTestCase(m_testCtx, m_pipelineConstructionType, kInheritFromPrimary,
+ "primary", "Inherit viewport/scissor from calling primary command buffer"));
+ addChild(new InheritanceTestCase(m_testCtx, m_pipelineConstructionType, kInheritFromSecondary,
+ "secondary", "Inherit viewport/scissor from another secondary command buffer"));
+ addChild(new InheritanceTestCase(m_testCtx, m_pipelineConstructionType, kSplitInheritance,
+ "split", "Inherit some viewports/scissors from primary, some from secondary"));
+ addChild(new InheritanceTestCase(m_testCtx, m_pipelineConstructionType, kInheritFromPrimaryWithCount,
+ "primary_with_count", "Inherit viewport/scissor with count from calling primary command buffer"));
+ addChild(new InheritanceTestCase(m_testCtx, m_pipelineConstructionType, kInheritFromSecondaryWithCount,
+ "secondary_with_count", "Inherit viewport/scissor with count from another secondary command buffer"));
}
} // DynamicState
#include "tcuDefs.hpp"
#include "vktTestCase.hpp"
+#include "vkPipelineConstructionUtil.hpp"
namespace vkt
{
class DynamicStateInheritanceTests : public tcu::TestCaseGroup
{
public:
- DynamicStateInheritanceTests (tcu::TestContext& testCtx);
+ DynamicStateInheritanceTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType);
void init (void);
private:
DynamicStateInheritanceTests (const DynamicStateInheritanceTests& other); // not implemented
DynamicStateInheritanceTests& operator= (const DynamicStateInheritanceTests& other); // not implemented
+
+ vk::PipelineConstructionType m_pipelineConstructionType;
};
} // DynamicState
class DepthBiasBaseCase : public TestInstance
{
public:
- DepthBiasBaseCase (Context& context, const char* vertexShaderName, const char* fragmentShaderName)
+ DepthBiasBaseCase (Context& context, vk::PipelineConstructionType pipelineConstructionType, const char* vertexShaderName, const char* fragmentShaderName)
: TestInstance (context)
, m_colorAttachmentFormat (vk::VK_FORMAT_R8G8B8A8_UNORM)
, m_depthStencilAttachmentFormat (vk::VK_FORMAT_UNDEFINED)
, m_topology (vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
, m_vk (context.getDeviceInterface())
+ , m_pipeline (m_vk, context.getDevice(), pipelineConstructionType)
, m_vertexShaderName (vertexShaderName)
, m_fragmentShaderName (fragmentShaderName)
{
const vk::DeviceInterface& m_vk;
- vk::Move<vk::VkPipeline> m_pipeline;
+ vk::GraphicsPipelineWrapper m_pipeline;
vk::Move<vk::VkPipelineLayout> m_pipelineLayout;
de::SharedPtr<Image> m_colorTargetImage;
2,
vertexInputAttributeDescriptions);
- const PipelineCreateInfo::ColorBlendState::Attachment vkCbAttachmentState;
+ std::vector<vk::VkViewport> viewports { { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f } };
+ std::vector<vk::VkRect2D> scissors { { { 0u, 0u }, { 0u, 0u } } };
+
+ const PipelineCreateInfo::ColorBlendState::Attachment attachmentState;
+ const PipelineCreateInfo::ColorBlendState colorBlendState(1u, static_cast<const vk::VkPipelineColorBlendAttachmentState*>(&attachmentState));
+ const PipelineCreateInfo::RasterizerState rasterizerState;
+ PipelineCreateInfo::DynamicState dynamicState;
+
+ m_pipeline.setDefaultTopology(m_topology)
+ .setDynamicState(static_cast<const vk::VkPipelineDynamicStateCreateInfo*>(&dynamicState))
+ .setDefaultMultisampleState()
+ .setupVertexInputStete(&m_vertexInputState)
+ .setupPreRasterizationShaderState(viewports,
+ scissors,
+ *m_pipelineLayout,
+ *m_renderPass,
+ 0u,
+ *vs,
+ static_cast<const vk::VkPipelineRasterizationStateCreateInfo*>(&rasterizerState))
+ .setupFragmentShaderState(*m_pipelineLayout, *m_renderPass, 0u, *fs, static_cast<const vk::VkPipelineDepthStencilStateCreateInfo*>(&m_depthStencilState))
+ .setupFragmentOutputState(*m_renderPass, 0u, static_cast<const vk::VkPipelineColorBlendStateCreateInfo*>(&colorBlendState))
+ .buildPipeline();
- PipelineCreateInfo pipelineCreateInfo(*m_pipelineLayout, *m_renderPass, 0, 0);
- pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*vs, "main", vk::VK_SHADER_STAGE_VERTEX_BIT));
- pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*fs, "main", vk::VK_SHADER_STAGE_FRAGMENT_BIT));
- pipelineCreateInfo.addState(PipelineCreateInfo::VertexInputState(m_vertexInputState));
- pipelineCreateInfo.addState(PipelineCreateInfo::InputAssemblerState(m_topology));
- pipelineCreateInfo.addState(PipelineCreateInfo::ColorBlendState(1, &vkCbAttachmentState));
- pipelineCreateInfo.addState(PipelineCreateInfo::ViewportState(1));
- pipelineCreateInfo.addState(m_depthStencilState);
- pipelineCreateInfo.addState(PipelineCreateInfo::RasterizerState());
- pipelineCreateInfo.addState(PipelineCreateInfo::MultiSampleState());
- pipelineCreateInfo.addState(PipelineCreateInfo::DynamicState());
-
- m_pipeline = vk::createGraphicsPipeline(m_vk, device, DE_NULL, &pipelineCreateInfo);
std::vector<vk::VkImageView> attachments(2);
attachments[0] = *m_colorTargetView;
class DepthBiasParamTestInstance : public DepthBiasBaseCase
{
public:
- DepthBiasParamTestInstance (Context& context, ShaderMap shaders)
- : DepthBiasBaseCase (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ DepthBiasParamTestInstance (Context& context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : DepthBiasBaseCase (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
{
m_data.push_back(PositionColorVertex(tcu::Vec4(-1.0f, 1.0f, 0.5f, 1.0f), tcu::RGBA::blue().toVec()));
m_data.push_back(PositionColorVertex(tcu::Vec4(1.0f, 1.0f, 0.5f, 1.0f), tcu::RGBA::blue().toVec()));
setDynamicBlendState();
setDynamicDepthStencilState();
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline.getPipeline());
const vk::VkDeviceSize vertexBufferOffset = 0;
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
class DepthBiasClampParamTestInstance : public DepthBiasBaseCase
{
public:
- DepthBiasClampParamTestInstance (Context& context, ShaderMap shaders)
- : DepthBiasBaseCase (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ DepthBiasClampParamTestInstance (Context& context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : DepthBiasBaseCase (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
{
m_data.push_back(PositionColorVertex(tcu::Vec4(-1.0f, 1.0f, 0.0f, 1.0f), tcu::RGBA::blue().toVec()));
m_data.push_back(PositionColorVertex(tcu::Vec4(1.0f, 1.0f, 0.0f, 1.0f), tcu::RGBA::blue().toVec()));
setDynamicBlendState();
setDynamicDepthStencilState();
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline.getPipeline());
const vk::VkDeviceSize vertexBufferOffset = 0;
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
class LineWidthParamTestInstance : public DynamicStateBaseClass
{
public:
- LineWidthParamTestInstance (Context& context, ShaderMap shaders)
- : DynamicStateBaseClass (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ LineWidthParamTestInstance (Context& context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : DynamicStateBaseClass (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
{
m_topology = vk::VK_PRIMITIVE_TOPOLOGY_LINE_LIST;
setDynamicDepthStencilState();
setDynamicRasterizationState(deFloatFloor(deviceProperties.limits.lineWidthRange[1]));
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline.getPipeline());
const vk::VkDeviceSize vertexBufferOffset = 0;
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
struct DepthBiasNonZeroParams
{
+ vk::PipelineConstructionType pipelineConstructionType;
float depthBiasConstant;
float depthBiasClamp;
DepthBiasNonZeroPushConstants pushConstants;
const auto& features = context.getDeviceFeatures();
if (m_params.depthBiasClamp != 0.0f && !features.depthBiasClamp)
TCU_THROW(NotSupportedError, "Depth bias clamping not supported");
+
+ if (m_params.pipelineConstructionType != vk::PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC)
+ {
+ context.requireDeviceFunctionality("VK_KHR_graphics_pipeline_library");
+ if ((m_params.pipelineConstructionType == vk::PIPELINE_CONSTRUCTION_TYPE_FAST_LINKED_LIBRARY) &&
+ !context.getGraphicsPipelineLibraryProperties().graphicsPipelineLibraryFastLinking)
+ TCU_THROW(NotSupportedError, "graphicsPipelineLibraryFastLinking is not supported");
+ }
}
void DepthBiasNonZeroCase::initPrograms (vk::SourceCollections& programCollection) const
} //anonymous
-DynamicStateRSTests::DynamicStateRSTests (tcu::TestContext& testCtx)
- : TestCaseGroup (testCtx, "rs_state", "Tests for rasterizer state")
+DynamicStateRSTests::DynamicStateRSTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType)
+ : TestCaseGroup (testCtx, "rs_state", "Tests for rasterizer state")
+ , m_pipelineConstructionType (pipelineConstructionType)
{
/* Left blank on purpose */
}
shaderPaths[glu::SHADERTYPE_VERTEX] = "vulkan/dynamic_state/VertexFetch.vert";
shaderPaths[glu::SHADERTYPE_FRAGMENT] = "vulkan/dynamic_state/VertexFetch.frag";
- addChild(new InstanceFactory<DepthBiasParamTestInstance>(m_testCtx, "depth_bias", "Test depth bias functionality", shaderPaths));
- addChild(new InstanceFactory<DepthBiasClampParamTestInstance, FunctionSupport0>(m_testCtx, "depth_bias_clamp", "Test depth bias clamp functionality", shaderPaths, checkDepthBiasClampSupport));
- addChild(new InstanceFactory<LineWidthParamTestInstance, FunctionSupport0>(m_testCtx, "line_width", "Draw a line with width set to max defined by physical device", shaderPaths, checkWideLinesSupport));
+ addChild(new InstanceFactory<DepthBiasParamTestInstance>(m_testCtx, "depth_bias", "Test depth bias functionality", m_pipelineConstructionType, shaderPaths));
+ addChild(new InstanceFactory<DepthBiasClampParamTestInstance, FunctionSupport0>(m_testCtx, "depth_bias_clamp", "Test depth bias clamp functionality", m_pipelineConstructionType, shaderPaths, checkDepthBiasClampSupport));
+ addChild(new InstanceFactory<LineWidthParamTestInstance, FunctionSupport0>(m_testCtx, "line_width", "Draw a line with width set to max defined by physical device", m_pipelineConstructionType, shaderPaths, checkWideLinesSupport));
{
- const DepthBiasNonZeroParams params =
+ const DepthBiasNonZeroParams params
{
- 16384.0f, // float depthBiasConstant;
- 0.0f, // float depthBiasClamp;
- { // DepthBiasNonZeroPushConstants pushConstants;
- 0.375f, // float geometryDepth;
- 0.5f, // float minDepth;
- 1.0f, // float maxDepth;
+ m_pipelineConstructionType, // vk::PipelineConstructionType pipelineConstructionType
+ 16384.0f, // float depthBiasConstant;
+ 0.0f, // float depthBiasClamp;
+ { // DepthBiasNonZeroPushConstants pushConstants;
+ 0.375f, // float geometryDepth;
+ 0.5f, // float minDepth;
+ 1.0f, // float maxDepth;
},
};
addChild(new DepthBiasNonZeroCase(m_testCtx, "nonzero_depth_bias_constant", "", params));
}
{
- const DepthBiasNonZeroParams params =
+ const DepthBiasNonZeroParams params
{
- 16384.0f, // float depthBiasConstant;
- 0.125f, // float depthBiasClamp;
- { // DepthBiasNonZeroPushConstants pushConstants;
- 0.375f, // float geometryDepth;
- 0.46875f, // float minDepth;
- 0.53125f, // float maxDepth;
+ m_pipelineConstructionType, // vk::PipelineConstructionType pipelineConstructionType;
+ 16384.0f, // float depthBiasConstant;
+ 0.125f, // float depthBiasClamp;
+ { // DepthBiasNonZeroPushConstants pushConstants;
+ 0.375f, // float geometryDepth;
+ 0.46875f, // float minDepth;
+ 0.53125f, // float maxDepth;
},
};
addChild(new DepthBiasNonZeroCase(m_testCtx, "nonzero_depth_bias_clamp", "", params));
#include "tcuDefs.hpp"
#include "vktTestCase.hpp"
+#include "vkPipelineConstructionUtil.hpp"
namespace vkt
{
class DynamicStateRSTests : public tcu::TestCaseGroup
{
public:
- DynamicStateRSTests (tcu::TestContext& testCtx);
+ DynamicStateRSTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType);
~DynamicStateRSTests (void);
void init(void);
private:
DynamicStateRSTests (const DynamicStateRSTests& other);
DynamicStateRSTests& operator= (const DynamicStateRSTests& other);
+
+ vk::PipelineConstructionType m_pipelineConstructionType;
};
} // DynamicState
#include "gluShaderUtil.hpp"
#include "vkPrograms.hpp"
+#include "vkPipelineConstructionUtil.hpp"
#include "deUniquePtr.hpp"
{
public:
InstanceFactory (tcu::TestContext& testCtx, const std::string& name, const std::string& desc,
+ const vk::PipelineConstructionType pipelineConstructionType,
const std::map<glu::ShaderType, const char*> shaderPaths)
- : TestCase (testCtx, name, desc)
- , m_shaderPaths (shaderPaths)
- , m_support ()
+ : TestCase (testCtx, name, desc)
+ , m_pipelineConstructionType (pipelineConstructionType)
+ , m_shaderPaths (shaderPaths)
+ , m_support ()
{
}
InstanceFactory (tcu::TestContext& testCtx, const std::string& name, const std::string& desc,
+ const vk::PipelineConstructionType pipelineConstructionType,
const std::map<glu::ShaderType, const char*> shaderPaths, const Support& support)
- : TestCase (testCtx, name, desc)
- , m_shaderPaths (shaderPaths)
- , m_support (support)
+ : TestCase (testCtx, name, desc)
+ , m_pipelineConstructionType (pipelineConstructionType)
+ , m_shaderPaths (shaderPaths)
+ , m_support (support)
{
}
TestInstance* createInstance (Context& context) const
{
- return new Instance(context, m_shaderPaths);
+ return new Instance(context, m_pipelineConstructionType, m_shaderPaths);
}
virtual void initPrograms (vk::SourceCollections& programCollection) const
virtual void checkSupport (Context& context) const
{
+ if (m_pipelineConstructionType != vk::PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC)
+ {
+ context.requireDeviceFunctionality("VK_KHR_graphics_pipeline_library");
+ if ((m_pipelineConstructionType == vk::PIPELINE_CONSTRUCTION_TYPE_FAST_LINKED_LIBRARY) &&
+ !context.getGraphicsPipelineLibraryProperties().graphicsPipelineLibraryFastLinking)
+ TCU_THROW(NotSupportedError, "graphicsPipelineLibraryFastLinking is not supported");
+ }
+
m_support.checkSupport(context);
}
private:
- const ShaderMap m_shaderPaths;
- const Support m_support;
+ const vk::PipelineConstructionType m_pipelineConstructionType;
+ const ShaderMap m_shaderPaths;
+ const Support m_support;
};
} // DynamicState
namespace
{
-void createChildren (tcu::TestCaseGroup* group)
+void createChildren (tcu::TestCaseGroup* group, vk::PipelineConstructionType pipelineConstructionType)
{
tcu::TestContext& testCtx = group->getTestContext();
- group->addChild(new DynamicStateVPTests(testCtx));
- group->addChild(new DynamicStateRSTests(testCtx));
- group->addChild(new DynamicStateCBTests(testCtx));
- group->addChild(new DynamicStateDSTests(testCtx));
- group->addChild(new DynamicStateGeneralTests(testCtx));
- group->addChild(createDynamicStateComputeTests(testCtx));
- group->addChild(new DynamicStateInheritanceTests(testCtx));
+ group->addChild(new DynamicStateVPTests (testCtx, pipelineConstructionType));
+ group->addChild(new DynamicStateRSTests (testCtx, pipelineConstructionType));
+ group->addChild(new DynamicStateCBTests (testCtx, pipelineConstructionType));
+ group->addChild(new DynamicStateDSTests (testCtx, pipelineConstructionType));
+ group->addChild(new DynamicStateGeneralTests (testCtx, pipelineConstructionType));
+ group->addChild(new DynamicStateInheritanceTests (testCtx, pipelineConstructionType));
+
+ if (pipelineConstructionType == vk::PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC)
+ group->addChild(createDynamicStateComputeTests (testCtx));
}
} // anonymous
tcu::TestCaseGroup* createTests (tcu::TestContext& testCtx)
{
- return createTestGroup(testCtx, "dynamic_state", "Dynamic State Tests", createChildren);
+ de::MovePtr<tcu::TestCaseGroup> monolithicGroup (createTestGroup(testCtx, "monolithic", "Monolithic pipeline tests", createChildren, vk::PIPELINE_CONSTRUCTION_TYPE_MONOLITHIC));
+ de::MovePtr<tcu::TestCaseGroup> pipelineLibraryGroup (createTestGroup(testCtx, "pipeline_library", "Graphics pipeline library tests", createChildren, vk::PIPELINE_CONSTRUCTION_TYPE_OPTIMISED_LIBRARY));
+ de::MovePtr<tcu::TestCaseGroup> fastLinkedLibraryGroup (createTestGroup(testCtx, "fast_linked_library", "Fast linked graphics pipeline library tests", createChildren, vk::PIPELINE_CONSTRUCTION_TYPE_FAST_LINKED_LIBRARY));
+
+ de::MovePtr<tcu::TestCaseGroup> mainGroup(new tcu::TestCaseGroup(testCtx, "dynamic_state", "Dynamic State Tests"));
+ mainGroup->addChild(monolithicGroup.release());
+ mainGroup->addChild(pipelineLibraryGroup.release());
+ mainGroup->addChild(fastLinkedLibraryGroup.release());
+ return mainGroup.release();
}
} // DynamicState
class ViewportStateBaseCase : public DynamicStateBaseClass
{
public:
- ViewportStateBaseCase (Context& context, const char* vertexShaderName, const char* fragmentShaderName)
- : DynamicStateBaseClass (context, vertexShaderName, fragmentShaderName)
+ ViewportStateBaseCase (Context& context, vk::PipelineConstructionType pipelineConstructionType, const char* vertexShaderName, const char* fragmentShaderName)
+ : DynamicStateBaseClass (context, pipelineConstructionType, vertexShaderName, fragmentShaderName)
{}
void initialize(void)
// set states here
setDynamicStates();
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline.getPipeline());
const vk::VkDeviceSize vertexBufferOffset = 0;
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
class ViewportParamTestInstance : public ViewportStateBaseCase
{
public:
- ViewportParamTestInstance (Context& context, ShaderMap shaders)
- : ViewportStateBaseCase (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ ViewportParamTestInstance (Context& context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : ViewportStateBaseCase (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
{
ViewportStateBaseCase::initialize();
}
class ScissorParamTestInstance : public ViewportStateBaseCase
{
public:
- ScissorParamTestInstance (Context& context, ShaderMap shaders)
- : ViewportStateBaseCase (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ ScissorParamTestInstance (Context& context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : ViewportStateBaseCase (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
{
ViewportStateBaseCase::initialize();
}
public:
- ViewportArrayTestInstance (Context& context, ShaderMap shaders)
- : DynamicStateBaseClass (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
+ ViewportArrayTestInstance (Context& context, vk::PipelineConstructionType pipelineConstructionType, ShaderMap shaders)
+ : DynamicStateBaseClass (context, pipelineConstructionType, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
, m_geometryShaderName (shaders[glu::SHADERTYPE_GEOMETRY])
{
for (int i = 0; i < 4; i++)
virtual void initPipeline (const vk::VkDevice device)
{
- const vk::Unique<vk::VkShaderModule> vs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0));
- const vk::Unique<vk::VkShaderModule> gs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_geometryShaderName), 0));
- const vk::Unique<vk::VkShaderModule> fs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0));
-
- const PipelineCreateInfo::ColorBlendState::Attachment vkCbAttachmentState;
-
- PipelineCreateInfo pipelineCreateInfo(*m_pipelineLayout, *m_renderPass, 0, 0);
- pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*vs, "main", vk::VK_SHADER_STAGE_VERTEX_BIT));
- pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*gs, "main", vk::VK_SHADER_STAGE_GEOMETRY_BIT));
- pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*fs, "main", vk::VK_SHADER_STAGE_FRAGMENT_BIT));
- pipelineCreateInfo.addState(PipelineCreateInfo::VertexInputState(m_vertexInputState));
- pipelineCreateInfo.addState(PipelineCreateInfo::InputAssemblerState(m_topology));
- pipelineCreateInfo.addState(PipelineCreateInfo::ColorBlendState(1, &vkCbAttachmentState));
- pipelineCreateInfo.addState(PipelineCreateInfo::ViewportState(4));
- pipelineCreateInfo.addState(PipelineCreateInfo::DepthStencilState());
- pipelineCreateInfo.addState(PipelineCreateInfo::RasterizerState());
- pipelineCreateInfo.addState(PipelineCreateInfo::MultiSampleState());
- pipelineCreateInfo.addState(PipelineCreateInfo::DynamicState());
-
- m_pipeline = vk::createGraphicsPipeline(m_vk, device, DE_NULL, &pipelineCreateInfo);
+ const vk::Unique<vk::VkShaderModule> vs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0));
+ const vk::Unique<vk::VkShaderModule> gs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_geometryShaderName), 0));
+ const vk::Unique<vk::VkShaderModule> fs (createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0));
+ std::vector<vk::VkViewport> viewports (4u, { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f });
+ std::vector<vk::VkRect2D> scissors (4u, { { 0u, 0u }, { 0u, 0u } });
+
+ const PipelineCreateInfo::ColorBlendState::Attachment attachmentState;
+ const PipelineCreateInfo::ColorBlendState colorBlendState(1u, static_cast<const vk::VkPipelineColorBlendAttachmentState*>(&attachmentState));
+ const PipelineCreateInfo::RasterizerState rasterizerState;
+ const PipelineCreateInfo::DepthStencilState depthStencilState;
+ PipelineCreateInfo::DynamicState dynamicState;
+
+ m_pipeline.setDefaultTopology(m_topology)
+ .setDynamicState(static_cast<const vk::VkPipelineDynamicStateCreateInfo*>(&dynamicState))
+ .setDefaultMultisampleState()
+ .setupVertexInputStete(&m_vertexInputState)
+ .setupPreRasterizationShaderState(viewports,
+ scissors,
+ *m_pipelineLayout,
+ *m_renderPass,
+ 0u,
+ *vs,
+ static_cast<const vk::VkPipelineRasterizationStateCreateInfo*>(&rasterizerState),
+ DE_NULL,
+ DE_NULL,
+ *gs)
+ .setupFragmentShaderState(*m_pipelineLayout, *m_renderPass, 0u, *fs, static_cast<const vk::VkPipelineDepthStencilStateCreateInfo*>(&depthStencilState))
+ .setupFragmentOutputState(*m_renderPass, 0u, static_cast<const vk::VkPipelineColorBlendStateCreateInfo*>(&colorBlendState))
+ .buildPipeline();
}
virtual tcu::TestStatus iterate (void)
setDynamicBlendState();
setDynamicDepthStencilState();
- m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+ m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline.getPipeline());
const vk::VkDeviceSize vertexBufferOffset = 0;
const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
} //anonymous
-DynamicStateVPTests::DynamicStateVPTests (tcu::TestContext& testCtx)
- : TestCaseGroup (testCtx, "vp_state", "Tests for viewport state")
+DynamicStateVPTests::DynamicStateVPTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType)
+ : TestCaseGroup (testCtx, "vp_state", "Tests for viewport state")
+ , m_pipelineConstructionType (pipelineConstructionType)
{
/* Left blank on purpose */
}
shaderPaths[glu::SHADERTYPE_VERTEX] = "vulkan/dynamic_state/VertexFetch.vert";
shaderPaths[glu::SHADERTYPE_FRAGMENT] = "vulkan/dynamic_state/VertexFetch.frag";
- addChild(new InstanceFactory<ViewportParamTestInstance>(m_testCtx, "viewport", "Set viewport which is twice bigger than screen size", shaderPaths));
- addChild(new InstanceFactory<ScissorParamTestInstance>(m_testCtx, "scissor", "Perform a scissor test on 1/4 bottom-left part of the surface", shaderPaths));
+ addChild(new InstanceFactory<ViewportParamTestInstance>(m_testCtx, "viewport", "Set viewport which is twice bigger than screen size", m_pipelineConstructionType, shaderPaths));
+ addChild(new InstanceFactory<ScissorParamTestInstance>(m_testCtx, "scissor", "Perform a scissor test on 1/4 bottom-left part of the surface", m_pipelineConstructionType, shaderPaths));
shaderPaths[glu::SHADERTYPE_GEOMETRY] = "vulkan/dynamic_state/ViewportArray.geom";
- addChild(new InstanceFactory<ViewportArrayTestInstance, FunctionSupport0>(m_testCtx, "viewport_array", "Multiple viewports and scissors", shaderPaths, checkGeometryAndMultiViewportSupport));
+ addChild(new InstanceFactory<ViewportArrayTestInstance, FunctionSupport0>(m_testCtx, "viewport_array", "Multiple viewports and scissors", m_pipelineConstructionType, shaderPaths, checkGeometryAndMultiViewportSupport));
}
} // DynamicState
#include "tcuDefs.hpp"
#include "vktTestCase.hpp"
+#include "vkPipelineConstructionUtil.hpp"
namespace vkt
{
class DynamicStateVPTests : public tcu::TestCaseGroup
{
public:
- DynamicStateVPTests (tcu::TestContext& testCtx);
+ DynamicStateVPTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType);
~DynamicStateVPTests (void);
void init (void);
private:
DynamicStateVPTests (const DynamicStateVPTests& other);
DynamicStateVPTests& operator= (const DynamicStateVPTests& other);
+
+ vk::PipelineConstructionType m_pipelineConstructionType;
};
} // DynamicState
// Queue commands and read results.
{
- const tcu::IVec2 renderSize = { RENDER_SIZE_WIDTH, RENDER_SIZE_HEIGHT };
+ const tcu::UVec2 renderSize = { RENDER_SIZE_WIDTH, RENDER_SIZE_HEIGHT };
const VkRect2D renderArea = makeRect2D(renderSize.x(), renderSize.y());
const de::MovePtr<BufferWithMemory> vertexBuffer = makeVertexBuffer();
const deUint32 vertexCount = static_cast<deUint32>(m_vertexData.size());
}
endRenderPass(vk, *cmdBuffer);
- copyImageToBuffer(vk, *cmdBuffer, *colorImage, *colorBuffer, renderSize);
- copyImageToBuffer(vk, *cmdBuffer, *depthImage, *depthBuffer, renderSize, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, 1u, VK_IMAGE_ASPECT_DEPTH_BIT, VK_IMAGE_ASPECT_DEPTH_BIT);
+ const tcu::IVec2 size = { (deInt32)renderSize.x(), (deInt32)renderSize.y() };
+ copyImageToBuffer(vk, *cmdBuffer, *colorImage, *colorBuffer, size);
+ copyImageToBuffer(vk, *cmdBuffer, *depthImage, *depthBuffer, size, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, 1u, VK_IMAGE_ASPECT_DEPTH_BIT, VK_IMAGE_ASPECT_DEPTH_BIT);
}
endCommandBuffer(vk, *cmdBuffer);
submitCommandsAndWait(vk, device, m_context.getUniversalQueue(), cmdBuffer.get());
-dEQP-VK.dynamic_state.vp_state.viewport
-dEQP-VK.dynamic_state.vp_state.scissor
-dEQP-VK.dynamic_state.vp_state.viewport_array
-dEQP-VK.dynamic_state.rs_state.depth_bias
-dEQP-VK.dynamic_state.rs_state.depth_bias_clamp
-dEQP-VK.dynamic_state.rs_state.line_width
-dEQP-VK.dynamic_state.rs_state.nonzero_depth_bias_constant
-dEQP-VK.dynamic_state.rs_state.nonzero_depth_bias_clamp
-dEQP-VK.dynamic_state.cb_state.blend_constants
-dEQP-VK.dynamic_state.ds_state.depth_bounds_1
-dEQP-VK.dynamic_state.ds_state.depth_bounds_2
-dEQP-VK.dynamic_state.ds_state.stencil_params_basic_1
-dEQP-VK.dynamic_state.ds_state.stencil_params_basic_2
-dEQP-VK.dynamic_state.ds_state.stencil_params_advanced
-dEQP-VK.dynamic_state.general_state.state_switch
-dEQP-VK.dynamic_state.general_state.bind_order
-dEQP-VK.dynamic_state.general_state.state_persistence
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_width.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_width.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bias.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bias.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.blend_constants.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.blend_constants.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_compare_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_compare_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_write_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_write_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_reference.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_reference.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.discard_rectangle_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.discard_rectangle_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.sample_locations_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.sample_locations_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.fragment_shading_rate_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.fragment_shading_rate_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_stipple_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.line_stipple_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.cull_mode_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.cull_mode_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.front_face_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.front_face_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.primitive_topology_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.primitive_topology_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.vertex_input_binding_stride_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.vertex_input_binding_stride_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_write_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_write_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_compare_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_compare_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_w_scaling_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_w_scaling_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_shading_rate_palette_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_shading_rate_palette_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_coarse_sample_order_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_coarse_sample_order_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.compute.exclusive_scissor_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.compute.exclusive_scissor_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_width.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_width.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bias.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bias.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.blend_constants.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.blend_constants.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_compare_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_compare_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_write_mask.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_write_mask.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_reference.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_reference.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.discard_rectangle_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.discard_rectangle_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.sample_locations_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.sample_locations_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.fragment_shading_rate_khr.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.fragment_shading_rate_khr.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_stipple_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_stipple_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.cull_mode_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.cull_mode_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.front_face_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.front_face_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.primitive_topology_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.primitive_topology_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor_with_count_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor_with_count_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.vertex_input_binding_stride_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.vertex_input_binding_stride_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_write_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_write_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_compare_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_compare_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_test_enable_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_test_enable_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_op_ext.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_op_ext.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_w_scaling_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_w_scaling_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.after
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.exclusive_scissor_nv.before
-dEQP-VK.dynamic_state.compute_transfer.single.transfer.exclusive_scissor_nv.after
-dEQP-VK.dynamic_state.compute_transfer.multi.compute.before
-dEQP-VK.dynamic_state.compute_transfer.multi.compute.after
-dEQP-VK.dynamic_state.compute_transfer.multi.transfer.before
-dEQP-VK.dynamic_state.compute_transfer.multi.transfer.after
-dEQP-VK.dynamic_state.inheritance.baseline
-dEQP-VK.dynamic_state.inheritance.primary
-dEQP-VK.dynamic_state.inheritance.secondary
-dEQP-VK.dynamic_state.inheritance.split
-dEQP-VK.dynamic_state.inheritance.primary_with_count
-dEQP-VK.dynamic_state.inheritance.secondary_with_count
+dEQP-VK.dynamic_state.monolithic.vp_state.viewport
+dEQP-VK.dynamic_state.monolithic.vp_state.scissor
+dEQP-VK.dynamic_state.monolithic.vp_state.viewport_array
+dEQP-VK.dynamic_state.monolithic.rs_state.depth_bias
+dEQP-VK.dynamic_state.monolithic.rs_state.depth_bias_clamp
+dEQP-VK.dynamic_state.monolithic.rs_state.line_width
+dEQP-VK.dynamic_state.monolithic.rs_state.nonzero_depth_bias_constant
+dEQP-VK.dynamic_state.monolithic.rs_state.nonzero_depth_bias_clamp
+dEQP-VK.dynamic_state.monolithic.cb_state.blend_constants
+dEQP-VK.dynamic_state.monolithic.ds_state.depth_bounds_1
+dEQP-VK.dynamic_state.monolithic.ds_state.depth_bounds_2
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_basic_1
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_basic_2
+dEQP-VK.dynamic_state.monolithic.ds_state.stencil_params_advanced
+dEQP-VK.dynamic_state.monolithic.general_state.state_switch
+dEQP-VK.dynamic_state.monolithic.general_state.bind_order
+dEQP-VK.dynamic_state.monolithic.general_state.state_persistence
+dEQP-VK.dynamic_state.monolithic.inheritance.baseline
+dEQP-VK.dynamic_state.monolithic.inheritance.primary
+dEQP-VK.dynamic_state.monolithic.inheritance.secondary
+dEQP-VK.dynamic_state.monolithic.inheritance.split
+dEQP-VK.dynamic_state.monolithic.inheritance.primary_with_count
+dEQP-VK.dynamic_state.monolithic.inheritance.secondary_with_count
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_width.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_width.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bias.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bias.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.blend_constants.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.blend_constants.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_compare_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_compare_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_write_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_write_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_reference.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_reference.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.discard_rectangle_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.discard_rectangle_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.sample_locations_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.sample_locations_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.fragment_shading_rate_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.fragment_shading_rate_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_stipple_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.line_stipple_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.cull_mode_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.cull_mode_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.front_face_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.front_face_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.primitive_topology_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.primitive_topology_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.scissor_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.vertex_input_binding_stride_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.vertex_input_binding_stride_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_write_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_write_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_compare_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_compare_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.depth_bounds_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.stencil_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_w_scaling_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_w_scaling_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_shading_rate_palette_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_shading_rate_palette_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_coarse_sample_order_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.viewport_coarse_sample_order_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.exclusive_scissor_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.exclusive_scissor_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_width.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_width.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bias.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bias.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.blend_constants.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.blend_constants.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_compare_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_compare_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_write_mask.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_write_mask.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_reference.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_reference.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.discard_rectangle_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.discard_rectangle_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.sample_locations_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.sample_locations_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.fragment_shading_rate_khr.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.fragment_shading_rate_khr.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_stipple_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.line_stipple_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.cull_mode_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.cull_mode_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.front_face_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.front_face_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.primitive_topology_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.primitive_topology_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor_with_count_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.scissor_with_count_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.vertex_input_binding_stride_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.vertex_input_binding_stride_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_write_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_write_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_compare_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_compare_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.depth_bounds_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_test_enable_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_test_enable_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_op_ext.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.stencil_op_ext.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_w_scaling_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_w_scaling_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.exclusive_scissor_nv.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.single.transfer.exclusive_scissor_nv.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.compute.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.compute.after
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.transfer.before
+dEQP-VK.dynamic_state.monolithic.compute_transfer.multi.transfer.after
+dEQP-VK.dynamic_state.pipeline_library.vp_state.viewport
+dEQP-VK.dynamic_state.pipeline_library.vp_state.scissor
+dEQP-VK.dynamic_state.pipeline_library.vp_state.viewport_array
+dEQP-VK.dynamic_state.pipeline_library.rs_state.depth_bias
+dEQP-VK.dynamic_state.pipeline_library.rs_state.depth_bias_clamp
+dEQP-VK.dynamic_state.pipeline_library.rs_state.line_width
+dEQP-VK.dynamic_state.pipeline_library.rs_state.nonzero_depth_bias_constant
+dEQP-VK.dynamic_state.pipeline_library.rs_state.nonzero_depth_bias_clamp
+dEQP-VK.dynamic_state.pipeline_library.cb_state.blend_constants
+dEQP-VK.dynamic_state.pipeline_library.ds_state.depth_bounds_1
+dEQP-VK.dynamic_state.pipeline_library.ds_state.depth_bounds_2
+dEQP-VK.dynamic_state.pipeline_library.ds_state.stencil_params_basic_1
+dEQP-VK.dynamic_state.pipeline_library.ds_state.stencil_params_basic_2
+dEQP-VK.dynamic_state.pipeline_library.ds_state.stencil_params_advanced
+dEQP-VK.dynamic_state.pipeline_library.general_state.state_switch
+dEQP-VK.dynamic_state.pipeline_library.general_state.bind_order
+dEQP-VK.dynamic_state.pipeline_library.general_state.state_persistence
+dEQP-VK.dynamic_state.pipeline_library.inheritance.baseline
+dEQP-VK.dynamic_state.pipeline_library.inheritance.primary
+dEQP-VK.dynamic_state.pipeline_library.inheritance.secondary
+dEQP-VK.dynamic_state.pipeline_library.inheritance.split
+dEQP-VK.dynamic_state.pipeline_library.inheritance.primary_with_count
+dEQP-VK.dynamic_state.pipeline_library.inheritance.secondary_with_count
+dEQP-VK.dynamic_state.fast_linked_library.vp_state.viewport
+dEQP-VK.dynamic_state.fast_linked_library.vp_state.scissor
+dEQP-VK.dynamic_state.fast_linked_library.vp_state.viewport_array
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.depth_bias
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.depth_bias_clamp
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.line_width
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.nonzero_depth_bias_constant
+dEQP-VK.dynamic_state.fast_linked_library.rs_state.nonzero_depth_bias_clamp
+dEQP-VK.dynamic_state.fast_linked_library.cb_state.blend_constants
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.depth_bounds_1
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.depth_bounds_2
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.stencil_params_basic_1
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.stencil_params_basic_2
+dEQP-VK.dynamic_state.fast_linked_library.ds_state.stencil_params_advanced
+dEQP-VK.dynamic_state.fast_linked_library.general_state.state_switch
+dEQP-VK.dynamic_state.fast_linked_library.general_state.bind_order
+dEQP-VK.dynamic_state.fast_linked_library.general_state.state_persistence
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.baseline
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.primary
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.secondary
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.split
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.primary_with_count
+dEQP-VK.dynamic_state.fast_linked_library.inheritance.secondary_with_count