aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk/GrVkInterface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/vk/GrVkInterface.cpp')
-rw-r--r--src/gpu/vk/GrVkInterface.cpp302
1 files changed, 151 insertions, 151 deletions
diff --git a/src/gpu/vk/GrVkInterface.cpp b/src/gpu/vk/GrVkInterface.cpp
index 34f12b4fed..b08f7ba851 100644
--- a/src/gpu/vk/GrVkInterface.cpp
+++ b/src/gpu/vk/GrVkInterface.cpp
@@ -9,163 +9,163 @@
#include "vk/GrVkBackendContext.h"
#include "vk/GrVkUtil.h"
-GrVkInterface::GrVkInterface() {
-}
-
-#define GET_PROC_GLOBAL(F) functions->f ## F = (PFN_vk ## F) vkGetInstanceProcAddr(NULL, "vk" #F)
-#define GET_PROC(F) functions->f ## F = (PFN_vk ## F) vkGetInstanceProcAddr(instance, "vk" #F)
-#define GET_PROC_LOCAL(inst, F) PFN_vk ## F F = (PFN_vk ## F) vkGetInstanceProcAddr(inst, "vk" #F)
-#define GET_DEV_PROC(F) functions->f ## F = (PFN_vk ## F) vkGetDeviceProcAddr(device, "vk" #F)
+#define ACQUIRE_PROC(name, instance, device) fFunctions.f##name = \
+ reinterpret_cast<PFN_vk##name>(getProc("vk"#name, instance, device));
-const GrVkInterface* GrVkCreateInterface(VkInstance instance, VkDevice device,
- uint32_t extensionFlags) {
-
- GrVkInterface* interface = new GrVkInterface();
- GrVkInterface::Functions* functions = &interface->fFunctions;
+GrVkInterface::GrVkInterface(GetProc getProc,
+ VkInstance instance,
+ VkDevice device,
+ uint32_t extensionFlags) {
+ if (getProc == nullptr) {
+ return;
+ }
+ // Global/Loader Procs.
+ ACQUIRE_PROC(CreateInstance, VK_NULL_HANDLE, VK_NULL_HANDLE);
+ ACQUIRE_PROC(EnumerateInstanceExtensionProperties, VK_NULL_HANDLE, VK_NULL_HANDLE);
+ ACQUIRE_PROC(EnumerateInstanceLayerProperties, VK_NULL_HANDLE, VK_NULL_HANDLE);
- GET_PROC_GLOBAL(CreateInstance);
- GET_PROC_GLOBAL(EnumerateInstanceExtensionProperties);
- GET_PROC_GLOBAL(EnumerateInstanceLayerProperties);
- GET_PROC(DestroyInstance);
- GET_PROC(EnumeratePhysicalDevices);
- GET_PROC(GetPhysicalDeviceFeatures);
- GET_PROC(GetPhysicalDeviceFormatProperties);
- GET_PROC(GetPhysicalDeviceImageFormatProperties);
- GET_PROC(GetPhysicalDeviceProperties);
- GET_PROC(GetPhysicalDeviceQueueFamilyProperties);
- GET_PROC(GetPhysicalDeviceMemoryProperties);
- GET_PROC(CreateDevice);
- GET_PROC(DestroyDevice);
- GET_PROC(EnumerateDeviceExtensionProperties);
- GET_PROC(EnumerateDeviceLayerProperties);
- GET_DEV_PROC(GetDeviceQueue);
- GET_DEV_PROC(QueueSubmit);
- GET_DEV_PROC(QueueWaitIdle);
- GET_DEV_PROC(DeviceWaitIdle);
- GET_DEV_PROC(AllocateMemory);
- GET_DEV_PROC(FreeMemory);
- GET_DEV_PROC(MapMemory);
- GET_DEV_PROC(UnmapMemory);
- GET_DEV_PROC(FlushMappedMemoryRanges);
- GET_DEV_PROC(InvalidateMappedMemoryRanges);
- GET_DEV_PROC(GetDeviceMemoryCommitment);
- GET_DEV_PROC(BindBufferMemory);
- GET_DEV_PROC(BindImageMemory);
- GET_DEV_PROC(GetBufferMemoryRequirements);
- GET_DEV_PROC(GetImageMemoryRequirements);
- GET_DEV_PROC(GetImageSparseMemoryRequirements);
- GET_PROC(GetPhysicalDeviceSparseImageFormatProperties);
- GET_DEV_PROC(QueueBindSparse);
- GET_DEV_PROC(CreateFence);
- GET_DEV_PROC(DestroyFence);
- GET_DEV_PROC(ResetFences);
- GET_DEV_PROC(GetFenceStatus);
- GET_DEV_PROC(WaitForFences);
- GET_DEV_PROC(CreateSemaphore);
- GET_DEV_PROC(DestroySemaphore);
- GET_DEV_PROC(CreateEvent);
- GET_DEV_PROC(DestroyEvent);
- GET_DEV_PROC(GetEventStatus);
- GET_DEV_PROC(SetEvent);
- GET_DEV_PROC(ResetEvent);
- GET_DEV_PROC(CreateQueryPool);
- GET_DEV_PROC(DestroyQueryPool);
- GET_DEV_PROC(GetQueryPoolResults);
- GET_DEV_PROC(CreateBuffer);
- GET_DEV_PROC(DestroyBuffer);
- GET_DEV_PROC(CreateBufferView);
- GET_DEV_PROC(DestroyBufferView);
- GET_DEV_PROC(CreateImage);
- GET_DEV_PROC(DestroyImage);
- GET_DEV_PROC(GetImageSubresourceLayout);
- GET_DEV_PROC(CreateImageView);
- GET_DEV_PROC(DestroyImageView);
- GET_DEV_PROC(CreateShaderModule);
- GET_DEV_PROC(DestroyShaderModule);
- GET_DEV_PROC(CreatePipelineCache);
- GET_DEV_PROC(DestroyPipelineCache);
- GET_DEV_PROC(GetPipelineCacheData);
- GET_DEV_PROC(MergePipelineCaches);
- GET_DEV_PROC(CreateGraphicsPipelines);
- GET_DEV_PROC(CreateComputePipelines);
- GET_DEV_PROC(DestroyPipeline);
- GET_DEV_PROC(CreatePipelineLayout);
- GET_DEV_PROC(DestroyPipelineLayout);
- GET_DEV_PROC(CreateSampler);
- GET_DEV_PROC(DestroySampler);
- GET_DEV_PROC(CreateDescriptorSetLayout);
- GET_DEV_PROC(DestroyDescriptorSetLayout);
- GET_DEV_PROC(CreateDescriptorPool);
- GET_DEV_PROC(DestroyDescriptorPool);
- GET_DEV_PROC(ResetDescriptorPool);
- GET_DEV_PROC(AllocateDescriptorSets);
- GET_DEV_PROC(FreeDescriptorSets);
- GET_DEV_PROC(UpdateDescriptorSets);
- GET_DEV_PROC(CreateFramebuffer);
- GET_DEV_PROC(DestroyFramebuffer);
- GET_DEV_PROC(CreateRenderPass);
- GET_DEV_PROC(DestroyRenderPass);
- GET_DEV_PROC(GetRenderAreaGranularity);
- GET_DEV_PROC(CreateCommandPool);
- GET_DEV_PROC(DestroyCommandPool);
- GET_DEV_PROC(ResetCommandPool);
- GET_DEV_PROC(AllocateCommandBuffers);
- GET_DEV_PROC(FreeCommandBuffers);
- GET_DEV_PROC(BeginCommandBuffer);
- GET_DEV_PROC(EndCommandBuffer);
- GET_DEV_PROC(ResetCommandBuffer);
- GET_DEV_PROC(CmdBindPipeline);
- GET_DEV_PROC(CmdSetViewport);
- GET_DEV_PROC(CmdSetScissor);
- GET_DEV_PROC(CmdSetLineWidth);
- GET_DEV_PROC(CmdSetDepthBias);
- GET_DEV_PROC(CmdSetBlendConstants);
- GET_DEV_PROC(CmdSetDepthBounds);
- GET_DEV_PROC(CmdSetStencilCompareMask);
- GET_DEV_PROC(CmdSetStencilWriteMask);
- GET_DEV_PROC(CmdSetStencilReference);
- GET_DEV_PROC(CmdBindDescriptorSets);
- GET_DEV_PROC(CmdBindIndexBuffer);
- GET_DEV_PROC(CmdBindVertexBuffers);
- GET_DEV_PROC(CmdDraw);
- GET_DEV_PROC(CmdDrawIndexed);
- GET_DEV_PROC(CmdDrawIndirect);
- GET_DEV_PROC(CmdDrawIndexedIndirect);
- GET_DEV_PROC(CmdDispatch);
- GET_DEV_PROC(CmdDispatchIndirect);
- GET_DEV_PROC(CmdCopyBuffer);
- GET_DEV_PROC(CmdCopyImage);
- GET_DEV_PROC(CmdBlitImage);
- GET_DEV_PROC(CmdCopyBufferToImage);
- GET_DEV_PROC(CmdCopyImageToBuffer);
- GET_DEV_PROC(CmdUpdateBuffer);
- GET_DEV_PROC(CmdFillBuffer);
- GET_DEV_PROC(CmdClearColorImage);
- GET_DEV_PROC(CmdClearDepthStencilImage);
- GET_DEV_PROC(CmdClearAttachments);
- GET_DEV_PROC(CmdResolveImage);
- GET_DEV_PROC(CmdSetEvent);
- GET_DEV_PROC(CmdResetEvent);
- GET_DEV_PROC(CmdWaitEvents);
- GET_DEV_PROC(CmdPipelineBarrier);
- GET_DEV_PROC(CmdBeginQuery);
- GET_DEV_PROC(CmdEndQuery);
- GET_DEV_PROC(CmdResetQueryPool);
- GET_DEV_PROC(CmdWriteTimestamp);
- GET_DEV_PROC(CmdCopyQueryPoolResults);
- GET_DEV_PROC(CmdPushConstants);
- GET_DEV_PROC(CmdBeginRenderPass);
- GET_DEV_PROC(CmdNextSubpass);
- GET_DEV_PROC(CmdEndRenderPass);
- GET_DEV_PROC(CmdExecuteCommands);
+ // Instance Procs.
+ ACQUIRE_PROC(EnumeratePhysicalDevices, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(GetPhysicalDeviceFeatures, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(GetPhysicalDeviceFormatProperties, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(GetPhysicalDeviceImageFormatProperties, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(GetPhysicalDeviceProperties, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(GetPhysicalDeviceQueueFamilyProperties, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(GetPhysicalDeviceMemoryProperties, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(GetPhysicalDeviceSparseImageFormatProperties, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(DestroyInstance, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(CreateDevice, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(DestroyDevice, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(EnumerateDeviceExtensionProperties, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(EnumerateDeviceLayerProperties, instance, VK_NULL_HANDLE);
if (extensionFlags & kEXT_debug_report_GrVkExtensionFlag) {
- GET_PROC(CreateDebugReportCallbackEXT);
- GET_PROC(DebugReportMessageEXT);
- GET_PROC(DestroyDebugReportCallbackEXT);
+ // Also instance Procs.
+ ACQUIRE_PROC(CreateDebugReportCallbackEXT, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(DebugReportMessageEXT, instance, VK_NULL_HANDLE);
+ ACQUIRE_PROC(DestroyDebugReportCallbackEXT, instance, VK_NULL_HANDLE);
}
- return interface;
+ // Device Procs.
+ ACQUIRE_PROC(GetDeviceQueue, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(QueueSubmit, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(QueueWaitIdle, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DeviceWaitIdle, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(AllocateMemory, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(FreeMemory, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(MapMemory, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(UnmapMemory, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(FlushMappedMemoryRanges, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(InvalidateMappedMemoryRanges, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(GetDeviceMemoryCommitment, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(BindBufferMemory, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(BindImageMemory, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(GetBufferMemoryRequirements, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(GetImageMemoryRequirements, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(GetImageSparseMemoryRequirements, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(QueueBindSparse, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateFence, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyFence, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(ResetFences, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(GetFenceStatus, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(WaitForFences, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateSemaphore, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroySemaphore, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateEvent, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyEvent, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(GetEventStatus, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(SetEvent, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(ResetEvent, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateQueryPool, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyQueryPool, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(GetQueryPoolResults, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateBuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyBuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateBufferView, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyBufferView, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateImage, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyImage, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(GetImageSubresourceLayout, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateImageView, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyImageView, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateShaderModule, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyShaderModule, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreatePipelineCache, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyPipelineCache, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(GetPipelineCacheData, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(MergePipelineCaches, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateGraphicsPipelines, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateComputePipelines, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyPipeline, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreatePipelineLayout, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyPipelineLayout, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateSampler, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroySampler, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateDescriptorSetLayout, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyDescriptorSetLayout, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateDescriptorPool, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyDescriptorPool, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(ResetDescriptorPool, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(AllocateDescriptorSets, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(FreeDescriptorSets, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(UpdateDescriptorSets, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateFramebuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyFramebuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateRenderPass, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyRenderPass, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(GetRenderAreaGranularity, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CreateCommandPool, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(DestroyCommandPool, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(ResetCommandPool, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(AllocateCommandBuffers, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(FreeCommandBuffers, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(BeginCommandBuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(EndCommandBuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(ResetCommandBuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdBindPipeline, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdSetViewport, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdSetScissor, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdSetLineWidth, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdSetDepthBias, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdSetBlendConstants, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdSetDepthBounds, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdSetStencilCompareMask, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdSetStencilWriteMask, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdSetStencilReference, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdBindDescriptorSets, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdBindIndexBuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdBindVertexBuffers, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdDraw, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdDrawIndexed, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdDrawIndirect, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdDrawIndexedIndirect, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdDispatch, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdDispatchIndirect, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdCopyBuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdCopyImage, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdBlitImage, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdCopyBufferToImage, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdCopyImageToBuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdUpdateBuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdFillBuffer, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdClearColorImage, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdClearDepthStencilImage, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdClearAttachments, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdResolveImage, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdSetEvent, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdResetEvent, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdWaitEvents, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdPipelineBarrier, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdBeginQuery, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdEndQuery, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdResetQueryPool, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdWriteTimestamp, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdCopyQueryPoolResults, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdPushConstants, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdBeginRenderPass, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdNextSubpass, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdEndRenderPass, VK_NULL_HANDLE, device);
+ ACQUIRE_PROC(CmdExecuteCommands, VK_NULL_HANDLE, device);
}
#ifdef SK_DEBUG