mirror of
https://github.com/italicsjenga/portability.git
synced 2024-10-17 14:51:30 +11:00
Cleanup usage of deref and a few code improvements
This commit is contained in:
parent
31aa84a06e
commit
31d9ddc75f
|
@ -10,7 +10,7 @@ use hal::queue::RawCommandQueue;
|
||||||
|
|
||||||
use std::ffi::{CStr, CString};
|
use std::ffi::{CStr, CString};
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::ops::{Deref, Range};
|
use std::ops::Range;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
@ -372,13 +372,13 @@ pub extern "C" fn gfxQueueSubmit(
|
||||||
|
|
||||||
stages.into_iter()
|
stages.into_iter()
|
||||||
.zip(semaphores.into_iter())
|
.zip(semaphores.into_iter())
|
||||||
.map(|(stage, semaphore)| (semaphore.deref(), conv::map_pipeline_stage_flags(*stage)))
|
.map(|(stage, semaphore)| (&**semaphore, conv::map_pipeline_stage_flags(*stage)))
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
};
|
};
|
||||||
let signal_semaphores = unsafe {
|
let signal_semaphores = unsafe {
|
||||||
slice::from_raw_parts(submission.pSignalSemaphores, submission.signalSemaphoreCount as _)
|
slice::from_raw_parts(submission.pSignalSemaphores, submission.signalSemaphoreCount as _)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|semaphore| semaphore.deref())
|
.map(|semaphore| &**semaphore)
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -530,7 +530,7 @@ pub extern "C" fn gfxGetBufferMemoryRequirements(
|
||||||
buffer: VkBuffer,
|
buffer: VkBuffer,
|
||||||
pMemoryRequirements: *mut VkMemoryRequirements,
|
pMemoryRequirements: *mut VkMemoryRequirements,
|
||||||
) {
|
) {
|
||||||
let req = match *buffer.deref() {
|
let req = match *buffer {
|
||||||
Buffer::Buffer(ref buffer) => unimplemented!(),
|
Buffer::Buffer(ref buffer) => unimplemented!(),
|
||||||
Buffer::Unbound(ref buffer) => gpu.device.get_buffer_requirements(buffer),
|
Buffer::Unbound(ref buffer) => gpu.device.get_buffer_requirements(buffer),
|
||||||
};
|
};
|
||||||
|
@ -547,7 +547,7 @@ pub extern "C" fn gfxGetImageMemoryRequirements(
|
||||||
image: VkImage,
|
image: VkImage,
|
||||||
pMemoryRequirements: *mut VkMemoryRequirements,
|
pMemoryRequirements: *mut VkMemoryRequirements,
|
||||||
) {
|
) {
|
||||||
let req = match *image.deref() {
|
let req = match *image {
|
||||||
Image::Image(ref image) => unimplemented!(),
|
Image::Image(ref image) => unimplemented!(),
|
||||||
Image::Unbound(ref image) => gpu.device.get_image_requirements(image),
|
Image::Unbound(ref image) => gpu.device.get_image_requirements(image),
|
||||||
};
|
};
|
||||||
|
@ -641,7 +641,7 @@ pub extern "C" fn gfxWaitForFences(
|
||||||
let fences = unsafe {
|
let fences = unsafe {
|
||||||
slice::from_raw_parts(pFences, fenceCount as _)
|
slice::from_raw_parts(pFences, fenceCount as _)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|fence| fence.deref())
|
.map(|fence| &**fence)
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -853,7 +853,7 @@ pub extern "C" fn gfxCreateImageView(
|
||||||
assert!(info.subresourceRange.levelCount != VK_REMAINING_MIP_LEVELS as _); // TODO
|
assert!(info.subresourceRange.levelCount != VK_REMAINING_MIP_LEVELS as _); // TODO
|
||||||
assert!(info.subresourceRange.layerCount != VK_REMAINING_ARRAY_LAYERS as _); // TODO
|
assert!(info.subresourceRange.layerCount != VK_REMAINING_ARRAY_LAYERS as _); // TODO
|
||||||
|
|
||||||
let image = match *info.image.deref() {
|
let image = match *info.image {
|
||||||
Image::Image(ref image) => image,
|
Image::Image(ref image) => image,
|
||||||
// Non-sparse images must be bound prior.
|
// Non-sparse images must be bound prior.
|
||||||
Image::Unbound(_) => panic!("Can't create view for unbound image"),
|
Image::Unbound(_) => panic!("Can't create view for unbound image"),
|
||||||
|
@ -991,8 +991,8 @@ pub extern "C" fn gfxCreateGraphicsPipelines(
|
||||||
specialization.mapEntryCount as _,
|
specialization.mapEntryCount as _,
|
||||||
);
|
);
|
||||||
|
|
||||||
entries.
|
entries
|
||||||
into_iter()
|
.into_iter()
|
||||||
.map(|entry| {
|
.map(|entry| {
|
||||||
// Currently blocked due to lack of specialization type knowledge
|
// Currently blocked due to lack of specialization type knowledge
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
|
@ -1029,7 +1029,7 @@ pub extern "C" fn gfxCreateGraphicsPipelines(
|
||||||
|
|
||||||
let entry_point = pso::EntryPoint {
|
let entry_point = pso::EntryPoint {
|
||||||
entry: &name,
|
entry: &name,
|
||||||
module: stage.module.deref(),
|
module: &*stage.module,
|
||||||
specialization: &specialization,
|
specialization: &specialization,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1116,11 +1116,9 @@ pub extern "C" fn gfxCreateGraphicsPipelines(
|
||||||
|
|
||||||
let input_assembler = {
|
let input_assembler = {
|
||||||
let input_state = unsafe { &*info.pInputAssemblyState };
|
let input_state = unsafe { &*info.pInputAssemblyState };
|
||||||
let tessellation_state = if shaders.hull.is_some() {
|
let tessellation_state = shaders
|
||||||
Some(unsafe { &*info.pTessellationState })
|
.hull
|
||||||
} else {
|
.map(|_| unsafe { &*info.pTessellationState });
|
||||||
None
|
|
||||||
};
|
|
||||||
|
|
||||||
assert_eq!(input_state.primitiveRestartEnable, VK_FALSE); // TODO
|
assert_eq!(input_state.primitiveRestartEnable, VK_FALSE); // TODO
|
||||||
|
|
||||||
|
@ -1140,8 +1138,7 @@ pub extern "C" fn gfxCreateGraphicsPipelines(
|
||||||
let blender = {
|
let blender = {
|
||||||
let mut blend_desc = pso::BlendDesc::default();
|
let mut blend_desc = pso::BlendDesc::default();
|
||||||
|
|
||||||
let blend_state = unsafe { info.pColorBlendState.as_ref() };
|
if let Some(state) = unsafe { info.pColorBlendState.as_ref() } {
|
||||||
if let Some(state) = blend_state {
|
|
||||||
if state.logicOpEnable == VK_TRUE {
|
if state.logicOpEnable == VK_TRUE {
|
||||||
blend_desc.logic_op = Some(conv::map_logic_op(state.logicOp));
|
blend_desc.logic_op = Some(conv::map_logic_op(state.logicOp));
|
||||||
}
|
}
|
||||||
|
@ -1176,7 +1173,7 @@ pub extern "C" fn gfxCreateGraphicsPipelines(
|
||||||
.collect();
|
.collect();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: multisampling
|
assert!(info.pMultisampleState.is_null());
|
||||||
|
|
||||||
blend_desc
|
blend_desc
|
||||||
};
|
};
|
||||||
|
@ -1333,7 +1330,7 @@ pub extern "C" fn gfxCreatePipelineLayout(
|
||||||
|
|
||||||
let layouts = set_layouts
|
let layouts = set_layouts
|
||||||
.iter()
|
.iter()
|
||||||
.map(|layout| layout.deref())
|
.map(|layout| &**layout)
|
||||||
.collect::<Vec<&<B as Backend>::DescriptorSetLayout>>();
|
.collect::<Vec<&<B as Backend>::DescriptorSetLayout>>();
|
||||||
|
|
||||||
let ranges = push_constants
|
let ranges = push_constants
|
||||||
|
@ -1479,7 +1476,7 @@ pub extern "C" fn gfxAllocateDescriptorSets(
|
||||||
};
|
};
|
||||||
let layouts = set_layouts
|
let layouts = set_layouts
|
||||||
.iter()
|
.iter()
|
||||||
.map(|layout| layout.deref())
|
.map(|layout| &**layout)
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let descriptor_sets = pool.allocate_sets(&layouts);
|
let descriptor_sets = pool.allocate_sets(&layouts);
|
||||||
|
@ -1524,11 +1521,11 @@ pub extern "C" fn gfxUpdateDescriptorSets(
|
||||||
.map(|buffer| {
|
.map(|buffer| {
|
||||||
assert_ne!(buffer.range as i32, VK_WHOLE_SIZE);
|
assert_ne!(buffer.range as i32, VK_WHOLE_SIZE);
|
||||||
(
|
(
|
||||||
match buffer.buffer.deref() {
|
match *buffer.buffer {
|
||||||
&Buffer::Buffer(ref buf) => buf,
|
Buffer::Buffer(ref buf) => buf,
|
||||||
// Vulkan portability restriction:
|
// Vulkan portability restriction:
|
||||||
// Non-sparse buffer need to be bound to device memory.
|
// Non-sparse buffer need to be bound to device memory.
|
||||||
&Buffer::Unbound(_) => panic!("Buffer needs to be bound"),
|
Buffer::Unbound(_) => panic!("Buffer needs to be bound"),
|
||||||
},
|
},
|
||||||
buffer.offset .. buffer.offset+buffer.range,
|
buffer.offset .. buffer.offset+buffer.range,
|
||||||
)
|
)
|
||||||
|
@ -1569,13 +1566,13 @@ pub extern "C" fn gfxUpdateDescriptorSets(
|
||||||
pso::DescriptorType::UniformTexelBuffer => pso::DescriptorWrite::UniformTexelBuffer(
|
pso::DescriptorType::UniformTexelBuffer => pso::DescriptorWrite::UniformTexelBuffer(
|
||||||
texel_buffer_views
|
texel_buffer_views
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|view| view.deref())
|
.map(|view| &**view)
|
||||||
.collect()
|
.collect()
|
||||||
),
|
),
|
||||||
pso::DescriptorType::StorageTexelBuffer => pso::DescriptorWrite::StorageTexelBuffer(
|
pso::DescriptorType::StorageTexelBuffer => pso::DescriptorWrite::StorageTexelBuffer(
|
||||||
texel_buffer_views
|
texel_buffer_views
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|view| view.deref())
|
.map(|view| &**view)
|
||||||
.collect()
|
.collect()
|
||||||
),
|
),
|
||||||
pso::DescriptorType::UniformBuffer => pso::DescriptorWrite::UniformBuffer(
|
pso::DescriptorType::UniformBuffer => pso::DescriptorWrite::UniformBuffer(
|
||||||
|
@ -1617,7 +1614,7 @@ pub extern "C" fn gfxCreateFramebuffer(
|
||||||
};
|
};
|
||||||
let attachments = attachments
|
let attachments = attachments
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|attachment| attachment.deref())
|
.map(|attachment| &**attachment)
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let extent = hal::device::Extent {
|
let extent = hal::device::Extent {
|
||||||
|
@ -2062,20 +2059,20 @@ pub extern "C" fn gfxCmdBindDescriptorSets(
|
||||||
let descriptor_sets = unsafe {
|
let descriptor_sets = unsafe {
|
||||||
slice::from_raw_parts(pDescriptorSets, descriptorSetCount as _)
|
slice::from_raw_parts(pDescriptorSets, descriptorSetCount as _)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|set| set.deref())
|
.map(|set| &**set)
|
||||||
};
|
};
|
||||||
|
|
||||||
match pipelineBindPoint {
|
match pipelineBindPoint {
|
||||||
VkPipelineBindPoint::VK_PIPELINE_BIND_POINT_GRAPHICS => {
|
VkPipelineBindPoint::VK_PIPELINE_BIND_POINT_GRAPHICS => {
|
||||||
commandBuffer.bind_graphics_descriptor_sets(
|
commandBuffer.bind_graphics_descriptor_sets(
|
||||||
layout.deref(),
|
&*layout,
|
||||||
firstSet as _,
|
firstSet as _,
|
||||||
descriptor_sets,
|
descriptor_sets,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
VkPipelineBindPoint::VK_PIPELINE_BIND_POINT_COMPUTE => {
|
VkPipelineBindPoint::VK_PIPELINE_BIND_POINT_COMPUTE => {
|
||||||
commandBuffer.bind_compute_descriptor_sets(
|
commandBuffer.bind_compute_descriptor_sets(
|
||||||
layout.deref(),
|
&*layout,
|
||||||
firstSet as _,
|
firstSet as _,
|
||||||
descriptor_sets,
|
descriptor_sets,
|
||||||
);
|
);
|
||||||
|
@ -2113,15 +2110,14 @@ pub extern "C" fn gfxCmdBindVertexBuffers(
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.zip(offsets.into_iter())
|
.zip(offsets.into_iter())
|
||||||
.map(|(buffer, offset)| {
|
.map(|(buffer, offset)| {
|
||||||
let offset = *offset as _;
|
|
||||||
let buffer = match **buffer {
|
let buffer = match **buffer {
|
||||||
Buffer::Buffer(ref buffer) => buffer,
|
Buffer::Buffer(ref buffer) => buffer,
|
||||||
Buffer::Unbound(_) => panic!("Non-sparse buffers need to be bound to device memory."),
|
Buffer::Unbound(_) => panic!("Non-sparse buffers need to be bound to device memory."),
|
||||||
};
|
};
|
||||||
|
|
||||||
(buffer, offset)
|
(buffer, *offset as _)
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect();
|
||||||
|
|
||||||
commandBuffer.bind_vertex_buffers(pso::VertexBufferSet(views));
|
commandBuffer.bind_vertex_buffers(pso::VertexBufferSet(views));
|
||||||
}
|
}
|
||||||
|
@ -2864,7 +2860,7 @@ pub extern "C" fn gfxQueuePresentKHR(
|
||||||
let wait_semaphores = unsafe {
|
let wait_semaphores = unsafe {
|
||||||
slice::from_raw_parts(info.pWaitSemaphores, info.waitSemaphoreCount as _)
|
slice::from_raw_parts(info.pWaitSemaphores, info.waitSemaphoreCount as _)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|semaphore| semaphore.deref())
|
.map(|semaphore| &**semaphore)
|
||||||
};
|
};
|
||||||
|
|
||||||
queue.present(swapchains, wait_semaphores);
|
queue.present(swapchains, wait_semaphores);
|
||||||
|
|
Loading…
Reference in a new issue