Add more info to the ray tracing spec. (#8559)

This commit is contained in:
Vecvec 2025-11-24 16:01:02 +13:00 committed by GitHub
parent 119b4efada
commit 594bc69022
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -25,7 +25,7 @@ A [`Blas`] can be created with [`Device::create_blas`].
A [`Tlas`] can be created with [`Device::create_tlas`].
The [`Tlas`] reference can be placed in a bind group to be used in a shader. A reference to a [`Blas`] can
be used to create [`TlasInstance`] alongside a transformation matrix, a custom index
be used to create [`TlasInstance`] alongside a transformation matrix, custom data
(this can be any data that should be given to the shader on a hit) which only the first 24
bits may be set, and a mask to filter hits in the shader.
@ -75,7 +75,7 @@ fn render(/*whatever args you need to render*/) {
}
let mut encoder =
device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
/* do other preparations on th TlasInstance.*/
/* do other preparations on the TlasInstance.*/
encoder.build_acceleration_structures(iter::empty(), iter::once(&tlas_package));
/* more render code */
queue.submit(Some(encoder.finish()));
@ -93,11 +93,13 @@ fn render(/*whatever args you need to render*/) {
## `naga`'s raytracing API:
`naga` supports ray queries (also known as inline raytracing) only. Ray tracing pipelines are currently unsupported.
Naming is mostly taken from vulkan.
`naga` supports ray queries (also known as inline raytracing) only. To enable basic ray query functions you must add
`enable wgpu_ray_query` to the shader, ray queries and acceleration structures also support tags which require extra
`enable` extensions (see Acceleration structure tags for more info). Ray tracing pipelines
are currently unsupported. Naming is mostly taken from vulkan.
```wgsl
// - Initializes the `ray_query` to check where (if anywhere) the ray defined by `ray_desc` hits in `acceleration_structure
// - Initializes the `ray_query` to check where (if anywhere) the ray defined by `ray_desc` hits in `acceleration_structure`
rayQueryInitialize(rq: ptr<function, ray_query>, acceleration_structure: acceleration_structure, ray_desc: RayDesc)
// Overload.
rayQueryInitialize(rq: ptr<function, ray_query<vertex_return>>, acceleration_structure: acceleration_structure<vertex_return>, ray_desc: RayDesc)
@ -268,3 +270,14 @@ const RAY_QUERY_INTERSECTION_GENERATED = 2;
// if the ray intersects the bounding box for a custom object.
const RAY_QUERY_INTERSECTION_AABB = 3;
```
### Acceleration structure tags
These are tags that can be added to a acceleration structure (`acceleration_structure` ->
`acceleration_structure<... insert tags here! ...>`) and to a ray query (`ray_query` ->
`ray_query<... insert tags here! ...>`). These require more features.
| Tag | Requirements | Description |
| --- | ------------ | -- |
| `vertex_return`| `enable wgpu_ray_query_vertex_return` | Allows getting the vertices of the hit triangle when using ray queries |