1
0
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:
Unknown 2020-04-17 17:51:48 +01:00
parent 43c167e3b8
commit a071ec3d77
20 changed files with 234 additions and 108 deletions

View File

@ -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

View File

@ -476,6 +476,8 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL rpi_vkGetInstanceProcAddr(
RETFUNC(vkGetDisplayModePropertiesKHR);
RETFUNC(vkCreateDisplayModeKHR);
RETFUNC(vkCreateDisplayPlaneSurfaceKHR);
RETFUNC(vkGetDisplayPlaneSupportedDisplaysKHR);
RETFUNC(vkGetPhysicalDeviceDisplayPlanePropertiesKHR);
RETFUNC(vkDestroySwapchainKHR);

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;