mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 13:48:06 +02:00
Incorporate latest data from Wladimir van der Laan.
This commit is contained in:
parent
d2001bd88f
commit
2821b05a0f
2 changed files with 58 additions and 24 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue