Files
wgpu/tests/gpu-tests/ray_tracing/as_create.rs
2025-02-23 14:06:34 -05:00

118 lines
3.6 KiB
Rust

use wgpu::{
AccelerationStructureFlags, AccelerationStructureGeometryFlags,
AccelerationStructureUpdateMode, BlasGeometrySizeDescriptors,
BlasTriangleGeometrySizeDescriptor, CreateBlasDescriptor,
};
use wgpu::{IndexFormat, VertexFormat};
use wgpu_macros::gpu_test;
use wgpu_test::{fail, GpuTestConfiguration, TestParameters, TestingContext};
#[gpu_test]
static BLAS_INVALID_VERTEX_FORMAT: GpuTestConfiguration = GpuTestConfiguration::new()
.parameters(
TestParameters::default()
.test_features_limits()
.features(wgpu::Features::EXPERIMENTAL_RAY_TRACING_ACCELERATION_STRUCTURE),
)
.run_sync(invalid_vertex_format_blas_create);
fn invalid_vertex_format_blas_create(ctx: TestingContext) {
//
// Create a BLAS with a format that is not allowed
//
let blas_size = BlasTriangleGeometrySizeDescriptor {
vertex_format: VertexFormat::Float32x4,
vertex_count: 3,
index_format: None,
index_count: None,
flags: AccelerationStructureGeometryFlags::empty(),
};
fail(
&ctx.device,
|| {
let _ = ctx.device.create_blas(
&CreateBlasDescriptor {
label: Some("BLAS"),
flags: AccelerationStructureFlags::PREFER_FAST_TRACE,
update_mode: AccelerationStructureUpdateMode::Build,
},
BlasGeometrySizeDescriptors::Triangles {
descriptors: vec![blas_size.clone()],
},
);
},
None,
);
}
#[gpu_test]
static BLAS_MISMATCHED_INDEX: GpuTestConfiguration = GpuTestConfiguration::new()
.parameters(
TestParameters::default()
.test_features_limits()
.features(wgpu::Features::EXPERIMENTAL_RAY_TRACING_ACCELERATION_STRUCTURE),
)
.run_sync(mismatched_index_blas_create);
fn mismatched_index_blas_create(ctx: TestingContext) {
//
// Create a BLAS with just an index format
//
let blas_size = BlasTriangleGeometrySizeDescriptor {
vertex_format: VertexFormat::Float32x3,
vertex_count: 3,
index_format: Some(IndexFormat::Uint32),
index_count: None,
flags: AccelerationStructureGeometryFlags::empty(),
};
fail(
&ctx.device,
|| {
let _ = ctx.device.create_blas(
&CreateBlasDescriptor {
label: Some("BLAS1"),
flags: AccelerationStructureFlags::PREFER_FAST_TRACE,
update_mode: AccelerationStructureUpdateMode::Build,
},
BlasGeometrySizeDescriptors::Triangles {
descriptors: vec![blas_size.clone()],
},
);
},
None,
);
//
// Create a BLAS with just an index count
//
let blas_size = BlasTriangleGeometrySizeDescriptor {
vertex_format: VertexFormat::Float32x3,
vertex_count: 3,
index_format: None,
index_count: Some(3),
flags: AccelerationStructureGeometryFlags::empty(),
};
fail(
&ctx.device,
|| {
let _ = ctx.device.create_blas(
&CreateBlasDescriptor {
label: Some("BLAS2"),
flags: AccelerationStructureFlags::PREFER_FAST_TRACE,
update_mode: AccelerationStructureUpdateMode::Build,
},
BlasGeometrySizeDescriptors::Triangles {
descriptors: vec![blas_size.clone()],
},
);
},
None,
);
}