mirror of
https://github.com/Yours3lf/rpi-vk-driver.git
synced 2024-12-01 13:24:20 +01:00
removed unnecessary stuff, filtered out some modes
This commit is contained in:
parent
806a5a5c18
commit
5db9524684
102
driver/modeset.c
102
driver/modeset.c
@ -3,86 +3,6 @@
|
|||||||
#include <stdatomic.h>
|
#include <stdatomic.h>
|
||||||
atomic_int saved_state_guard = 0;
|
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)
|
void modeset_enum_displays(int fd, uint32_t* numDisplays, modeset_display* displays)
|
||||||
{
|
{
|
||||||
drmModeResPtr resPtr = drmModeGetResources(fd);
|
drmModeResPtr resPtr = drmModeGetResources(fd);
|
||||||
@ -143,12 +63,34 @@ void modeset_enum_modes_for_display(int fd, uint32_t display, uint32_t* numModes
|
|||||||
|
|
||||||
for(uint32_t c = 0; c < connPtr->count_modes; ++c)
|
for(uint32_t c = 0; c < connPtr->count_modes; ++c)
|
||||||
{
|
{
|
||||||
|
uint32_t found = 0;
|
||||||
|
for(uint32_t d = 0; d < tmpNumModes; ++d)
|
||||||
|
{
|
||||||
|
if(tmpModes[d].refreshRate == connPtr->modes[c].vrefresh &&
|
||||||
|
tmpModes[d].resWidth == connPtr->modes[c].hdisplay &&
|
||||||
|
tmpModes[d].resHeight == connPtr->modes[c].vdisplay)
|
||||||
|
{
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(found)
|
||||||
|
{
|
||||||
|
//skip modes that have lower "clock"
|
||||||
|
//but otherwise same resolution and vrefresh
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
tmpModes[tmpNumModes].connectorID = display;
|
tmpModes[tmpNumModes].connectorID = display;
|
||||||
tmpModes[tmpNumModes].modeID = c;
|
tmpModes[tmpNumModes].modeID = c;
|
||||||
tmpModes[tmpNumModes].refreshRate = connPtr->modes[c].vrefresh;
|
tmpModes[tmpNumModes].refreshRate = connPtr->modes[c].vrefresh;
|
||||||
tmpModes[tmpNumModes].resWidth = connPtr->modes[c].hdisplay;
|
tmpModes[tmpNumModes].resWidth = connPtr->modes[c].hdisplay;
|
||||||
tmpModes[tmpNumModes].resHeight = connPtr->modes[c].vdisplay;
|
tmpModes[tmpNumModes].resHeight = connPtr->modes[c].vdisplay;
|
||||||
|
|
||||||
|
//explained here:
|
||||||
|
// https://01.org/linuxgraphics/gfx-docs/drm/API-struct-drm-display-mode.html
|
||||||
|
|
||||||
// char* typestr = 0;
|
// char* typestr = 0;
|
||||||
// switch(connPtr->modes[c].type)
|
// switch(connPtr->modes[c].type)
|
||||||
// {
|
// {
|
||||||
|
@ -56,7 +56,6 @@ typedef struct modeset_saved_state {
|
|||||||
|
|
||||||
modeset_saved_state modeset_saved_states[32];
|
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_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_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);
|
void modeset_create_surface_for_mode(int fd, uint32_t display, uint32_t mode, modeset_display_surface* surface);
|
||||||
|
Loading…
Reference in New Issue
Block a user