Create shader modules

This commit is contained in:
grovesNL 2018-09-16 00:40:42 -06:00
parent 569c5fbeb7
commit 76af247a51
7 changed files with 49 additions and 1 deletions

View File

@ -0,0 +1,7 @@
#version 450
layout(location = 0) out vec4 outColor;
void main() {
outColor = vec4(1.0, 0.0, 0.0, 1.0);
}

Binary file not shown.

View File

@ -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);
}

Binary file not shown.

View File

@ -10,4 +10,10 @@ fn main() {
anisotropic_filtering: false, 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"),
});
} }

View File

@ -1,7 +1,7 @@
use hal::{self, Device as _Device, QueueGroup}; use hal::{self, Device as _Device, QueueGroup};
use memory; use memory;
use {BufferHandle, CommandBufferHandle, DeviceHandle}; use {BufferHandle, CommandBufferHandle, DeviceHandle, ShaderModuleHandle};
pub type BufferUsage = hal::buffer::Usage; pub type BufferUsage = hal::buffer::Usage;
@ -12,6 +12,11 @@ pub struct BufferDescriptor {
pub usage: BufferUsage, pub usage: BufferUsage,
} }
#[repr(C)]
pub struct ShaderModuleDescriptor<'a> {
pub code: &'a [u8],
}
#[repr(C)] #[repr(C)]
pub struct CommandBufferDescriptor { pub struct CommandBufferDescriptor {
} }
@ -50,6 +55,20 @@ fn device_create_buffer(
}) })
} }
pub struct ShaderModule<B: hal::Backend> {
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" pub extern "C"
fn device_create_command_buffer( fn device_create_command_buffer(
device: DeviceHandle, desc: CommandBufferDescriptor device: DeviceHandle, desc: CommandBufferDescriptor

View File

@ -26,6 +26,7 @@ pub type InstanceHandle = Handle<back::Instance>;
pub type AdapterHandle = Handle<hal::Adapter<B>>; pub type AdapterHandle = Handle<hal::Adapter<B>>;
pub type DeviceHandle = Handle<Device<B>>; pub type DeviceHandle = Handle<Device<B>>;
pub type BufferHandle = Handle<Buffer<B>>; pub type BufferHandle = Handle<Buffer<B>>;
pub type ShaderModuleHandle = Handle<ShaderModule<B>>;
pub type CommandBufferHandle = Handle<CommandBuffer<B>>; pub type CommandBufferHandle = Handle<CommandBuffer<B>>;
pub type RenderPassHandle = Handle<RenderPass<B>>; pub type RenderPassHandle = Handle<RenderPass<B>>;
pub type ComputePassHandle = Handle<ComputePass<B>>; pub type ComputePassHandle = Handle<ComputePass<B>>;