radeonsi: clean up winsys creation
authorMarek Olšák <marek.olsak@amd.com>
Fri, 17 May 2019 19:36:57 +0000 (15:36 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 27 May 2019 19:26:06 +0000 (15:26 -0400)
- unify the code
- choose radeon or amdgpu based on the DRM version, not based on which one
  succeeds first

src/gallium/auxiliary/target-helpers/drm_helper.h
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/radeonsi/si_public.h
src/gallium/targets/pipe-loader/pipe_radeonsi.c
src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c

index ac891d1..6bdd1a0 100644 (file)
@@ -161,23 +161,14 @@ pipe_r600_create_screen(int fd, const struct pipe_screen_config *config)
 #endif
 
 #ifdef GALLIUM_RADEONSI
-#include "radeon/radeon_winsys.h"
-#include "radeon/drm/radeon_drm_public.h"
-#include "amdgpu/drm/amdgpu_public.h"
 #include "radeonsi/si_public.h"
 
 struct pipe_screen *
 pipe_radeonsi_create_screen(int fd, const struct pipe_screen_config *config)
 {
-   struct radeon_winsys *rw;
-
-   /* First, try amdgpu. */
-   rw = amdgpu_winsys_create(fd, config, radeonsi_screen_create);
+   struct pipe_screen *screen = radeonsi_screen_create(fd, config);
 
-   if (!rw)
-      rw = radeon_drm_winsys_create(fd, config, radeonsi_screen_create);
-
-   return rw ? debug_screen_wrap(rw->screen) : NULL;
+   return screen ? debug_screen_wrap(screen) : NULL;
 }
 
 const char *radeonsi_driconf_xml =
index 9ddf780..c19a2cd 100644 (file)
 #include "vl/vl_decoder.h"
 #include "driver_ddebug/dd_util.h"
 
+#include "gallium/winsys/radeon/drm/radeon_drm_public.h"
+#include "gallium/winsys/amdgpu/drm/amdgpu_public.h"
+#include <xf86drm.h>
+
 static const struct debug_named_value debug_options[] = {
        /* Shader logging options: */
        { "vs", DBG(VS), "Print vertex shaders" },
@@ -879,8 +883,9 @@ static bool si_is_parallel_shader_compilation_finished(struct pipe_screen *scree
        return util_queue_fence_is_signalled(&sel->ready);
 }
 
-struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws,
-                                          const struct pipe_screen_config *config)
+static struct pipe_screen *
+radeonsi_screen_create_impl(struct radeon_winsys *ws,
+                           const struct pipe_screen_config *config)
 {
        struct si_screen *sscreen = CALLOC_STRUCT(si_screen);
        unsigned hw_threads, num_comp_hi_threads, num_comp_lo_threads, i;
@@ -1225,3 +1230,21 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws,
 
        return &sscreen->b;
 }
+
+struct pipe_screen *radeonsi_screen_create(int fd, const struct pipe_screen_config *config)
+{
+       drmVersionPtr version = drmGetVersion(fd);
+       struct radeon_winsys *rw = NULL;
+
+       switch (version->version_major) {
+       case 2:
+               rw = radeon_drm_winsys_create(fd, config, radeonsi_screen_create_impl);
+               break;
+       case 3:
+               rw = amdgpu_winsys_create(fd, config, radeonsi_screen_create_impl);
+               break;
+       }
+
+       drmFreeVersion(version);
+       return rw ? rw->screen : NULL;
+}
index c8721ba..8a1f6e1 100644 (file)
@@ -25,9 +25,6 @@
 #ifndef SI_PUBLIC_H
 #define SI_PUBLIC_H
 
-struct radeon_winsys;
-
-struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws,
-                                          const struct pipe_screen_config *config);
+struct pipe_screen *radeonsi_screen_create(int fd, const struct pipe_screen_config *config);
 
 #endif
index 5657595..9d925c7 100644 (file)
@@ -1,23 +1,14 @@
 #include "state_tracker/drm_driver.h"
 #include "target-helpers/inline_debug_helper.h"
-#include "radeon/drm/radeon_drm_public.h"
-#include "radeon/radeon_winsys.h"
-#include "amdgpu/drm/amdgpu_public.h"
 #include "radeonsi/si_public.h"
 #include "util/xmlpool.h"
 
 static struct pipe_screen *
 create_screen(int fd, const struct pipe_screen_config *config)
 {
-   struct radeon_winsys *rw;
+   struct pipe_screen *screen = radeonsi_screen_create(fd, config);
 
-   /* First, try amdgpu. */
-   rw = amdgpu_winsys_create(fd, config, radeonsi_screen_create);
-
-   if (!rw)
-      rw = radeon_drm_winsys_create(fd, config, radeonsi_screen_create);
-
-   return rw ? debug_screen_wrap(rw->screen) : NULL;
+   return screen ? debug_screen_wrap(screen) : NULL;
 }
 
 static const char *driconf_xml =
index 1430c94..d2776b3 100644 (file)
@@ -284,17 +284,9 @@ amdgpu_winsys_create(int fd, const struct pipe_screen_config *config,
                     radeon_screen_create_t screen_create)
 {
    struct amdgpu_winsys *ws;
-   drmVersionPtr version = drmGetVersion(fd);
    amdgpu_device_handle dev;
    uint32_t drm_major, drm_minor, r;
 
-   /* The DRM driver version of amdgpu is 3.x.x. */
-   if (version->version_major != 3) {
-      drmFreeVersion(version);
-      return NULL;
-   }
-   drmFreeVersion(version);
-
    /* Look up the winsys from the dev table. */
    simple_mtx_lock(&dev_tab_mutex);
    if (!dev_tab)