summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Li <[email protected]>2017-06-06 18:21:08 -0400
committerMarek Olšák <[email protected]>2017-06-07 21:53:36 +0200
commitc705caaff9e6cc874e90651d6f8e459741978b06 (patch)
tree4a1d9da31ed321150576505255ed00368196d5d3
parent4ba4f0e97673bae2d3a8b7e5bac3210a4c2d944e (diff)
radeonsi: Use libdrm to get chipset name
v2: Add a func pointer to radeon_winsys to support radeon later. Change-Id: I614ea71424f9e5c97e4ae68654315d28c89eaa5f Signed-off-by: Samuel Li <[email protected]> Signed-off-by: Marek Olšák <[email protected]>
-rw-r--r--src/gallium/drivers/radeon/r600_pipe_common.c11
-rw-r--r--src/gallium/drivers/radeon/radeon_winsys.h2
-rw-r--r--src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c8
3 files changed, 20 insertions, 1 deletions
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c
index 2c0cadb0309..48d136a032f 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.c
+++ b/src/gallium/drivers/radeon/r600_pipe_common.c
@@ -790,6 +790,15 @@ 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;
+
+ if (rscreen->ws->get_chip_name) {
+ mname = rscreen->ws->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";
@@ -1321,6 +1330,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),
@@ -1362,7 +1372,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/drivers/radeon/radeon_winsys.h b/src/gallium/drivers/radeon/radeon_winsys.h
index 524bb467e1b..e19fde6e431 100644
--- a/src/gallium/drivers/radeon/radeon_winsys.h
+++ b/src/gallium/drivers/radeon/radeon_winsys.h
@@ -637,6 +637,8 @@ struct radeon_winsys {
bool (*read_registers)(struct radeon_winsys *ws, unsigned reg_offset,
unsigned num_registers, uint32_t *out);
+
+ const char* (*get_chip_name)(struct radeon_winsys *ws);
};
static inline bool radeon_emitted(struct radeon_winsys_cs *cs, unsigned num_dw)
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
index 43f2ed2fbf4..2cbc39c0c70 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
@@ -221,6 +221,13 @@ static bool amdgpu_winsys_unref(struct radeon_winsys *rws)
return destroy;
}
+static 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)
{
@@ -296,6 +303,7 @@ amdgpu_winsys_create(int fd, radeon_screen_create_t screen_create)
ws->base.cs_request_feature = amdgpu_cs_request_feature;
ws->base.query_value = amdgpu_query_value;
ws->base.read_registers = amdgpu_read_registers;
+ ws->base.get_chip_name = amdgpu_get_chip_name;
amdgpu_bo_init_functions(ws);
amdgpu_cs_init_functions(ws);