caps->num_vert_fpus = 0;
caps->hiz_ram = 0;
caps->zmask_ram = 0;
+ caps->has_cmask = FALSE;
switch (caps->family) {
case CHIP_R350:
caps->high_second_pipe = TRUE;
caps->num_vert_fpus = 4;
+ caps->has_cmask = TRUE; /* guessed because there is also HiZ */
caps->hiz_ram = R300_HIZ_LIMIT;
caps->zmask_ram = PIPE_ZMASK_SIZE;
break;
case CHIP_RV380:
caps->high_second_pipe = TRUE;
caps->num_vert_fpus = 2;
+ caps->has_cmask = TRUE; /* guessed because there is also HiZ */
caps->hiz_ram = R300_HIZ_LIMIT;
caps->zmask_ram = RV3xx_ZMASK_SIZE;
break;
case CHIP_R481:
case CHIP_RV410:
caps->num_vert_fpus = 6;
+ caps->has_cmask = TRUE; /* guessed because there is also HiZ */
caps->hiz_ram = R300_HIZ_LIMIT;
caps->zmask_ram = PIPE_ZMASK_SIZE;
break;
case CHIP_R520:
caps->num_vert_fpus = 8;
+ caps->has_cmask = TRUE;
caps->hiz_ram = R300_HIZ_LIMIT;
caps->zmask_ram = PIPE_ZMASK_SIZE;
break;
case CHIP_RV515:
caps->num_vert_fpus = 2;
+ caps->has_cmask = TRUE;
caps->hiz_ram = R300_HIZ_LIMIT;
caps->zmask_ram = PIPE_ZMASK_SIZE;
break;
case CHIP_RV530:
caps->num_vert_fpus = 5;
+ caps->has_cmask = TRUE;
caps->hiz_ram = RV530_HIZ_LIMIT;
caps->zmask_ram = PIPE_ZMASK_SIZE;
break;
case CHIP_RV560:
case CHIP_RV570:
caps->num_vert_fpus = 8;
+ caps->has_cmask = TRUE;
caps->hiz_ram = RV530_HIZ_LIMIT;
caps->zmask_ram = PIPE_ZMASK_SIZE;
break;
int hiz_ram;
/* Some chipsets have zmask ram per pipe some don't. */
int zmask_ram;
+ /* CMASK is for MSAA colorbuffer compression and fast clear. */
+ boolean has_cmask;
/* Compression mode for ZMASK. */
enum r300_zmask_compression z_compress;
/* Whether or not this is RV350 or newer, including all r400 and r500
if (!drm_2_8_0) {
return FALSE;
}
- /* Only support R500, because I didn't test older chipsets,
- * but MSAA should work there too. */
- if (!is_r500 && !debug_get_bool_option("RADEON_MSAA", FALSE)) {
- return FALSE;
- }
/* No texturing and scanout. */
if (usage & (PIPE_BIND_SAMPLER_VIEW |
PIPE_BIND_DISPLAY_TARGET |
static unsigned cmask_align_y[4] = {16, 16, 16, 32};
unsigned pipes, stride, cmask_num_dw, cmask_max_size;
+ if (!screen->caps.has_cmask) {
+ return;
+ }
+
/* We need an AA colorbuffer, no mipmaps. */
if (tex->b.b.nr_samples <= 1 ||
tex->b.b.last_level > 0 ||