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