mirror of
https://github.com/Yours3lf/rpi-vk-driver.git
synced 2025-02-19 16:54:18 +01:00
fixed some modesetting bugs
This commit is contained in:
parent
a67cf48094
commit
c6281bb757
@ -323,7 +323,7 @@ void modeset_destroy(int fd, modeset_dev* dev)
|
||||
|
||||
|
||||
|
||||
void modeset_enum_displays(int fd, uint32_t* numDisplays, modeset_display** displays)
|
||||
void modeset_enum_displays(int fd, uint32_t* numDisplays, modeset_display* displays)
|
||||
{
|
||||
drmModeResPtr resPtr = drmModeGetResources(fd);
|
||||
|
||||
@ -363,10 +363,10 @@ void modeset_enum_displays(int fd, uint32_t* numDisplays, modeset_display** disp
|
||||
|
||||
*numDisplays = tmpNumDisplays;
|
||||
|
||||
memcpy(*displays, tmpDisplays, tmpNumDisplays * sizeof(modeset_display));
|
||||
memcpy(displays, tmpDisplays, tmpNumDisplays * sizeof(modeset_display));
|
||||
}
|
||||
|
||||
void modeset_enum_modes_for_display(int fd, uint32_t display, uint32_t* numModes, modeset_display_mode** modes)
|
||||
void modeset_enum_modes_for_display(int fd, uint32_t display, uint32_t* numModes, modeset_display_mode* modes)
|
||||
{
|
||||
drmModeResPtr resPtr = drmModeGetResources(fd);
|
||||
|
||||
@ -392,7 +392,7 @@ void modeset_enum_modes_for_display(int fd, uint32_t display, uint32_t* numModes
|
||||
drmModeFreeResources(resPtr);
|
||||
|
||||
*numModes = tmpNumModes;
|
||||
memcpy(*modes, tmpModes, tmpNumModes * sizeof(modeset_display_mode));
|
||||
memcpy(modes, tmpModes, tmpNumModes * sizeof(modeset_display_mode));
|
||||
}
|
||||
|
||||
void modeset_create_surface_for_mode(int fd, uint32_t display, uint32_t mode, modeset_display_surface* surface)
|
||||
|
@ -51,7 +51,7 @@ typedef struct modeset_display_surface {
|
||||
uint32_t modeID;
|
||||
uint32_t encoderID;
|
||||
uint32_t crtcID;
|
||||
} modeset_display_mode;
|
||||
} modeset_display_surface;
|
||||
|
||||
modeset_dev* modeset_create(int fd);
|
||||
void modeset_present_buffer(int fd, modeset_dev* dev, _image* buffer);
|
||||
@ -60,8 +60,8 @@ int modeset_create_fb(int fd, _image *buf);
|
||||
void modeset_destroy_fb(int fd, _image *buf);
|
||||
int modeset_fb_for_dev(int fd, modeset_dev* dev, _image* buffer);
|
||||
|
||||
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_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);
|
||||
|
||||
#if defined (__cplusplus)
|
||||
|
@ -19,7 +19,7 @@ VKAPI_ATTR VkResult VKAPI_CALL rpi_vkGetPhysicalDeviceDisplayPropertiesKHR(
|
||||
|
||||
uint32_t numDisplays;
|
||||
modeset_display displays[16];
|
||||
modeset_enum_displays(controlFd, &numDisplays, &displays);
|
||||
modeset_enum_displays(controlFd, &numDisplays, displays);
|
||||
|
||||
if(!pProperties)
|
||||
{
|
||||
@ -130,7 +130,8 @@ VKAPI_ATTR VkResult VKAPI_CALL rpi_vkCreateDisplayPlaneSurfaceKHR(
|
||||
assert(instance);
|
||||
assert(pSurface);
|
||||
|
||||
_displayMode mode = pCreateInfo->displayMode;
|
||||
_displayMode mode;
|
||||
memcpy(&mode, &pCreateInfo->displayMode, sizeof(_displayMode));
|
||||
|
||||
modeset_display_surface* surface = ALLOCATE(sizeof(modeset_display_surface), 1, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
|
||||
modeset_create_surface_for_mode(controlFd, mode.connectorID, mode.modeID, surface);
|
||||
|
@ -235,10 +235,29 @@ void createWindowSurface() {
|
||||
VkDisplayPropertiesKHR* displayProperties = (VkDisplayPropertiesKHR*)malloc(sizeof(VkDisplayPropertiesKHR)*displayCount);
|
||||
vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayCount, displayProperties);
|
||||
|
||||
uint32_t propertyCount;
|
||||
vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &propertyCount, 0);
|
||||
VkDisplayModePropertiesKHR* displayModeProperties = (VkDisplayModePropertiesKHR*)malloc(sizeof(VkDisplayModePropertiesKHR)*propertyCount);
|
||||
vkGetDisplayModePropertiesKHR(physicalDevice, displayProperties[0].display, &propertyCount, displayModeProperties);
|
||||
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);
|
||||
}
|
||||
|
||||
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;
|
||||
@ -255,6 +274,8 @@ void createWindowSurface() {
|
||||
vkCreateDisplayPlaneSurfaceKHR(instance, &dsci, 0, &windowSurface);
|
||||
|
||||
std::cout << "created window surface" << std::endl;
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void findPhysicalDevice() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user