From 3fb2557a3059d3c0538d3a7cd96a973e9b69ba96 Mon Sep 17 00:00:00 2001 From: Piotrek Date: Mon, 19 Apr 2021 22:23:01 +0200 Subject: [PATCH] using bytemuck for node buffer --- src/renderer/buffers/node_buffer.rs | 60 ++++++++++++++++++---------- src/renderer/mod.rs | 2 +- src/shaders/bin/shader.frag.spv | Bin 4520 -> 4464 bytes 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/renderer/buffers/node_buffer.rs b/src/renderer/buffers/node_buffer.rs index 6c7d5a9..3a90b46 100644 --- a/src/renderer/buffers/node_buffer.rs +++ b/src/renderer/buffers/node_buffer.rs @@ -1,15 +1,31 @@ -pub const DATA: &[u32] = &[ - // z0 - 1,0, - 0,1, - // z1 - 0,0, - 0,0, -]; +// pub const DATA: &[u32] = &[ +// // z0 +// 1,0, +// 0,1, +// // z1 +// 0,0, +// 0,0, +// ]; +const MAX_NODE_NUM : usize = 16; +const TEXTURE_SIZE : u32 = 4; + +#[repr(C)] +#[derive(Default, Debug, Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] +struct Node { + data: [u32; 8] +} + +impl Node { + pub fn set(&mut self, x: usize, y: usize, z: usize, value: u32) { + let idx = x + 2 * (y + 2 * z); + self.data[idx] = value; + } +} pub struct NodeBuffer { + nodes: [Node;MAX_NODE_NUM], texture: wgpu::Texture, size: wgpu::Extent3d, pub bind_layout: wgpu::BindGroupLayout, @@ -18,10 +34,12 @@ pub struct NodeBuffer { impl NodeBuffer { - pub fn new(device: &wgpu::Device, _size: u32) -> Self { + pub fn new(device: &wgpu::Device) -> Self { + + // Create texture - let size = wgpu::Extent3d { width: _size, height: _size, depth: _size }; + let size = wgpu::Extent3d { width: TEXTURE_SIZE, height: TEXTURE_SIZE, depth: TEXTURE_SIZE }; let texture = device.create_texture( &wgpu::TextureDescriptor { size: size, @@ -72,23 +90,21 @@ impl NodeBuffer { label: Some("Node texture group"), } ); - + + // Data + let mut nodes : [Node; MAX_NODE_NUM] = [Default::default(); MAX_NODE_NUM]; + nodes[0].set(0, 0, 0, 1); + nodes[1].set(0, 0, 0, 1); + nodes[1].set(1, 1, 1, 1); + // Done - Self { texture, size, bind_layout, bind_group } + Self { nodes, texture, size, bind_layout, bind_group } } pub fn write(&mut self, queue: &wgpu::Queue) { // Convert 32 bit values to 8 bit - const LEN: usize = DATA.len(); - let mut bytes : [u8; LEN*4] = [0; LEN*4]; - for i in 0..LEN { - let idx = i * 4; - let byte = DATA[i].to_be_bytes(); - bytes[idx+0] = byte[0]; - bytes[idx+1] = byte[1]; - bytes[idx+2] = byte[2]; - bytes[idx+3] = byte[3]; - } + let bytes = bytemuck::bytes_of(&self.nodes); + println!("Node buffer size: {} kB", bytes.len() as f32 / 1024.0); // Write queue.write_texture( diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index bc0fd47..6c632ea 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -105,7 +105,7 @@ impl Renderer { // Buffers let uniform_buffer = UniformBuffer::new(&device); let raster_buffer = RasterBuffer::new(&device); - let mut node_buffer = NodeBuffer::new(&device, 2); + let mut node_buffer = NodeBuffer::new(&device); node_buffer.write(&queue); // Pipeline diff --git a/src/shaders/bin/shader.frag.spv b/src/shaders/bin/shader.frag.spv index 0823b7b52473309340623ab2e33cb3313a4dab0b..4995b4f8748a51b8f392e8d6f35944d52db61f79 100644 GIT binary patch literal 4464 zcmZve>2nli5QhhHpd=zFpm-)A5>Qb&MLa;ophknDD2gs?vWbhyZfdhxgJ-<4N>RM; z`vmbmzWYacRcZM=v(scM<(uks_pk4scP43>y=+dB%u41aCnUcn&9fkx4U!}sNqfqB z`*!xN9(M~2~e1-$X(L!@qEy*EtkG=TZ8>L#k zFwsc$_tDv7+KRn-C#nM# zn>}h<<}c26s)UdCaDIw4r(>F|cF;Y9c3p#~(dr{Zkg?=1dOzLKu<1<-YIu9THPlA$U>dMg1 zO!efLer{9eu6hfSWCbJ^WUU@_ZRT5qz6#z2%}RMIwVHNu>&P#FJfW{cUIQ&;y7h4L zY=n0~9_w5Jw~qJ{Cb~3}-ADdd*K<1C@FmyJ_{#)2Vw*GFd*pG4Tj2KQ4%M%QTgz{W zeJXE*JfZJKwqEFaknJb-#p{>2)1a950GM&sc>(V3taB>A55mRN&&uwpnB@G<@)F!S z-Z5uU_l}8ae>szlvBqm~YlQuEWb2C?ul`1c8UGcsd$14f>W4EdW;lW#`Hp6?{cWIU zar^g}=T8vdDRX)M{2u8Wy5EGn?)#tDegD>nT*!Ci5IMBH3t2~>ekQS}_aJe}V=m{vg2|mzd-VMQ zvVC6wMc*GHi>sUOBgnYu`{N9Q9m77!Fl&Y1rx|ALnB_BMJTc4X$R9%bbh07m z`vNlOHb{HS_$9J7$&;VaXQ$m6kHWu!oYDIcGku%k?!;%S9=7k1&7sZbtiFkU+{F)2 zCuEGanDs|wZJxk>LKe&K^R>43TiZWmxCHVZ+k^EzenU6n=lz|V zlRJ>T-zUK1KF>ooHuMEE^u;suB{THpIlTvYWlr~ddVWs#ySOQ*+usd2-S}NOU3+nc zKAh?COio01M(>4l%!k~ovD)01Gm1yd$;j?vM;5aX+1&;m$o9DiOq>4ZaW`U-=M-e~ zMD0_Nt=$f3GsgXiN6cx+_7nQ)$oBtaR`U#GeZ-?b|Gvg|S^jwDdp5HE+9O{VvNaE8 zKHbP-`M9O%#%hbWWysF=bQX6GvVP*u;d2*L_L;B9WS@83OP{shi@&&ItKr@?`R{x$ zE`nbSd9<&AYnR)@D)?H+9N*K!diaJ6TL=FeAN30%a~Z2_>}L2CsXRT;mFVudf_)2o zD090_pQFcTn8Bcs)Gw)sTJXLm$ud_&Zxi7n98CJL8F36Ub4^T>3|@ z268_41DPJVC(*^E$ZM|1y&pMpn@j)L+k?o~*2lfMbFrxX5VBb447+@s6y3`@hD2Sz2rR literal 4520 zcmZve_jgof5QZ;=1f^r4h++^CL_~TK5fC+$C@6^Cbxk&LakCpYn+0rui1i$Muh*~{wsZ9OJa_NFJvn}y$-MK<%s1c6{q9}bM$a9aB%_jX$;9N>q_w6dqhXR{eA1EX zuI^pki-#J$i&v~%V#K7REe$kgaxyjEnlZVCB}|J*XredPub3S#$!`1#go8;wV^a_DwsXCR-3K7X)SwKxxbqF zXQp{W4OD8+Lvy-K`^&BTi?J)EW~q|;+mc24Q#>YFi>}ss>CW8tWIejK+}AfeRN7tI z-`a0G+(5Z%3K4C|9(1MDs$B#R*2-0j+fzTfTB{EfDQ2uShnxGr?a8y?X1TP_nF3Sp z1@ukTavv!}avl7WbEUBZ#YVlnA9ifY`-}(cwY`NFUnnz_4t6rf=h;&nD75C*mb`@R z@?745W~tsN3^!Bz7&bFakK)-*VAqBlg`Qfa=Hblw3O!h?7Y8!?yPVyH-&tLNc&4!D zfL&YgM<4B}-8!Sbx&C2op-RMfC#R%bE6+XidD`Y}L?Tb_RNko>7YPl4L$27hZ0v>TPGnT7$55-~m$#1kQp6SZ z3h*-IEV^5XcAwSgPQ+!MHE8R|&!nTvGweL_%et;vOv4x6IPR(+TJla{V!+O9BaIWwnq402U}m>d~NTbocYJm&cSo&*Y-}zMGs$s zW52I6?DrfaSH_??c4AIQK^xhdRl9oN?BQxKA?9+R@9WVDpXFZ$Ht? zXJBg^Gl2=&-{**Xde8Mok6(cGDK2B8$75jq_UJwM2C+x)NA&b<#yb#12O?IM_=^%BUqm+xSzms`I-Ejarv420%yMQ`hC9E_I~U8haJ`+-eb>T zeV5#!$K~*Nu=jf+I_~o%u(@GR9br!!Vb2_4&&$~hz!&Fizo(0G_8RcoobCCx z=WO%$na%fX zIDN*ukF%1CeWrumCu+|CTe}0%XO8ofkDPPBo+s>CV9$Rft9dTi82LD#zqj$7Rv*q{ z&j%Z?KlbYcTl3j0W)4^`pLYSax%wh+F4+E#W_cHajgz+z?}41yJ1{@PKL5CKzU2%n(W^3U1^RDdv@b*4%UrR!>(E!G z_*6d|u$^-i|3>sCM6MUx-`%Saa|+y=&FHH$&bZNtefa*aMqi8QciF#pTF%<~yAZkK z*}1o5oZqTHh~I{G*@M2Vh@3r$;~8{=^LOJq?EKxh9@`lCxEnjb|93Zb!W*wY_P+s~ zzZ*AV%b6edZx`5HeUY~toWC14VH+p!Jbb6+{LU^w-;BuFzkB#T+=9qQ%xz#}Zbc&I zcCdWJ+zB@34kTjk0?SX}xw&rv8HHHaeEs3O8yr6C8|!)ZpzlVazk9&WIqV+r_{_FO zFJex-Qzfu5^6@VAf!#-+HHv7t*z;cSJmetr@H?|G^6uA$Vbi-V4r`~coHmUtTpt>`R!eb_L-{9Ux