gallium/radeon: Include the family name in the renderer string if it's not equal...
authorHenri Verbeet <hverbeet@gmail.com>
Mon, 12 Jun 2017 23:39:02 +0000 (01:39 +0200)
committerHenri Verbeet <hverbeet@gmail.com>
Tue, 13 Jun 2017 17:23:18 +0000 (19:23 +0200)
The "family" name is often more informative than the "marketing" name. More
importantly, applications, like for example Wine, may recognise GPUs based on
the existing "family" names.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Henri Verbeet <hverbeet@gmail.com>
src/gallium/drivers/radeon/r600_pipe_common.c

index 48d136a..1cec6d5 100644 (file)
@@ -788,17 +788,15 @@ static const char* r600_get_device_vendor(struct pipe_screen* pscreen)
        return "AMD";
 }
 
-static const char* r600_get_chip_name(struct r600_common_screen *rscreen)
+static const char *r600_get_marketing_name(struct radeon_winsys *ws)
 {
-       const char *mname;
-
-       if (rscreen->ws->get_chip_name) {
-               mname = rscreen->ws->get_chip_name(rscreen->ws);
-               if (mname != NULL)
-                       return mname;
-       }
+       if (!ws->get_chip_name)
+               return NULL;
+       return ws->get_chip_name(ws);
+}
 
-       /* fall back to family names*/
+static const char *r600_get_family_name(const struct r600_common_screen *rscreen)
+{
        switch (rscreen->info.family) {
        case CHIP_R600: return "AMD R600";
        case CHIP_RV610: return "AMD RV610";
@@ -876,7 +874,7 @@ static void r600_disk_cache_create(struct r600_common_screen *rscreen)
 #endif
                if (res != -1) {
                        rscreen->disk_shader_cache =
-                               disk_cache_create(r600_get_chip_name(rscreen),
+                               disk_cache_create(r600_get_family_name(rscreen),
                                                  timestamp_str,
                                                  rscreen->debug_flags);
                        free(timestamp_str);
@@ -1326,12 +1324,18 @@ struct pipe_resource *r600_resource_create_common(struct pipe_screen *screen,
 bool r600_common_screen_init(struct r600_common_screen *rscreen,
                             struct radeon_winsys *ws)
 {
-       char llvm_string[32] = {}, kernel_version[128] = {};
+       char family_name[32] = {}, llvm_string[32] = {}, kernel_version[128] = {};
        struct utsname uname_data;
+       const char *chip_name;
 
        ws->query_info(ws, &rscreen->info);
        rscreen->ws = ws;
 
+       if ((chip_name = r600_get_marketing_name(ws)))
+               snprintf(family_name, sizeof(family_name), "%s / ", r600_get_family_name(rscreen));
+       else
+               chip_name = r600_get_family_name(rscreen);
+
        if (uname(&uname_data) == 0)
                snprintf(kernel_version, sizeof(kernel_version),
                         " / %s", uname_data.release);
@@ -1343,8 +1347,8 @@ bool r600_common_screen_init(struct r600_common_screen *rscreen,
        }
 
        snprintf(rscreen->renderer_string, sizeof(rscreen->renderer_string),
-                "%s (DRM %i.%i.%i%s%s)",
-                r600_get_chip_name(rscreen), rscreen->info.drm_major,
+                "%s (%sDRM %i.%i.%i%s%s)",
+                chip_name, family_name, rscreen->info.drm_major,
                 rscreen->info.drm_minor, rscreen->info.drm_patchlevel,
                 kernel_version, llvm_string);
 
@@ -1396,7 +1400,7 @@ bool r600_common_screen_init(struct r600_common_screen *rscreen,
        if (rscreen->debug_flags & DBG_INFO) {
                printf("pci_id = 0x%x\n", rscreen->info.pci_id);
                printf("family = %i (%s)\n", rscreen->info.family,
-                      r600_get_chip_name(rscreen));
+                      r600_get_family_name(rscreen));
                printf("chip_class = %i\n", rscreen->info.chip_class);
                printf("gart_size = %i MB\n", (int)DIV_ROUND_UP(rscreen->info.gart_size, 1024*1024));
                printf("vram_size = %i MB\n", (int)DIV_ROUND_UP(rscreen->info.vram_size, 1024*1024));