Hi Sam,

Please use git send-email in the future, it doesn't mess up the formatting :)

This is generally not how we do winsys things, because radeon needs to be supported in addition to amdgpu. The usual approach is to add a new callback function pointer to struct radeon_winsys, in this case get_chip_name. This pointer can be set to amdgpu_get_chip_name in the amdgpu winsys.

r600_get_chip_name then calls that function, with a check to make sure that the function pointer is non-NULL (which will happen for the radeon winsys).

Cheers,
Nicolai



On 02.05.2017 23:51, Li, Samuel wrote:
From f097509a17a6ddf6a0f40fb1b73f289227a9539a Mon Sep 17 00:00:00 2001

From: Samuel Li <[email protected]>

Date: Thu, 27 Apr 2017 13:45:24 -0400

Subject: [PATCH 1/1] radeonsi: Use libdrm to get chipset name



Change-Id: I614ea71424f9e5c97e4ae68654315d28c89eaa5f

Signed-off-by: Samuel Li <[email protected]>

---

src/gallium/drivers/radeon/r600_pipe_common.c | 10 +++++++++-

src/gallium/winsys/amdgpu/drm/amdgpu_public.h |  1 +

src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c |  7 +++++++

3 files changed, 17 insertions(+), 1 deletion(-)



diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c
b/src/gallium/drivers/radeon/r600_pipe_common.c

index ce84139..b4f9beb 100644

--- a/src/gallium/drivers/radeon/r600_pipe_common.c

+++ b/src/gallium/drivers/radeon/r600_pipe_common.c

@@ -36,6 +36,7 @@

#include "vl/vl_decoder.h"

#include "vl/vl_video_buffer.h"

#include "radeon/radeon_video.h"

+#include "gallium/winsys/amdgpu/drm/amdgpu_public.h"

#include <inttypes.h>

#include <sys/utsname.h>

@@ -788,6 +789,13 @@ static const char* r600_get_device_vendor(struct
pipe_screen* pscreen)

 static const char* r600_get_chip_name(struct r600_common_screen *rscreen)

{

+             const char *mname = amdgpu_get_chip_name(rscreen->ws);

+

+             if (mname != NULL) {

+                             return mname;

+             }

+

+             /* fall back to family names*/

               switch (rscreen->info.family) {

               case CHIP_R600: return "AMD R600";

               case CHIP_RV610: return "AMD RV610";

@@ -1314,6 +1322,7 @@ bool r600_common_screen_init(struct
r600_common_screen *rscreen,

               struct utsname uname_data;

                ws->query_info(ws, &rscreen->info);

+             rscreen->ws = ws;

                if (uname(&uname_data) == 0)

                               snprintf(kernel_version,
sizeof(kernel_version),

@@ -1355,7 +1364,6 @@ bool r600_common_screen_init(struct
r600_common_screen *rscreen,

               r600_init_screen_texture_functions(rscreen);

               r600_init_screen_query_functions(rscreen);

-              rscreen->ws = ws;

               rscreen->family = rscreen->info.family;

               rscreen->chip_class = rscreen->info.chip_class;

               rscreen->debug_flags =
debug_get_flags_option("R600_DEBUG", common_debug_options, 0);

diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_public.h
b/src/gallium/winsys/amdgpu/drm/amdgpu_public.h

index ad133b2..8a50c4d 100644

--- a/src/gallium/winsys/amdgpu/drm/amdgpu_public.h

+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_public.h

@@ -34,6 +34,7 @@ struct pipe_screen;

 typedef struct pipe_screen *(*radeon_screen_create_t)(struct
radeon_winsys *);

+const char* amdgpu_get_chip_name(struct radeon_winsys *ws);

struct radeon_winsys *

amdgpu_winsys_create(int fd, radeon_screen_create_t screen_create);

diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c

index f3a0c95..0c8c329 100644

--- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c

+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c

@@ -532,6 +532,13 @@ static bool amdgpu_winsys_unref(struct
radeon_winsys *rws)

    return destroy;

}

+const char* amdgpu_get_chip_name(struct radeon_winsys *ws)

+{

+             amdgpu_device_handle dev = ((struct amdgpu_winsys *)ws)->dev;

+             return amdgpu_get_marketing_name(dev);

+}

+

+

PUBLIC struct radeon_winsys *

amdgpu_winsys_create(int fd, radeon_screen_create_t screen_create)

{

--

2.7.4



_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev



--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to