diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/r200.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/r200.c | 18 | 
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/r200.c b/drivers/gpu/drm/radeon/r200.c index d2408c395619..f24058300413 100644 --- a/drivers/gpu/drm/radeon/r200.c +++ b/drivers/gpu/drm/radeon/r200.c @@ -184,6 +184,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,  		}  		track->zb.robj = reloc->robj;  		track->zb.offset = idx_value; +		track->zb_dirty = true;  		ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);  		break;  	case RADEON_RB3D_COLOROFFSET: @@ -196,6 +197,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,  		}  		track->cb[0].robj = reloc->robj;  		track->cb[0].offset = idx_value; +		track->cb_dirty = true;  		ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);  		break;  	case R200_PP_TXOFFSET_0: @@ -214,6 +216,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,  		}  		ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);  		track->textures[i].robj = reloc->robj; +		track->tex_dirty = true;  		break;  	case R200_PP_CUBIC_OFFSET_F1_0:  	case R200_PP_CUBIC_OFFSET_F2_0: @@ -257,9 +260,12 @@ int r200_packet0_check(struct radeon_cs_parser *p,  		track->textures[i].cube_info[face - 1].offset = idx_value;  		ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);  		track->textures[i].cube_info[face - 1].robj = reloc->robj; +		track->tex_dirty = true;  		break;  	case RADEON_RE_WIDTH_HEIGHT:  		track->maxy = ((idx_value >> 16) & 0x7FF); +		track->cb_dirty = true; +		track->zb_dirty = true;  		break;  	case RADEON_RB3D_COLORPITCH:  		r = r100_cs_packet_next_reloc(p, &reloc); @@ -280,9 +286,11 @@ int r200_packet0_check(struct radeon_cs_parser *p,  		ib[idx] = tmp;  		track->cb[0].pitch = idx_value & RADEON_COLORPITCH_MASK; +		track->cb_dirty = true;  		break;  	case RADEON_RB3D_DEPTHPITCH:  		track->zb.pitch = idx_value & RADEON_DEPTHPITCH_MASK; +		track->zb_dirty = true;  		break;  	case RADEON_RB3D_CNTL:  		switch ((idx_value >> RADEON_RB3D_COLOR_FORMAT_SHIFT) & 0x1f) { @@ -312,6 +320,8 @@ int r200_packet0_check(struct radeon_cs_parser *p,  		}  		track->z_enabled = !!(idx_value & RADEON_Z_ENABLE); +		track->cb_dirty = true; +		track->zb_dirty = true;  		break;  	case RADEON_RB3D_ZSTENCILCNTL:  		switch (idx_value & 0xf) { @@ -329,6 +339,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,  		default:  			break;  		} +		track->zb_dirty = true;  		break;  	case RADEON_RB3D_ZPASS_ADDR:  		r = r100_cs_packet_next_reloc(p, &reloc); @@ -345,6 +356,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,  			uint32_t temp = idx_value >> 4;  			for (i = 0; i < track->num_texture; i++)  				track->textures[i].enabled = !!(temp & (1 << i)); +			track->tex_dirty = true;  		}  		break;  	case RADEON_SE_VF_CNTL: @@ -369,6 +381,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,  		i = (reg - R200_PP_TXSIZE_0) / 32;  		track->textures[i].width = (idx_value & RADEON_TEX_USIZE_MASK) + 1;  		track->textures[i].height = ((idx_value & RADEON_TEX_VSIZE_MASK) >> RADEON_TEX_VSIZE_SHIFT) + 1; +		track->tex_dirty = true;  		break;  	case R200_PP_TXPITCH_0:  	case R200_PP_TXPITCH_1: @@ -378,6 +391,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,  	case R200_PP_TXPITCH_5:  		i = (reg - R200_PP_TXPITCH_0) / 32;  		track->textures[i].pitch = idx_value + 32; +		track->tex_dirty = true;  		break;  	case R200_PP_TXFILTER_0:  	case R200_PP_TXFILTER_1: @@ -394,6 +408,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,  		tmp = (idx_value >> 27) & 0x7;  		if (tmp == 2 || tmp == 6)  			track->textures[i].roundup_h = false; +		track->tex_dirty = true;  		break;  	case R200_PP_TXMULTI_CTL_0:  	case R200_PP_TXMULTI_CTL_1: @@ -432,6 +447,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,  			track->textures[i].tex_coord_type = 1;  			break;  		} +		track->tex_dirty = true;  		break;  	case R200_PP_TXFORMAT_0:  	case R200_PP_TXFORMAT_1: @@ -488,6 +504,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,  		}  		track->textures[i].cube_info[4].width = 1 << ((idx_value >> 16) & 0xf);  		track->textures[i].cube_info[4].height = 1 << ((idx_value >> 20) & 0xf); +		track->tex_dirty = true;  		break;  	case R200_PP_CUBIC_FACES_0:  	case R200_PP_CUBIC_FACES_1: @@ -501,6 +518,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,  			track->textures[i].cube_info[face].width = 1 << ((tmp >> (face * 8)) & 0xf);  			track->textures[i].cube_info[face].height = 1 << ((tmp >> ((face * 8) + 4)) & 0xf);  		} +		track->tex_dirty = true;  		break;  	default:  		printk(KERN_ERR "Forbidden register 0x%04X in cs at %d\n",  | 
