diff --git a/driver/modeset.c b/driver/modeset.c index 24f91d8..28fcbe7 100644 --- a/driver/modeset.c +++ b/driver/modeset.c @@ -83,9 +83,7 @@ void modeset_enum_modes_for_display(int fd, uint32_t display, uint32_t* numModes void modeset_create_surface_for_mode(int fd, uint32_t display, uint32_t mode, modeset_display_surface* surface) { - fprintf(stderr, "modeset create surface\n"); - - modeset_debug_print(fd); +// modeset_debug_print(fd); surface->savedState = 0; @@ -115,16 +113,18 @@ void modeset_create_surface_for_mode(int fd, uint32_t display, uint32_t mode, mo surface->connector = connPtr; surface->modeID = mode; surface->crtc = drmModeGetCrtc(fd, encPtr->crtc_id); + + //fprintf(stderr, "connector id %i, crtc id %i\n", connPtr->connector_id, encPtr->crtc_id); } drmModeFreeEncoder(encPtr); } + + drmModeFreeResources(resPtr); } void modeset_create_fb_for_surface(int fd, _image* buf, modeset_display_surface* surface) { - fprintf(stderr, "modeset create fb\n"); - int ret = drmModeAddFB(fd, buf->width, buf->height, 24, 32, buf->stride, buf->boundMem->bo, &buf->fb); if(ret) @@ -142,8 +142,6 @@ void modeset_destroy_fb(int fd, _image* buf) void modeset_present(int fd, _image *buf, modeset_display_surface* surface) { - fprintf(stderr, "modeset present\n"); - if(!surface->savedState) { while(saved_state_guard); @@ -166,6 +164,7 @@ void modeset_present(int fd, _image *buf, modeset_display_surface* surface) saved_state_guard = 0; } + //fprintf(stderr, "present connector id %i, crtc id %i, fb %i\n", surface->connector->connector_id, surface->crtc->crtc_id, buf->fb); int ret = drmModeSetCrtc(fd, surface->crtc->crtc_id, buf->fb, 0, 0, &surface->connector->connector_id, 1, &surface->connector->modes[surface->modeID]); if(ret) { diff --git a/driver/wsi.c b/driver/wsi.c index dd825fd..5e70477 100644 --- a/driver/wsi.c +++ b/driver/wsi.c @@ -117,6 +117,7 @@ VKAPI_ATTR VkResult VKAPI_CALL rpi_vkCreateDisplayModeKHR( _displayMode mode = { modes[c].connectorID, modes[c].modeID }; memcpy(pMode, &mode, sizeof(_displayMode)); + break; } } } diff --git a/test/ETC/ETC.cpp b/test/ETC/ETC.cpp index 500cd36..2794865 100644 --- a/test/ETC/ETC.cpp +++ b/test/ETC/ETC.cpp @@ -360,23 +360,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/HDR/HDR.cpp b/test/HDR/HDR.cpp index 6e9ee0a..750349f 100644 --- a/test/HDR/HDR.cpp +++ b/test/HDR/HDR.cpp @@ -290,23 +290,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/MSAA/MSAA.cpp b/test/MSAA/MSAA.cpp index 5964f6e..240ceff 100644 --- a/test/MSAA/MSAA.cpp +++ b/test/MSAA/MSAA.cpp @@ -215,23 +215,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/blending/blending.cpp b/test/blending/blending.cpp index 7877378..b5a5f80 100644 --- a/test/blending/blending.cpp +++ b/test/blending/blending.cpp @@ -216,23 +216,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/clear/clear.cpp b/test/clear/clear.cpp index 360424f..cd46e49 100644 --- a/test/clear/clear.cpp +++ b/test/clear/clear.cpp @@ -228,23 +228,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; -// - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - realPhysicalDevice->customData = (uintptr_t)&ci; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); + +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/cubemapping/cubemapping.cpp b/test/cubemapping/cubemapping.cpp index b11a555..4739493 100644 --- a/test/cubemapping/cubemapping.cpp +++ b/test/cubemapping/cubemapping.cpp @@ -278,23 +278,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/depthTest/depthTest.cpp b/test/depthTest/depthTest.cpp index 023a744..248018f 100644 --- a/test/depthTest/depthTest.cpp +++ b/test/depthTest/depthTest.cpp @@ -221,23 +221,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/depthTex/depthTex.cpp b/test/depthTex/depthTex.cpp index f505121..0057e8a 100644 --- a/test/depthTex/depthTex.cpp +++ b/test/depthTex/depthTex.cpp @@ -278,23 +278,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/indexedTriangle/indexedTriangle.cpp b/test/indexedTriangle/indexedTriangle.cpp index 04ec996..5fda603 100644 --- a/test/indexedTriangle/indexedTriangle.cpp +++ b/test/indexedTriangle/indexedTriangle.cpp @@ -214,23 +214,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/mipmapping/mipmapping.cpp b/test/mipmapping/mipmapping.cpp index f868bd8..bd5d2ea 100644 --- a/test/mipmapping/mipmapping.cpp +++ b/test/mipmapping/mipmapping.cpp @@ -281,23 +281,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/query/query.cpp b/test/query/query.cpp index 4a16c0f..8759743 100644 --- a/test/query/query.cpp +++ b/test/query/query.cpp @@ -245,23 +245,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/stencilTest/stencilTest.cpp b/test/stencilTest/stencilTest.cpp index ab7474f..4e2699b 100644 --- a/test/stencilTest/stencilTest.cpp +++ b/test/stencilTest/stencilTest.cpp @@ -223,23 +223,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/texturing/texturing.cpp b/test/texturing/texturing.cpp index 58cf1d8..0b76aa7 100644 --- a/test/texturing/texturing.cpp +++ b/test/texturing/texturing.cpp @@ -278,23 +278,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; } diff --git a/test/triangle/triangle.cpp b/test/triangle/triangle.cpp index 3da0b97..e956e65 100644 --- a/test/triangle/triangle.cpp +++ b/test/triangle/triangle.cpp @@ -148,7 +148,7 @@ void setupVulkan() { void mainLoop() { //while (!glfwWindowShouldClose(window)) { - for(int c = 0; c < 30; ++c){ + for(int c = 0; c < 300; ++c){ draw(); //glfwPollEvents(); @@ -214,22 +214,6 @@ void createInstance() { void createWindowSurface() { windowSurface = 0; - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; - - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; - - realPhysicalDevice->customData = (uintptr_t)&ci; - - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ - uint32_t displayCount; vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); diff --git a/test/varyings/varyings.cpp b/test/varyings/varyings.cpp index 0c80f2a..9fcac1b 100644 --- a/test/varyings/varyings.cpp +++ b/test/varyings/varyings.cpp @@ -212,23 +212,50 @@ void createInstance() { } void createWindowSurface() { - /*PFN_vkCreateRpiSurfaceEXT vkCreateRpiSurfaceEXT = 0; - vkCreateRpiSurfaceEXT = (PFN_vkCreateRpiSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateRpiSurfaceEXT"); - windowSurface = 0; - LoaderTrampoline* trampoline = (LoaderTrampoline*)physicalDevice; - VkRpiPhysicalDevice* realPhysicalDevice = trampoline->loaderTerminator->physicalDevice; + uint32_t displayCount; + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, 0); + VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount); + vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties); - VkRpiSurfaceCreateInfoEXT ci = {}; - ci.pSurface = &windowSurface; + printf("Enumerated displays\n"); + for(uint32_t c = 0; c < displayCount; ++c) + { + printf("Display ID %i\n", displayProperties[c].display); + printf("Display name %s\n", displayProperties[c].displayName); + printf("Display width %i\n", displayProperties[c].physicalDimensions.width); + printf("Display height %i\n", displayProperties[c].physicalDimensions.height); + printf("Display horizontal resolution %i\n", displayProperties[c].physicalResolution.width); + printf("Display vertical resolution %i\n", displayProperties[c].physicalResolution.height); + } - realPhysicalDevice->customData = (uintptr_t)&ci; + uint32_t modeCount; + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, 0); + VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*modeCount); + vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &modeCount, displayModeProperties); - if (vkCreateRpiSurfaceEXT(physicalDevice) != VK_SUCCESS) { - std::cerr << "failed to create window surface!" << std::endl; - assert(0); - }*/ +// printf("\nEnumerated modes\n"); +// for(uint32_t c = 0; c < modeCount; ++c) +// { +// printf("Mode refresh rate %i\n", displayModeProperties[c].parameters.refreshRate); +// printf("Mode width %i\n", displayModeProperties[c].parameters.visibleRegion.width); +// printf("Mode height %i\n\n", displayModeProperties[c].parameters.visibleRegion.height); +// } + + VkDisplayModeCreateInfoKHR dmci = {}; + dmci.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + dmci.parameters = displayModeProperties[0].parameters; + VkDisplayModeKHR displayMode; + vkCreateDisplayModeKHR(physicalDevice, displayProperties[0].display, &dmci, 0, &displayMode); + + VkDisplaySurfaceCreateInfoKHR dsci = {}; + dsci.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + dsci.displayMode = displayMode; + dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion; + vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface); std::cout << "created window surface" << std::endl; }