Some CTS tests fail when using complex combinations of arrayed and nested interfaces between tessellation stages.
This might be fixable with effort within the implementations.
In the meantime, these use cases can be disabled in CTS and reported as Not Supported, by adding a VkPhysicalDevicePortabilitySubsetFeaturesKHR:: shaderTessellationInputOutputNesting capability.
This affects 66 CTS tests:
dEQP-VK.pipeline.interface_matching.vector_length.out_vec4_in_vec4_member_of_array_of_structures_vert_tesc_out_tese_in_frag
dEQP-VK.pipeline.interface_matching.vector_length.out_vec3_in_vec3_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_vec2_in_vec2_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_ivec4_in_ivec4_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_ivec3_in_ivec3_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_ivec2_in_ivec2_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_uvec4_in_uvec4_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_uvec3_in_uvec3_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_uvec2_in_uvec2_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
MSL conversion error: nullptr
dEQP-VK.pipeline.interface_matching.vector_length.out_vec4_in_vec4_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_vec3_in_vec3_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_vec2_in_vec2_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_ivec4_in_ivec4_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_ivec3_in_ivec3_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_ivec2_in_ivec2_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_uvec4_in_uvec4_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_uvec3_in_uvec3_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.vector_length.out_uvec2_in_uvec2_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
Fail (Fail)
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_none_in_noperspective_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_none_in_flat_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_flat_in_noperspective_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_flat_in_none_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_noperspective_in_flat_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_noperspective_in_none_member_of_array_of_structures_vert_tesc_out_tese_in_frag'..
MSL conversion error: nullptr
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_none_in_noperspective_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_none_in_flat_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_flat_in_noperspective_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_flat_in_none_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_noperspective_in_flat_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
dEQP-VK.pipeline.interface_matching.decoration_mismatch.out_noperspective_in_none_member_of_array_of_structures_in_block_vert_tesc_out_tese_in_frag'..
Fail (Fail)
dEQP-VK.tessellation.user_defined_io.per_patch_block.vertex_io_array_size_implicit.triangles
dEQP-VK.tessellation.user_defined_io.per_patch_block.vertex_io_array_size_implicit.quads
dEQP-VK.tessellation.user_defined_io.per_patch_block.vertex_io_array_size_shader_builtin.triangles
dEQP-VK.tessellation.user_defined_io.per_patch_block.vertex_io_array_size_shader_builtin.quads
dEQP-VK.tessellation.user_defined_io.per_patch_block.vertex_io_array_size_spec_min.triangles
dEQP-VK.tessellation.user_defined_io.per_patch_block.vertex_io_array_size_spec_min.quads
Failed to get tessellation control outputs: nullptr
dEQP-VK.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_implicit.triangles
dEQP-VK.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_implicit.quads
dEQP-VK.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_shader_builtin.triangles
dEQP-VK.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_shader_builtin.quads
dEQP-VK.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_spec_min.triangles
dEQP-VK.tessellation.user_defined_io.per_patch_block_array.vertex_io_array_size_spec_min.quads
Bad cast AND is not valid for attribute 'attribute'
dEQP-VK.tessellation.user_defined_io.per_vertex_block.vertex_io_array_size_implicit.triangles
dEQP-VK.tessellation.user_defined_io.per_vertex_block.vertex_io_array_size_implicit.quads
dEQP-VK.tessellation.user_defined_io.per_vertex_block.vertex_io_array_size_shader_builtin.triangles
dEQP-VK.tessellation.user_defined_io.per_vertex_block.vertex_io_array_size_shader_builtin.quads
dEQP-VK.tessellation.user_defined_io.per_vertex_block.vertex_io_array_size_spec_min.triangles
dEQP-VK.tessellation.user_defined_io.per_vertex_block.vertex_io_array_size_spec_min.quads
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.1
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.1_fragmentshader_read
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.2
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.2_fragmentshader_read
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.3
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.3_fragmentshader_read
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.4
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.4_fragmentshader_read
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.5
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.6_fragmentshader_read
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.6
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.6_fragmentshader_read
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.7
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.7_fragmentshader_read
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.8
dEQP-VK.clipping.user_defined.clip_distance_dynamic_index.vert_tess.8_fragmentshader_read
dEQP-VK.clipping.user_defined.clip_cull_distance_dynamic_index.vert_tess.8
dEQP-VK.clipping.user_defined.clip_cull_distance_dynamic_index.vert_tess.8_fragmentshader_read
Trying to dynamically index into an array interface variable in tessellation. This is currently unsupported.
(https://github.com/KhronosGroup/SPIRV-Cross/issues/1796)
Fixed:
dEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_implicit.trianglesdEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_implicit.quadsdEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_shader_builtin.trianglesdEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_shader_builtin.quadsdEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_spec_min.trianglesdEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_spec_min.quadsInvalid input value in tessellation evaluation shader
Some CTS tests fail when using complex combinations of arrayed and nested interfaces between tessellation stages.
This might be fixable with effort within the implementations.
In the meantime, these use cases can be disabled in CTS and reported as Not Supported, by adding a
VkPhysicalDevicePortabilitySubsetFeaturesKHR:: shaderTessellationInputOutputNesting
capability.This affects 66 CTS tests:
Fixed:
dEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_implicit.triangles
dEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_implicit.quads
dEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_shader_builtin.triangles
dEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_shader_builtin.quads
dEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_spec_min.triangles
dEQP-VK.tessellation.user_defined_io.per_vertex.vertex_io_array_size_spec_min.quads
Invalid input value in tessellation evaluation shader