vulkan-1/tests: Add more VK_KHR_win32_surface surface formats tests.
This commit is contained in:
parent
7c0ddacd3e
commit
85e2072243
1 changed files with 114 additions and 0 deletions
|
@ -460,8 +460,10 @@ static const char *test_win32_surface_extensions[] =
|
||||||
static void test_win32_surface_hwnd(VkInstance vk_instance, VkPhysicalDevice vk_physical_device,
|
static void test_win32_surface_hwnd(VkInstance vk_instance, VkPhysicalDevice vk_physical_device,
|
||||||
VkDevice device, VkSurfaceKHR surface, HWND hwnd)
|
VkDevice device, VkSurfaceKHR surface, HWND hwnd)
|
||||||
{
|
{
|
||||||
|
PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR pvkGetPhysicalDeviceSurfaceCapabilities2KHR;
|
||||||
PFN_vkGetPhysicalDeviceSurfacePresentModesKHR pvkGetPhysicalDeviceSurfacePresentModesKHR;
|
PFN_vkGetPhysicalDeviceSurfacePresentModesKHR pvkGetPhysicalDeviceSurfacePresentModesKHR;
|
||||||
PFN_vkGetPhysicalDevicePresentRectanglesKHR pvkGetPhysicalDevicePresentRectanglesKHR;
|
PFN_vkGetPhysicalDevicePresentRectanglesKHR pvkGetPhysicalDevicePresentRectanglesKHR;
|
||||||
|
PFN_vkGetPhysicalDeviceSurfaceFormats2KHR pvkGetPhysicalDeviceSurfaceFormats2KHR;
|
||||||
VkDeviceGroupPresentModeFlagsKHR present_mode_flags;
|
VkDeviceGroupPresentModeFlagsKHR present_mode_flags;
|
||||||
VkSurfaceCapabilitiesKHR surf_caps;
|
VkSurfaceCapabilitiesKHR surf_caps;
|
||||||
VkSurfaceFormatKHR *formats;
|
VkSurfaceFormatKHR *formats;
|
||||||
|
@ -476,10 +478,14 @@ static void test_win32_surface_hwnd(VkInstance vk_instance, VkPhysicalDevice vk_
|
||||||
if (!GetClientRect(hwnd, &client_rect))
|
if (!GetClientRect(hwnd, &client_rect))
|
||||||
SetRect(&client_rect, 0, 0, 0, 0);
|
SetRect(&client_rect, 0, 0, 0, 0);
|
||||||
|
|
||||||
|
pvkGetPhysicalDeviceSurfaceCapabilities2KHR = (void *)vkGetInstanceProcAddr(vk_instance,
|
||||||
|
"vkGetPhysicalDeviceSurfaceCapabilities2KHR");
|
||||||
pvkGetPhysicalDeviceSurfacePresentModesKHR = (void *)vkGetInstanceProcAddr(vk_instance,
|
pvkGetPhysicalDeviceSurfacePresentModesKHR = (void *)vkGetInstanceProcAddr(vk_instance,
|
||||||
"vkGetPhysicalDeviceSurfacePresentModesKHR");
|
"vkGetPhysicalDeviceSurfacePresentModesKHR");
|
||||||
pvkGetPhysicalDevicePresentRectanglesKHR = (void *)vkGetInstanceProcAddr(vk_instance,
|
pvkGetPhysicalDevicePresentRectanglesKHR = (void *)vkGetInstanceProcAddr(vk_instance,
|
||||||
"vkGetPhysicalDevicePresentRectanglesKHR");
|
"vkGetPhysicalDevicePresentRectanglesKHR");
|
||||||
|
pvkGetPhysicalDeviceSurfaceFormats2KHR = (void *)vkGetInstanceProcAddr(vk_instance,
|
||||||
|
"vkGetPhysicalDeviceSurfaceFormats2KHR");
|
||||||
|
|
||||||
bval = find_queue_family(vk_physical_device, VK_QUEUE_GRAPHICS_BIT, &queue_family_index);
|
bval = find_queue_family(vk_physical_device, VK_QUEUE_GRAPHICS_BIT, &queue_family_index);
|
||||||
ok(bval, "Could not find presentation queue.\n");
|
ok(bval, "Could not find presentation queue.\n");
|
||||||
|
@ -491,6 +497,49 @@ static void test_win32_surface_hwnd(VkInstance vk_instance, VkPhysicalDevice vk_
|
||||||
formats = malloc(sizeof(*formats) * count);
|
formats = malloc(sizeof(*formats) * count);
|
||||||
vr = vkGetPhysicalDeviceSurfaceFormatsKHR(vk_physical_device, surface, &count, formats);
|
vr = vkGetPhysicalDeviceSurfaceFormatsKHR(vk_physical_device, surface, &count, formats);
|
||||||
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
||||||
|
|
||||||
|
todo_wine
|
||||||
|
ok(formats[0].format == VK_FORMAT_B8G8R8A8_UNORM, "Got formats[0].format %#x\n", formats[0].format);
|
||||||
|
ok(formats[0].colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
|
||||||
|
"Got formats[0].colorSpace %#x\n", formats[0].colorSpace);
|
||||||
|
todo_wine
|
||||||
|
ok(formats[1].format == VK_FORMAT_B8G8R8A8_SRGB, "Got formats[1].format %#x\n", formats[1].format);
|
||||||
|
ok(formats[1].colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
|
||||||
|
"Got formats[1].colorSpace %#x\n", formats[1].colorSpace);
|
||||||
|
|
||||||
|
if (!pvkGetPhysicalDeviceSurfaceFormats2KHR)
|
||||||
|
win_skip("vkGetPhysicalDeviceSurfaceFormats2KHR not found, skipping tests\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VkPhysicalDeviceSurfaceInfo2KHR surface_info = {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR};
|
||||||
|
VkSurfaceFormat2KHR *formats2;
|
||||||
|
UINT i;
|
||||||
|
|
||||||
|
surface_info.surface = surface;
|
||||||
|
|
||||||
|
vr = pvkGetPhysicalDeviceSurfaceFormats2KHR(vk_physical_device, &surface_info, &count, NULL);
|
||||||
|
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
||||||
|
ok(count, "Got zero count.\n");
|
||||||
|
|
||||||
|
formats2 = calloc(count, sizeof(*formats2));
|
||||||
|
for (i = 0; i < count; i++) formats2[i].sType = VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR;
|
||||||
|
vr = pvkGetPhysicalDeviceSurfaceFormats2KHR(vk_physical_device, &surface_info, &count, formats2);
|
||||||
|
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
||||||
|
ok(count, "Got zero count.\n");
|
||||||
|
|
||||||
|
while (count--)
|
||||||
|
{
|
||||||
|
ok(formats2[count].surfaceFormat.format == formats[count].format,
|
||||||
|
"Got formats2[%u].surfaceFormat.format %#x\n", count,
|
||||||
|
formats2[count].surfaceFormat.format);
|
||||||
|
ok(formats2[count].surfaceFormat.colorSpace == formats[count].colorSpace,
|
||||||
|
"Got formats2[%u].surfaceFormat.colorSpace %#x\n", count,
|
||||||
|
formats2[count].surfaceFormat.colorSpace);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(formats2);
|
||||||
|
}
|
||||||
|
|
||||||
free(formats);
|
free(formats);
|
||||||
|
|
||||||
vr = vkGetPhysicalDeviceSurfaceSupportKHR(vk_physical_device, queue_family_index, surface, &bval);
|
vr = vkGetPhysicalDeviceSurfaceSupportKHR(vk_physical_device, queue_family_index, surface, &bval);
|
||||||
|
@ -498,11 +547,66 @@ static void test_win32_surface_hwnd(VkInstance vk_instance, VkPhysicalDevice vk_
|
||||||
|
|
||||||
vr = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(vk_physical_device, surface, &surf_caps);
|
vr = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(vk_physical_device, surface, &surf_caps);
|
||||||
if (!IsWindow(hwnd))
|
if (!IsWindow(hwnd))
|
||||||
|
{
|
||||||
ok(vr == VK_ERROR_SURFACE_LOST_KHR /* Nvidia */ || vr == VK_ERROR_UNKNOWN /* AMD */,
|
ok(vr == VK_ERROR_SURFACE_LOST_KHR /* Nvidia */ || vr == VK_ERROR_UNKNOWN /* AMD */,
|
||||||
"Got unexpected vr %d.\n", vr);
|
"Got unexpected vr %d.\n", vr);
|
||||||
|
memset(&surf_caps, 0, sizeof(surf_caps));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
||||||
|
|
||||||
|
ok(surf_caps.minImageCount > 0, "Got minImageCount %u\n", surf_caps.minImageCount);
|
||||||
|
ok(surf_caps.maxImageCount > 2, "Got minImageCount %u\n", surf_caps.maxImageCount);
|
||||||
|
ok(surf_caps.minImageCount <= surf_caps.maxImageCount, "Got maxImageCount %u\n", surf_caps.maxImageCount);
|
||||||
|
|
||||||
|
todo_wine_if(IsRectEmpty(&client_rect))
|
||||||
|
ok(surf_caps.currentExtent.width == client_rect.right - client_rect.left,
|
||||||
|
"Got currentExtent.width %d\n", surf_caps.currentExtent.width);
|
||||||
|
todo_wine_if(IsRectEmpty(&client_rect))
|
||||||
|
ok(surf_caps.currentExtent.height == client_rect.bottom - client_rect.top,
|
||||||
|
"Got currentExtent.height %d\n", surf_caps.currentExtent.height);
|
||||||
|
|
||||||
|
ok(surf_caps.minImageExtent.width == surf_caps.currentExtent.width,
|
||||||
|
"Got minImageExtent.width %d\n", surf_caps.minImageExtent.width);
|
||||||
|
ok(surf_caps.minImageExtent.height == surf_caps.currentExtent.height,
|
||||||
|
"Got minImageExtent.height %d\n", surf_caps.minImageExtent.height);
|
||||||
|
ok(surf_caps.maxImageExtent.width == surf_caps.currentExtent.width,
|
||||||
|
"Got maxImageExtent.width %d\n", surf_caps.maxImageExtent.width);
|
||||||
|
ok(surf_caps.maxImageExtent.height == surf_caps.currentExtent.height,
|
||||||
|
"Got maxImageExtent.height %d\n", surf_caps.maxImageExtent.height);
|
||||||
|
|
||||||
|
ok(surf_caps.maxImageArrayLayers == 1, "Got maxImageArrayLayers %u\n", surf_caps.maxImageArrayLayers);
|
||||||
|
ok(surf_caps.supportedTransforms == VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
|
||||||
|
"Got supportedTransforms %#x\n", surf_caps.supportedTransforms);
|
||||||
|
ok(surf_caps.currentTransform == VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
|
||||||
|
"Got currentTransform %#x\n", surf_caps.currentTransform);
|
||||||
|
todo_wine
|
||||||
|
ok(surf_caps.supportedCompositeAlpha == VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
|
||||||
|
"Got supportedCompositeAlpha %#x\n", surf_caps.supportedCompositeAlpha);
|
||||||
|
todo_wine
|
||||||
|
ok(surf_caps.supportedUsageFlags == 0x9f, "Got supportedUsageFlags %#x\n", surf_caps.supportedUsageFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pvkGetPhysicalDeviceSurfaceCapabilities2KHR)
|
||||||
|
win_skip("vkGetPhysicalDeviceSurfaceCapabilities2KHR not found, skipping tests\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VkPhysicalDeviceSurfaceInfo2KHR surface_info = {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR};
|
||||||
|
VkSurfaceCapabilities2KHR surface_capabilities = {.sType = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR};
|
||||||
|
surface_info.surface = surface;
|
||||||
|
|
||||||
|
vr = pvkGetPhysicalDeviceSurfaceCapabilities2KHR(vk_physical_device, &surface_info, &surface_capabilities);
|
||||||
|
if (IsWindow(hwnd))
|
||||||
|
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
todo_wine
|
||||||
|
ok(vr == VK_ERROR_SURFACE_LOST_KHR /* Nvidia */ || vr == VK_ERROR_UNKNOWN /* AMD */,
|
||||||
|
"Got unexpected vr %d.\n", vr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
vr = pvkGetPhysicalDeviceSurfacePresentModesKHR(vk_physical_device, surface, &count, NULL);
|
vr = pvkGetPhysicalDeviceSurfacePresentModesKHR(vk_physical_device, surface, &count, NULL);
|
||||||
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
||||||
|
@ -517,6 +621,16 @@ static void test_win32_surface_hwnd(VkInstance vk_instance, VkPhysicalDevice vk_
|
||||||
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
||||||
ok(count == 1, "Got unexpected count %u.\n", count);
|
ok(count == 1, "Got unexpected count %u.\n", count);
|
||||||
|
|
||||||
|
memset(&rect, 0xcc, sizeof(rect));
|
||||||
|
vr = pvkGetPhysicalDevicePresentRectanglesKHR(vk_physical_device, surface, &count, &rect);
|
||||||
|
if (IsWindow(hwnd))
|
||||||
|
ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
todo_wine
|
||||||
|
ok(vr == VK_SUCCESS /* Nvidia */ || vr == VK_ERROR_UNKNOWN /* AMD */, "Got unexpected vr %d.\n", vr);
|
||||||
|
}
|
||||||
|
|
||||||
memset(&rect, 0xcc, sizeof(rect));
|
memset(&rect, 0xcc, sizeof(rect));
|
||||||
vr = pvkGetPhysicalDevicePresentRectanglesKHR(vk_physical_device, surface, &count, &rect);
|
vr = pvkGetPhysicalDevicePresentRectanglesKHR(vk_physical_device, surface, &count, &rect);
|
||||||
todo_wine_if(!IsWindow(hwnd))
|
todo_wine_if(!IsWindow(hwnd))
|
||||||
|
|
Loading…
Add table
Reference in a new issue