| /* | |
| * Copyright 2015 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "vk/GrVkInterface.h" | |
| #include "vk/GrVkBackendContext.h" | |
| #include "vk/GrVkUtil.h" | |
| GrVkInterface::GrVkInterface() { | |
| } | |
| #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) | |
| const GrVkInterface* GrVkCreateInterface(VkInstance instance, VkDevice device, | |
| uint32_t extensionFlags) { | |
| GrVkInterface* interface = new GrVkInterface(); | |
| GrVkInterface::Functions* functions = &interface->fFunctions; | |
| GET_PROC(CreateInstance); | |
| 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(EnumerateInstanceExtensionProperties); | |
| GET_PROC(EnumerateDeviceExtensionProperties); | |
| GET_PROC(EnumerateInstanceLayerProperties); | |
| 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); | |
| if (extensionFlags & kEXT_debug_report_GrVkExtensionFlag) { | |
| GET_PROC(CreateDebugReportCallbackEXT); | |
| GET_PROC(DebugReportMessageEXT); | |
| GET_PROC(DestroyDebugReportCallbackEXT); | |
| } | |
| return interface; | |
| } | |
| #define RETURN_FALSE_INTERFACE \ | |
| if (kIsDebug) { SkDebugf("%s:%d GrVkInterface::validate() failed.\n", __FILE__, __LINE__); } \ | |
| return false; | |
| bool GrVkInterface::validate() const { | |
| // functions that are always required | |
| if (NULL == fFunctions.fCreateInstance || | |
| NULL == fFunctions.fDestroyInstance || | |
| NULL == fFunctions.fEnumeratePhysicalDevices || | |
| NULL == fFunctions.fGetPhysicalDeviceFeatures || | |
| NULL == fFunctions.fGetPhysicalDeviceFormatProperties || | |
| NULL == fFunctions.fGetPhysicalDeviceImageFormatProperties || | |
| NULL == fFunctions.fGetPhysicalDeviceProperties || | |
| NULL == fFunctions.fGetPhysicalDeviceQueueFamilyProperties || | |
| NULL == fFunctions.fGetPhysicalDeviceMemoryProperties || | |
| NULL == fFunctions.fCreateDevice || | |
| NULL == fFunctions.fDestroyDevice || | |
| NULL == fFunctions.fEnumerateInstanceExtensionProperties || | |
| NULL == fFunctions.fEnumerateDeviceExtensionProperties || | |
| NULL == fFunctions.fEnumerateInstanceLayerProperties || | |
| NULL == fFunctions.fEnumerateDeviceLayerProperties || | |
| NULL == fFunctions.fGetDeviceQueue || | |
| NULL == fFunctions.fQueueSubmit || | |
| NULL == fFunctions.fQueueWaitIdle || | |
| NULL == fFunctions.fDeviceWaitIdle || | |
| NULL == fFunctions.fAllocateMemory || | |
| NULL == fFunctions.fFreeMemory || | |
| NULL == fFunctions.fMapMemory || | |
| NULL == fFunctions.fUnmapMemory || | |
| NULL == fFunctions.fFlushMappedMemoryRanges || | |
| NULL == fFunctions.fInvalidateMappedMemoryRanges || | |
| NULL == fFunctions.fGetDeviceMemoryCommitment || | |
| NULL == fFunctions.fBindBufferMemory || | |
| NULL == fFunctions.fBindImageMemory || | |
| NULL == fFunctions.fGetBufferMemoryRequirements || | |
| NULL == fFunctions.fGetImageMemoryRequirements || | |
| NULL == fFunctions.fGetImageSparseMemoryRequirements || | |
| NULL == fFunctions.fGetPhysicalDeviceSparseImageFormatProperties || | |
| NULL == fFunctions.fQueueBindSparse || | |
| NULL == fFunctions.fCreateFence || | |
| NULL == fFunctions.fDestroyFence || | |
| NULL == fFunctions.fResetFences || | |
| NULL == fFunctions.fGetFenceStatus || | |
| NULL == fFunctions.fWaitForFences || | |
| NULL == fFunctions.fCreateSemaphore || | |
| NULL == fFunctions.fDestroySemaphore || | |
| NULL == fFunctions.fCreateEvent || | |
| NULL == fFunctions.fDestroyEvent || | |
| NULL == fFunctions.fGetEventStatus || | |
| NULL == fFunctions.fSetEvent || | |
| NULL == fFunctions.fResetEvent || | |
| NULL == fFunctions.fCreateQueryPool || | |
| NULL == fFunctions.fDestroyQueryPool || | |
| NULL == fFunctions.fGetQueryPoolResults || | |
| NULL == fFunctions.fCreateBuffer || | |
| NULL == fFunctions.fDestroyBuffer || | |
| NULL == fFunctions.fCreateBufferView || | |
| NULL == fFunctions.fDestroyBufferView || | |
| NULL == fFunctions.fCreateImage || | |
| NULL == fFunctions.fDestroyImage || | |
| NULL == fFunctions.fGetImageSubresourceLayout || | |
| NULL == fFunctions.fCreateImageView || | |
| NULL == fFunctions.fDestroyImageView || | |
| NULL == fFunctions.fCreateShaderModule || | |
| NULL == fFunctions.fDestroyShaderModule || | |
| NULL == fFunctions.fCreatePipelineCache || | |
| NULL == fFunctions.fDestroyPipelineCache || | |
| NULL == fFunctions.fGetPipelineCacheData || | |
| NULL == fFunctions.fMergePipelineCaches || | |
| NULL == fFunctions.fCreateGraphicsPipelines || | |
| NULL == fFunctions.fCreateComputePipelines || | |
| NULL == fFunctions.fDestroyPipeline || | |
| NULL == fFunctions.fCreatePipelineLayout || | |
| NULL == fFunctions.fDestroyPipelineLayout || | |
| NULL == fFunctions.fCreateSampler || | |
| NULL == fFunctions.fDestroySampler || | |
| NULL == fFunctions.fCreateDescriptorSetLayout || | |
| NULL == fFunctions.fDestroyDescriptorSetLayout || | |
| NULL == fFunctions.fCreateDescriptorPool || | |
| NULL == fFunctions.fDestroyDescriptorPool || | |
| NULL == fFunctions.fResetDescriptorPool || | |
| NULL == fFunctions.fAllocateDescriptorSets || | |
| NULL == fFunctions.fFreeDescriptorSets || | |
| NULL == fFunctions.fUpdateDescriptorSets || | |
| NULL == fFunctions.fCreateFramebuffer || | |
| NULL == fFunctions.fDestroyFramebuffer || | |
| NULL == fFunctions.fCreateRenderPass || | |
| NULL == fFunctions.fDestroyRenderPass || | |
| NULL == fFunctions.fGetRenderAreaGranularity || | |
| NULL == fFunctions.fCreateCommandPool || | |
| NULL == fFunctions.fDestroyCommandPool || | |
| NULL == fFunctions.fResetCommandPool || | |
| NULL == fFunctions.fAllocateCommandBuffers || | |
| NULL == fFunctions.fFreeCommandBuffers || | |
| NULL == fFunctions.fBeginCommandBuffer || | |
| NULL == fFunctions.fEndCommandBuffer || | |
| NULL == fFunctions.fResetCommandBuffer || | |
| NULL == fFunctions.fCmdBindPipeline || | |
| NULL == fFunctions.fCmdSetViewport || | |
| NULL == fFunctions.fCmdSetScissor || | |
| NULL == fFunctions.fCmdSetLineWidth || | |
| NULL == fFunctions.fCmdSetDepthBias || | |
| NULL == fFunctions.fCmdSetBlendConstants || | |
| NULL == fFunctions.fCmdSetDepthBounds || | |
| NULL == fFunctions.fCmdSetStencilCompareMask || | |
| NULL == fFunctions.fCmdSetStencilWriteMask || | |
| NULL == fFunctions.fCmdSetStencilReference || | |
| NULL == fFunctions.fCmdBindDescriptorSets || | |
| NULL == fFunctions.fCmdBindIndexBuffer || | |
| NULL == fFunctions.fCmdBindVertexBuffers || | |
| NULL == fFunctions.fCmdDraw || | |
| NULL == fFunctions.fCmdDrawIndexed || | |
| NULL == fFunctions.fCmdDrawIndirect || | |
| NULL == fFunctions.fCmdDrawIndexedIndirect || | |
| NULL == fFunctions.fCmdDispatch || | |
| NULL == fFunctions.fCmdDispatchIndirect || | |
| NULL == fFunctions.fCmdCopyBuffer || | |
| NULL == fFunctions.fCmdCopyImage || | |
| NULL == fFunctions.fCmdBlitImage || | |
| NULL == fFunctions.fCmdCopyBufferToImage || | |
| NULL == fFunctions.fCmdCopyImageToBuffer || | |
| NULL == fFunctions.fCmdUpdateBuffer || | |
| NULL == fFunctions.fCmdFillBuffer || | |
| NULL == fFunctions.fCmdClearColorImage || | |
| NULL == fFunctions.fCmdClearDepthStencilImage || | |
| NULL == fFunctions.fCmdClearAttachments || | |
| NULL == fFunctions.fCmdResolveImage || | |
| NULL == fFunctions.fCmdSetEvent || | |
| NULL == fFunctions.fCmdResetEvent || | |
| NULL == fFunctions.fCmdWaitEvents || | |
| NULL == fFunctions.fCmdPipelineBarrier || | |
| NULL == fFunctions.fCmdBeginQuery || | |
| NULL == fFunctions.fCmdEndQuery || | |
| NULL == fFunctions.fCmdResetQueryPool || | |
| NULL == fFunctions.fCmdWriteTimestamp || | |
| NULL == fFunctions.fCmdCopyQueryPoolResults || | |
| NULL == fFunctions.fCmdPushConstants || | |
| NULL == fFunctions.fCmdBeginRenderPass || | |
| NULL == fFunctions.fCmdNextSubpass || | |
| NULL == fFunctions.fCmdEndRenderPass || | |
| NULL == fFunctions.fCmdExecuteCommands || | |
| NULL == fFunctions.fCreateDebugReportCallbackEXT || | |
| NULL == fFunctions.fDebugReportMessageEXT || | |
| NULL == fFunctions.fDestroyDebugReportCallbackEXT) { | |
| return false; | |
| } | |
| return true; | |
| } |