Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docs: Extensions #482

Merged
merged 5 commits into from
Jan 8, 2025
Merged

Docs: Extensions #482

merged 5 commits into from
Jan 8, 2025

Conversation

kainino0x
Copy link
Collaborator

Issue: #214

@kainino0x kainino0x requested a review from lokokung December 21, 2024 07:13
| | Prefix | Enum Block | Description
|--------------------|--------------|---------------|------------
| Core | (none) | `0x0000_????` | Extensions that are required to implement (e.g. added after 1.0).
| Multi-Vendor | (none) | `0x0001_????` | Extensions that are optional to implement (e.g. platform-specific extensions). *TBD if enum values in this block may become required, or if they would be aliased into block `0x0000_????` first.*
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a question buried here which I noticed in #417 and then completely forgot about.

Should the new enums really use block 0x0001? Seems like if we ever put this stuff in "core" they could use the same enums, would we then duplicate them into block 0x0000 or just use the block 0x0001 values? Or should we just put them in block 0x0000 to start?

Ugh. Can't keep track of all this minutiae.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cwfitzgerald any thoughts? (no rush, I'm ~out until Jan)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe stupid question... but would it be possible to just renumber an enum if it gets promoted? Would that be a breaking change? (I guess it COULD be if someone is using the actual value of the enum or if we have different header versions in a wire situation?) I'm just wondering how much breakage it could cause and whether we could just promote them and say here that we may do that so don't rely on the actual value of the enums.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could say that the value is not API stable, but for ABI stability, we can't just renumber. We can do it if we reserve and implement both the old and new numbers (even though only one is in any given version of the header) but that's kinda obtuse.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok makes sense! Though honestly, the more than one number thing doesn't sound TOO bad IMO.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess the problem here is lack of prefixing. If it were WGPUSType_DawnNewThing = 0x0005_0004 we could easily duplicate it as WGPUSType_NewThing = 0x0000_00A3. But since these are unprefixed we can't duplicate, we can only renumber. But the implementation still needs to handle old numbers that now have no name. We could give them a name with something like:
WGPUSType_NewThing = 0x0001_0004
->
WGPUSType_NewThing = 0x0000_00A3
WGPUSType_OldNameForNewThing = 0x0001_0004

... but I think that's worse than the other two options:

  • Give optional extensions a prefix (like Ext) and remove it when making core (which has a questionable benefit of being able to change the behavior when making it core, though I would avoid doing that)
  • Merge blocks 0 and 1 and just use documentation to indicate which things are required and which are not

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

^ ... or what would happen by default if we didn't change anything:

  • Keep blocks 0 and 1 but with the possibility that some things in block 1 end up being required. This is honestly fine and I think we can just go with it.

Actually thinking about the scenario in which this actually happens, it would have to be a multi-vendor extension (meaning we standardized it) which we initially thought would be optional but later became required. I think the most likely case of this is something that's multi-vendor, but we're not sure it's going to show up in the JS API, and then it does. (Like, if the JS API got SPIR-V support somehow, or we decided it was critical to polyfill, then WGPUShaderSourceSPIRV could become required.)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filed #490

@kainino0x kainino0x added the !discuss Needs discussion (at meeting or online) label Dec 21, 2024
doc/articles/Extensions.md Outdated Show resolved Hide resolved
| | Prefix | Enum Block | Description
|--------------------|--------------|---------------|------------
| Core | (none) | `0x0000_????` | Extensions that are required to implement (e.g. added after 1.0).
| Multi-Vendor | (none) | `0x0001_????` | Extensions that are optional to implement (e.g. platform-specific extensions). *TBD if enum values in this block may become required, or if they would be aliased into block `0x0000_????` first.*
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe stupid question... but would it be possible to just renumber an enum if it gets promoted? Would that be a breaking change? (I guess it COULD be if someone is using the actual value of the enum or if we have different header versions in a wire situation?) I'm just wondering how much breakage it could cause and whether we could just promote them and say here that we may do that so don't rely on the actual value of the enums.

doc/articles/Extensions.md Outdated Show resolved Hide resolved
@kainino0x kainino0x requested a review from lokokung January 7, 2025 04:02
@kainino0x kainino0x merged commit b968aaa into webgpu-native:main Jan 8, 2025
5 checks passed
@kainino0x kainino0x deleted the doc-extensions branch January 8, 2025 05:42
@kainino0x kainino0x removed the !discuss Needs discussion (at meeting or online) label Jan 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants