KhronosGroup / Vulkan-Portability

Apache License 2.0
40 stars 4 forks source link

Add VkPhysicalDevicePortabilitySubsetFeaturesKHR:: shaderTessellationInputOutputNesting capability #51

Closed billhollings closed 1 year ago

billhollings commented 2 years ago

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.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

cdavis5e commented 1 year ago

Fixes merged to SPIRV-Cross and MoltenVK