diff options
| -rw-r--r-- | src/mesa/drivers/dri/r300/r300_reg.h | 52 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r300/r300_state.c | 30 | 
2 files changed, 58 insertions, 24 deletions
| diff --git a/src/mesa/drivers/dri/r300/r300_reg.h b/src/mesa/drivers/dri/r300/r300_reg.h index f728190a58..ca032375bb 100644 --- a/src/mesa/drivers/dri/r300/r300_reg.h +++ b/src/mesa/drivers/dri/r300/r300_reg.h @@ -599,22 +599,32 @@ I am fairly certain that they are correct unless stated otherwise in comments.  #       define R300_TX_SIZE_MASK                 (15 << 26)  #define R300_TX_FORMAT_0                    0x44C0  	/* The interpretation of the format word by Wladimir van der Laan */ -#	define R300_TX_FORMAT_I8		    0x0 -#	define R300_TX_FORMAT_I16		    0x1 -	/* gap */ -#	define R300_TX_FORMAT_I8A8		    0x3 -#	define R300_TX_FORMAT_I16A16		    0x4 -	/* gap */ -#	define R300_TX_FORMAT_R5G5B5		    0x6 -	/* gap */ -#	define R300_TX_FORMAT_A4R4G4B4		    0xA -#	define R300_TX_FORMAT_A1R5G5B5		    0xB -#	define R300_TX_FORMAT_R8G8B8A8		    0xC -#	define R300_TX_FORMAT_R10G10B10A2	    0xD -#	define R300_TX_FORMAT_R16G16B16A16	    0xE +	/* The X, Y, Z and W refer to the layout of the components.  +	   They are given meanings as R, G, B and Alpha by the swizzle  +	   specification */ +#	define R300_TX_FORMAT_X8		    0x0 +#	define R300_TX_FORMAT_X16		    0x1 +#	define R300_TX_FORMAT_Y4X4		    0x2 +#	define R300_TX_FORMAT_Y8X8		    0x3 +#	define R300_TX_FORMAT_Y16X16		    0x4 +#	define R300_TX_FORMAT_Z3Y3X2		    0x5 +#	define R300_TX_FORMAT_Z5Y6X5		    0x6 +#	define R300_TX_FORMAT_Z6Y5X5		    0x7 +#	define R300_TX_FORMAT_Z11Y11X10		    0x8 +#	define R300_TX_FORMAT_Z10Y11X11		    0x9 +#	define R300_TX_FORMAT_W4Z4Y4X4		    0xA +#	define R300_TX_FORMAT_W1Z5Y5X5		    0xB +#	define R300_TX_FORMAT_W8Z8Y8X8		    0xC +#	define R300_TX_FORMAT_W2Z10Y10X10	    0xD +#	define R300_TX_FORMAT_W16Z16Y16X16	    0xE  #	define R300_TX_FORMAT_DXT1	    	    0xF  #	define R300_TX_FORMAT_DXT3	    	    0x10 -#	define R300_TX_FORMAT_DXT5	    	    0x15 +#	define R300_TX_FORMAT_DXT5	    	    0x11 +#	define R300_TX_FORMAT_D3DMFT_CxV8U8	    0x12     /* no swizzle */ +#	define R300_TX_FORMA_A8R8G8B8	    	    0x13     /* no swizzle */ +#	define R300_TX_FORMA_B8G8_B8G8	    	    0x14     /* no swizzle */ +#	define R300_TX_FORMA_G8R8_G8B8	    	    0x15     /* no swizzle */ +						  /* 0x16 - some 16 bit green format.. ?? */  	/* gap */  	/* Floating point formats */  	/* Note - hardware supports both 16 and 32 bit floating point */ @@ -639,11 +649,14 @@ I am fairly certain that they are correct unless stated otherwise in comments.  #	define R300_TX_FORMAT_W		3  #	define R300_TX_FORMAT_ZERO	4  #	define R300_TX_FORMAT_ONE	5 +#	define R300_TX_FORMAT_CUT_Z	6		/* 2.0*Z, everything above 1.0 is set to 0.0 */ +#	define R300_TX_FORMAT_CUT_W	7		/* 2.0*W, everything above 1.0 is set to 0.0 */  #	define R300_TX_FORMAT_B_SHIFT	18  #	define R300_TX_FORMAT_G_SHIFT	15  #	define R300_TX_FORMAT_R_SHIFT	12  #	define R300_TX_FORMAT_A_SHIFT	9 +	/* Convenience macro to take care of layout and swizzling */  #	define R300_EASY_TX_FORMAT(B, G, R, A, FMT)	(\  	  ((R300_TX_FORMAT_##B)<<R300_TX_FORMAT_B_SHIFT) \  	| ((R300_TX_FORMAT_##G)<<R300_TX_FORMAT_G_SHIFT) \ @@ -651,7 +664,16 @@ I am fairly certain that they are correct unless stated otherwise in comments.  	| ((R300_TX_FORMAT_##A)<<R300_TX_FORMAT_A_SHIFT) \  	| (R300_TX_FORMAT_##FMT) \  	  ) -	 +	/* These can be ORed with result of R300_EASY_TX_FORMAT() */ +	/* We don't really know what they do. Take values from a constant color ? */ +#	define R300_TX_FORMAT_CONST_X		(1<<5) +#	define R300_TX_FORMAT_CONST_Y		(2<<5) +#	define R300_TX_FORMAT_CONST_Z		(4<<5) +#	define R300_TX_FORMAT_CONST_W		(8<<5) + +#	define R300_TX_FORMAT_YUV_MODE		0x00800000 +	   +	    #define R300_TX_OFFSET_0                    0x4540  /* BEGIN: Guess from R200 */  #       define R300_TXO_ENDIAN_NO_SWAP           (0 << 0) diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c index e7e8a75c37..6dac835389 100644 --- a/src/mesa/drivers/dri/r300/r300_state.c +++ b/src/mesa/drivers/dri/r300/r300_state.c @@ -827,15 +827,19 @@ static GLuint translate_texture_format(GLcontext *ctx, GLint tex_unit, GLuint fo  	int i=0; /* number of alpha args .. */  	GLuint fmt; +	fprintf(stderr, "_ReallyEnabled=%d EnvMode=%s\n",  +		texUnit->_ReallyEnabled,  +		_mesa_lookup_enum_by_nr(texUnit->EnvMode)); +	  	switch(IntFormat){  		case 4:  		case GL_RGBA:  		case GL_RGBA8: -			fmt=R300_EASY_TX_FORMAT(Z, Y, X, W, R8G8B8A8); +			fmt=R300_EASY_TX_FORMAT(Z, Y, X, W, W8Z8Y8X8);  			break;  		case 3:  		case GL_RGB8: -			fmt=R300_EASY_TX_FORMAT(Z, Y, X, ONE, R8G8B8A8); +			fmt=R300_EASY_TX_FORMAT(Z, Y, X, ONE, W8Z8Y8X8);  			break;  		default:  			return 0; @@ -881,14 +885,14 @@ static GLuint translate_texture_format(GLcontext *ctx, GLint tex_unit, GLuint fo  		/* tested with:  			kfiresaver.kss   			*/ -		return R300_EASY_TX_FORMAT(Y, Z, W, ONE, R8G8B8A8); +		return R300_EASY_TX_FORMAT(Y, Z, W, ONE, W8Z8Y8X8);  		return 0x4b60c;  	case FORMAT_HASH(0, 1, 0x2100, 0, 1, 0x2100, 0x00005547, 4):  		/* tested with:  			kfiresaver.kss  			kfountain.kss  			*/ -		return R300_EASY_TX_FORMAT(Y, Z, W, ONE, R8G8B8A8); +		return R300_EASY_TX_FORMAT(Y, Z, W, ONE, W8Z8Y8X8);  		return 0x51a0c;	  	case FORMAT_HASH(0, 1, 0x2100, 0, 4, 0x1e01, 0x00008847, 3):  		/* tested with @@ -908,7 +912,7 @@ static GLuint translate_texture_format(GLcontext *ctx, GLint tex_unit, GLuint fo  		/* Tested with:  			Quake3demo  			*/ -		return R300_EASY_TX_FORMAT(Y, Z, W, ONE, R8G8B8A8); +		return R300_EASY_TX_FORMAT(Y, Z, W, ONE, W8Z8Y8X8);  		return 0x53a0c;	  	case FORMAT_HASH(0, 1, 0x2100, 0, 1, 0x2100, 0x00007847, GL_RGBA8):  	case FORMAT_HASH(0, 1, 0x2100, 0, 1, 0x2100, 0x00006747, GL_RGBA8): @@ -917,14 +921,14 @@ static GLuint translate_texture_format(GLcontext *ctx, GLint tex_unit, GLuint fo  		/* Tested with:  			Quake3demo  			*/ -		return R300_EASY_TX_FORMAT(Y, Z, W, W, R8G8B8A8); +		return R300_EASY_TX_FORMAT(Y, Z, W, W, W8Z8Y8X8);  		return 0x5360c;	  	case FORMAT_HASH(0, 1, 0x2100, 0, 1, 0x2100, 0x00007747, GL_RGBA8): -		return R300_EASY_TX_FORMAT(Z, Y, X, W, R8G8B8A8) ; +		return R300_EASY_TX_FORMAT(Z, Y, X, W, W8Z8Y8X8) ;  	case  FORMAT_HASH(0, 1, 0x2100, 0, 1, 0x2100, 0x0008845, 0x00008056):  		//return 0;  		fprintf(stderr, "***\n"); -		return R300_EASY_TX_FORMAT(Y, Z, W, W, R8G8B8A8); +		return R300_EASY_TX_FORMAT(Y, Z, W, W, W8Z8Y8X8);  		return 0x53a23;  	} @@ -1004,6 +1008,14 @@ void r300_setup_textures(GLcontext *ctx)  			 	r300->state.texture.unit[i].texobj!=NULL?t->base.tObj->Image[0][0]->IntFormat:3); +			fprintf(stderr, "Format=%s IntFormat=%08x MesaFormat=%08x BaseFormat=%s IsCompressed=%d Target=%s\n", +				_mesa_lookup_enum_by_nr(t->base.tObj->Image[0][0]->Format),  +				t->base.tObj->Image[0][0]->IntFormat,  +				t->base.tObj->Image[0][0]->TexFormat->MesaFormat,  +				_mesa_lookup_enum_by_nr(t->base.tObj->Image[0][0]->TexFormat->BaseFormat), +				t->base.tObj->Image[0][0]->IsCompressed, +				_mesa_lookup_enum_by_nr(t->base.tObj->Target)); +			  			#if 0  			fprintf(stderr, "pitch=%08x filter=%08x format=%08x\n", t->pitch, t->filter, r300->hw.tex.format.cmd[R300_TEX_VALUE_0+i]);  			fprintf(stderr, "unknown1=%08x size=%08x\n", r300->hw.tex.unknown1.cmd[R300_TEX_VALUE_0+i], @@ -1044,7 +1056,7 @@ void r300_setup_textures(GLcontext *ctx)  						}  					//r300->hw.tex.format.cmd[R300_TEX_VALUE_0+i]=known_formats[fmt];  					r300->hw.tex.format.cmd[R300_TEX_VALUE_0+i]= -						R300_EASY_TX_FORMAT(Z, Y, X, W, R8G8B8A8)  | (fmt<<21); +						R300_EASY_TX_FORMAT(Z, Y, X, W, W8Z8Y8X8)  | (fmt<<21);  					//r300->hw.tex.format.cmd[R300_TEX_VALUE_0+i]=0x08a0c | (fmt<<16);  					//r300->hw.tex.format.cmd[R300_TEX_VALUE_0+i]=0x58a00 | (fmt);  					//r300->hw.tex.format.cmd[R300_TEX_VALUE_0+i]=0x53a0c | (fmt<<24); | 
