Rust-GPU / Rust-GPU/rust-gpu

[Migrated] We should consider using `#[rustc_on_unimplemented]` on `spirv-std` helper traits.

Open
#97 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
3.4k
Forks
125
PR merge metrics
No merged PRs in 30d

Description

Issue automatically imported from old repo: https://github.com/EmbarkStudios/rust-gpu/issues/983
Old labels: t: enhancement
Originally creatd by eddyb on 2023-01-05T12:44:08Z


I was reviewing this nightly bump PR:

And its diff shows some nightly diagnostic improvements of the form:

 12  |     *output = image.query_levels();
-    |               ^^^^^ ------------ required by a bound introduced by this call
-    |               |
-    |               the trait `HasQueryLevels` is not implemented for `Image<f32, 4, 2, 0, 0, 1, 0>`
+    |                     ^^^^^^^^^^^^ the trait `HasQueryLevels` is not implemented for `Image<f32, 4, 2, 0, 0, 1, 0>`
     |
     = help: the following other types implement trait `HasQueryLevels`:
               Image<SampledType, 0, DEPTH, ARRAYED, MULTISAMPLED, SAMPLED, FORMAT>

That's definitely better, but the trait can't really explain itself and its connection to the types (i.e. "Image types support query_levels only if such and such parameters have these values" etc.).

Except, in core/std, traits can and very much do do this, using #[rustc_on_unimplemented]!

It's perma-unstable, and there might be efforts to stabilize a subset of it, but even ignoring that, we can still use it under #[cfg_attr(target_arch = "spirv", ...)], just like all the other rustc internals we rely on.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by locating the spirv-std helper trait definitions involved in methods such as query_levels, then review the nightly diagnostic changes in PR 982 and the documented rustc_on_unimplemented behavior. Done means unsupported Image parameter combinations produce diagnostics explaining the relevant trait requirement and valid combinations, while the attribute remains gated for SPIR-V targets.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
compilers
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.