Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Unified Diff: tools/vulkan/VulkanTestContext.cpp

Issue 1899213002: Revise WSI setup. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Updated for comments Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/vulkan/VulkanTestContext.h ('k') | tools/vulkan/android/VulkanTestContext_android.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/vulkan/VulkanTestContext.cpp
diff --git a/tools/vulkan/VulkanTestContext.cpp b/tools/vulkan/VulkanTestContext.cpp
index 03b740796c79e2042a9e031ab864bfee15146bb8..da080f84ca1a9fd2b4d11dcf291b1afc7765739e 100644
--- a/tools/vulkan/VulkanTestContext.cpp
+++ b/tools/vulkan/VulkanTestContext.cpp
@@ -19,6 +19,9 @@
#undef CreateSemaphore
#endif
+#define GET_PROC(F) f ## F = (PFN_vk ## F) vkGetInstanceProcAddr(instance, "vk" #F)
+#define GET_DEV_PROC(F) f ## F = (PFN_vk ## F) vkGetDeviceProcAddr(device, "vk" #F)
+
VulkanTestContext::VulkanTestContext(void* platformData, int msaaSampleCount)
: fSurface(VK_NULL_HANDLE)
, fSwapchain(VK_NULL_HANDLE)
@@ -32,11 +35,29 @@ VulkanTestContext::VulkanTestContext(void* platformData, int msaaSampleCount)
void VulkanTestContext::initializeContext(void* platformData) {
- fBackendContext.reset(GrVkBackendContext::Create());
+ fBackendContext.reset(GrVkBackendContext::Create(&fPresentQueueIndex, canPresent));
+ if (!(fBackendContext->fExtensions & kKHR_surface_GrVkExtensionFlag) ||
+ !(fBackendContext->fExtensions & kKHR_swapchain_GrVkExtensionFlag)) {
+ fBackendContext.reset(nullptr);
+ return;
+ }
+
+ VkInstance instance = fBackendContext->fInstance;
+ VkDevice device = fBackendContext->fDevice;
+ GET_PROC(DestroySurfaceKHR);
+ GET_PROC(GetPhysicalDeviceSurfaceSupportKHR);
+ GET_PROC(GetPhysicalDeviceSurfaceCapabilitiesKHR);
+ GET_PROC(GetPhysicalDeviceSurfaceFormatsKHR);
+ GET_PROC(GetPhysicalDeviceSurfacePresentModesKHR);
+ GET_DEV_PROC(CreateSwapchainKHR);
+ GET_DEV_PROC(DestroySwapchainKHR);
+ GET_DEV_PROC(GetSwapchainImagesKHR);
+ GET_DEV_PROC(AcquireNextImageKHR);
+ GET_DEV_PROC(QueuePresentKHR);
fContext = GrContext::Create(kVulkan_GrBackend, (GrBackendContext)fBackendContext.get());
- fSurface = createVkSurface(platformData);
+ fSurface = createVkSurface(instance, platformData);
if (VK_NULL_HANDLE == fSurface) {
fBackendContext.reset(nullptr);
return;
@@ -57,22 +78,10 @@ void VulkanTestContext::initializeContext(void* platformData) {
GetPhysicalDeviceQueueFamilyProperties(fBackendContext->fPhysicalDevice, &queueCount,
queueProps));
- // iterate to find the present queue
- fPresentQueueIndex = -1;
- for (uint32_t i = 0; i < queueCount; i++) {
- if ((queueProps[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) && canPresent(i)) {
- fPresentQueueIndex = i;
- break;
- }
- }
- SkASSERT(fPresentQueueIndex < queueCount);
-
VkBool32 supported;
- VkResult res = GR_VK_CALL(fBackendContext->fInterface,
- GetPhysicalDeviceSurfaceSupportKHR(fBackendContext->fPhysicalDevice,
- fPresentQueueIndex,
- fSurface,
- &supported));
+ VkResult res = fGetPhysicalDeviceSurfaceSupportKHR(fBackendContext->fPhysicalDevice,
+ fPresentQueueIndex, fSurface,
+ &supported);
if (VK_SUCCESS != res) {
this->destroyContext();
return;
@@ -85,60 +94,44 @@ void VulkanTestContext::initializeContext(void* platformData) {
// create presentQueue
vkGetDeviceQueue(fBackendContext->fDevice, fPresentQueueIndex, 0, &fPresentQueue);
-
-
}
bool VulkanTestContext::createSwapchain(uint32_t width, uint32_t height)
{
// check for capabilities
VkSurfaceCapabilitiesKHR caps;
- VkResult res = GR_VK_CALL(fBackendContext->fInterface,
- GetPhysicalDeviceSurfaceCapabilitiesKHR(fBackendContext->fPhysicalDevice,
- fSurface,
- &caps));
+ VkResult res = fGetPhysicalDeviceSurfaceCapabilitiesKHR(fBackendContext->fPhysicalDevice,
+ fSurface, &caps);
if (VK_SUCCESS != res) {
return false;
}
uint32_t surfaceFormatCount;
- res = GR_VK_CALL(fBackendContext->fInterface,
- GetPhysicalDeviceSurfaceFormatsKHR(fBackendContext->fPhysicalDevice,
- fSurface,
- &surfaceFormatCount,
- nullptr));
+ res = fGetPhysicalDeviceSurfaceFormatsKHR(fBackendContext->fPhysicalDevice, fSurface,
+ &surfaceFormatCount, nullptr);
if (VK_SUCCESS != res) {
return false;
}
SkAutoMalloc surfaceFormatAlloc(surfaceFormatCount * sizeof(VkSurfaceFormatKHR));
VkSurfaceFormatKHR* surfaceFormats = (VkSurfaceFormatKHR*)surfaceFormatAlloc.get();
- res = GR_VK_CALL(fBackendContext->fInterface,
- GetPhysicalDeviceSurfaceFormatsKHR(fBackendContext->fPhysicalDevice,
- fSurface,
- &surfaceFormatCount,
- surfaceFormats));
+ res = fGetPhysicalDeviceSurfaceFormatsKHR(fBackendContext->fPhysicalDevice, fSurface,
+ &surfaceFormatCount, surfaceFormats);
if (VK_SUCCESS != res) {
return false;
}
uint32_t presentModeCount;
- res = GR_VK_CALL(fBackendContext->fInterface,
- GetPhysicalDeviceSurfacePresentModesKHR(fBackendContext->fPhysicalDevice,
- fSurface,
- &presentModeCount,
- nullptr));
+ res = fGetPhysicalDeviceSurfacePresentModesKHR(fBackendContext->fPhysicalDevice, fSurface,
+ &presentModeCount, nullptr);
if (VK_SUCCESS != res) {
return false;
}
SkAutoMalloc presentModeAlloc(presentModeCount * sizeof(VkPresentModeKHR));
VkPresentModeKHR* presentModes = (VkPresentModeKHR*)presentModeAlloc.get();
- res = GR_VK_CALL(fBackendContext->fInterface,
- GetPhysicalDeviceSurfacePresentModesKHR(fBackendContext->fPhysicalDevice,
- fSurface,
- &presentModeCount,
- presentModes));
+ res = fGetPhysicalDeviceSurfacePresentModesKHR(fBackendContext->fPhysicalDevice, fSurface,
+ &presentModeCount, presentModes);
if (VK_SUCCESS != res) {
return false;
}
@@ -205,8 +198,8 @@ bool VulkanTestContext::createSwapchain(uint32_t width, uint32_t height)
swapchainCreateInfo.imageArrayLayers = 1;
swapchainCreateInfo.imageUsage = usageFlags;
- uint32_t queueFamilies[] = { fBackendContext->fQueueFamilyIndex, fPresentQueueIndex };
- if (fBackendContext->fQueueFamilyIndex != fPresentQueueIndex) {
+ uint32_t queueFamilies[] = { fBackendContext->fGraphicsQueueIndex, fPresentQueueIndex };
+ if (fBackendContext->fGraphicsQueueIndex != fPresentQueueIndex) {
swapchainCreateInfo.imageSharingMode = VK_SHARING_MODE_CONCURRENT;
swapchainCreateInfo.queueFamilyIndexCount = 2;
swapchainCreateInfo.pQueueFamilyIndices = queueFamilies;
@@ -222,9 +215,7 @@ bool VulkanTestContext::createSwapchain(uint32_t width, uint32_t height)
swapchainCreateInfo.clipped = true;
swapchainCreateInfo.oldSwapchain = fSwapchain;
- res = GR_VK_CALL(fBackendContext->fInterface,
- CreateSwapchainKHR(fBackendContext->fDevice,
- &swapchainCreateInfo, nullptr, &fSwapchain));
+ res = fCreateSwapchainKHR(fBackendContext->fDevice, &swapchainCreateInfo, nullptr, &fSwapchain);
if (VK_SUCCESS != res) {
return false;
}
@@ -235,9 +226,7 @@ bool VulkanTestContext::createSwapchain(uint32_t width, uint32_t height)
this->destroyBuffers();
- GR_VK_CALL(fBackendContext->fInterface, DestroySwapchainKHR(fBackendContext->fDevice,
- swapchainCreateInfo.oldSwapchain,
- nullptr));
+ fDestroySwapchainKHR(fBackendContext->fDevice, swapchainCreateInfo.oldSwapchain, nullptr);
}
this->createBuffers(swapchainCreateInfo.imageFormat);
@@ -248,16 +237,10 @@ bool VulkanTestContext::createSwapchain(uint32_t width, uint32_t height)
void VulkanTestContext::createBuffers(VkFormat format) {
GrVkFormatToPixelConfig(format, &fPixelConfig);
- GR_VK_CALL_ERRCHECK(fBackendContext->fInterface, GetSwapchainImagesKHR(fBackendContext->fDevice,
- fSwapchain,
- &fImageCount,
- nullptr));
+ fGetSwapchainImagesKHR(fBackendContext->fDevice, fSwapchain, &fImageCount, nullptr);
SkASSERT(fImageCount);
fImages = new VkImage[fImageCount];
- GR_VK_CALL_ERRCHECK(fBackendContext->fInterface, GetSwapchainImagesKHR(fBackendContext->fDevice,
- fSwapchain,
- &fImageCount,
- fImages));
+ fGetSwapchainImagesKHR(fBackendContext->fDevice, fSwapchain, &fImageCount, fImages);
// set up initial image layouts and create surfaces
fImageLayouts = new VkImageLayout[fImageCount];
@@ -289,7 +272,7 @@ void VulkanTestContext::createBuffers(VkFormat format) {
memset(&commandPoolInfo, 0, sizeof(VkCommandPoolCreateInfo));
commandPoolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
// this needs to be on the render queue
- commandPoolInfo.queueFamilyIndex = fBackendContext->fQueueFamilyIndex;
+ commandPoolInfo.queueFamilyIndex = fBackendContext->fGraphicsQueueIndex;
commandPoolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
GR_VK_CALL_ERRCHECK(fBackendContext->fInterface,
CreateCommandPool(fBackendContext->fDevice, &commandPoolInfo,
@@ -397,14 +380,12 @@ void VulkanTestContext::destroyContext() {
}
if (VK_NULL_HANDLE != fSwapchain) {
- GR_VK_CALL(fBackendContext->fInterface, DestroySwapchainKHR(fBackendContext->fDevice,
- fSwapchain, nullptr));
+ fDestroySwapchainKHR(fBackendContext->fDevice, fSwapchain, nullptr);
fSwapchain = VK_NULL_HANDLE;
}
if (VK_NULL_HANDLE != fSurface) {
- GR_VK_CALL(fBackendContext->fInterface, DestroySurfaceKHR(fBackendContext->fInstance,
- fSurface, nullptr));
+ fDestroySurfaceKHR(fBackendContext->fInstance, fSurface, nullptr);
fSurface = VK_NULL_HANDLE;
}
@@ -439,13 +420,9 @@ SkSurface* VulkanTestContext::getBackbufferSurface() {
// semaphores should be in unsignaled state
// acquire the image
- VkResult res = GR_VK_CALL(fBackendContext->fInterface,
- AcquireNextImageKHR(fBackendContext->fDevice,
- fSwapchain,
- UINT64_MAX,
- backbuffer->fAcquireSemaphore,
- VK_NULL_HANDLE,
- &backbuffer->fImageIndex));
+ VkResult res = fAcquireNextImageKHR(fBackendContext->fDevice, fSwapchain, UINT64_MAX,
+ backbuffer->fAcquireSemaphore, VK_NULL_HANDLE,
+ &backbuffer->fImageIndex);
if (VK_ERROR_SURFACE_LOST_KHR == res) {
// need to figure out how to create a new vkSurface without the platformData*
// maybe use attach somehow? but need a Window
@@ -458,13 +435,9 @@ SkSurface* VulkanTestContext::getBackbufferSurface() {
}
// acquire the image
- res = GR_VK_CALL(fBackendContext->fInterface,
- AcquireNextImageKHR(fBackendContext->fDevice,
- fSwapchain,
- UINT64_MAX,
- backbuffer->fAcquireSemaphore,
- VK_NULL_HANDLE,
- &backbuffer->fImageIndex));
+ res = fAcquireNextImageKHR(fBackendContext->fDevice, fSwapchain, UINT64_MAX,
+ backbuffer->fAcquireSemaphore, VK_NULL_HANDLE,
+ &backbuffer->fImageIndex);
if (VK_SUCCESS != res) {
return nullptr;
@@ -489,7 +462,7 @@ SkSurface* VulkanTestContext::getBackbufferSurface() {
layout, // oldLayout
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // newLayout
fPresentQueueIndex, // srcQueueFamilyIndex
- fBackendContext->fQueueFamilyIndex, // dstQueueFamilyIndex
+ fBackendContext->fGraphicsQueueIndex, // dstQueueFamilyIndex
fImages[backbuffer->fImageIndex], // image
{ VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 } // subresourceRange
};
@@ -549,7 +522,7 @@ void VulkanTestContext::swapBuffers() {
dstAccessMask, // inputMask
layout, // oldLayout
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // newLayout
- fBackendContext->fQueueFamilyIndex, // srcQueueFamilyIndex
+ fBackendContext->fGraphicsQueueIndex, // srcQueueFamilyIndex
fPresentQueueIndex, // dstQueueFamilyIndex
fImages[backbuffer->fImageIndex], // image
{ VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 } // subresourceRange
@@ -601,7 +574,6 @@ void VulkanTestContext::swapBuffers() {
NULL // pResults
};
- GR_VK_CALL_ERRCHECK(fBackendContext->fInterface,
- QueuePresentKHR(fPresentQueue, &presentInfo));
+ fQueuePresentKHR(fPresentQueue, &presentInfo);
}
« no previous file with comments | « tools/vulkan/VulkanTestContext.h ('k') | tools/vulkan/android/VulkanTestContext_android.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698