aboutsummaryrefslogtreecommitdiff
path: root/vgcodec/src/helper.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-11-21 22:09:42 +0100
committermetamuffin <metamuffin@disroot.org>2022-11-21 22:09:42 +0100
commit83bc23206ad0982fcf2bf6c8e7256190dbe148f0 (patch)
tree2b18b1648f31b26c31d7b1678f67732e3f5b9607 /vgcodec/src/helper.rs
parent11a57882861f9811cb1624d76a2b08ffb7d47b9c (diff)
downloadvideo-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.rs14
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,