26: Add all portability shims r=kvark a=msiglreith

Add missing shim implementations on the portability library side and move function address query implementation into the impl crate.
This commit is contained in:
bors[bot] 2018-01-29 14:59:34 +00:00
commit 23d10a3c0f
3 changed files with 186 additions and 56 deletions

View file

@ -17,6 +17,25 @@ use super::*;
const VERSION: (u32, u32, u32) = (1, 0, 66);
const DRIVER_VERSION: u32 = 1;
pub type PFN_vkCreateInstance = ::std::option::Option<unsafe extern "C" fn(
pCreateInfo: *const VkInstanceCreateInfo,
pAllocator: *const VkAllocationCallbacks,
pInstance: *mut VkInstance,
) -> VkResult>;
macro_rules! proc_addr {
($name:expr, $($vk:ident, $pfn_vk:ident => $gfx:expr),*) => (
match $name {
$(
stringify!($vk) => unsafe {
mem::transmute::<$pfn_vk, _>(Some(*&$gfx))
}
),*
_ => None
}
);
}
#[inline]
pub extern "C" fn gfxCreateInstance(
_pCreateInfo: *const VkInstanceCreateInfo,
@ -109,7 +128,9 @@ pub extern "C" fn gfxGetPhysicalDeviceFeatures(
adapter: VkPhysicalDevice,
pFeatures: *mut VkPhysicalDeviceFeatures,
) {
unimplemented!()
let features = adapter.physical_device.get_features();
// TODO: fill in information
}
#[inline]
pub extern "C" fn gfxGetPhysicalDeviceFormatProperties(
@ -201,7 +222,21 @@ pub extern "C" fn gfxGetInstanceProcAddr(
instance: VkInstance,
pName: *const ::std::os::raw::c_char,
) -> PFN_vkVoidFunction {
unimplemented!()
let name = unsafe { CStr::from_ptr(pName) };
let name = match name.to_str() {
Ok(name) => name,
Err(_) => return None,
};
proc_addr!{ name,
vkCreateInstance, PFN_vkCreateInstance => gfxCreateInstance,
vkEnumerateInstanceExtensionProperties, PFN_vkEnumerateInstanceExtensionProperties => gfxEnumerateInstanceExtensionProperties,
vkGetPhysicalDeviceSurfaceSupportKHR, PFN_vkGetPhysicalDeviceSurfaceSupportKHR => gfxGetPhysicalDeviceSurfaceSupportKHR,
vkGetPhysicalDeviceSurfaceCapabilitiesKHR, PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR => gfxGetPhysicalDeviceSurfaceCapabilitiesKHR,
vkGetPhysicalDeviceSurfaceFormatsKHR, PFN_vkGetPhysicalDeviceSurfaceFormatsKHR => gfxGetPhysicalDeviceSurfaceFormatsKHR,
vkGetPhysicalDeviceSurfacePresentModesKHR, PFN_vkGetPhysicalDeviceSurfacePresentModesKHR => gfxGetPhysicalDeviceSurfacePresentModesKHR
}
}
#[inline]
@ -209,7 +244,19 @@ pub extern "C" fn gfxGetDeviceProcAddr(
device: VkDevice,
pName: *const ::std::os::raw::c_char,
) -> PFN_vkVoidFunction {
unimplemented!()
let name = unsafe { CStr::from_ptr(pName) };
let name = match name.to_str() {
Ok(name) => name,
Err(_) => return None,
};
proc_addr!{ name,
vkCreateSwapchainKHR, PFN_vkCreateSwapchainKHR => gfxCreateSwapchainKHR,
vkDestroySwapchainKHR, PFN_vkDestroySwapchainKHR => gfxDestroySwapchainKHR,
vkGetSwapchainImagesKHR, PFN_vkGetSwapchainImagesKHR => gfxGetSwapchainImagesKHR,
vkAcquireNextImageKHR, PFN_vkAcquireNextImageKHR => gfxAcquireNextImageKHR,
vkQueuePresentKHR, PFN_vkQueuePresentKHR => gfxQueuePresentKHR
}
}
#[inline]
@ -321,17 +368,20 @@ pub extern "C" fn gfxEnumerateInstanceExtensionProperties(
#[inline]
pub extern "C" fn gfxEnumerateDeviceExtensionProperties(
physicalDevice: VkPhysicalDevice,
pLayerName: *const ::std::os::raw::c_char,
_physicalDevice: VkPhysicalDevice,
_pLayerName: *const ::std::os::raw::c_char,
pPropertyCount: *mut u32,
pProperties: *mut VkExtensionProperties,
_pProperties: *mut VkExtensionProperties,
) -> VkResult {
unimplemented!()
// TODO: dummy implementation
unsafe { *pPropertyCount = 0; }
VkResult::VK_SUCCESS
}
#[inline]
pub extern "C" fn gfxEnumerateInstanceLayerProperties(
pPropertyCount: *mut u32,
pProperties: *mut VkLayerProperties,
_pProperties: *mut VkLayerProperties,
) -> VkResult {
// TODO: dummy implementation
unsafe { *pPropertyCount = 0; }
@ -2476,7 +2526,7 @@ pub extern "C" fn gfxDestroySurfaceKHR(
}
#[inline]
pub extern "C" fn gfxGetPhysicalDeviceSurfaceSupportKHR(
pub extern fn gfxGetPhysicalDeviceSurfaceSupportKHR(
adapter: VkPhysicalDevice,
queueFamilyIndex: u32,
surface: VkSurfaceKHR,

View file

@ -10,32 +10,12 @@ use std::ptr;
const ICD_VERSION: u32 = 5;
macro_rules! proc_addr {
($name:expr, $($vk:pat => $gfx:expr),*) => (
match $name {
$(
stringify!($vk) => unsafe { mem::transmute::<_, PFN_vkVoidFunction>($gfx as *const ()) }
),*
_ => None
}
);
}
#[no_mangle]
pub extern "C" fn vk_icdGetInstanceProcAddr(
instance: VkInstance,
pName: *const ::std::os::raw::c_char,
) -> PFN_vkVoidFunction {
let name = unsafe { CStr::from_ptr(pName) };
let name = match name.to_str() {
Ok(name) => name,
Err(_) => return None,
};
proc_addr!{ name,
vkCreateInstance => gfxCreateInstance,
vkEnumerateInstanceExtensionProperties => gfxEnumerateInstanceExtensionProperties
}
gfxGetInstanceProcAddr(instance, pName)
}
#[no_mangle]
@ -55,5 +35,5 @@ pub extern "C" fn vk_icdGetPhysicalDeviceProcAddr(
instance: VkInstance,
pName: *const ::std::os::raw::c_char,
) -> PFN_vkVoidFunction {
unimplemented!()
gfxGetPhysicslDeviceProcAddr(instance, pName)
}

View file

@ -4,6 +4,10 @@ extern crate portability_gfx;
use portability_gfx::*;
// These are only shims, reexporting the gfx functions with an vk prefix.
// IMPORTANT: These should only foward parameters to the gfx implementation,
// don't include any further logic.
#[no_mangle]
pub extern "C" fn vkCreateInstance(
pCreateInfo: *const VkInstanceCreateInfo,
@ -981,7 +985,7 @@ pub extern "C" fn vkCmdSetStencilWriteMask(
faceMask: VkStencilFaceFlags,
writeMask: u32,
) {
unimplemented!()
gfxCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask)
}
#[no_mangle]
pub extern "C" fn vkCmdSetStencilReference(
@ -989,7 +993,7 @@ pub extern "C" fn vkCmdSetStencilReference(
faceMask: VkStencilFaceFlags,
reference: u32,
) {
unimplemented!()
gfxCmdSetStencilReference(commandBuffer, faceMask, reference)
}
#[no_mangle]
pub extern "C" fn vkCmdBindDescriptorSets(
@ -1074,7 +1078,7 @@ pub extern "C" fn vkCmdDrawIndirect(
drawCount: u32,
stride: u32,
) {
unimplemented!()
gfxCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride)
}
#[no_mangle]
pub extern "C" fn vkCmdDrawIndexedIndirect(
@ -1084,7 +1088,7 @@ pub extern "C" fn vkCmdDrawIndexedIndirect(
drawCount: u32,
stride: u32,
) {
unimplemented!()
gfxCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride)
}
#[no_mangle]
pub extern "C" fn vkCmdDispatch(
@ -1093,7 +1097,7 @@ pub extern "C" fn vkCmdDispatch(
groupCountY: u32,
groupCountZ: u32,
) {
unimplemented!()
gfxCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ)
}
#[no_mangle]
pub extern "C" fn vkCmdDispatchIndirect(
@ -1101,7 +1105,7 @@ pub extern "C" fn vkCmdDispatchIndirect(
buffer: VkBuffer,
offset: VkDeviceSize,
) {
unimplemented!()
gfxCmdDispatchIndirect(commandBuffer, buffer, offset)
}
#[no_mangle]
pub extern "C" fn vkCmdCopyBuffer(
@ -1111,7 +1115,7 @@ pub extern "C" fn vkCmdCopyBuffer(
regionCount: u32,
pRegions: *const VkBufferCopy,
) {
unimplemented!()
gfxCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions)
}
#[no_mangle]
pub extern "C" fn vkCmdCopyImage(
@ -1123,7 +1127,15 @@ pub extern "C" fn vkCmdCopyImage(
regionCount: u32,
pRegions: *const VkImageCopy,
) {
unimplemented!()
gfxCmdCopyImage(
commandBuffer,
srcImage,
srcImageLayout,
dstImage,
dstImageLayout,
regionCount,
pRegions,
)
}
#[no_mangle]
pub extern "C" fn vkCmdBlitImage(
@ -1136,7 +1148,16 @@ pub extern "C" fn vkCmdBlitImage(
pRegions: *const VkImageBlit,
filter: VkFilter,
) {
unimplemented!()
gfxCmdBlitImage(
commandBuffer,
srcImage,
srcImageLayout,
dstImage,
dstImageLayout,
regionCount,
pRegions,
filter,
)
}
#[no_mangle]
pub extern "C" fn vkCmdCopyBufferToImage(
@ -1147,7 +1168,14 @@ pub extern "C" fn vkCmdCopyBufferToImage(
regionCount: u32,
pRegions: *const VkBufferImageCopy,
) {
unimplemented!()
gfxCmdCopyBufferToImage(
commandBuffer,
srcBuffer,
dstImage,
dstImageLayout,
regionCount,
pRegions,
)
}
#[no_mangle]
pub extern "C" fn vkCmdCopyImageToBuffer(
@ -1158,7 +1186,14 @@ pub extern "C" fn vkCmdCopyImageToBuffer(
regionCount: u32,
pRegions: *const VkBufferImageCopy,
) {
unimplemented!()
gfxCmdCopyImageToBuffer(
commandBuffer,
srcImage,
srcImageLayout,
dstBuffer,
regionCount,
pRegions,
)
}
#[no_mangle]
pub extern "C" fn vkCmdUpdateBuffer(
@ -1168,7 +1203,13 @@ pub extern "C" fn vkCmdUpdateBuffer(
dataSize: VkDeviceSize,
pData: *const ::std::os::raw::c_void,
) {
unimplemented!()
gfxCmdUpdateBuffer(
commandBuffer,
dstBuffer,
dstOffset,
dataSize,
pData,
)
}
#[no_mangle]
pub extern "C" fn vkCmdFillBuffer(
@ -1178,7 +1219,7 @@ pub extern "C" fn vkCmdFillBuffer(
size: VkDeviceSize,
data: u32,
) {
unimplemented!()
gfxCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data)
}
#[no_mangle]
pub extern "C" fn vkCmdClearColorImage(
@ -1189,7 +1230,14 @@ pub extern "C" fn vkCmdClearColorImage(
rangeCount: u32,
pRanges: *const VkImageSubresourceRange,
) {
unimplemented!()
gfxCmdClearColorImage(
commandBuffer,
image,
imageLayout,
pColor,
rangeCount,
pRanges,
)
}
#[no_mangle]
pub extern "C" fn vkCmdClearDepthStencilImage(
@ -1200,7 +1248,14 @@ pub extern "C" fn vkCmdClearDepthStencilImage(
rangeCount: u32,
pRanges: *const VkImageSubresourceRange,
) {
unimplemented!()
gfxCmdClearDepthStencilImage(
commandBuffer,
image,
imageLayout,
pDepthStencil,
rangeCount,
pRanges,
)
}
#[no_mangle]
pub extern "C" fn vkCmdClearAttachments(
@ -1210,7 +1265,13 @@ pub extern "C" fn vkCmdClearAttachments(
rectCount: u32,
pRects: *const VkClearRect,
) {
unimplemented!()
gfxCmdClearAttachments(
commandBuffer,
attachmentCount,
pAttachments,
rectCount,
pRects,
)
}
#[no_mangle]
pub extern "C" fn vkCmdResolveImage(
@ -1222,7 +1283,15 @@ pub extern "C" fn vkCmdResolveImage(
regionCount: u32,
pRegions: *const VkImageResolve,
) {
unimplemented!()
gfxCmdResolveImage(
commandBuffer,
srcImage,
srcImageLayout,
dstImage,
dstImageLayout,
regionCount,
pRegions,
)
}
#[no_mangle]
pub extern "C" fn vkCmdSetEvent(
@ -1230,7 +1299,11 @@ pub extern "C" fn vkCmdSetEvent(
event: VkEvent,
stageMask: VkPipelineStageFlags,
) {
unimplemented!()
gfxCmdSetEvent(
commandBuffer,
event,
stageMask,
)
}
#[no_mangle]
pub extern "C" fn vkCmdResetEvent(
@ -1238,7 +1311,11 @@ pub extern "C" fn vkCmdResetEvent(
event: VkEvent,
stageMask: VkPipelineStageFlags,
) {
unimplemented!()
gfxCmdResetEvent(
commandBuffer,
event,
stageMask,
)
}
#[no_mangle]
pub extern "C" fn vkCmdWaitEvents(
@ -1254,7 +1331,19 @@ pub extern "C" fn vkCmdWaitEvents(
imageMemoryBarrierCount: u32,
pImageMemoryBarriers: *const VkImageMemoryBarrier,
) {
unimplemented!()
gfxCmdWaitEvents(
commandBuffer,
eventCount,
pEvents,
srcStageMask,
dstStageMask,
memoryBarrierCount,
pMemoryBarriers,
bufferMemoryBarrierCount,
pBufferMemoryBarriers,
imageMemoryBarrierCount,
pImageMemoryBarriers,
)
}
#[no_mangle]
pub extern "C" fn vkCmdPipelineBarrier(
@ -1269,7 +1358,18 @@ pub extern "C" fn vkCmdPipelineBarrier(
imageMemoryBarrierCount: u32,
pImageMemoryBarriers: *const VkImageMemoryBarrier,
) {
unimplemented!()
gfxCmdPipelineBarrier(
commandBuffer,
srcStageMask,
dstStageMask,
dependencyFlags,
memoryBarrierCount,
pMemoryBarriers,
bufferMemoryBarrierCount,
pBufferMemoryBarriers,
imageMemoryBarrierCount,
pImageMemoryBarriers,
)
}
#[no_mangle]
pub extern "C" fn vkCmdBeginQuery(
@ -1278,7 +1378,7 @@ pub extern "C" fn vkCmdBeginQuery(
query: u32,
flags: VkQueryControlFlags,
) {
unimplemented!()
gfxCmdBeginQuery(commandBuffer, queryPool, query, flags)
}
#[no_mangle]
pub extern "C" fn vkCmdEndQuery(
@ -1286,7 +1386,7 @@ pub extern "C" fn vkCmdEndQuery(
queryPool: VkQueryPool,
query: u32,
) {
unimplemented!()
gfxCmdEndQuery(commandBuffer, queryPool, query)
}
#[no_mangle]
pub extern "C" fn vkCmdResetQueryPool(
@ -1295,7 +1395,7 @@ pub extern "C" fn vkCmdResetQueryPool(
firstQuery: u32,
queryCount: u32,
) {
unimplemented!()
gfxCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount)
}
#[no_mangle]
pub extern "C" fn vkCmdWriteTimestamp(
@ -1304,7 +1404,7 @@ pub extern "C" fn vkCmdWriteTimestamp(
queryPool: VkQueryPool,
query: u32,
) {
unimplemented!()
gfxCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query)
}
#[no_mangle]
pub extern "C" fn vkCmdCopyQueryPoolResults(