Commit dea29841 authored by Roderick Colenbrander's avatar Roderick Colenbrander Committed by Alexandre Julliard

winevulkan: Export symbols for Core Vulkan functions.

parent 383fbf04
MODULE = winevulkan.dll
IMPORTLIB = winevulkan
IMPORTS = user32 gdi32
C_SRCS = \
......
......@@ -65,6 +65,7 @@ LOGGER.addHandler(logging.StreamHandler())
# Filenames to create.
WINE_VULKAN_H = "../../include/wine/vulkan.h"
WINE_VULKAN_DRIVER_H = "../../include/wine/vulkan_driver.h"
WINE_VULKAN_SPEC = "winevulkan.spec"
WINE_VULKAN_THUNKS_C = "vulkan_thunks.c"
WINE_VULKAN_THUNKS_H = "vulkan_thunks.h"
......@@ -106,6 +107,16 @@ BLACKLISTED_EXTENSIONS = [
"VK_NV_external_memory_win32"
]
# The Vulkan loader provides entry-points for core functionality and important
# extensions. Based on vulkan-1.def this amounts to WSI extensions on 1.0.51.
CORE_EXTENSIONS = [
"VK_KHR_display",
"VK_KHR_display_swapchain",
"VK_KHR_surface",
"VK_KHR_swapchain",
"VK_KHR_win32_surface"
]
# Functions part of our winevulkan graphics driver interface.
# DRIVER_VERSION should be bumped on any change to driver interface
# in FUNCTION_OVERRIDES
......@@ -372,6 +383,20 @@ class VkFunction(object):
return conversions
def is_core_func(self):
""" Returns whether the function is a Vulkan core function.
Core functions are APIs defined by the Vulkan spec to be part of the
Core API as well as several KHR WSI extensions.
"""
if self.extension is None:
return True
if self.extension in CORE_EXTENSIONS:
return True
return False
def is_device_func(self):
# If none of the other, it must be a device function
return not self.is_global_func() and not self.is_instance_func()
......@@ -545,6 +570,19 @@ class VkFunction(object):
return body
def spec(self, prefix=None):
""" Generate spec file entry for this function.
Args
prefix (str, optional): prefix to prepend to entry point name.
"""
params = " ".join([p.spec() for p in self.params])
if prefix is not None:
return "@ stdcall {0}{1}({2})\n".format(prefix, self.name, params)
else:
return "@ stdcall {0}({1})\n".format(self.name, params)
def stub(self, call_conv=None, prefix=None):
stub = self.prototype(call_conv=call_conv, prefix=prefix)
stub += "\n{\n"
......@@ -1290,6 +1328,26 @@ class VkParam(object):
def needs_output_conversion(self):
return self.output_conv is not None
def spec(self):
""" Generate spec file entry for this parameter. """
if self.type_info["category"] in ["bitmask", "enum"]:
return "long"
if self.is_pointer() and self.type == "char":
return "str"
if self.is_dispatchable() or self.is_pointer() or self.is_static_array():
return "ptr"
if self.is_handle() and not self.is_dispatchable():
return "int64"
if self.type == "float":
return "float"
if self.type in ["int", "int32_t", "size_t", "uint32_t", "VkBool32"]:
return "long"
if self.type in ["uint64_t", "VkDeviceSize"]:
return "int64"
LOGGER.error("Unhandled spec conversion for type: {0}".format(self.type))
def variable(self, conv=False):
""" Returns 'glue' code during generation of a function call on how to access the variable.
This function handles various scenarios such as 'unwrapping' if dispatchable objects and
......@@ -1753,7 +1811,10 @@ class VkGenerator(object):
if not vk_func.needs_thunk():
continue
f.write("static " + vk_func.thunk(prefix=prefix, call_conv="WINAPI"))
# Exports symbols for Core functions.
if not vk_func.is_core_func():
f.write("static ")
f.write(vk_func.thunk(prefix=prefix, call_conv="WINAPI"))
f.write("static const struct vulkan_func vk_device_dispatch_table[] =\n{\n")
for vk_func in self.registry.device_funcs:
......@@ -1863,7 +1924,10 @@ class VkGenerator(object):
if not vk_func.is_required() or vk_func.is_global_func() or vk_func.needs_thunk():
continue
f.write("{0};\n".format(vk_func.prototype("WINAPI", prefix="wine_", postfix="DECLSPEC_HIDDEN")))
if vk_func.is_core_func():
f.write("{0};\n".format(vk_func.prototype("WINAPI", prefix="wine_")))
else:
f.write("{0};\n".format(vk_func.prototype("WINAPI", prefix="wine_", postfix="DECLSPEC_HIDDEN")))
f.write("\n")
for struct in self.host_structs:
......@@ -2051,6 +2115,27 @@ class VkGenerator(object):
f.write("extern const struct vulkan_funcs * CDECL __wine_get_vulkan_driver(HDC hdc, UINT version);\n\n")
f.write("#endif /* __WINE_VULKAN_DRIVER_H */\n")
def generate_vulkan_spec(self, f):
f.write("# Automatically generated from Vulkan vk.xml; DO NOT EDIT!\n\n")
f.write("@ stdcall vk_icdGetInstanceProcAddr(ptr str) wine_vk_icdGetInstanceProcAddr\n")
f.write("@ stdcall vk_icdNegotiateLoaderICDInterfaceVersion(ptr) wine_vk_icdNegotiateLoaderICDInterfaceVersion\n")
# Export symbols for all Vulkan Core functions.
for func in self.registry.funcs.values():
if not func.is_core_func():
continue
# Not an ICD level function.
if func.name == "vkEnumerateInstanceLayerProperties":
continue
# We support all Core functions except for VK_KHR_display* APIs.
# Create stubs for unsupported Core functions.
if func.is_required():
f.write(func.spec(prefix="wine_"))
else:
f.write("@ stub {0}\n".format(func.name))
class VkRegistry(object):
def __init__(self, reg_filename):
......@@ -2191,6 +2276,13 @@ class VkRegistry(object):
for ext in exts:
ext_name = ext.attrib["name"]
# Set extension name on any functions calls part of this extension as we
# were not aware of the name during initial parsing.
commands = ext.findall("require/command")
for command in commands:
cmd_name = command.attrib["name"]
self.funcs[cmd_name].extension = ext_name
# Some extensions are not ready or have numbers reserved as a place holder.
if ext.attrib["supported"] == "disabled":
LOGGER.debug("Skipping disabled extension: {0}".format(ext_name))
......@@ -2257,20 +2349,12 @@ class VkRegistry(object):
ext_info = {"name" : ext_name, "type" : ext_type}
extensions.append(ext_info)
commands = ext.findall("require/command")
if not commands:
continue
# Pull in any commands we need. We infer types to pull in from the command
# as well.
for command in commands:
cmd_name = command.attrib["name"]
self._mark_command_required(cmd_name)
# Set extension name on the function call as we were not aware of the
# name during initial parsing.
self.funcs[cmd_name].extension = ext_name
# Sort in alphabetical order.
self.extensions = sorted(extensions, key=lambda ext: ext["name"])
......@@ -2434,5 +2518,8 @@ def main():
with open(WINE_VULKAN_THUNKS_C, "w") as f:
generator.generate_thunks_c(f, "wine_")
with open(WINE_VULKAN_SPEC, "w") as f:
generator.generate_vulkan_spec(f)
if __name__ == "__main__":
main()
......@@ -589,7 +589,7 @@ err:
return res;
}
static VkResult WINAPI wine_vkCreateInstance(const VkInstanceCreateInfo *create_info,
VkResult WINAPI wine_vkCreateInstance(const VkInstanceCreateInfo *create_info,
const VkAllocationCallbacks *allocator, VkInstance *instance)
{
struct VkInstance_T *object = NULL;
......@@ -714,7 +714,7 @@ VkResult WINAPI wine_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice phys_
return res;
}
static VkResult WINAPI wine_vkEnumerateInstanceExtensionProperties(const char *layer_name,
VkResult WINAPI wine_vkEnumerateInstanceExtensionProperties(const char *layer_name,
uint32_t *count, VkExtensionProperties *properties)
{
VkResult res;
......@@ -861,7 +861,7 @@ void WINAPI wine_vkGetDeviceQueue(VkDevice device, uint32_t family_index,
*queue = &device->queues[family_index][queue_index];
}
static PFN_vkVoidFunction WINAPI wine_vkGetInstanceProcAddr(VkInstance instance, const char *name)
PFN_vkVoidFunction WINAPI wine_vkGetInstanceProcAddr(VkInstance instance, const char *name)
{
void *func;
......
......@@ -16,17 +16,17 @@ BOOL wine_vk_device_extension_supported(const char *name) DECLSPEC_HIDDEN;
BOOL wine_vk_instance_extension_supported(const char *name) DECLSPEC_HIDDEN;
/* Functions for which we have custom implementations outside of the thunks. */
VkResult WINAPI wine_vkAllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo *pAllocateInfo, VkCommandBuffer *pCommandBuffers) DECLSPEC_HIDDEN;
void WINAPI wine_vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer *pCommandBuffers) DECLSPEC_HIDDEN;
VkResult WINAPI wine_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) DECLSPEC_HIDDEN;
void WINAPI wine_vkDestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) DECLSPEC_HIDDEN;
void WINAPI wine_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) DECLSPEC_HIDDEN;
VkResult WINAPI wine_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties) DECLSPEC_HIDDEN;
VkResult WINAPI wine_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount, VkPhysicalDevice *pPhysicalDevices) DECLSPEC_HIDDEN;
void WINAPI wine_vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer *pCommandBuffers) DECLSPEC_HIDDEN;
PFN_vkVoidFunction WINAPI wine_vkGetDeviceProcAddr(VkDevice device, const char *pName) DECLSPEC_HIDDEN;
void WINAPI wine_vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue) DECLSPEC_HIDDEN;
VkResult WINAPI wine_vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, VkFence fence) DECLSPEC_HIDDEN;
VkResult WINAPI wine_vkAllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo *pAllocateInfo, VkCommandBuffer *pCommandBuffers);
void WINAPI wine_vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer *pCommandBuffers);
VkResult WINAPI wine_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDevice *pDevice);
void WINAPI wine_vkDestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator);
void WINAPI wine_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator);
VkResult WINAPI wine_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties);
VkResult WINAPI wine_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount, VkPhysicalDevice *pPhysicalDevices);
void WINAPI wine_vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer *pCommandBuffers);
PFN_vkVoidFunction WINAPI wine_vkGetDeviceProcAddr(VkDevice device, const char *pName);
void WINAPI wine_vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue);
VkResult WINAPI wine_vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, VkFence fence);
typedef struct VkCommandBufferAllocateInfo_host
{
......
# Automatically generated from Vulkan vk.xml; DO NOT EDIT!
@ stdcall vk_icdGetInstanceProcAddr(ptr str) wine_vk_icdGetInstanceProcAddr
@ stdcall vk_icdNegotiateLoaderICDInterfaceVersion(ptr) wine_vk_icdNegotiateLoaderICDInterfaceVersion
@ stdcall wine_vkAcquireNextImageKHR(ptr int64 int64 int64 int64 ptr)
@ stdcall wine_vkAllocateCommandBuffers(ptr ptr ptr)
@ stdcall wine_vkAllocateDescriptorSets(ptr ptr ptr)
@ stdcall wine_vkAllocateMemory(ptr ptr ptr ptr)
@ stdcall wine_vkBeginCommandBuffer(ptr ptr)
@ stdcall wine_vkBindBufferMemory(ptr int64 int64 int64)
@ stdcall wine_vkBindImageMemory(ptr int64 int64 int64)
@ stdcall wine_vkCmdBeginQuery(ptr int64 long long)
@ stdcall wine_vkCmdBeginRenderPass(ptr ptr long)
@ stdcall wine_vkCmdBindDescriptorSets(ptr long int64 long long ptr long ptr)
@ stdcall wine_vkCmdBindIndexBuffer(ptr int64 int64 long)
@ stdcall wine_vkCmdBindPipeline(ptr long int64)
@ stdcall wine_vkCmdBindVertexBuffers(ptr long long ptr ptr)
@ stdcall wine_vkCmdBlitImage(ptr int64 long int64 long long ptr long)
@ stdcall wine_vkCmdClearAttachments(ptr long ptr long ptr)
@ stdcall wine_vkCmdClearColorImage(ptr int64 long ptr long ptr)
@ stdcall wine_vkCmdClearDepthStencilImage(ptr int64 long ptr long ptr)
@ stdcall wine_vkCmdCopyBuffer(ptr int64 int64 long ptr)
@ stdcall wine_vkCmdCopyBufferToImage(ptr int64 int64 long long ptr)
@ stdcall wine_vkCmdCopyImage(ptr int64 long int64 long long ptr)
@ stdcall wine_vkCmdCopyImageToBuffer(ptr int64 long int64 long ptr)
@ stdcall wine_vkCmdCopyQueryPoolResults(ptr int64 long long int64 int64 int64 long)
@ stdcall wine_vkCmdDispatch(ptr long long long)
@ stdcall wine_vkCmdDispatchIndirect(ptr int64 int64)
@ stdcall wine_vkCmdDraw(ptr long long long long)
@ stdcall wine_vkCmdDrawIndexed(ptr long long long long long)
@ stdcall wine_vkCmdDrawIndexedIndirect(ptr int64 int64 long long)
@ stdcall wine_vkCmdDrawIndirect(ptr int64 int64 long long)
@ stdcall wine_vkCmdEndQuery(ptr int64 long)
@ stdcall wine_vkCmdEndRenderPass(ptr)
@ stdcall wine_vkCmdExecuteCommands(ptr long ptr)
@ stdcall wine_vkCmdFillBuffer(ptr int64 int64 int64 long)
@ stdcall wine_vkCmdNextSubpass(ptr long)
@ stdcall wine_vkCmdPipelineBarrier(ptr long long long long ptr long ptr long ptr)
@ stdcall wine_vkCmdPushConstants(ptr int64 long long long ptr)
@ stdcall wine_vkCmdResetEvent(ptr int64 long)
@ stdcall wine_vkCmdResetQueryPool(ptr int64 long long)
@ stdcall wine_vkCmdResolveImage(ptr int64 long int64 long long ptr)
@ stdcall wine_vkCmdSetBlendConstants(ptr ptr)
@ stdcall wine_vkCmdSetDepthBias(ptr float float float)
@ stdcall wine_vkCmdSetDepthBounds(ptr float float)
@ stdcall wine_vkCmdSetEvent(ptr int64 long)
@ stdcall wine_vkCmdSetLineWidth(ptr float)
@ stdcall wine_vkCmdSetScissor(ptr long long ptr)
@ stdcall wine_vkCmdSetStencilCompareMask(ptr long long)
@ stdcall wine_vkCmdSetStencilReference(ptr long long)
@ stdcall wine_vkCmdSetStencilWriteMask(ptr long long)
@ stdcall wine_vkCmdSetViewport(ptr long long ptr)
@ stdcall wine_vkCmdUpdateBuffer(ptr int64 int64 int64 ptr)
@ stdcall wine_vkCmdWaitEvents(ptr long ptr long long long ptr long ptr long ptr)
@ stdcall wine_vkCmdWriteTimestamp(ptr long int64 long)
@ stdcall wine_vkCreateBuffer(ptr ptr ptr ptr)
@ stdcall wine_vkCreateBufferView(ptr ptr ptr ptr)
@ stdcall wine_vkCreateCommandPool(ptr ptr ptr ptr)
@ stdcall wine_vkCreateComputePipelines(ptr int64 long ptr ptr ptr)
@ stdcall wine_vkCreateDescriptorPool(ptr ptr ptr ptr)
@ stdcall wine_vkCreateDescriptorSetLayout(ptr ptr ptr ptr)
@ stdcall wine_vkCreateDevice(ptr ptr ptr ptr)
@ stub vkCreateDisplayModeKHR
@ stub vkCreateDisplayPlaneSurfaceKHR
@ stdcall wine_vkCreateEvent(ptr ptr ptr ptr)
@ stdcall wine_vkCreateFence(ptr ptr ptr ptr)
@ stdcall wine_vkCreateFramebuffer(ptr ptr ptr ptr)
@ stdcall wine_vkCreateGraphicsPipelines(ptr int64 long ptr ptr ptr)
@ stdcall wine_vkCreateImage(ptr ptr ptr ptr)
@ stdcall wine_vkCreateImageView(ptr ptr ptr ptr)
@ stdcall wine_vkCreateInstance(ptr ptr ptr)
@ stdcall wine_vkCreatePipelineCache(ptr ptr ptr ptr)
@ stdcall wine_vkCreatePipelineLayout(ptr ptr ptr ptr)
@ stdcall wine_vkCreateQueryPool(ptr ptr ptr ptr)
@ stdcall wine_vkCreateRenderPass(ptr ptr ptr ptr)
@ stdcall wine_vkCreateSampler(ptr ptr ptr ptr)
@ stdcall wine_vkCreateSemaphore(ptr ptr ptr ptr)
@ stdcall wine_vkCreateShaderModule(ptr ptr ptr ptr)
@ stub vkCreateSharedSwapchainsKHR
@ stdcall wine_vkCreateSwapchainKHR(ptr ptr ptr ptr)
@ stdcall wine_vkCreateWin32SurfaceKHR(ptr ptr ptr ptr)
@ stdcall wine_vkDestroyBuffer(ptr int64 ptr)
@ stdcall wine_vkDestroyBufferView(ptr int64 ptr)
@ stdcall wine_vkDestroyCommandPool(ptr int64 ptr)
@ stdcall wine_vkDestroyDescriptorPool(ptr int64 ptr)
@ stdcall wine_vkDestroyDescriptorSetLayout(ptr int64 ptr)
@ stdcall wine_vkDestroyDevice(ptr ptr)
@ stdcall wine_vkDestroyEvent(ptr int64 ptr)
@ stdcall wine_vkDestroyFence(ptr int64 ptr)
@ stdcall wine_vkDestroyFramebuffer(ptr int64 ptr)
@ stdcall wine_vkDestroyImage(ptr int64 ptr)
@ stdcall wine_vkDestroyImageView(ptr int64 ptr)
@ stdcall wine_vkDestroyInstance(ptr ptr)
@ stdcall wine_vkDestroyPipeline(ptr int64 ptr)
@ stdcall wine_vkDestroyPipelineCache(ptr int64 ptr)
@ stdcall wine_vkDestroyPipelineLayout(ptr int64 ptr)
@ stdcall wine_vkDestroyQueryPool(ptr int64 ptr)
@ stdcall wine_vkDestroyRenderPass(ptr int64 ptr)
@ stdcall wine_vkDestroySampler(ptr int64 ptr)
@ stdcall wine_vkDestroySemaphore(ptr int64 ptr)
@ stdcall wine_vkDestroyShaderModule(ptr int64 ptr)
@ stdcall wine_vkDestroySurfaceKHR(ptr int64 ptr)
@ stdcall wine_vkDestroySwapchainKHR(ptr int64 ptr)
@ stdcall wine_vkDeviceWaitIdle(ptr)
@ stdcall wine_vkEndCommandBuffer(ptr)
@ stdcall wine_vkEnumerateDeviceExtensionProperties(ptr str ptr ptr)
@ stdcall wine_vkEnumerateDeviceLayerProperties(ptr ptr ptr)
@ stdcall wine_vkEnumerateInstanceExtensionProperties(str ptr ptr)
@ stdcall wine_vkEnumeratePhysicalDevices(ptr ptr ptr)
@ stdcall wine_vkFlushMappedMemoryRanges(ptr long ptr)
@ stdcall wine_vkFreeCommandBuffers(ptr int64 long ptr)
@ stdcall wine_vkFreeDescriptorSets(ptr int64 long ptr)
@ stdcall wine_vkFreeMemory(ptr int64 ptr)
@ stdcall wine_vkGetBufferMemoryRequirements(ptr int64 ptr)
@ stdcall wine_vkGetDeviceMemoryCommitment(ptr int64 ptr)
@ stdcall wine_vkGetDeviceProcAddr(ptr str)
@ stdcall wine_vkGetDeviceQueue(ptr long long ptr)
@ stub vkGetDisplayModePropertiesKHR
@ stub vkGetDisplayPlaneCapabilitiesKHR
@ stub vkGetDisplayPlaneSupportedDisplaysKHR
@ stdcall wine_vkGetEventStatus(ptr int64)
@ stdcall wine_vkGetFenceStatus(ptr int64)
@ stdcall wine_vkGetImageMemoryRequirements(ptr int64 ptr)
@ stdcall wine_vkGetImageSparseMemoryRequirements(ptr int64 ptr ptr)
@ stdcall wine_vkGetImageSubresourceLayout(ptr int64 ptr ptr)
@ stdcall wine_vkGetInstanceProcAddr(ptr str)
@ stub vkGetPhysicalDeviceDisplayPlanePropertiesKHR
@ stub vkGetPhysicalDeviceDisplayPropertiesKHR
@ stdcall wine_vkGetPhysicalDeviceFeatures(ptr ptr)
@ stdcall wine_vkGetPhysicalDeviceFormatProperties(ptr long ptr)
@ stdcall wine_vkGetPhysicalDeviceImageFormatProperties(ptr long long long long long ptr)
@ stdcall wine_vkGetPhysicalDeviceMemoryProperties(ptr ptr)
@ stdcall wine_vkGetPhysicalDeviceProperties(ptr ptr)
@ stdcall wine_vkGetPhysicalDeviceQueueFamilyProperties(ptr ptr ptr)
@ stdcall wine_vkGetPhysicalDeviceSparseImageFormatProperties(ptr long long long long long ptr ptr)
@ stdcall wine_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(ptr int64 ptr)
@ stdcall wine_vkGetPhysicalDeviceSurfaceFormatsKHR(ptr int64 ptr ptr)
@ stdcall wine_vkGetPhysicalDeviceSurfacePresentModesKHR(ptr int64 ptr long)
@ stdcall wine_vkGetPhysicalDeviceSurfaceSupportKHR(ptr long int64 ptr)
@ stdcall wine_vkGetPhysicalDeviceWin32PresentationSupportKHR(ptr long)
@ stdcall wine_vkGetPipelineCacheData(ptr int64 ptr ptr)
@ stdcall wine_vkGetQueryPoolResults(ptr int64 long long long ptr int64 long)
@ stdcall wine_vkGetRenderAreaGranularity(ptr int64 ptr)
@ stdcall wine_vkGetSwapchainImagesKHR(ptr int64 ptr ptr)
@ stdcall wine_vkInvalidateMappedMemoryRanges(ptr long ptr)
@ stdcall wine_vkMapMemory(ptr int64 int64 int64 long ptr)
@ stdcall wine_vkMergePipelineCaches(ptr int64 long ptr)
@ stdcall wine_vkQueueBindSparse(ptr long ptr int64)
@ stdcall wine_vkQueuePresentKHR(ptr ptr)
@ stdcall wine_vkQueueSubmit(ptr long ptr int64)
@ stdcall wine_vkQueueWaitIdle(ptr)
@ stdcall wine_vkResetCommandBuffer(ptr long)
@ stdcall wine_vkResetCommandPool(ptr int64 long)
@ stdcall wine_vkResetDescriptorPool(ptr int64 long)
@ stdcall wine_vkResetEvent(ptr int64)
@ stdcall wine_vkResetFences(ptr long ptr)
@ stdcall wine_vkSetEvent(ptr int64)
@ stdcall wine_vkUnmapMemory(ptr int64)
@ stdcall wine_vkUpdateDescriptorSets(ptr long ptr long ptr)
@ stdcall wine_vkWaitForFences(ptr long ptr long int64)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment