From: Marek Olšák Date: Fri, 17 May 2019 19:36:57 +0000 (-0400) Subject: radeonsi: clean up winsys creation X-Git-Tag: upstream/19.3.0~6073 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fccced57cf484c6836e6637c0f9df90f09b344b6;p=platform%2Fupstream%2Fmesa.git radeonsi: clean up winsys creation - unify the code - choose radeon or amdgpu based on the DRM version, not based on which one succeeds first --- diff --git a/src/gallium/auxiliary/target-helpers/drm_helper.h b/src/gallium/auxiliary/target-helpers/drm_helper.h index ac891d1..6bdd1a0 100644 --- a/src/gallium/auxiliary/target-helpers/drm_helper.h +++ b/src/gallium/auxiliary/target-helpers/drm_helper.h @@ -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 = diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 9ddf780..c19a2cd 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -42,6 +42,10 @@ #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 + 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; +} diff --git a/src/gallium/drivers/radeonsi/si_public.h b/src/gallium/drivers/radeonsi/si_public.h index c8721ba..8a1f6e1 100644 --- a/src/gallium/drivers/radeonsi/si_public.h +++ b/src/gallium/drivers/radeonsi/si_public.h @@ -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 diff --git a/src/gallium/targets/pipe-loader/pipe_radeonsi.c b/src/gallium/targets/pipe-loader/pipe_radeonsi.c index 5657595..9d925c7 100644 --- a/src/gallium/targets/pipe-loader/pipe_radeonsi.c +++ b/src/gallium/targets/pipe-loader/pipe_radeonsi.c @@ -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 = diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c index 1430c94..d2776b3 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c @@ -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)