mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 11:30:21 +01:00
use new texture conversion code, still have to do image rescaling
This commit is contained in:
parent
0299ad7532
commit
935d5e5daa
1 changed files with 43 additions and 71 deletions
|
|
@ -51,6 +51,7 @@
|
|||
#include "fxdrv.h"
|
||||
#include "image.h"
|
||||
#include "teximage.h"
|
||||
#include "texformat.h"
|
||||
#include "texstore.h"
|
||||
#include "texutil.h"
|
||||
|
||||
|
|
@ -1036,7 +1037,7 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
GrTextureFormat_t gldformat;
|
||||
tfxTexInfo *ti;
|
||||
tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
|
||||
MesaIntTexFormat mesaFormat;
|
||||
const struct gl_texture_format *mesaTexFormat;
|
||||
GLint texelSize;
|
||||
GLboolean success;
|
||||
|
||||
|
|
@ -1071,7 +1072,7 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
texImage->Format = GL_INTENSITY;
|
||||
texImage->FetchTexel = fetch_intensity8;
|
||||
texelSize = 1;
|
||||
mesaFormat = MESA_I8;
|
||||
mesaTexFormat = &_mesa_texformat_i8;
|
||||
break;
|
||||
case 1:
|
||||
case GL_LUMINANCE:
|
||||
|
|
@ -1082,7 +1083,7 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
texImage->Format = GL_LUMINANCE;
|
||||
texImage->FetchTexel = fetch_luminance8;
|
||||
texelSize = 1;
|
||||
mesaFormat = MESA_L8;
|
||||
mesaTexFormat = &_mesa_texformat_l8;
|
||||
break;
|
||||
case GL_ALPHA:
|
||||
case GL_ALPHA4:
|
||||
|
|
@ -1092,7 +1093,7 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
texImage->Format = GL_ALPHA;
|
||||
texImage->FetchTexel = fetch_alpha8;
|
||||
texelSize = 1;
|
||||
mesaFormat = MESA_A8;
|
||||
mesaTexFormat = &_mesa_texformat_a8;
|
||||
break;
|
||||
case GL_COLOR_INDEX:
|
||||
case GL_COLOR_INDEX1_EXT:
|
||||
|
|
@ -1104,7 +1105,7 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
texImage->Format = GL_COLOR_INDEX;
|
||||
texImage->FetchTexel = fetch_index8;
|
||||
texelSize = 1;
|
||||
mesaFormat = MESA_C8;
|
||||
mesaTexFormat = &_mesa_texformat_ci8;
|
||||
break;
|
||||
case 2:
|
||||
case GL_LUMINANCE_ALPHA:
|
||||
|
|
@ -1117,7 +1118,7 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
texImage->Format = GL_LUMINANCE_ALPHA;
|
||||
texImage->FetchTexel = fetch_luminance8_alpha8;
|
||||
texelSize = 2;
|
||||
mesaFormat = MESA_A8_L8;
|
||||
mesaTexFormat = &_mesa_texformat_al88;
|
||||
break;
|
||||
case 3:
|
||||
case GL_RGB:
|
||||
|
|
@ -1131,7 +1132,7 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
texImage->Format = GL_RGB;
|
||||
texImage->FetchTexel = fetch_r5g6b5;
|
||||
texelSize = 2;
|
||||
mesaFormat = MESA_R5_G6_B5;
|
||||
mesaTexFormat = &_mesa_texformat_rgb565;
|
||||
break;
|
||||
case 4:
|
||||
case GL_RGBA:
|
||||
|
|
@ -1144,20 +1145,20 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
texImage->Format = GL_RGBA;
|
||||
texImage->FetchTexel = fetch_r4g4b4a4;
|
||||
texelSize = 2;
|
||||
mesaFormat = MESA_A4_R4_G4_B4;
|
||||
mesaTexFormat = &_mesa_texformat_argb4444;
|
||||
break;
|
||||
case GL_RGB5_A1:
|
||||
texImage->Format = GL_RGBA;
|
||||
texImage->FetchTexel = fetch_r5g5b5a1;
|
||||
texelSize = 2;
|
||||
mesaFormat = MESA_A1_R5_G5_B5;
|
||||
mesaTexFormat = &_mesa_texformat_argb1555;
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(NULL, "tdfx driver: texbuildimagemap() bad format");
|
||||
return;
|
||||
}
|
||||
|
||||
_mesa_set_teximage_component_sizes(mesaFormat, texImage);
|
||||
texImage->TexFormat = mesaTexFormat;
|
||||
texImage->Type = 0; /* indicates a driver-specific format */
|
||||
|
||||
/* allocate storage for texture image */
|
||||
|
|
@ -1169,14 +1170,18 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
fxTexInvalidate(ctx, texObj);
|
||||
|
||||
/* store the texture image */
|
||||
/* XXX check for image rescale */
|
||||
if (ctx->_ImageTransferState) {
|
||||
success = GL_FALSE;
|
||||
success = GL_FALSE; /* Can't do image transfer ops here */
|
||||
}
|
||||
else {
|
||||
success = _mesa_convert_teximage(mesaFormat, mml->width, mml->height,
|
||||
texImage->Data, mml->width * texelSize,
|
||||
width, height,
|
||||
format, type, pixels, packing);
|
||||
success = _mesa_convert_texsubimage2d(mesaTexFormat->IntFormat,
|
||||
0, 0, /* xoffset, yoffset */
|
||||
mml->width, mml->height,
|
||||
mml->width, /* destImageWidth */
|
||||
format, type, /* user fmt/type */
|
||||
packing, /* user packing params */
|
||||
pixels, texImage->Data);
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
|
|
@ -1203,11 +1208,14 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
format, type, pixels, packing /* src info */ );
|
||||
|
||||
/* this conversion better work! */
|
||||
success = _mesa_convert_teximage(mesaFormat, mml->width, mml->height,
|
||||
texImage->Data, mml->width * texelSize,
|
||||
width, height,
|
||||
simpleFormat, CHAN_TYPE, tempImage,
|
||||
&_mesa_native_packing);
|
||||
success = _mesa_convert_texsubimage2d(mesaTexFormat->IntFormat,
|
||||
0, 0, /* xoffset, yoffset */
|
||||
mml->width, mml->height,
|
||||
mml->width, /* destImageWidth */
|
||||
simpleFormat, /* source format */
|
||||
CHAN_TYPE, /* source type */
|
||||
&_mesa_native_packing,
|
||||
tempImage, texImage->Data);
|
||||
assert(success);
|
||||
FREE(tempImage);
|
||||
}
|
||||
|
|
@ -1234,10 +1242,8 @@ fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
{
|
||||
fxMesaContext fxMesa = (fxMesaContext) ctx->DriverCtx;
|
||||
tfxTexInfo *ti;
|
||||
GLint texelSize;
|
||||
tfxMipMapLevel *mml;
|
||||
GLboolean success;
|
||||
MesaIntTexFormat mesaFormat;
|
||||
|
||||
if (!texObj->DriverData) {
|
||||
_mesa_problem(ctx, "problem in fxDDTexSubImage2D");
|
||||
|
|
@ -1250,52 +1256,19 @@ fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
assert(mml);
|
||||
|
||||
assert(texImage->Data); /* must have an existing texture image! */
|
||||
assert(texImage->Format);
|
||||
|
||||
switch (mml->glideFormat) {
|
||||
case GR_TEXFMT_INTENSITY_8:
|
||||
texelSize = 1;
|
||||
mesaFormat = MESA_I8;
|
||||
break;
|
||||
case GR_TEXFMT_ALPHA_8:
|
||||
texelSize = 1;
|
||||
mesaFormat = MESA_A8;
|
||||
break;
|
||||
case GR_TEXFMT_P_8:
|
||||
texelSize = 1;
|
||||
mesaFormat = MESA_C8;
|
||||
break;
|
||||
case GR_TEXFMT_ALPHA_INTENSITY_88:
|
||||
texelSize = 2;
|
||||
mesaFormat = MESA_A8_L8;
|
||||
break;
|
||||
case GR_TEXFMT_RGB_565:
|
||||
texelSize = 2;
|
||||
mesaFormat = MESA_R5_G6_B5;
|
||||
break;
|
||||
case GR_TEXFMT_ARGB_4444:
|
||||
texelSize = 2;
|
||||
mesaFormat = MESA_A4_R4_G4_B4;
|
||||
break;
|
||||
case GR_TEXFMT_ARGB_1555:
|
||||
texelSize = 2;
|
||||
mesaFormat = MESA_A1_R5_G5_B5;
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(NULL, "tdfx driver: fxTexBuildSubImageMap() bad format");
|
||||
return;
|
||||
}
|
||||
|
||||
/* XXX check for image rescale */
|
||||
if (ctx->_ImageTransferState) {
|
||||
success = GL_FALSE;
|
||||
}
|
||||
else {
|
||||
success = _mesa_convert_texsubimage(mesaFormat, xoffset, yoffset,
|
||||
mml->width, mml->height,
|
||||
texImage->Data,
|
||||
mml->width * texelSize,
|
||||
width, height,
|
||||
texImage->Width, texImage->Height,
|
||||
format, type, pixels, packing);
|
||||
success = _mesa_convert_texsubimage2d(texImage->TexFormat->IntFormat,
|
||||
xoffset, yoffset,
|
||||
width, height,
|
||||
mml->width,
|
||||
format, type, packing,
|
||||
pixels, texImage->Data);
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
|
|
@ -1324,14 +1297,13 @@ fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
format, type, pixels, packing /* src info */ );
|
||||
|
||||
/* this conversion better work! */
|
||||
success = _mesa_convert_texsubimage(mesaFormat, xoffset, yoffset,
|
||||
mml->width, mml->height,
|
||||
texImage->Data, mml->width * texelSize, /* dstRowStride */
|
||||
width * mml->wScale,
|
||||
height * mml->hScale,
|
||||
width, height,
|
||||
simpleFormat, CHAN_TYPE, tempImage,
|
||||
&_mesa_native_packing);
|
||||
success = _mesa_convert_texsubimage2d(texImage->TexFormat->IntFormat,
|
||||
xoffset, yoffset,
|
||||
width, height,
|
||||
mml->width,
|
||||
simpleFormat, CHAN_TYPE,
|
||||
&_mesa_native_packing,
|
||||
tempImage, texImage->Data);
|
||||
assert(success);
|
||||
FREE(tempImage);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue