Skip to content

Commit f7fc124

Browse files
authored
Add tests for every builtin (#789)
1 parent c4eb7af commit f7fc124

File tree

3 files changed

+139
-11
lines changed

3 files changed

+139
-11
lines changed

crates/rustc_codegen_spirv/src/symbols.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,22 @@ const BUILTINS: &[(&str, BuiltIn)] = {
5757
("frag_depth", FragDepth),
5858
("helper_invocation", HelperInvocation),
5959
("num_workgroups", NumWorkgroups),
60-
("workgroup_size", WorkgroupSize),
60+
// ("workgroup_size", WorkgroupSize), -- constant
6161
("workgroup_id", WorkgroupId),
6262
("local_invocation_id", LocalInvocationId),
6363
("global_invocation_id", GlobalInvocationId),
6464
("local_invocation_index", LocalInvocationIndex),
65-
("work_dim", WorkDim),
66-
("global_size", GlobalSize),
67-
("enqueued_workgroup_size", EnqueuedWorkgroupSize),
68-
("global_offset", GlobalOffset),
69-
("global_linear_id", GlobalLinearId),
65+
// ("work_dim", WorkDim), -- Kernel-only
66+
// ("global_size", GlobalSize), -- Kernel-only
67+
// ("enqueued_workgroup_size", EnqueuedWorkgroupSize), -- Kernel-only
68+
// ("global_offset", GlobalOffset), -- Kernel-only
69+
// ("global_linear_id", GlobalLinearId), -- Kernel-only
7070
("subgroup_size", SubgroupSize),
71-
("subgroup_max_size", SubgroupMaxSize),
71+
// ("subgroup_max_size", SubgroupMaxSize), -- Kernel-only
7272
("num_subgroups", NumSubgroups),
73-
("num_enqueued_subgroups", NumEnqueuedSubgroups),
73+
// ("num_enqueued_subgroups", NumEnqueuedSubgroups), -- Kernel-only
7474
("subgroup_id", SubgroupId),
75-
("subgroup_local_invocation_id", SubgroupLocalInvocationId),
75+
// ("subgroup_local_invocation_id", SubgroupLocalInvocationId), -- Kernel-only
7676
("vertex_index", VertexIndex),
7777
("instance_index", InstanceIndex),
7878
("subgroup_eq_mask", SubgroupEqMask),
@@ -107,7 +107,7 @@ const BUILTINS: &[(&str, BuiltIn)] = {
107107
("primitive_indices_nv", PrimitiveIndicesNV),
108108
("clip_distance_per_view_nv", ClipDistancePerViewNV),
109109
("cull_distance_per_view_nv", CullDistancePerViewNV),
110-
("layer_per_viewNV", LayerPerViewNV),
110+
("layer_per_view_nv", LayerPerViewNV),
111111
("mesh_view_count_nv", MeshViewCountNV),
112112
("mesh_view_indices_nv", MeshViewIndicesNV),
113113
("bary_coord_nv", BaryCoordNV),

crates/rustc_codegen_spirv/src/target.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ impl SpirvTarget {
5656
TargetEnv::OpenGL_4_1 => (1, 0),
5757
TargetEnv::OpenGL_4_2 => (1, 0),
5858
TargetEnv::OpenGL_4_3 => (1, 0),
59-
TargetEnv::OpenGL_4_5 => (1, 3),
59+
TargetEnv::OpenGL_4_5 => (1, 0),
6060

6161
TargetEnv::OpenCL_1_2 => (1, 0),
6262
TargetEnv::OpenCL_2_0 => (1, 0),
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
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

Comments
 (0)