The data has been extracted from: AMD Accelerated Parallel Processing OpenCL Programming Guide (rev 2.7) Appendix D: Device Parameters --- src/gallium/drivers/radeon/r600_pipe_common.c | 90 +++++++++++++++++++++++++++ 1 file changed, 90 insertions(+)
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c index 70c4d1a..c4abacd 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.c +++ b/src/gallium/drivers/radeon/r600_pipe_common.c @@ -422,6 +422,89 @@ const char *r600_get_llvm_processor_name(enum radeon_family family) } } +static uint32_t radeon_max_compute_units(enum radeon_family family) +{ + switch (family) { + case CHIP_CEDAR: + return 2; + + /* Redwood PRO2: 4 + * Redwood PRO: 5 + * Redwood XT: 5 */ + case CHIP_REDWOOD: + return 4; + + /* Juniper LE: 9 + * Juniper XT: 10 */ + case CHIP_JUNIPER: + return 9; + + /* Cypress LE: 14 + * Cypress PRO: 18 + * Cypress XT: 20 */ + case CHIP_CYPRESS: + return 14; + + case CHIP_HEMLOCK: + return 40; + + /* XXX: is Zacate really equal to Ontario? + * Zacate E-350: 2 + * Zacate E-240: 2 + * Ontario C-50: 2 + * Ontario C-30: 2 */ + case CHIP_PALM: + return 2; + + /* Caicos: 2 + * Seymour LP: 2 + * Seymour PRO: 2 + * Seymour XT: 2 + * Seymour XTX: 2 */ + case CHIP_CAICOS: + return 2; + + /* Turks PRO: 6 + * Turks XT: 6 + * Whistler LP: 6 + * Whistler PRO: 6 + * Whistler XT: 6 */ + case CHIP_TURKS: + return 6; + + /* Barts LE: 10 + * Barts PRO: 12 + * Barts XT: 14 + * Blackcomb PRO: 12 */ + case CHIP_BARTS: + return 10; + + /* Cayman PRO: 22 + * Cayman XT: 24 + * Cayman Gemini: 48 */ + case CHIP_CAYMAN: + return 22; + + /* Verde PRO: 8 + * Verde XT: 10 */ + case CHIP_VERDE: + return 8; + + /* Pitcairn PRO: 16 + * Pitcairn XT: 20 */ + case CHIP_PITCAIRN: + return 16; + + /* Tahiti PRO: 28 + * Tahiti XT: 32 */ + case CHIP_TAHITI: + return 28; + + default: + return 1; + } +} + static int r600_get_compute_param(struct pipe_screen *screen, enum pipe_compute_cap param, void *ret) @@ -519,6 +602,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 = radeon_max_compute_units(rscreen->family); + } + return sizeof(uint32_t); + default: fprintf(stderr, "unknown PIPE_COMPUTE_CAP %d\n", param); return 0; -- 1.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev