Browse Source

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

Manuel Alfayate Corchete 4 years ago
parent
commit
661bacfe27
1 changed files with 65 additions and 42 deletions
  1. 65 42
      src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_video.c

+ 65 - 42
src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_video.c

@@ -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",
-                             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) {
+                SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO,
+                  KMSDRM_LEGACY_DRI_DEVFMT
+                  " 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)
+                {
                     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