Add R200 XV support, and make R100 (hopefully) use linear filtering instead
of nearest. Also, use RadeonSwitchTo3D instead of doing the WAIT_UNTIL
    ourselves.
			
			
This commit is contained in:
		
							parent
							
								
									7775506534
								
							
						
					
					
						commit
						fc43c15494
					
				|  | @ -300,8 +300,7 @@ RadeonDisplayVideo(KdScreenInfo *screen, ATIPortPrivPtr pPortPriv) | ||||||
| 	BoxPtr pBox = REGION_RECTS(&pPortPriv->clip); | 	BoxPtr pBox = REGION_RECTS(&pPortPriv->clip); | ||||||
| 	int nBox = REGION_NUM_RECTS(&pPortPriv->clip); | 	int nBox = REGION_NUM_RECTS(&pPortPriv->clip); | ||||||
| 
 | 
 | ||||||
| 	switch (pPixmap->drawable.bitsPerPixel) | 	switch (pPixmap->drawable.bitsPerPixel) { | ||||||
| 	{ |  | ||||||
| 	case 16: | 	case 16: | ||||||
| 		if (pPixmap->drawable.depth == 15) | 		if (pPixmap->drawable.depth == 15) | ||||||
| 			dst_format = RADEON_COLOR_FORMAT_ARGB1555; | 			dst_format = RADEON_COLOR_FORMAT_ARGB1555; | ||||||
|  | @ -329,6 +328,7 @@ RadeonDisplayVideo(KdScreenInfo *screen, ATIPortPrivPtr pPortPriv) | ||||||
| 	dstyoff = 0; | 	dstyoff = 0; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | 	/* Same for R100/R200 */ | ||||||
| 	if (pPortPriv->id == FOURCC_UYVY) | 	if (pPortPriv->id == FOURCC_UYVY) | ||||||
| 		txformat = RADEON_TXFORMAT_YVYU422; | 		txformat = RADEON_TXFORMAT_YVYU422; | ||||||
| 	else | 	else | ||||||
|  | @ -336,30 +336,9 @@ RadeonDisplayVideo(KdScreenInfo *screen, ATIPortPrivPtr pPortPriv) | ||||||
| 
 | 
 | ||||||
| 	txformat |= RADEON_TXFORMAT_NON_POWER2; | 	txformat |= RADEON_TXFORMAT_NON_POWER2; | ||||||
| 
 | 
 | ||||||
| 	/* RADEON_REG_PP_TXFILTER_0,
 | 	RadeonSwitchTo3D(atis); | ||||||
| 	 * RADEON_REG_PP_TXFORMAT_0, |  | ||||||
| 	 * RADEON_REG_PP_TXOFFSET_0 |  | ||||||
| 	 */ |  | ||||||
| 	BEGIN_DMA(4); |  | ||||||
| 	OUT_RING(DMA_PACKET0(RADEON_REG_PP_TXFILTER_0, 3)); |  | ||||||
| 	OUT_RING(RADEON_YUV_TO_RGB); |  | ||||||
| 	OUT_RING(txformat); |  | ||||||
| 	OUT_RING(pPortPriv->src_offset); |  | ||||||
| 	END_DMA(); |  | ||||||
| 
 | 
 | ||||||
| 	/* RADEON_REG_PP_TEX_SIZE_0,
 | 	BEGIN_DMA(8); | ||||||
| 	 * RADEON_REG_PP_TEX_PITCH_0 |  | ||||||
| 	 */ |  | ||||||
| 	BEGIN_DMA(3); |  | ||||||
| 	OUT_RING(DMA_PACKET0(RADEON_REG_PP_TEX_SIZE_0, 2)); |  | ||||||
| 	OUT_RING((pPixmap->drawable.width - 1) | |  | ||||||
| 	    ((pPixmap->drawable.height - 1) << RADEON_TEX_VSIZE_SHIFT)); |  | ||||||
| 	OUT_RING(pPortPriv->src_pitch - 32); |  | ||||||
| 	END_DMA(); |  | ||||||
| 
 |  | ||||||
| 	BEGIN_DMA(14); |  | ||||||
| 	OUT_REG(ATI_REG_WAIT_UNTIL, |  | ||||||
| 		RADEON_WAIT_HOST_IDLECLEAN | RADEON_WAIT_2D_IDLECLEAN); |  | ||||||
| 
 | 
 | ||||||
| 	/* RADEON_REG_PP_CNTL,
 | 	/* RADEON_REG_PP_CNTL,
 | ||||||
| 	 * RADEON_REG_RB3D_CNTL,  | 	 * RADEON_REG_RB3D_CNTL,  | ||||||
|  | @ -372,24 +351,94 @@ RadeonDisplayVideo(KdScreenInfo *screen, ATIPortPrivPtr pPortPriv) | ||||||
| 
 | 
 | ||||||
| 	OUT_REG(RADEON_REG_RB3D_COLORPITCH, dst_pitch >> pixel_shift); | 	OUT_REG(RADEON_REG_RB3D_COLORPITCH, dst_pitch >> pixel_shift); | ||||||
| 
 | 
 | ||||||
| 	OUT_REG(RADEON_REG_PP_TXCBLEND_0, |  | ||||||
| 	    RADEON_COLOR_ARG_A_ZERO | |  | ||||||
| 	    RADEON_COLOR_ARG_B_ZERO | |  | ||||||
| 	    RADEON_COLOR_ARG_C_T0_COLOR | |  | ||||||
| 	    RADEON_BLEND_CTL_ADD | |  | ||||||
| 	    RADEON_CLAMP_TX); |  | ||||||
| 	OUT_REG(RADEON_REG_PP_TXABLEND_0, |  | ||||||
| 	    RADEON_ALPHA_ARG_A_ZERO | |  | ||||||
| 	    RADEON_ALPHA_ARG_B_ZERO | |  | ||||||
| 	    RADEON_ALPHA_ARG_C_T0_ALPHA | |  | ||||||
| 	    RADEON_BLEND_CTL_ADD | |  | ||||||
| 	    RADEON_CLAMP_TX); |  | ||||||
| 
 |  | ||||||
| 	OUT_REG(RADEON_REG_RB3D_BLENDCNTL, | 	OUT_REG(RADEON_REG_RB3D_BLENDCNTL, | ||||||
| 	    RADEON_SBLEND_GL_ONE | RADEON_DBLEND_GL_ZERO); | 	    RADEON_SBLEND_GL_ONE | RADEON_DBLEND_GL_ZERO); | ||||||
| 
 | 
 | ||||||
| 	END_DMA(); | 	END_DMA(); | ||||||
| 
 | 
 | ||||||
|  | 	if (atic->is_r200) { | ||||||
|  | 		BEGIN_DMA(17); | ||||||
|  | 
 | ||||||
|  | 		OUT_REG(R200_REG_SE_VTX_FMT_0, R200_VTX_XY); | ||||||
|  | 		OUT_REG(R200_REG_SE_VTX_FMT_1, | ||||||
|  | 		    (2 << R200_VTX_TEX0_COMP_CNT_SHIFT)); | ||||||
|  | 
 | ||||||
|  | 		/* R200_REG_PP_TXFILTER_0,
 | ||||||
|  | 		 * R200_REG_PP_TXFORMAT_0, | ||||||
|  | 		 * R200_REG_PP_TXFORMAT_X_0, | ||||||
|  | 		 * R200_REG_PP_TXSIZE_0, | ||||||
|  | 		 * R200_REG_PP_TXPITCH_0 | ||||||
|  | 		 */ | ||||||
|  | 		OUT_RING(DMA_PACKET0(R200_REG_PP_TXFILTER_0, 5)); | ||||||
|  | 		OUT_RING(R200_MAG_FILTER_LINEAR | | ||||||
|  | 		    R200_MIN_FILTER_LINEAR | | ||||||
|  | 		    R200_YUV_TO_RGB); | ||||||
|  | 		OUT_RING(txformat); | ||||||
|  | 		OUT_RING(0); | ||||||
|  | 		OUT_RING((pPixmap->drawable.width - 1) | | ||||||
|  | 		    ((pPixmap->drawable.height - 1) << RADEON_TEX_VSIZE_SHIFT)); | ||||||
|  | 		OUT_RING(pPortPriv->src_pitch - 32); | ||||||
|  | 
 | ||||||
|  | 		OUT_REG(R200_PP_TXOFFSET_0, pPortPriv->src_offset); | ||||||
|  | 
 | ||||||
|  | 		/* R200_REG_PP_TXCBLEND_0,
 | ||||||
|  | 		 * R200_REG_PP_TXCBLEND2_0 | ||||||
|  | 		 * R200_REG_PP_TXABLEND_0 | ||||||
|  | 		 * R200_REG_PP_TXABLEND2_0 | ||||||
|  | 		 */ | ||||||
|  | 		OUT_RING(DMA_PACKET0(R200_REG_PP_TXCBLEND_0, 4)); | ||||||
|  | 		OUT_RING( | ||||||
|  | 		    R200_TXC_ARG_A_ZERO | | ||||||
|  | 		    R200_TXC_ARG_B_ZERO | | ||||||
|  | 		    R200_TXC_ARG_C_R0_COLOR | | ||||||
|  | 		    R200_TXC_OP_MADD); | ||||||
|  | 		OUT_RING(R200_TXC_CLAMP_0_1 | R200_TXC_OUTPUT_REG_R0); | ||||||
|  | 		OUT_RING( | ||||||
|  | 		    R200_TXA_ARG_A_ZERO | | ||||||
|  | 		    R200_TXA_ARG_B_ZERO | | ||||||
|  | 		    R200_TXA_ARG_C_R0_ALPHA | | ||||||
|  | 		    R200_TXA_OP_MADD); | ||||||
|  | 		OUT_RING(R200_TXA_CLAMP_0_1 | R200_TXA_OUTPUT_REG_R0); | ||||||
|  | 
 | ||||||
|  | 		END_DMA(); | ||||||
|  | 	} else { | ||||||
|  | 		BEGIN_DMA(11); | ||||||
|  | 
 | ||||||
|  | 		/* RADEON_REG_PP_TXFILTER_0,
 | ||||||
|  | 		 * RADEON_REG_PP_TXFORMAT_0, | ||||||
|  | 		 * RADEON_REG_PP_TXOFFSET_0 | ||||||
|  | 		 */ | ||||||
|  | 		OUT_RING(DMA_PACKET0(RADEON_REG_PP_TXFILTER_0, 3)); | ||||||
|  | 		OUT_RING(RADEON_MAG_FILTER_LINEAR | | ||||||
|  | 		    RADEON_MIN_FILTER_LINEAR | | ||||||
|  | 		    RADEON_YUV_TO_RGB); | ||||||
|  | 		OUT_RING(txformat); | ||||||
|  | 		OUT_RING(pPortPriv->src_offset); | ||||||
|  | 
 | ||||||
|  | 		/* RADEON_REG_PP_TEX_SIZE_0,
 | ||||||
|  | 		 * RADEON_REG_PP_TEX_PITCH_0 | ||||||
|  | 		 */ | ||||||
|  | 		OUT_RING(DMA_PACKET0(RADEON_REG_PP_TEX_SIZE_0, 2)); | ||||||
|  | 		OUT_RING((pPixmap->drawable.width - 1) | | ||||||
|  | 		    ((pPixmap->drawable.height - 1) << RADEON_TEX_VSIZE_SHIFT)); | ||||||
|  | 		OUT_RING(pPortPriv->src_pitch - 32); | ||||||
|  | 
 | ||||||
|  | 		OUT_REG(RADEON_REG_PP_TXCBLEND_0, | ||||||
|  | 		    RADEON_COLOR_ARG_A_ZERO | | ||||||
|  | 		    RADEON_COLOR_ARG_B_ZERO | | ||||||
|  | 		    RADEON_COLOR_ARG_C_T0_COLOR | | ||||||
|  | 		    RADEON_BLEND_CTL_ADD | | ||||||
|  | 		    RADEON_CLAMP_TX); | ||||||
|  | 		OUT_REG(RADEON_REG_PP_TXABLEND_0, | ||||||
|  | 		    RADEON_ALPHA_ARG_A_ZERO | | ||||||
|  | 		    RADEON_ALPHA_ARG_B_ZERO | | ||||||
|  | 		    RADEON_ALPHA_ARG_C_T0_ALPHA | | ||||||
|  | 		    RADEON_BLEND_CTL_ADD | | ||||||
|  | 		    RADEON_CLAMP_TX); | ||||||
|  | 
 | ||||||
|  | 		END_DMA(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	while (nBox--) { | 	while (nBox--) { | ||||||
| 		float srcX, srcY, dstX, dstY, srcw, srch, dstw, dsth; | 		float srcX, srcY, dstX, dstY, srcw, srch, dstw, dsth; | ||||||
| 
 | 
 | ||||||
|  | @ -896,7 +945,7 @@ Bool ATIInitVideo(ScreenPtr pScreen) | ||||||
| 
 | 
 | ||||||
| 	if (atic->reg_base == NULL) | 	if (atic->reg_base == NULL) | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 	if (atic->is_r200 || atic->is_r300) | 	if (atic->is_r300) | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 
 | 
 | ||||||
| 	num_adaptors = KdXVListGenericAdaptors(screen, &adaptors); | 	num_adaptors = KdXVListGenericAdaptors(screen, &adaptors); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue