mesa: sort texel fetch/store table by format index

This commit is contained in:
Brian Paul
2010-04-22 10:02:18 -06:00
parent b4a191e351
commit 446062b834
+256 -250
View File
@@ -115,7 +115,7 @@ static void store_null_texel(struct gl_texture_image *texImage,
* XXX this is somewhat temporary.
*/
static struct {
GLuint Name;
gl_format Name;
FetchTexelFuncF Fetch1D;
FetchTexelFuncF Fetch2D;
FetchTexelFuncF Fetch3D;
@@ -124,222 +124,13 @@ static struct {
texfetch_funcs[MESA_FORMAT_COUNT] =
{
{
MESA_FORMAT_SRGB8,
fetch_texel_1d_srgb8,
fetch_texel_2d_srgb8,
fetch_texel_3d_srgb8,
store_texel_srgb8
},
{
MESA_FORMAT_SRGBA8,
fetch_texel_1d_srgba8,
fetch_texel_2d_srgba8,
fetch_texel_3d_srgba8,
store_texel_srgba8
},
{
MESA_FORMAT_SARGB8,
fetch_texel_1d_sargb8,
fetch_texel_2d_sargb8,
fetch_texel_3d_sargb8,
store_texel_sargb8
},
{
MESA_FORMAT_SL8,
fetch_texel_1d_sl8,
fetch_texel_2d_sl8,
fetch_texel_3d_sl8,
store_texel_sl8
},
{
MESA_FORMAT_SLA8,
fetch_texel_1d_sla8,
fetch_texel_2d_sla8,
fetch_texel_3d_sla8,
store_texel_sla8
},
{
MESA_FORMAT_RGB_FXT1,
NULL,
_mesa_fetch_texel_2d_f_rgb_fxt1,
NULL,
NULL
},
{
MESA_FORMAT_RGBA_FXT1,
NULL,
_mesa_fetch_texel_2d_f_rgba_fxt1,
NULL,
NULL
},
{
MESA_FORMAT_RGB_DXT1,
NULL,
_mesa_fetch_texel_2d_f_rgb_dxt1,
NULL,
NULL
},
{
MESA_FORMAT_RGBA_DXT1,
NULL,
_mesa_fetch_texel_2d_f_rgba_dxt1,
NULL,
NULL
},
{
MESA_FORMAT_RGBA_DXT3,
NULL,
_mesa_fetch_texel_2d_f_rgba_dxt3,
NULL,
NULL
},
{
MESA_FORMAT_RGBA_DXT5,
NULL,
_mesa_fetch_texel_2d_f_rgba_dxt5,
NULL,
NULL
},
{
MESA_FORMAT_SRGB_DXT1,
NULL,
_mesa_fetch_texel_2d_f_srgb_dxt1,
NULL,
NULL
},
{
MESA_FORMAT_SRGBA_DXT1,
NULL,
_mesa_fetch_texel_2d_f_srgba_dxt1,
NULL,
NULL
},
{
MESA_FORMAT_SRGBA_DXT3,
NULL,
_mesa_fetch_texel_2d_f_srgba_dxt3,
NULL,
NULL
},
{
MESA_FORMAT_SRGBA_DXT5,
NULL,
_mesa_fetch_texel_2d_f_srgba_dxt5,
NULL,
NULL
},
{
MESA_FORMAT_RGBA_FLOAT32,
fetch_texel_1d_f_rgba_f32,
fetch_texel_2d_f_rgba_f32,
fetch_texel_3d_f_rgba_f32,
store_texel_rgba_f32
},
{
MESA_FORMAT_RGBA_FLOAT16,
fetch_texel_1d_f_rgba_f16,
fetch_texel_2d_f_rgba_f16,
fetch_texel_3d_f_rgba_f16,
store_texel_rgba_f16
},
{
MESA_FORMAT_RGB_FLOAT32,
fetch_texel_1d_f_rgb_f32,
fetch_texel_2d_f_rgb_f32,
fetch_texel_3d_f_rgb_f32,
store_texel_rgb_f32
},
{
MESA_FORMAT_RGB_FLOAT16,
fetch_texel_1d_f_rgb_f16,
fetch_texel_2d_f_rgb_f16,
fetch_texel_3d_f_rgb_f16,
store_texel_rgb_f16
},
{
MESA_FORMAT_ALPHA_FLOAT32,
fetch_texel_1d_f_alpha_f32,
fetch_texel_2d_f_alpha_f32,
fetch_texel_3d_f_alpha_f32,
store_texel_alpha_f32
},
{
MESA_FORMAT_ALPHA_FLOAT16,
fetch_texel_1d_f_alpha_f16,
fetch_texel_2d_f_alpha_f16,
fetch_texel_3d_f_alpha_f16,
store_texel_alpha_f16
},
{
MESA_FORMAT_LUMINANCE_FLOAT32,
fetch_texel_1d_f_luminance_f32,
fetch_texel_2d_f_luminance_f32,
fetch_texel_3d_f_luminance_f32,
store_texel_luminance_f32
},
{
MESA_FORMAT_LUMINANCE_FLOAT16,
fetch_texel_1d_f_luminance_f16,
fetch_texel_2d_f_luminance_f16,
fetch_texel_3d_f_luminance_f16,
store_texel_luminance_f16
},
{
MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32,
fetch_texel_1d_f_luminance_alpha_f32,
fetch_texel_2d_f_luminance_alpha_f32,
fetch_texel_3d_f_luminance_alpha_f32,
store_texel_luminance_alpha_f32
},
{
MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
fetch_texel_1d_f_luminance_alpha_f16,
fetch_texel_2d_f_luminance_alpha_f16,
fetch_texel_3d_f_luminance_alpha_f16,
store_texel_luminance_alpha_f16
},
{
MESA_FORMAT_INTENSITY_FLOAT32,
fetch_texel_1d_f_intensity_f32,
fetch_texel_2d_f_intensity_f32,
fetch_texel_3d_f_intensity_f32,
store_texel_intensity_f32
},
{
MESA_FORMAT_INTENSITY_FLOAT16,
fetch_texel_1d_f_intensity_f16,
fetch_texel_2d_f_intensity_f16,
fetch_texel_3d_f_intensity_f16,
store_texel_intensity_f16
},
{
MESA_FORMAT_DUDV8,
fetch_texel_1d_dudv8,
fetch_texel_2d_dudv8,
fetch_texel_3d_dudv8,
NULL
},
{
MESA_FORMAT_SIGNED_RGBA8888,
fetch_texel_1d_signed_rgba8888,
fetch_texel_2d_signed_rgba8888,
fetch_texel_3d_signed_rgba8888,
store_texel_signed_rgba8888
},
{
MESA_FORMAT_SIGNED_RGBA8888_REV,
fetch_texel_1d_signed_rgba8888_rev,
fetch_texel_2d_signed_rgba8888_rev,
fetch_texel_3d_signed_rgba8888_rev,
store_texel_signed_rgba8888_rev
},
{
MESA_FORMAT_SIGNED_RGBA_16,
NULL, /* XXX to do */
NULL,
NULL,
NULL
MESA_FORMAT_NONE,
fetch_null_texelf,
fetch_null_texelf,
fetch_null_texelf,
store_null_texel
},
{
MESA_FORMAT_RGBA8888,
fetch_texel_1d_f_rgba8888,
@@ -563,56 +354,271 @@ texfetch_funcs[MESA_FORMAT_COUNT] =
fetch_texel_2d_f_z32,
fetch_texel_3d_f_z32,
store_texel_z32
}
},
{
MESA_FORMAT_S8,
NULL,
NULL,
NULL,
NULL
},
{
MESA_FORMAT_SRGB8,
fetch_texel_1d_srgb8,
fetch_texel_2d_srgb8,
fetch_texel_3d_srgb8,
store_texel_srgb8
},
{
MESA_FORMAT_SRGBA8,
fetch_texel_1d_srgba8,
fetch_texel_2d_srgba8,
fetch_texel_3d_srgba8,
store_texel_srgba8
},
{
MESA_FORMAT_SARGB8,
fetch_texel_1d_sargb8,
fetch_texel_2d_sargb8,
fetch_texel_3d_sargb8,
store_texel_sargb8
},
{
MESA_FORMAT_SL8,
fetch_texel_1d_sl8,
fetch_texel_2d_sl8,
fetch_texel_3d_sl8,
store_texel_sl8
},
{
MESA_FORMAT_SLA8,
fetch_texel_1d_sla8,
fetch_texel_2d_sla8,
fetch_texel_3d_sla8,
store_texel_sla8
},
{
MESA_FORMAT_SRGB_DXT1,
NULL,
_mesa_fetch_texel_2d_f_srgb_dxt1,
NULL,
NULL
},
{
MESA_FORMAT_SRGBA_DXT1,
NULL,
_mesa_fetch_texel_2d_f_srgba_dxt1,
NULL,
NULL
},
{
MESA_FORMAT_SRGBA_DXT3,
NULL,
_mesa_fetch_texel_2d_f_srgba_dxt3,
NULL,
NULL
},
{
MESA_FORMAT_SRGBA_DXT5,
NULL,
_mesa_fetch_texel_2d_f_srgba_dxt5,
NULL,
NULL
},
{
MESA_FORMAT_RGB_FXT1,
NULL,
_mesa_fetch_texel_2d_f_rgb_fxt1,
NULL,
NULL
},
{
MESA_FORMAT_RGBA_FXT1,
NULL,
_mesa_fetch_texel_2d_f_rgba_fxt1,
NULL,
NULL
},
{
MESA_FORMAT_RGB_DXT1,
NULL,
_mesa_fetch_texel_2d_f_rgb_dxt1,
NULL,
NULL
},
{
MESA_FORMAT_RGBA_DXT1,
NULL,
_mesa_fetch_texel_2d_f_rgba_dxt1,
NULL,
NULL
},
{
MESA_FORMAT_RGBA_DXT3,
NULL,
_mesa_fetch_texel_2d_f_rgba_dxt3,
NULL,
NULL
},
{
MESA_FORMAT_RGBA_DXT5,
NULL,
_mesa_fetch_texel_2d_f_rgba_dxt5,
NULL,
NULL
},
{
MESA_FORMAT_RGBA_FLOAT32,
fetch_texel_1d_f_rgba_f32,
fetch_texel_2d_f_rgba_f32,
fetch_texel_3d_f_rgba_f32,
store_texel_rgba_f32
},
{
MESA_FORMAT_RGBA_FLOAT16,
fetch_texel_1d_f_rgba_f16,
fetch_texel_2d_f_rgba_f16,
fetch_texel_3d_f_rgba_f16,
store_texel_rgba_f16
},
{
MESA_FORMAT_RGB_FLOAT32,
fetch_texel_1d_f_rgb_f32,
fetch_texel_2d_f_rgb_f32,
fetch_texel_3d_f_rgb_f32,
store_texel_rgb_f32
},
{
MESA_FORMAT_RGB_FLOAT16,
fetch_texel_1d_f_rgb_f16,
fetch_texel_2d_f_rgb_f16,
fetch_texel_3d_f_rgb_f16,
store_texel_rgb_f16
},
{
MESA_FORMAT_ALPHA_FLOAT32,
fetch_texel_1d_f_alpha_f32,
fetch_texel_2d_f_alpha_f32,
fetch_texel_3d_f_alpha_f32,
store_texel_alpha_f32
},
{
MESA_FORMAT_ALPHA_FLOAT16,
fetch_texel_1d_f_alpha_f16,
fetch_texel_2d_f_alpha_f16,
fetch_texel_3d_f_alpha_f16,
store_texel_alpha_f16
},
{
MESA_FORMAT_LUMINANCE_FLOAT32,
fetch_texel_1d_f_luminance_f32,
fetch_texel_2d_f_luminance_f32,
fetch_texel_3d_f_luminance_f32,
store_texel_luminance_f32
},
{
MESA_FORMAT_LUMINANCE_FLOAT16,
fetch_texel_1d_f_luminance_f16,
fetch_texel_2d_f_luminance_f16,
fetch_texel_3d_f_luminance_f16,
store_texel_luminance_f16
},
{
MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32,
fetch_texel_1d_f_luminance_alpha_f32,
fetch_texel_2d_f_luminance_alpha_f32,
fetch_texel_3d_f_luminance_alpha_f32,
store_texel_luminance_alpha_f32
},
{
MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
fetch_texel_1d_f_luminance_alpha_f16,
fetch_texel_2d_f_luminance_alpha_f16,
fetch_texel_3d_f_luminance_alpha_f16,
store_texel_luminance_alpha_f16
},
{
MESA_FORMAT_INTENSITY_FLOAT32,
fetch_texel_1d_f_intensity_f32,
fetch_texel_2d_f_intensity_f32,
fetch_texel_3d_f_intensity_f32,
store_texel_intensity_f32
},
{
MESA_FORMAT_INTENSITY_FLOAT16,
fetch_texel_1d_f_intensity_f16,
fetch_texel_2d_f_intensity_f16,
fetch_texel_3d_f_intensity_f16,
store_texel_intensity_f16
},
{
MESA_FORMAT_DUDV8,
fetch_texel_1d_dudv8,
fetch_texel_2d_dudv8,
fetch_texel_3d_dudv8,
NULL
},
{
MESA_FORMAT_SIGNED_RGBA8888,
fetch_texel_1d_signed_rgba8888,
fetch_texel_2d_signed_rgba8888,
fetch_texel_3d_signed_rgba8888,
store_texel_signed_rgba8888
},
{
MESA_FORMAT_SIGNED_RGBA8888_REV,
fetch_texel_1d_signed_rgba8888_rev,
fetch_texel_2d_signed_rgba8888_rev,
fetch_texel_3d_signed_rgba8888_rev,
store_texel_signed_rgba8888_rev
},
{
MESA_FORMAT_SIGNED_RGBA_16,
NULL, /* XXX to do */
NULL,
NULL,
NULL
},
};
static FetchTexelFuncF
_mesa_get_texel_fetch_func(gl_format format, GLuint dims)
{
FetchTexelFuncF f = NULL;
GLuint i;
/* XXX replace loop with direct table lookup */
for (i = 0; i < MESA_FORMAT_COUNT; i++) {
if (texfetch_funcs[i].Name == format) {
switch (dims) {
case 1:
f = texfetch_funcs[i].Fetch1D;
break;
case 2:
f = texfetch_funcs[i].Fetch2D;
break;
case 3:
f = texfetch_funcs[i].Fetch3D;
break;
}
if (!f)
f = fetch_null_texelf;
return f;
}
#ifdef DEBUG
/* check that the table entries are sorted by format name */
gl_format fmt;
for (fmt = 0; fmt < MESA_FORMAT_COUNT; fmt++) {
assert(texfetch_funcs[fmt].Name == fmt);
}
#endif
assert(Elements(texfetch_funcs) == MESA_FORMAT_COUNT);
assert(format < MESA_FORMAT_COUNT);
switch (dims) {
case 1:
return texfetch_funcs[format].Fetch1D;
case 2:
return texfetch_funcs[format].Fetch2D;
case 3:
return texfetch_funcs[format].Fetch3D;
default:
assert(0 && "bad dims in _mesa_get_texel_fetch_func");
return NULL;
}
return NULL;
}
StoreTexelFunc
_mesa_get_texel_store_func(gl_format format)
{
GLuint i;
/* XXX replace loop with direct table lookup */
for (i = 0; i < MESA_FORMAT_COUNT; i++) {
if (texfetch_funcs[i].Name == format) {
if (texfetch_funcs[i].StoreTexel)
return texfetch_funcs[i].StoreTexel;
else
return store_null_texel;
}
}
return NULL;
assert(format < MESA_FORMAT_COUNT);
return texfetch_funcs[format].StoreTexel;
}
/**
* Adaptor for fetching a GLchan texel from a float-valued texture.
*/