radeonsi: Use libdrm to get chipset name
authorSamuel Li <Samuel.Li@amd.com>
Tue, 6 Jun 2017 22:21:08 +0000 (18:21 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 7 Jun 2017 19:53:36 +0000 (21:53 +0200)
v2: Add a func pointer to radeon_winsys to support radeon later.

Change-Id: I614ea71424f9e5c97e4ae68654315d28c89eaa5f
Signed-off-by: Samuel Li <Samuel.Li@amd.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeon/r600_pipe_common.c
src/gallium/drivers/radeon/radeon_winsys.h
src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c

index 2c0cadb03095bd112c879f24922019890d9af47b..48d136a032fc84f2bf56c7b798715a849c5a783e 100644 (file)
@@ -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);
index 524bb467e1bcacb58c05e5bbf6c2439c798b3ba3..e19fde6e4317aedcfdf29d93fa8f4195baf5c3e0 100644 (file)
@@ -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)
index 43f2ed2fbf4f9f3cc532433f6fbf0716e5d14223..2cbc39c0c7005975fe489dc934f5e4ab80f74195 100644 (file)
@@ -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);