63: Implement specialization constants and image copy r=kvark a=msiglreith



Co-authored-by: msiglreith <m.siglreith@gmail.com>
This commit is contained in:
bors[bot] 2018-04-23 02:44:04 +00:00
commit 9402e06ae7

View file

@ -1405,7 +1405,7 @@ pub extern "C" fn gfxCreateGraphicsPipelines(
.as_ref() .as_ref()
.map(|specialization| { .map(|specialization| {
let data = slice::from_raw_parts( let data = slice::from_raw_parts(
specialization.pData, specialization.pData as *const u8,
specialization.dataSize as _, specialization.dataSize as _,
); );
let entries = slice::from_raw_parts( let entries = slice::from_raw_parts(
@ -1416,8 +1416,29 @@ pub extern "C" fn gfxCreateGraphicsPipelines(
entries entries
.into_iter() .into_iter()
.map(|entry| { .map(|entry| {
// Currently blocked due to lack of specialization type knowledge let offset = entry.offset as usize;
unimplemented!() pso::Specialization {
id: entry.constantID,
value: match entry.size {
4 => pso::Constant::U32(
data[offset] as u32 |
(data[offset+1] as u32) << 8 |
(data[offset+2] as u32) << 16 |
(data[offset+3] as u32) << 24
),
8 => pso::Constant::U64(
data[offset] as u64 |
(data[offset+1] as u64) << 8 |
(data[offset+2] as u64) << 16 |
(data[offset+3] as u64) << 24 |
(data[offset+4] as u64) << 32 |
(data[offset+5] as u64) << 40 |
(data[offset+6] as u64) << 48 |
(data[offset+7] as u64) << 56
),
size => panic!("Unexpected specialization constant size: {:?}", size),
},
}
}) })
.collect::<Vec<pso::Specialization>>() .collect::<Vec<pso::Specialization>>()
}) })
@ -2740,7 +2761,7 @@ pub extern "C" fn gfxCmdCopyBuffer(
} }
#[inline] #[inline]
pub extern "C" fn gfxCmdCopyImage( pub extern "C" fn gfxCmdCopyImage(
commandBuffer: VkCommandBuffer, mut commandBuffer: VkCommandBuffer,
srcImage: VkImage, srcImage: VkImage,
srcImageLayout: VkImageLayout, srcImageLayout: VkImageLayout,
dstImage: VkImage, dstImage: VkImage,
@ -2748,7 +2769,31 @@ pub extern "C" fn gfxCmdCopyImage(
regionCount: u32, regionCount: u32,
pRegions: *const VkImageCopy, pRegions: *const VkImageCopy,
) { ) {
unimplemented!() let regions = unsafe {
slice::from_raw_parts(pRegions, regionCount as _)
}
.iter()
.map(|r| com::ImageCopy {
src_subresource: conv::map_subresource_layers(r.srcSubresource),
src_offset: conv::map_offset(r.srcOffset),
dst_subresource: conv::map_subresource_layers(r.dstSubresource),
dst_offset: conv::map_offset(r.dstOffset),
extent: conv::map_extent(r.extent),
});
commandBuffer.copy_image(
match *srcImage {
Image::Image(ref src) => src,
Image::Unbound(_) => panic!("Bound src image expected!"),
},
conv::map_image_layout(srcImageLayout),
match *dstImage {
Image::Image(ref dst) => dst,
Image::Unbound(_) => panic!("Bound dst image expected!"),
},
conv::map_image_layout(dstImageLayout),
regions,
);
} }
#[inline] #[inline]
pub extern "C" fn gfxCmdBlitImage( pub extern "C" fn gfxCmdBlitImage(