diff options
author | metamuffin <metamuffin@disroot.org> | 2022-11-21 22:09:42 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-11-21 22:09:42 +0100 |
commit | 83bc23206ad0982fcf2bf6c8e7256190dbe148f0 (patch) | |
tree | 2b18b1648f31b26c31d7b1678f67732e3f5b9607 /vgcodec/src/helper.rs | |
parent | 11a57882861f9811cb1624d76a2b08ffb7d47b9c (diff) | |
download | video-codec-experiments-83bc23206ad0982fcf2bf6c8e7256190dbe148f0.tar video-codec-experiments-83bc23206ad0982fcf2bf6c8e7256190dbe148f0.tar.bz2 video-codec-experiments-83bc23206ad0982fcf2bf6c8e7256190dbe148f0.tar.zst |
works
Diffstat (limited to 'vgcodec/src/helper.rs')
-rw-r--r-- | vgcodec/src/helper.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/vgcodec/src/helper.rs b/vgcodec/src/helper.rs index 3aca81d..1d029b8 100644 --- a/vgcodec/src/helper.rs +++ b/vgcodec/src/helper.rs @@ -1,7 +1,15 @@ -use wgpu::{Queue, Texture, Extent3d}; - +use log::info; +use wgpu::{Extent3d, Queue, Texture}; pub fn write_texture(queue: &Queue, target: &Texture, data: &[u8], size: Extent3d) { + info!("uploading texture {size:?} ({} bytes)", data.len()); + + let bytes_per_pixel = std::mem::size_of::<u32>() as u32; + let unpadded_bytes_per_row = size.width * bytes_per_pixel; + let align = wgpu::COPY_BYTES_PER_ROW_ALIGNMENT; + let padded_bytes_per_row_padding = (align - unpadded_bytes_per_row % align) % align; + let padded_bytes_per_row = unpadded_bytes_per_row + padded_bytes_per_row_padding; + queue.write_texture( wgpu::ImageCopyTexture { texture: &target, @@ -12,7 +20,7 @@ pub fn write_texture(queue: &Queue, target: &Texture, data: &[u8], size: Extent3 &data, wgpu::ImageDataLayout { offset: 0, - bytes_per_row: Some(std::num::NonZeroU32::try_from((size.width * 4) as u32).unwrap()), + bytes_per_row: Some(std::num::NonZeroU32::try_from(padded_bytes_per_row).unwrap()), rows_per_image: None, }, size, |