Skip to content

entry point fn with too many params fails #608

@galop1n

Description

@galop1n

I am trying to convert a project of mine from wgsl to rust-gpu. I got the basics done, but I have a shader I can't get to compile

This is the entry point

#[spirv(compute(threads(8, 8, 1)))]
pub fn cs_main(
    #[spirv(global_invocation_id)] gid: UVec3,
    #[spirv(uniform, descriptor_set = 1, binding = 0)] globals: &SBGlobalData,
    #[spirv(uniform, descriptor_set = 2, binding = 0)] camera: &SBCameraData,
    #[spirv(storage_buffer, descriptor_set = 3, binding = 0)] tlas_nodes: &[BvhNode],
    #[spirv(storage_buffer, descriptor_set = 3, binding = 1)] tlas_instances: &[TlasInstance],
    #[spirv(storage_buffer, descriptor_set = 3, binding = 2)] blas_nodes: &[BvhNode],
    #[spirv(storage_buffer, descriptor_set = 3, binding = 3)] blas_tris: &[Triangle],
    #[spirv(descriptor_set = 3, binding = 4)] rt_out: &Image!(2D, format = rgba16f, sampled = false, arrayed = false, multisampled = false),
    #[spirv(uniform, descriptor_set = 3, binding = 5)] rt_consts: &RaytracerConsts,
    #[spirv(uniform, descriptor_set = 3, binding = 6)] mat_consts: &RtLightConsts,
    #[spirv(storage_buffer, descriptor_set = 3, binding = 7)] rt_materials: &[RtMaterialEntry],
    #[spirv(descriptor_set = 3, binding = 8)] albedo_sampler: &Sampler,
    #[spirv(descriptor_set = 4, binding = 0)] albedo_tex_table: &RuntimeArray<Image!(2D, type = f32, sampled = true, arrayed = false, multisampled = false)>,
) {

Expected Behaviour

Shader compiles fine

Example & Steps To Reproduce

This is the errors I am getting

info: latest update on 2026-04-11 for version 1.96.0-nightly (02c7f9bec 2026-04-10)
info: component rust-src is up to date
warn: skipping unavailable component rust-std for target spirv-unknown-vulkan1.2
   Compiling shader-bench-rsgpu-user v0.1.0 (F:\rust\ideas\shader-bench\projects\raytracer-rs\.shader-bench\shader-cache\rust-gpu-build\ce910f26f4188d71)
warning: an unknown error occurred
  |
  = note: spirv-opt failed, leaving as unoptimized
error: [VUID-StandaloneSpirv-OpTypeRuntimeArray-04680] OpVariable, <id> '14[%albedo_tex_table]', is attempting to create memory for an illegal type, OpTypeRuntimeArray.

For Vulkan OpTypeRuntimeArray can only appear as the final member of an OpTypeStruct, thus cannot be instantiated via OpVariable
         %albedo_tex_table = OpVariable %_ptr_UniformConstant__runtimearr_94 UniformConstant

Bonus: u32.saturated_sub is not implemented btw

System Info

Windows + custom compiler wrap to compile rust-gpu shader at runtime without having my whole workspace on the specific nightly toolchain

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions