Skip to content

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

Open
@rust-gpu-bot

Description

@rust-gpu-bot

Issue automatically imported from old repo: EmbarkStudios/rust-gpu#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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions