mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-12-08 21:26:17 +00:00
native: use iterators for descriptor set layouts
This commit is contained in:
parent
dd681d2c77
commit
c7bb1b453e
@ -44,9 +44,12 @@ pub extern "C" fn wgpu_device_create_bind_group_layout(
|
|||||||
desc: binding_model::BindGroupLayoutDescriptor,
|
desc: binding_model::BindGroupLayoutDescriptor,
|
||||||
) -> BindGroupLayoutId {
|
) -> BindGroupLayoutId {
|
||||||
let bindings = unsafe { slice::from_raw_parts(desc.bindings, desc.bindings_length) };
|
let bindings = unsafe { slice::from_raw_parts(desc.bindings, desc.bindings_length) };
|
||||||
let device_guard = HUB.devices.lock();
|
|
||||||
let device = device_guard.get(device_id);
|
let descriptor_set_layout = HUB.devices
|
||||||
let descriptor_set_layout = device.raw.create_descriptor_set_layout(
|
.lock()
|
||||||
|
.get(device_id)
|
||||||
|
.raw
|
||||||
|
.create_descriptor_set_layout(
|
||||||
bindings.iter().map(|binding| {
|
bindings.iter().map(|binding| {
|
||||||
hal::pso::DescriptorSetLayoutBinding {
|
hal::pso::DescriptorSetLayoutBinding {
|
||||||
binding: binding.binding,
|
binding: binding.binding,
|
||||||
@ -58,6 +61,7 @@ pub extern "C" fn wgpu_device_create_bind_group_layout(
|
|||||||
}),
|
}),
|
||||||
&[],
|
&[],
|
||||||
);
|
);
|
||||||
|
|
||||||
HUB.bind_group_layouts
|
HUB.bind_group_layouts
|
||||||
.lock()
|
.lock()
|
||||||
.register(binding_model::BindGroupLayout {
|
.register(binding_model::BindGroupLayout {
|
||||||
@ -70,16 +74,21 @@ pub extern "C" fn wgpu_device_create_pipeline_layout(
|
|||||||
device_id: DeviceId,
|
device_id: DeviceId,
|
||||||
desc: binding_model::PipelineLayoutDescriptor,
|
desc: binding_model::PipelineLayoutDescriptor,
|
||||||
) -> PipelineLayoutId {
|
) -> PipelineLayoutId {
|
||||||
|
let bind_group_layouts = unsafe {
|
||||||
|
slice::from_raw_parts(desc.bind_group_layouts, desc.bind_group_layouts_length)
|
||||||
|
};
|
||||||
let bind_group_layout_guard = HUB.bind_group_layouts.lock();
|
let bind_group_layout_guard = HUB.bind_group_layouts.lock();
|
||||||
let descriptor_set_layouts =
|
let descriptor_set_layouts = bind_group_layouts
|
||||||
unsafe { slice::from_raw_parts(desc.bind_group_layouts, desc.bind_group_layouts_length) }
|
|
||||||
.iter()
|
.iter()
|
||||||
.map(|id| bind_group_layout_guard.get(id.clone()))
|
.map(|&id| &bind_group_layout_guard.get(id).raw);
|
||||||
.collect::<Vec<_>>();
|
|
||||||
let device_guard = HUB.devices.lock();
|
// TODO: push constants
|
||||||
let device = &device_guard.get(device_id).raw;
|
let pipeline_layout = HUB.devices
|
||||||
let pipeline_layout =
|
.lock()
|
||||||
device.create_pipeline_layout(descriptor_set_layouts.iter().map(|d| &d.raw), &[]); // TODO: push constants
|
.get(device_id)
|
||||||
|
.raw
|
||||||
|
.create_pipeline_layout(descriptor_set_layouts, &[]);
|
||||||
|
|
||||||
HUB.pipeline_layouts
|
HUB.pipeline_layouts
|
||||||
.lock()
|
.lock()
|
||||||
.register(binding_model::PipelineLayout {
|
.register(binding_model::PipelineLayout {
|
||||||
@ -116,11 +125,16 @@ pub extern "C" fn wgpu_device_create_shader_module(
|
|||||||
device_id: DeviceId,
|
device_id: DeviceId,
|
||||||
desc: pipeline::ShaderModuleDescriptor,
|
desc: pipeline::ShaderModuleDescriptor,
|
||||||
) -> ShaderModuleId {
|
) -> ShaderModuleId {
|
||||||
let device_guard = HUB.devices.lock();
|
let spv = unsafe {
|
||||||
let device = &device_guard.get(device_id).raw;
|
slice::from_raw_parts(desc.code.bytes, desc.code.length)
|
||||||
let shader = device
|
};
|
||||||
.create_shader_module(unsafe { slice::from_raw_parts(desc.code.bytes, desc.code.length) })
|
let shader = HUB.devices
|
||||||
|
.lock()
|
||||||
|
.get(device_id)
|
||||||
|
.raw
|
||||||
|
.create_shader_module(spv)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
HUB.shader_modules
|
HUB.shader_modules
|
||||||
.lock()
|
.lock()
|
||||||
.register(ShaderModule { raw: shader })
|
.register(ShaderModule { raw: shader })
|
||||||
@ -133,6 +147,7 @@ pub extern "C" fn wgpu_device_create_command_buffer(
|
|||||||
) -> CommandBufferId {
|
) -> CommandBufferId {
|
||||||
let mut device_guard = HUB.devices.lock();
|
let mut device_guard = HUB.devices.lock();
|
||||||
let device = device_guard.get_mut(device_id);
|
let device = device_guard.get_mut(device_id);
|
||||||
|
|
||||||
let mut cmd_buf = device.com_allocator.allocate(device_id, &device.raw);
|
let mut cmd_buf = device.com_allocator.allocate(device_id, &device.raw);
|
||||||
cmd_buf.raw.as_mut().unwrap().begin(
|
cmd_buf.raw.as_mut().unwrap().begin(
|
||||||
hal::command::CommandBufferFlags::ONE_TIME_SUBMIT,
|
hal::command::CommandBufferFlags::ONE_TIME_SUBMIT,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user