|
| 1 | +// This test currently fails because the only-vulkan1.1 compiletests flag is ignored. So, running |
| 2 | +// compiletests on e.g. --target-env opengl4.5 will attempt to execute this test and fail. |
| 3 | +// build-pass |
| 4 | +// only-vulkan1.1 |
| 5 | +// compile-flags: -Ctarget-feature=+DeviceGroup,+DrawParameters,+FragmentBarycentricNV,+FragmentDensityEXT,+FragmentFullyCoveredEXT,+Geometry,+GroupNonUniform,+GroupNonUniformBallot,+MeshShadingNV,+MultiView,+MultiViewport,+RayTracingKHR,+SampleRateShading,+ShaderSMBuiltinsNV,+ShaderStereoViewNV,+StencilExportEXT,+Tessellation,+ext:SPV_AMD_shader_explicit_vertex_parameter,+ext:SPV_EXT_fragment_fully_covered,+ext:SPV_EXT_fragment_invocation_density,+ext:SPV_EXT_shader_stencil_export,+ext:SPV_KHR_ray_tracing,+ext:SPV_NV_fragment_shader_barycentric,+ext:SPV_NV_mesh_shader,+ext:SPV_NV_shader_sm_builtins,+ext:SPV_NV_stereo_view_rendering |
| 6 | + |
| 7 | +use spirv_std::glam::*; |
| 8 | + |
| 9 | +#[derive(Clone, Copy)] |
| 10 | +#[spirv(matrix)] |
| 11 | +pub struct Matrix4x3 { |
| 12 | + pub x: glam::Vec3, |
| 13 | + pub y: glam::Vec3, |
| 14 | + pub z: glam::Vec3, |
| 15 | + pub w: glam::Vec3, |
| 16 | +} |
| 17 | + |
| 18 | +#[spirv(tessellation_control)] |
| 19 | +pub fn tessellation_control( |
| 20 | + #[spirv(invocation_id)] invocation_id: u32, |
| 21 | + #[spirv(patch_vertices)] patch_vertices: u32, |
| 22 | + #[spirv(tess_level_inner)] tess_level_inner: &mut [f32; 2], |
| 23 | + #[spirv(tess_level_outer)] tess_level_outer: &mut [f32; 4], |
| 24 | +) { |
| 25 | +} |
| 26 | + |
| 27 | +#[spirv(tessellation_evaluation)] |
| 28 | +pub fn tessellation_evaluation(#[spirv(tess_coord)] tess_coord: Vec3) {} |
| 29 | + |
| 30 | +#[spirv(compute(threads(1)))] |
| 31 | +pub fn compute( |
| 32 | + #[spirv(global_invocation_id)] global_invocation_id: UVec3, |
| 33 | + #[spirv(local_invocation_id)] local_invocation_id: UVec3, |
| 34 | + #[spirv(num_subgroups)] num_subgroups: u32, |
| 35 | + #[spirv(num_workgroups)] num_workgroups: UVec3, |
| 36 | + #[spirv(subgroup_id)] subgroup_id: u32, |
| 37 | + #[spirv(workgroup_id)] workgroup_id: UVec3, |
| 38 | +) { |
| 39 | +} |
| 40 | + |
| 41 | +#[spirv(vertex)] |
| 42 | +pub fn vertex( |
| 43 | + #[spirv(SMIDNV)] smidnv: u32, |
| 44 | + #[spirv(bary_coord_no_persp_amd)] bary_coord_no_persp_amd: u32, |
| 45 | + #[spirv(bary_coord_no_persp_centroid_amd)] bary_coord_no_persp_centroid_amd: u32, |
| 46 | + #[spirv(bary_coord_no_persp_nv)] bary_coord_no_persp_nv: u32, |
| 47 | + #[spirv(bary_coord_no_persp_sample_amd)] bary_coord_no_persp_sample_amd: u32, |
| 48 | + #[spirv(bary_coord_nv)] bary_coord_nv: u32, |
| 49 | + #[spirv(bary_coord_pull_model_amd)] bary_coord_pull_model_amd: u32, |
| 50 | + #[spirv(bary_coord_smooth_amd)] bary_coord_smooth_amd: u32, |
| 51 | + #[spirv(bary_coord_smooth_centroid_amd)] bary_coord_smooth_centroid_amd: u32, |
| 52 | + #[spirv(bary_coord_smooth_sample_amd)] bary_coord_smooth_sample_amd: u32, |
| 53 | + #[spirv(base_instance)] base_instance: u32, |
| 54 | + #[spirv(base_vertex)] base_vertex: u32, |
| 55 | + #[spirv(clip_distance_per_view_nv)] clip_distance_per_view_nv: u32, |
| 56 | + #[spirv(cull_distance_per_view_nv)] cull_distance_per_view_nv: u32, |
| 57 | + #[spirv(device_index)] device_index: u32, |
| 58 | + #[spirv(draw_index)] draw_index: u32, |
| 59 | + #[spirv(frag_depth)] frag_depth: &mut f32, |
| 60 | + #[spirv(frag_stencil_ref_ext)] frag_stencil_ref_ext: &mut u32, |
| 61 | + #[spirv(instance_index)] instance_index: u32, |
| 62 | + #[spirv(layer_per_view_nv)] layer_per_view_nv: u32, |
| 63 | + #[spirv(local_invocation_index)] local_invocation_index: UVec3, |
| 64 | + #[spirv(mesh_view_count_nv)] mesh_view_count_nv: u32, |
| 65 | + #[spirv(mesh_view_indices_nv)] mesh_view_indices_nv: u32, |
| 66 | + #[spirv(point_size)] point_size: &mut u32, |
| 67 | + #[spirv(position)] position: &mut u32, |
| 68 | + #[spirv(position_per_view_nv)] position_per_view_nv: u32, |
| 69 | + #[spirv(primitive_count_nv)] primitive_count_nv: u32, |
| 70 | + #[spirv(primitive_indices_nv)] primitive_indices_nv: u32, |
| 71 | + #[spirv(secondary_position_nv)] secondary_position_nv: u32, |
| 72 | + #[spirv(secondary_viewport_mask_nv)] secondary_viewport_mask_nv: u32, |
| 73 | + #[spirv(sm_count_nv)] sm_count_nv: u32, |
| 74 | + #[spirv(subgroup_eq_mask)] subgroup_eq_mask: UVec4, |
| 75 | + #[spirv(subgroup_ge_mask)] subgroup_ge_mask: UVec4, |
| 76 | + #[spirv(subgroup_gt_mask)] subgroup_gt_mask: UVec4, |
| 77 | + #[spirv(subgroup_le_mask)] subgroup_le_mask: UVec4, |
| 78 | + #[spirv(subgroup_lt_mask)] subgroup_lt_mask: UVec4, |
| 79 | + #[spirv(subgroup_size)] subgroup_size: u32, |
| 80 | + #[spirv(task_count_nv)] task_count_nv: u32, |
| 81 | + #[spirv(vertex_index)] vertex_index: u32, |
| 82 | + #[spirv(view_index)] view_index: u32, |
| 83 | + #[spirv(viewport_mask_nv)] viewport_mask_nv: u32, |
| 84 | + #[spirv(viewport_mask_per_view_nv)] viewport_mask_per_view_nv: u32, |
| 85 | + #[spirv(warp_id_nv)] warp_id_nv: u32, |
| 86 | + #[spirv(warps_per_sm_nv)] warps_per_sm_nv: u32, |
| 87 | + // #[spirv(front_facing)] front_facing: bool, -- ICE |
| 88 | + // #[spirv(fully_covered_ext)] fully_covered_ext: bool, -- ICE |
| 89 | + // #[spirv(helper_invocation)] helper_invocation: bool, -- ICE |
| 90 | + // #[spirv(vertex_id)] vertex_id: u32, -- not allowed with vulkan |
| 91 | +) { |
| 92 | +} |
| 93 | + |
| 94 | +#[spirv(fragment)] |
| 95 | +pub fn fragment( |
| 96 | + #[spirv(clip_distance)] clip_distance: [f32; 1], |
| 97 | + #[spirv(cull_distance)] cull_distance: [f32; 1], |
| 98 | + #[spirv(frag_coord)] frag_coord: Vec4, |
| 99 | + #[spirv(frag_invocation_count_ext)] frag_invocation_count_ext: u32, |
| 100 | + #[spirv(frag_size_ext)] frag_size_ext: UVec2, |
| 101 | + #[spirv(layer)] layer: u32, |
| 102 | + #[spirv(point_coord)] point_coord: Vec2, |
| 103 | + #[spirv(primitive_id)] primitive_id: u32, |
| 104 | + #[spirv(sample_id)] sample_id: u32, |
| 105 | + #[spirv(sample_mask)] sample_mask: [u32; 1], |
| 106 | + #[spirv(sample_position)] sample_position: Vec2, |
| 107 | + #[spirv(viewport_index)] viewport_index: u32, |
| 108 | +) { |
| 109 | +} |
| 110 | +#[spirv(closest_hit)] |
| 111 | +pub fn closest_hit( |
| 112 | + #[spirv(hit_kind)] hit_kind: u32, |
| 113 | + #[spirv(incoming_ray_flags)] incoming_ray_flags: u32, |
| 114 | + #[spirv(instance_custom_index)] instance_custom_index: u32, |
| 115 | + #[spirv(instance_id)] instance_id: u32, |
| 116 | + #[spirv(launch_id)] launch_id: UVec3, |
| 117 | + #[spirv(launch_size)] launch_size: UVec3, |
| 118 | + #[spirv(object_ray_direction)] object_ray_direction: Vec3, |
| 119 | + #[spirv(object_ray_origin)] object_ray_origin: Vec3, |
| 120 | + #[spirv(object_to_world)] object_to_world: Matrix4x3, |
| 121 | + #[spirv(ray_geometry_index)] ray_geometry_index: u32, |
| 122 | + #[spirv(ray_tmax)] ray_tmax: f32, |
| 123 | + #[spirv(ray_tmin)] ray_tmin: f32, |
| 124 | + #[spirv(world_ray_direction)] world_ray_direction: Vec3, |
| 125 | + #[spirv(world_ray_origin)] world_ray_origin: Vec3, |
| 126 | + #[spirv(world_to_object)] world_to_object: Matrix4x3, |
| 127 | +) { |
| 128 | +} |
0 commit comments