Mesa (master): radeon/compute: Implement PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS

Tom Stellard tstellar at kemper.freedesktop.org
Fri Jun 13 15:00:38 UTC 2014


Module: Mesa
Branch: master
Commit: 03aab2af16778f3ab8130ec664fd6a6066ca869a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=03aab2af16778f3ab8130ec664fd6a6066ca869a

Author: Bruno Jiménez <brunojimen at gmail.com>
Date:   Fri Jun 13 11:23:14 2014 +0200

radeon/compute: Implement PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS

v2:
    Add RADEON_INFO_ACTIVE_CU_COUNT as a define, as suggested by
    Tom Stellard

Reviewed-by: Tom Stellard <thomas.stellard at amd.com>

---

 src/gallium/drivers/radeon/r600_pipe_common.c     |    7 +++++++
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c |    7 +++++++
 src/gallium/winsys/radeon/drm/radeon_winsys.h     |    1 +
 3 files changed, 15 insertions(+)

diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c
index 4c6cf0e..4b9d31c 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.c
+++ b/src/gallium/drivers/radeon/r600_pipe_common.c
@@ -520,6 +520,13 @@ static int r600_get_compute_param(struct pipe_screen *screen,
 		}
 		return sizeof(uint32_t);
 
+	case PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS:
+		if (ret) {
+			uint32_t *max_compute_units = ret;
+			*max_compute_units = rscreen->info.max_compute_units;
+		}
+		return sizeof(uint32_t);
+
 	default:
 		fprintf(stderr, "unknown PIPE_COMPUTE_CAP %d\n", param);
 		return 0;
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
index e54e79e..576fea5 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
@@ -45,6 +45,10 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
+#ifndef RADEON_INFO_ACTIVE_CU_COUNT
+#define RADEON_INFO_ACTIVE_CU_COUNT 0x20
+#endif
+
 static struct util_hash_table *fd_tab = NULL;
 pipe_static_mutex(fd_tab_mutex);
 
@@ -382,6 +386,9 @@ static boolean do_winsys_init(struct radeon_drm_winsys *ws)
     radeon_get_drm_value(ws->fd, RADEON_INFO_MAX_PIPES, NULL,
                          &ws->info.r600_max_pipes);
 
+    radeon_get_drm_value(ws->fd, RADEON_INFO_ACTIVE_CU_COUNT, NULL,
+                         &ws->info.max_compute_units);
+
     if (radeon_get_drm_value(ws->fd, RADEON_INFO_SI_TILE_MODE_ARRAY, NULL,
                              ws->info.si_tile_mode_array)) {
         ws->info.si_tile_mode_array_valid = TRUE;
diff --git a/src/gallium/winsys/radeon/drm/radeon_winsys.h b/src/gallium/winsys/radeon/drm/radeon_winsys.h
index 2d13550..6df1987 100644
--- a/src/gallium/winsys/radeon/drm/radeon_winsys.h
+++ b/src/gallium/winsys/radeon/drm/radeon_winsys.h
@@ -198,6 +198,7 @@ struct radeon_info {
     uint32_t                    gart_size;
     uint32_t                    vram_size;
     uint32_t                    max_sclk;
+    uint32_t                    max_compute_units;
 
     uint32_t                    drm_major; /* version */
     uint32_t                    drm_minor;




More information about the mesa-commit mailing list