From 76af247a510edfbd1a452a1eec9f3b138195845b Mon Sep 17 00:00:00 2001 From: grovesNL Date: Sun, 16 Sep 2018 00:40:42 -0600 Subject: [PATCH] Create shader modules --- examples/data/hello_triangle.frag | 7 +++++++ examples/data/hello_triangle.frag.spv | Bin 0 -> 352 bytes examples/data/hello_triangle.vert | 15 +++++++++++++++ examples/data/hello_triangle.vert.spv | Bin 0 -> 904 bytes examples/{init.rs => hello_triangle.rs} | 6 ++++++ src/device.rs | 21 ++++++++++++++++++++- src/lib.rs | 1 + 7 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 examples/data/hello_triangle.frag create mode 100644 examples/data/hello_triangle.frag.spv create mode 100644 examples/data/hello_triangle.vert create mode 100644 examples/data/hello_triangle.vert.spv rename examples/{init.rs => hello_triangle.rs} (56%) diff --git a/examples/data/hello_triangle.frag b/examples/data/hello_triangle.frag new file mode 100644 index 000000000..74e14f410 --- /dev/null +++ b/examples/data/hello_triangle.frag @@ -0,0 +1,7 @@ +#version 450 + +layout(location = 0) out vec4 outColor; + +void main() { + outColor = vec4(1.0, 0.0, 0.0, 1.0); +} diff --git a/examples/data/hello_triangle.frag.spv b/examples/data/hello_triangle.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..59e491519bc95272ee281f0c70f2f758e7f55974 GIT binary patch literal 352 zcmYk2yJ`Yq6og0D^=?!I?PSGL5epLnf)*Awc6ow;ji4?hYwxr9R5pU&{3>{0_MDl2 z&V`Ng!;+L!No6(kh_>=5QccB>*PEZsrPesC^-YKl-R>WRNeXqBx`>v59)9mJ_w0mknd~dA z&!5~gt&QOJR)KV0zIZKgX-t><>cAfBhU+ix^)24x@VqNZOkTje!+kgY+&8!b;(Zb8 literal 0 HcmV?d00001 diff --git a/examples/data/hello_triangle.vert b/examples/data/hello_triangle.vert new file mode 100644 index 000000000..ac6dcc7c3 --- /dev/null +++ b/examples/data/hello_triangle.vert @@ -0,0 +1,15 @@ +#version 450 + +out gl_PerVertex { + vec4 gl_Position; +}; + +const vec2 positions[3] = vec2[3]( + vec2(0.0, -0.5), + vec2(0.5, 0.5), + vec2(-0.5, 0.5) +); + +void main() { + gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0); +} diff --git a/examples/data/hello_triangle.vert.spv b/examples/data/hello_triangle.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..9a3f5994b71471f4f282bdb2299e70ce2ebd9d62 GIT binary patch literal 904 zcmYk4OD}^_5QdLdTa;4wyN_alhy@}M8mp365Q(i++DH@Hgf1-oGl^eiBk?@nMV#i% z%)Il?oH^4kpR1KZ7zm{>6t+Whsv!pxLOB#;+qk~F-hb=2_79H^R8&Gf7OEMi(lZEN znw_rx2v`7lemU$H!UBr_ngYFt$UQwj+_Ycs+pqohJ0Wbs>znJnb^4uNm->9%SKeCt zlTQk-x-F{<{FdQ6hRw(4HvT1?_jt;Q2@QJ5Ia`CN>}75TOu@>p$I~a8S^Oeg1m@8D zVq@R4n)Z^5V1}`7$Nr~j>^|gXh`lEQtR(EF@hHB>-eXvMJA?WPHUb{?#^b<#%fu5{ zYvjyZTLqpho=n2eJ$9jX3aF9KG}HK;dZw8nkP{gUl{9v?Y@P@|gpa!UO+4Rg%`tCqH}2je{|!^XdY8TZ2GpJrJHsOI z{&UpkocV$Z?_C9QYScT!8j!z5<386@4)e!tq?~WM;WqE90k!7bZv?!@`L}@If&aC0 L7_0wbD<|L=@_;WL literal 0 HcmV?d00001 diff --git a/examples/init.rs b/examples/hello_triangle.rs similarity index 56% rename from examples/init.rs rename to examples/hello_triangle.rs index 1e03e88ed..5b4450ae3 100644 --- a/examples/init.rs +++ b/examples/hello_triangle.rs @@ -10,4 +10,10 @@ fn main() { anisotropic_filtering: false, }, }); + let _vs = gn::device_create_shader_module(device, gn::ShaderModuleDescriptor { + code: include_bytes!("./data/hello_triangle.vert.spv"), + }); + let _fs = gn::device_create_shader_module(device, gn::ShaderModuleDescriptor { + code: include_bytes!("./data/hello_triangle.frag.spv"), + }); } diff --git a/src/device.rs b/src/device.rs index 36041ed6f..e9d200a37 100644 --- a/src/device.rs +++ b/src/device.rs @@ -1,7 +1,7 @@ use hal::{self, Device as _Device, QueueGroup}; use memory; -use {BufferHandle, CommandBufferHandle, DeviceHandle}; +use {BufferHandle, CommandBufferHandle, DeviceHandle, ShaderModuleHandle}; pub type BufferUsage = hal::buffer::Usage; @@ -12,6 +12,11 @@ pub struct BufferDescriptor { pub usage: BufferUsage, } +#[repr(C)] +pub struct ShaderModuleDescriptor<'a> { + pub code: &'a [u8], +} + #[repr(C)] pub struct CommandBufferDescriptor { } @@ -50,6 +55,20 @@ fn device_create_buffer( }) } +pub struct ShaderModule { + pub raw: B::ShaderModule, +} + +pub extern "C" +fn device_create_shader_module( + device: DeviceHandle, desc: ShaderModuleDescriptor +) -> ShaderModuleHandle { + let shader = device.device.create_shader_module(desc.code).unwrap(); + ShaderModuleHandle::new(ShaderModule { + raw: shader, + }) +} + pub extern "C" fn device_create_command_buffer( device: DeviceHandle, desc: CommandBufferDescriptor diff --git a/src/lib.rs b/src/lib.rs index e55095cd6..961c649aa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,6 +26,7 @@ pub type InstanceHandle = Handle; pub type AdapterHandle = Handle>; pub type DeviceHandle = Handle>; pub type BufferHandle = Handle>; +pub type ShaderModuleHandle = Handle>; pub type CommandBufferHandle = Handle>; pub type RenderPassHandle = Handle>; pub type ComputePassHandle = Handle>;