[KMS/DRM] Add Vulkan suport to the KMSDRM_LEGACY backend.Minor text spacing tweaks for better readability. Comment out unused function.

This commit is contained in:
Manuel Alfayate Corchete 2021-01-07 00:47:21 +01:00
parent dfb0afe36a
commit 661bacfe27

View File

@ -42,6 +42,7 @@
#include "SDL_kmsdrm_legacy_opengles.h" #include "SDL_kmsdrm_legacy_opengles.h"
#include "SDL_kmsdrm_legacy_mouse.h" #include "SDL_kmsdrm_legacy_mouse.h"
#include "SDL_kmsdrm_legacy_dyn.h" #include "SDL_kmsdrm_legacy_dyn.h"
#include "SDL_kmsdrm_legacy_vulkan.h"
#include <sys/stat.h> #include <sys/stat.h>
#include <dirent.h> #include <dirent.h>
#include <errno.h> #include <errno.h>
@ -62,6 +63,49 @@
#endif #endif
#if 0 #if 0
/**************************************************************************************/
/* UNUSED function because any plane compatible with the CRTC we chose is good enough */
/* for us, whatever it's type is. Keep it here for documentation purposes. */
/* It cold be needed sometime in the future, too. */
/**************************************************************************************/
SDL_bool KMSDRM_IsPlanePrimary (_THIS, drmModePlane *plane) {
SDL_VideoData *viddata = (SDL_VideoData *)_this->driverdata;
SDL_bool ret = SDL_FALSE;
int j;
/* Find out if it's a primary plane. */
drmModeObjectProperties *plane_props =
KMSDRM_LEGACY_drmModeObjectGetProperties(viddata->drm_fd,
plane->plane_id, DRM_MODE_OBJECT_ANY);
for (j = 0; (j < plane_props->count_props); j++) {
drmModePropertyRes *prop = KMSDRM_LEGACY_drmModeGetProperty(viddata->drm_fd,
plane_props->props[j]);
if ((strcmp(prop->name, "type") == 0) &&
(plane_props->prop_values[j] == DRM_PLANE_TYPE_PRIMARY))
{
ret = SDL_TRUE;
}
KMSDRM_LEGACY_drmModeFreeProperty(prop);
}
KMSDRM_LEGACY_drmModeFreeObjectProperties(plane_props);
return ret;
}
#endif
#if 0
/***********************************************/
/* Use these functions if you ever need info */
/* about the available planes on your machine. */
/***********************************************/
void print_plane_info(_THIS, drmModePlanePtr plane) void print_plane_info(_THIS, drmModePlanePtr plane)
{ {
@ -155,12 +199,8 @@ void get_planes_info(_THIS)
KMSDRM_LEGACY_drmModeFreePlaneResources(plane_resources); KMSDRM_LEGACY_drmModeFreePlaneResources(plane_resources);
} }
#endif #endif
static int static int
check_modestting(int devindex) check_modestting(int devindex)
{ {
@ -175,11 +215,17 @@ check_modestting(int devindex)
if (SDL_KMSDRM_LEGACY_LoadSymbols()) { if (SDL_KMSDRM_LEGACY_LoadSymbols()) {
drmModeRes *resources = KMSDRM_LEGACY_drmModeGetResources(drm_fd); drmModeRes *resources = KMSDRM_LEGACY_drmModeGetResources(drm_fd);
if (resources) { if (resources) {
SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, KMSDRM_LEGACY_DRI_DEVFMT " connector, encoder and CRTC counts are: %d %d %d", SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO,
KMSDRM_LEGACY_DRI_PATH, devindex, KMSDRM_LEGACY_DRI_DEVFMT
resources->count_connectors, resources->count_encoders, resources->count_crtcs); " connector, encoder and CRTC counts are: %d %d %d",
KMSDRM_LEGACY_DRI_PATH, devindex,
resources->count_connectors, resources->count_encoders,
resources->count_crtcs);
if (resources->count_connectors > 0 && resources->count_encoders > 0 && resources->count_crtcs > 0) { if (resources->count_connectors > 0
&& resources->count_encoders > 0
&& resources->count_crtcs > 0)
{
available = SDL_TRUE; available = SDL_TRUE;
} }
KMSDRM_LEGACY_drmModeFreeResources(resources); KMSDRM_LEGACY_drmModeFreeResources(resources);
@ -216,7 +262,8 @@ static int get_dricount(void)
if (folder) { if (folder) {
while ((res = readdir(folder))) { while ((res = readdir(folder))) {
int len = SDL_strlen(res->d_name); int len = SDL_strlen(res->d_name);
if (len > KMSDRM_LEGACY_DRI_DEVNAMESIZE && SDL_strncmp(res->d_name, KMSDRM_LEGACY_DRI_DEVNAME, KMSDRM_LEGACY_DRI_DEVNAMESIZE) == 0) { if (len > KMSDRM_LEGACY_DRI_DEVNAMESIZE && SDL_strncmp(res->d_name,
KMSDRM_LEGACY_DRI_DEVNAME, KMSDRM_LEGACY_DRI_DEVNAMESIZE) == 0) {
devcount++; devcount++;
} }
} }
@ -337,6 +384,14 @@ KMSDRM_LEGACY_CreateDevice(int devindex)
device->GL_SwapWindow = KMSDRM_LEGACY_GLES_SwapWindow; device->GL_SwapWindow = KMSDRM_LEGACY_GLES_SwapWindow;
device->GL_DeleteContext = KMSDRM_LEGACY_GLES_DeleteContext; device->GL_DeleteContext = KMSDRM_LEGACY_GLES_DeleteContext;
#if SDL_VIDEO_VULKAN
device->Vulkan_LoadLibrary = KMSDRM_LEGACY_Vulkan_LoadLibrary;
device->Vulkan_UnloadLibrary = KMSDRM_LEGACY_Vulkan_UnloadLibrary;
device->Vulkan_GetInstanceExtensions = KMSDRM_LEGACY_Vulkan_GetInstanceExtensions;
device->Vulkan_CreateSurface = KMSDRM_LEGACY_Vulkan_CreateSurface;
device->Vulkan_GetDrawableSize = KMSDRM_LEGACY_Vulkan_GetDrawableSize;
#endif
device->PumpEvents = KMSDRM_LEGACY_PumpEvents; device->PumpEvents = KMSDRM_LEGACY_PumpEvents;
device->free = KMSDRM_LEGACY_DeleteDevice; device->free = KMSDRM_LEGACY_DeleteDevice;
@ -713,38 +768,6 @@ cleanup:
return ret; return ret;
} }
/*UNUSED function. Keep for documentation purposes. */
SDL_bool KMSDRM_IsPlanePrimary (_THIS, drmModePlane *plane) {
SDL_VideoData *viddata = (SDL_VideoData *)_this->driverdata;
SDL_bool ret = SDL_FALSE;
int j;
/* Find out if it's a primary plane. */
drmModeObjectProperties *plane_props =
KMSDRM_LEGACY_drmModeObjectGetProperties(viddata->drm_fd,
plane->plane_id, DRM_MODE_OBJECT_ANY);
for (j = 0; (j < plane_props->count_props); j++) {
drmModePropertyRes *prop = KMSDRM_LEGACY_drmModeGetProperty(viddata->drm_fd,
plane_props->props[j]);
if ((strcmp(prop->name, "type") == 0) &&
(plane_props->prop_values[j] == DRM_PLANE_TYPE_PRIMARY))
{
ret = SDL_TRUE;
}
KMSDRM_LEGACY_drmModeFreeProperty(prop);
}
KMSDRM_LEGACY_drmModeFreeObjectProperties(plane_props);
return ret;
}
/* Init the Vulkan-INCOMPATIBLE stuff: /* Init the Vulkan-INCOMPATIBLE stuff:
Reopen FD, create gbm dev, create dumb buffer and setup display plane. Reopen FD, create gbm dev, create dumb buffer and setup display plane.
This is to be called late, in WindowCreate(), and ONLY if this is not This is to be called late, in WindowCreate(), and ONLY if this is not