mesa/swrast: fix GL_TEXTURE_2D_ARRAY texture fetches for dxt formats
As with the previous commit. This fixes the last crash in the piglit copyteximage test but there's still some failures.
This commit is contained in:
parent
d78b44c265
commit
4fec5e9154
|
@ -494,16 +494,16 @@ _mesa_decompress_image(gl_format format, GLuint width, GLuint height,
|
|||
switch (format) {
|
||||
/* DXT formats */
|
||||
case MESA_FORMAT_RGB_DXT1:
|
||||
fetch = _mesa_fetch_texel_2d_f_rgb_dxt1;
|
||||
fetch = _mesa_fetch_texel_rgb_dxt1;
|
||||
break;
|
||||
case MESA_FORMAT_RGBA_DXT1:
|
||||
fetch = _mesa_fetch_texel_2d_f_rgba_dxt1;
|
||||
fetch = _mesa_fetch_texel_rgba_dxt1;
|
||||
break;
|
||||
case MESA_FORMAT_RGBA_DXT3:
|
||||
fetch = _mesa_fetch_texel_2d_f_rgba_dxt3;
|
||||
fetch = _mesa_fetch_texel_rgba_dxt3;
|
||||
break;
|
||||
case MESA_FORMAT_RGBA_DXT5:
|
||||
fetch = _mesa_fetch_texel_2d_f_rgba_dxt5;
|
||||
fetch = _mesa_fetch_texel_rgba_dxt5;
|
||||
break;
|
||||
|
||||
/* FXT1 formats */
|
||||
|
|
|
@ -368,13 +368,14 @@ _mesa_texstore_rgba_dxt5(TEXSTORE_PARAMS)
|
|||
|
||||
|
||||
static void
|
||||
fetch_texel_2d_rgb_dxt1( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLubyte *texel )
|
||||
fetch_texel_2d_rgb_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLubyte *texel)
|
||||
{
|
||||
(void) k;
|
||||
if (fetch_ext_rgb_dxt1) {
|
||||
GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
|
||||
fetch_ext_rgb_dxt1(texImage->RowStride,
|
||||
texImage->Map, i, j, texel);
|
||||
texImage->Map + sliceOffset, i, j, texel);
|
||||
}
|
||||
else
|
||||
_mesa_debug(NULL, "attempted to decode s3tc texture without library available: fetch_texel_2d_rgb_dxt1");
|
||||
|
@ -382,8 +383,8 @@ fetch_texel_2d_rgb_dxt1( const struct swrast_texture_image *texImage,
|
|||
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_rgb_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
_mesa_fetch_texel_rgb_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLubyte and convert to float here */
|
||||
GLubyte rgba[4];
|
||||
|
@ -396,13 +397,14 @@ _mesa_fetch_texel_2d_f_rgb_dxt1(const struct swrast_texture_image *texImage,
|
|||
|
||||
|
||||
static void
|
||||
fetch_texel_2d_rgba_dxt1( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLubyte *texel )
|
||||
fetch_texel_2d_rgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLubyte *texel)
|
||||
{
|
||||
(void) k;
|
||||
if (fetch_ext_rgba_dxt1) {
|
||||
GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
|
||||
fetch_ext_rgba_dxt1(texImage->RowStride,
|
||||
texImage->Map, i, j, texel);
|
||||
texImage->Map + sliceOffset, i, j, texel);
|
||||
}
|
||||
else
|
||||
_mesa_debug(NULL, "attempted to decode s3tc texture without library available: fetch_texel_2d_rgba_dxt1\n");
|
||||
|
@ -410,8 +412,8 @@ fetch_texel_2d_rgba_dxt1( const struct swrast_texture_image *texImage,
|
|||
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
_mesa_fetch_texel_rgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLubyte and convert to float here */
|
||||
GLubyte rgba[4];
|
||||
|
@ -424,13 +426,14 @@ _mesa_fetch_texel_2d_f_rgba_dxt1(const struct swrast_texture_image *texImage,
|
|||
|
||||
|
||||
static void
|
||||
fetch_texel_2d_rgba_dxt3( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLubyte *texel )
|
||||
fetch_texel_2d_rgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLubyte *texel)
|
||||
{
|
||||
(void) k;
|
||||
if (fetch_ext_rgba_dxt3) {
|
||||
GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
|
||||
fetch_ext_rgba_dxt3(texImage->RowStride,
|
||||
texImage->Map, i, j, texel);
|
||||
texImage->Map + sliceOffset, i, j, texel);
|
||||
}
|
||||
else
|
||||
_mesa_debug(NULL, "attempted to decode s3tc texture without library available: fetch_texel_2d_rgba_dxt3\n");
|
||||
|
@ -438,8 +441,8 @@ fetch_texel_2d_rgba_dxt3( const struct swrast_texture_image *texImage,
|
|||
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
_mesa_fetch_texel_rgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLubyte and convert to float here */
|
||||
GLubyte rgba[4];
|
||||
|
@ -452,13 +455,14 @@ _mesa_fetch_texel_2d_f_rgba_dxt3(const struct swrast_texture_image *texImage,
|
|||
|
||||
|
||||
static void
|
||||
fetch_texel_2d_rgba_dxt5( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLubyte *texel )
|
||||
fetch_texel_2d_rgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLubyte *texel)
|
||||
{
|
||||
(void) k;
|
||||
if (fetch_ext_rgba_dxt5) {
|
||||
GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
|
||||
fetch_ext_rgba_dxt5(texImage->RowStride,
|
||||
texImage->Map, i, j, texel);
|
||||
texImage->Map + sliceOffset, i, j, texel);
|
||||
}
|
||||
else
|
||||
_mesa_debug(NULL, "attempted to decode s3tc texture without library available: fetch_texel_2d_rgba_dxt5\n");
|
||||
|
@ -466,8 +470,8 @@ fetch_texel_2d_rgba_dxt5( const struct swrast_texture_image *texImage,
|
|||
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
_mesa_fetch_texel_rgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLubyte and convert to float here */
|
||||
GLubyte rgba[4];
|
||||
|
@ -480,8 +484,8 @@ _mesa_fetch_texel_2d_f_rgba_dxt5(const struct swrast_texture_image *texImage,
|
|||
|
||||
#if FEATURE_EXT_texture_sRGB
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_srgb_dxt1( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||
_mesa_fetch_texel_srgb_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLubyte and convert to float here */
|
||||
GLubyte rgba[4];
|
||||
|
@ -493,8 +497,8 @@ _mesa_fetch_texel_2d_f_srgb_dxt1( const struct swrast_texture_image *texImage,
|
|||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
_mesa_fetch_texel_srgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLubyte and convert to float here */
|
||||
GLubyte rgba[4];
|
||||
|
@ -506,8 +510,8 @@ _mesa_fetch_texel_2d_f_srgba_dxt1(const struct swrast_texture_image *texImage,
|
|||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
_mesa_fetch_texel_srgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLubyte and convert to float here */
|
||||
GLubyte rgba[4];
|
||||
|
@ -519,8 +523,8 @@ _mesa_fetch_texel_2d_f_srgba_dxt3(const struct swrast_texture_image *texImage,
|
|||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
_mesa_fetch_texel_srgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLubyte and convert to float here */
|
||||
GLubyte rgba[4];
|
||||
|
|
|
@ -48,36 +48,36 @@ extern GLboolean
|
|||
_mesa_texstore_rgba_dxt5(TEXSTORE_PARAMS);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_rgb_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
_mesa_fetch_texel_rgb_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
_mesa_fetch_texel_rgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
_mesa_fetch_texel_rgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
_mesa_fetch_texel_rgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_srgb_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
_mesa_fetch_texel_srgb_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
_mesa_fetch_texel_srgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
_mesa_fetch_texel_srgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
_mesa_fetch_texel_srgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_init_texture_s3tc(struct gl_context *ctx);
|
||||
|
|
|
@ -426,27 +426,27 @@ texfetch_funcs[MESA_FORMAT_COUNT] =
|
|||
},
|
||||
{
|
||||
MESA_FORMAT_SRGB_DXT1,
|
||||
NULL,
|
||||
_mesa_fetch_texel_2d_f_srgb_dxt1,
|
||||
NULL
|
||||
_mesa_fetch_texel_srgb_dxt1,
|
||||
_mesa_fetch_texel_srgb_dxt1,
|
||||
_mesa_fetch_texel_srgb_dxt1
|
||||
},
|
||||
{
|
||||
MESA_FORMAT_SRGBA_DXT1,
|
||||
NULL,
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt1,
|
||||
NULL
|
||||
_mesa_fetch_texel_srgba_dxt1,
|
||||
_mesa_fetch_texel_srgba_dxt1,
|
||||
_mesa_fetch_texel_srgba_dxt1
|
||||
},
|
||||
{
|
||||
MESA_FORMAT_SRGBA_DXT3,
|
||||
NULL,
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt3,
|
||||
NULL
|
||||
_mesa_fetch_texel_srgba_dxt3,
|
||||
_mesa_fetch_texel_srgba_dxt3,
|
||||
_mesa_fetch_texel_srgba_dxt3
|
||||
},
|
||||
{
|
||||
MESA_FORMAT_SRGBA_DXT5,
|
||||
NULL,
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt5,
|
||||
NULL
|
||||
_mesa_fetch_texel_srgba_dxt5,
|
||||
_mesa_fetch_texel_srgba_dxt5,
|
||||
_mesa_fetch_texel_srgba_dxt5
|
||||
},
|
||||
|
||||
{
|
||||
|
@ -463,27 +463,27 @@ texfetch_funcs[MESA_FORMAT_COUNT] =
|
|||
},
|
||||
{
|
||||
MESA_FORMAT_RGB_DXT1,
|
||||
NULL,
|
||||
_mesa_fetch_texel_2d_f_rgb_dxt1,
|
||||
NULL
|
||||
_mesa_fetch_texel_rgb_dxt1,
|
||||
_mesa_fetch_texel_rgb_dxt1,
|
||||
_mesa_fetch_texel_rgb_dxt1
|
||||
},
|
||||
{
|
||||
MESA_FORMAT_RGBA_DXT1,
|
||||
NULL,
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt1,
|
||||
NULL
|
||||
_mesa_fetch_texel_rgba_dxt1,
|
||||
_mesa_fetch_texel_rgba_dxt1,
|
||||
_mesa_fetch_texel_rgba_dxt1
|
||||
},
|
||||
{
|
||||
MESA_FORMAT_RGBA_DXT3,
|
||||
NULL,
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt3,
|
||||
NULL
|
||||
_mesa_fetch_texel_rgba_dxt3,
|
||||
_mesa_fetch_texel_rgba_dxt3,
|
||||
_mesa_fetch_texel_rgba_dxt3
|
||||
},
|
||||
{
|
||||
MESA_FORMAT_RGBA_DXT5,
|
||||
NULL,
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt5,
|
||||
NULL
|
||||
_mesa_fetch_texel_rgba_dxt5,
|
||||
_mesa_fetch_texel_rgba_dxt5,
|
||||
_mesa_fetch_texel_rgba_dxt5
|
||||
},
|
||||
{
|
||||
MESA_FORMAT_RGBA_FLOAT32,
|
||||
|
|
Loading…
Reference in New Issue