mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-12-08 21:26:17 +00:00
77 lines
1.9 KiB
Rust
77 lines
1.9 KiB
Rust
//! Tests for buffer copy validation.
|
|
|
|
use wgpu::BufferAddress;
|
|
|
|
use wgpu_test::{fail_if, gpu_test, GpuTestConfiguration};
|
|
|
|
fn try_copy(
|
|
ctx: &wgpu_test::TestingContext,
|
|
offset: BufferAddress,
|
|
size: BufferAddress,
|
|
error_message: Option<&'static str>,
|
|
) {
|
|
let buffer = ctx.device.create_buffer(&BUFFER_DESCRIPTOR);
|
|
let data = vec![255; size as usize];
|
|
|
|
fail_if(
|
|
&ctx.device,
|
|
error_message.is_some(),
|
|
|| ctx.queue.write_buffer(&buffer, offset, &data),
|
|
error_message,
|
|
);
|
|
}
|
|
|
|
#[gpu_test]
|
|
static COPY_ALIGNMENT: GpuTestConfiguration = GpuTestConfiguration::new().run_sync(|ctx| {
|
|
try_copy(&ctx, 0, 0, None);
|
|
try_copy(
|
|
&ctx,
|
|
4,
|
|
16 + 1,
|
|
Some("copy size 17 does not respect `copy_buffer_alignment`"),
|
|
);
|
|
try_copy(
|
|
&ctx,
|
|
64,
|
|
20 + 2,
|
|
Some("copy size 22 does not respect `copy_buffer_alignment`"),
|
|
);
|
|
try_copy(
|
|
&ctx,
|
|
256,
|
|
44 + 3,
|
|
Some("copy size 47 does not respect `copy_buffer_alignment`"),
|
|
);
|
|
try_copy(&ctx, 1024, 8 + 4, None);
|
|
|
|
try_copy(&ctx, 0, 4, None);
|
|
try_copy(
|
|
&ctx,
|
|
4 + 1,
|
|
8,
|
|
Some("buffer offset 5 is not aligned to block size or `copy_buffer_alignment`"),
|
|
);
|
|
try_copy(
|
|
&ctx,
|
|
64 + 2,
|
|
12,
|
|
Some("buffer offset 66 is not aligned to block size or `copy_buffer_alignment`"),
|
|
);
|
|
try_copy(
|
|
&ctx,
|
|
256 + 3,
|
|
16,
|
|
Some("buffer offset 259 is not aligned to block size or `copy_buffer_alignment`"),
|
|
);
|
|
try_copy(&ctx, 1024 + 4, 4, None);
|
|
});
|
|
|
|
const BUFFER_SIZE: BufferAddress = 1234;
|
|
|
|
const BUFFER_DESCRIPTOR: wgpu::BufferDescriptor = wgpu::BufferDescriptor {
|
|
label: None,
|
|
size: BUFFER_SIZE,
|
|
usage: wgpu::BufferUsages::COPY_SRC.union(wgpu::BufferUsages::COPY_DST),
|
|
mapped_at_creation: false,
|
|
};
|