Skip to content

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

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
    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