mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
118 lines
3.6 KiB
Rust
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,
|
|
);
|
|
}
|