diff options
author | Tom Stellard <[email protected]> | 2013-03-07 10:51:25 -0500 |
---|---|---|
committer | Tom Stellard <[email protected]> | 2013-04-05 18:43:34 -0400 |
commit | c5e5b3401c52f83bd885497cb30125e78a21d666 (patch) | |
tree | 895fceb4d43d1d6d8e9427907bc081007a86d9fa /src/gallium/drivers/r600/r600_pipe.c | |
parent | 1a868acbecdd7b7cb71342a75a36ad9a80d8eb17 (diff) |
gallium: PIPE_COMPUTE_CAP_IR_TARGET - allow drivers to specify a processor v2
This target string now contains four values instead of three. The old
processor field (which was really being interpreted as arch) has been split
into two fields: processor and arch. This allows drivers to pass a
more a more detailed description of the hardware to compiler frontends.
v2:
- Adapt to libclc changes
Reviewed-by: Francisco Jerez <[email protected]>
Diffstat (limited to 'src/gallium/drivers/r600/r600_pipe.c')
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.c | 74 |
1 files changed, 70 insertions, 4 deletions
diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index 1e4c9642a0d..7f308f7d001 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -764,18 +764,84 @@ static int r600_get_video_param(struct pipe_screen *screen, } } +const char * r600_llvm_gpu_string(enum radeon_family family) +{ + const char * gpu_family; + + switch (family) { + case CHIP_R600: + case CHIP_RV610: + case CHIP_RV630: + case CHIP_RV620: + case CHIP_RV635: + case CHIP_RV670: + case CHIP_RS780: + case CHIP_RS880: + gpu_family = "r600"; + break; + case CHIP_RV710: + gpu_family = "rv710"; + break; + case CHIP_RV730: + gpu_family = "rv730"; + break; + case CHIP_RV740: + case CHIP_RV770: + gpu_family = "rv770"; + break; + case CHIP_PALM: + case CHIP_CEDAR: + gpu_family = "cedar"; + break; + case CHIP_SUMO: + case CHIP_SUMO2: + case CHIP_REDWOOD: + gpu_family = "redwood"; + break; + case CHIP_JUNIPER: + gpu_family = "juniper"; + break; + case CHIP_HEMLOCK: + case CHIP_CYPRESS: + gpu_family = "cypress"; + break; + case CHIP_BARTS: + gpu_family = "barts"; + break; + case CHIP_TURKS: + gpu_family = "turks"; + break; + case CHIP_CAICOS: + gpu_family = "caicos"; + break; + case CHIP_CAYMAN: + case CHIP_ARUBA: + gpu_family = "cayman"; + break; + default: + gpu_family = ""; + fprintf(stderr, "Chip not supported by r600 llvm " + "backend, please file a bug at " PACKAGE_BUGREPORT "\n"); + break; + } + return gpu_family; +} + + static int r600_get_compute_param(struct pipe_screen *screen, enum pipe_compute_cap param, void *ret) { + struct r600_screen *rscreen = (struct r600_screen *)screen; //TODO: select these params by asic switch (param) { - case PIPE_COMPUTE_CAP_IR_TARGET: + case PIPE_COMPUTE_CAP_IR_TARGET: { + const char *gpu = r600_llvm_gpu_string(rscreen->family); if (ret) { - strcpy(ret, "r600--"); + sprintf(ret, "%s-r600--", gpu); } - return 7 * sizeof(char); - + return (8 + strlen(gpu)) * sizeof(char); + } case PIPE_COMPUTE_CAP_GRID_DIMENSION: if (ret) { uint64_t * grid_dimension = ret; |