mirror of
https://github.com/Yours3lf/rpi-vk-driver.git
synced 2025-03-21 12:29:15 +01:00
added plane support to modeset
the validation layer doesn't like my direct to display implementation, but it might be buggy
This commit is contained in:
parent
43c167e3b8
commit
a071ec3d77
@ -1049,6 +1049,17 @@ VKAPI_ATTR void VKAPI_CALL rpi_vkDestroySwapchainKHR(
|
||||
VkSwapchainKHR swapchain,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL rpi_vkGetDisplayPlaneSupportedDisplaysKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t planeIndex,
|
||||
uint32_t* pDisplayCount,
|
||||
VkDisplayKHR* pDisplays);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL rpi_vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pPropertyCount,
|
||||
VkDisplayPlanePropertiesKHR* pProperties);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -476,6 +476,8 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL rpi_vkGetInstanceProcAddr(
|
||||
RETFUNC(vkGetDisplayModePropertiesKHR);
|
||||
RETFUNC(vkCreateDisplayModeKHR);
|
||||
RETFUNC(vkCreateDisplayPlaneSurfaceKHR);
|
||||
RETFUNC(vkGetDisplayPlaneSupportedDisplaysKHR);
|
||||
RETFUNC(vkGetPhysicalDeviceDisplayPlanePropertiesKHR);
|
||||
|
||||
RETFUNC(vkDestroySwapchainKHR);
|
||||
|
||||
|
@ -3,6 +3,86 @@
|
||||
#include <stdatomic.h>
|
||||
atomic_int saved_state_guard = 0;
|
||||
|
||||
void modeset_enum_planes(int fd, uint32_t* numPlanes, modeset_plane* planes)
|
||||
{
|
||||
drmModePlaneResPtr planesPtr = drmModeGetPlaneResources(fd);
|
||||
|
||||
uint32_t numDisplays;
|
||||
modeset_display displays[16];
|
||||
modeset_enum_displays(controlFd, &numDisplays, displays);
|
||||
|
||||
uint32_t tmpNumPlanes = 0;
|
||||
modeset_plane tmpPlanes[32];
|
||||
|
||||
for(uint32_t c = 0; c < planesPtr->count_planes; ++c)
|
||||
{
|
||||
tmpPlanes[tmpNumPlanes].plane = drmModeGetPlane(fd, planesPtr->planes[c]);
|
||||
tmpPlanes[tmpNumPlanes].currentConnectorID = 0;
|
||||
|
||||
if(tmpPlanes[tmpNumPlanes].plane->crtc_id)
|
||||
{
|
||||
for(uint32_t d = 0; d < numDisplays; ++d)
|
||||
{
|
||||
drmModeConnectorPtr connPtr = drmModeGetConnector(fd, displays[d].connectorID);
|
||||
|
||||
drmModeEncoderPtr encPtr = drmModeGetEncoder(fd, connPtr->encoder_id);
|
||||
|
||||
uint32_t connID = connPtr->connector_id;
|
||||
uint32_t crtcID = encPtr->crtc_id;
|
||||
|
||||
drmModeFreeConnector(connPtr);
|
||||
drmModeFreeEncoder(encPtr);
|
||||
|
||||
if(crtcID == tmpPlanes[tmpNumPlanes].plane->crtc_id)
|
||||
{
|
||||
tmpPlanes[tmpNumPlanes].currentConnectorID = connID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tmpPlanes[tmpNumPlanes].numPossibleConnectors = 0;
|
||||
|
||||
for(uint32_t d = 0; d < numDisplays; ++d)
|
||||
{
|
||||
drmModeConnectorPtr connPtr = drmModeGetConnector(fd, displays[d].connectorID);
|
||||
|
||||
for(uint32_t e = 0; e < connPtr->count_encoders; ++e)
|
||||
{
|
||||
drmModeEncoderPtr encPtr = drmModeGetEncoder(fd, connPtr->encoders[e]);
|
||||
|
||||
uint32_t possibleCrtcs = encPtr->possible_crtcs;
|
||||
|
||||
drmModeFreeEncoder(encPtr);
|
||||
|
||||
if(possibleCrtcs & tmpPlanes[tmpNumPlanes].plane->possible_crtcs)
|
||||
{
|
||||
tmpPlanes[tmpNumPlanes].possibleConnectors[tmpPlanes[tmpNumPlanes].numPossibleConnectors] = connPtr->connector_id;
|
||||
tmpPlanes[tmpNumPlanes].numPossibleConnectors++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
drmModeFreeConnector(connPtr);
|
||||
}
|
||||
|
||||
tmpNumPlanes++;
|
||||
|
||||
assert(tmpNumPlanes < 32);
|
||||
}
|
||||
|
||||
drmModeFreePlaneResources(planesPtr);
|
||||
|
||||
*numPlanes = tmpNumPlanes;
|
||||
|
||||
memcpy(planes, tmpPlanes, tmpNumPlanes * sizeof(modeset_plane));
|
||||
|
||||
for(uint32_t c = 0; c < tmpNumPlanes; ++c)
|
||||
{
|
||||
memcpy(planes[c].possibleConnectors, tmpPlanes[c].possibleConnectors, tmpPlanes[c].numPossibleConnectors * sizeof(uint32_t));
|
||||
}
|
||||
}
|
||||
|
||||
void modeset_enum_displays(int fd, uint32_t* numDisplays, modeset_display* displays)
|
||||
{
|
||||
drmModeResPtr resPtr = drmModeGetResources(fd);
|
||||
|
@ -20,6 +20,13 @@ extern "C" {
|
||||
|
||||
#include "common.h"
|
||||
|
||||
typedef struct modeset_plane {
|
||||
drmModePlanePtr plane;
|
||||
uint32_t currentConnectorID;
|
||||
uint32_t possibleConnectors[16];
|
||||
uint32_t numPossibleConnectors;
|
||||
} modeset_plane;
|
||||
|
||||
typedef struct modeset_display {
|
||||
char name[32];
|
||||
uint32_t mmWidth, mmHeight;
|
||||
@ -49,6 +56,7 @@ typedef struct modeset_saved_state {
|
||||
|
||||
modeset_saved_state modeset_saved_states[32];
|
||||
|
||||
void modeset_enum_planes(int fd, uint32_t* numPlanes, modeset_plane* planes);
|
||||
void modeset_enum_displays(int fd, uint32_t* numDisplays, modeset_display* displays);
|
||||
void modeset_enum_modes_for_display(int fd, uint32_t display, uint32_t* numModes, modeset_display_mode* modes);
|
||||
void modeset_create_surface_for_mode(int fd, uint32_t display, uint32_t mode, modeset_display_surface* surface);
|
||||
|
68
driver/wsi.c
68
driver/wsi.c
@ -9,6 +9,73 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL rpi_vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pPropertyCount,
|
||||
VkDisplayPlanePropertiesKHR* pProperties)
|
||||
{
|
||||
assert(physicalDevice);
|
||||
assert(pPropertyCount);
|
||||
|
||||
uint32_t numPlanes;
|
||||
modeset_plane planes[32];
|
||||
modeset_enum_planes(controlFd, &numPlanes, planes);
|
||||
|
||||
if(!pProperties)
|
||||
{
|
||||
*pPropertyCount = numPlanes;
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
int arraySize = *pPropertyCount;
|
||||
int elementsWritten = min(numPlanes, arraySize);
|
||||
|
||||
for(uint32_t c = 0; c < elementsWritten; ++c)
|
||||
{
|
||||
pProperties[c].currentDisplay = planes[c].currentConnectorID;
|
||||
pProperties[c].currentStackIndex = c; //TODO dunno?
|
||||
}
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL rpi_vkGetDisplayPlaneSupportedDisplaysKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t planeIndex,
|
||||
uint32_t* pDisplayCount,
|
||||
VkDisplayKHR* pDisplays)
|
||||
{
|
||||
assert(physicalDevice);
|
||||
assert(pDisplayCount);
|
||||
|
||||
uint32_t numPlanes;
|
||||
modeset_plane planes[32];
|
||||
modeset_enum_planes(controlFd, &numPlanes, planes);
|
||||
|
||||
if(!pDisplays)
|
||||
{
|
||||
*pDisplayCount = planes[planeIndex].numPossibleConnectors;
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
int arraySize = *pDisplayCount;
|
||||
int elementsWritten = min(planes[planeIndex].numPossibleConnectors, arraySize);
|
||||
|
||||
for(int c = 0; c < elementsWritten; ++c)
|
||||
{
|
||||
pDisplays[c] = planes[planeIndex].possibleConnectors[c];
|
||||
}
|
||||
|
||||
*pDisplayCount = elementsWritten;
|
||||
|
||||
if(arraySize < planes[planeIndex].numPossibleConnectors)
|
||||
{
|
||||
return VK_INCOMPLETE;
|
||||
}
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL rpi_vkGetPhysicalDeviceDisplayPropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pPropertyCount,
|
||||
@ -33,6 +100,7 @@ VKAPI_ATTR VkResult VKAPI_CALL rpi_vkGetPhysicalDeviceDisplayPropertiesKHR(
|
||||
for(int c = 0; c < elementsWritten; ++c)
|
||||
{
|
||||
pProperties[c].display = displays[c].connectorID;
|
||||
//fprintf(stderr, "display id %i\n", pProperties[c].display );
|
||||
char* name = (char*)malloc(32);
|
||||
memcpy(name, displays[c].name, 32);
|
||||
pProperties[c].displayName = (const char*)name;
|
||||
|
@ -391,15 +391,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -321,15 +321,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -246,15 +246,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -247,15 +247,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -259,15 +259,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -309,15 +309,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -252,15 +252,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -309,15 +309,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -245,15 +245,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -312,15 +312,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -276,15 +276,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -254,15 +254,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -309,15 +309,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -76,6 +76,8 @@ VkPipelineLayout pipelineLayout;
|
||||
uint32_t graphicsQueueFamily;
|
||||
uint32_t presentQueueFamily;
|
||||
|
||||
VkDebugUtilsMessengerEXT debugMessenger;
|
||||
|
||||
void cleanup() {
|
||||
vkDeviceWaitIdle(device);
|
||||
|
||||
@ -155,6 +157,17 @@ void mainLoop() {
|
||||
}
|
||||
}
|
||||
|
||||
static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(
|
||||
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
|
||||
VkDebugUtilsMessageTypeFlagsEXT messageType,
|
||||
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
|
||||
void* pUserData) {
|
||||
|
||||
std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl;
|
||||
|
||||
return VK_FALSE;
|
||||
}
|
||||
|
||||
void createInstance() {
|
||||
VkApplicationInfo appInfo = {};
|
||||
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
|
||||
@ -187,19 +200,43 @@ void createInstance() {
|
||||
std::cout << "\t" << extension.extensionName << std::endl;
|
||||
}
|
||||
|
||||
uint32_t layerCount = 0;
|
||||
vkEnumerateInstanceLayerProperties(&layerCount, 0);
|
||||
|
||||
if (layerCount == 0) {
|
||||
std::cerr << "no layers supported!" << std::endl;
|
||||
assert(0);
|
||||
}
|
||||
|
||||
std::vector<VkLayerProperties> availableLayers(layerCount);
|
||||
vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.data());
|
||||
|
||||
std::cout << "supported layers:" << std::endl;
|
||||
|
||||
for (const auto& layer : availableLayers) {
|
||||
std::cout << "\t" << layer.layerName << std::endl;
|
||||
}
|
||||
|
||||
|
||||
const char* enabledExtensions[] = {
|
||||
"VK_KHR_surface",
|
||||
"VK_KHR_display"
|
||||
"VK_KHR_display",
|
||||
"VK_EXT_debug_utils"
|
||||
};
|
||||
|
||||
char *instance_validation_layers[] = {
|
||||
"VK_LAYER_KHRONOS_validation"
|
||||
};
|
||||
|
||||
|
||||
VkInstanceCreateInfo createInfo = {};
|
||||
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
|
||||
createInfo.pNext = 0;
|
||||
createInfo.pApplicationInfo = &appInfo;
|
||||
createInfo.enabledExtensionCount = sizeof(enabledExtensions) / sizeof(const char*);
|
||||
createInfo.ppEnabledExtensionNames = enabledExtensions;
|
||||
createInfo.enabledLayerCount = 0;
|
||||
createInfo.ppEnabledLayerNames = 0;
|
||||
//createInfo.enabledLayerCount = 1;
|
||||
//createInfo.ppEnabledLayerNames = (const char *const *)instance_validation_layers;
|
||||
|
||||
// Initialize Vulkan instance
|
||||
if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
|
||||
@ -209,6 +246,16 @@ void createInstance() {
|
||||
else {
|
||||
std::cout << "created vulkan instance" << std::endl;
|
||||
}
|
||||
|
||||
VkDebugUtilsMessengerCreateInfoEXT debugMessengerCreateInfo = {};
|
||||
debugMessengerCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
|
||||
debugMessengerCreateInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
|
||||
debugMessengerCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
|
||||
debugMessengerCreateInfo.pfnUserCallback = debugCallback;
|
||||
debugMessengerCreateInfo.pUserData = nullptr; // Optional
|
||||
|
||||
auto func = (PFN_vkCreateDebugUtilsMessengerEXT) vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT");
|
||||
func(instance, &debugMessengerCreateInfo, 0, &debugMessenger);
|
||||
}
|
||||
|
||||
void createWindowSurface() {
|
||||
@ -243,15 +290,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
@ -243,15 +243,9 @@ void createWindowSurface() {
|
||||
// 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.displayMode = displayModeProperties[0].displayMode;
|
||||
dsci.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
dsci.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
dsci.imageExtent = displayModeProperties[0].parameters.visibleRegion;
|
||||
|
Loading…
x
Reference in New Issue
Block a user