Skip to content
This repository was archived by the owner on Oct 31, 2025. It is now read-only.
This repository was archived by the owner on Oct 31, 2025. It is now read-only.

ICE: uniform constant inference panics #585

Description

@msiglreith

Opaque types are partially inferred as Input instead of UniformConstants when passing by value resulting in an internal ICE (see Case 2).

Case 1: passing by value w/o inference

#[spirv(uniform_constant, descriptor_set = 0, binding = 1)] u_diffuse_map: Cubemap,

Result: nice!

  error: invalid entry param type `spirv_std::Cubemap` for storage class `UniformConstant` (expected `&T`)
    --> glace-vk\shader\src\lib.rs:68:80
     |
  68 |     #[spirv(uniform_constant, descriptor_set = 0, binding = 1)] u_diffuse_map: Cubemap,
     |  

Case 2: passing by value w/ inference

#[spirv(descriptor_set = 0, binding = 1)] u_diffuse_map: Cubemap,

Result: ICE

  thread 'rustc' panicked at 'assertion failed: `(left == right)`
    left: `UniformConstant`,
   right: `Input`', E:\Rust\git\checkouts\rust-gpu-e0a37a82a46176e6\8c89b49\crates\rustc_codegen_spirv\src\codegen_cx\entry.rs:342:13

Case 3: passing by ref w/ inference

#[spirv(descriptor_set = 0, binding = 1)] u_diffuse_map: &Cubemap,

Result: works fine

Metadata

Metadata

Assignees

Labels

a: inferenceIssues around inferring types in SPIR-V asm.c: rustc_codegen_spirvIssues specific to the rustc_codegen_spirv crate.t: 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