I don't understand this and I don't think this is the right way to implement hw-accelerated TexImage. Some of the formats are unsupported by all hardware I know, others just don't make any sense (e.g. RGBA5999_REV).
I think the proper way to implement PBO unpacking is to read the PBO as a TBO. If you don't have a PBO, you can always create it. Marek On Fri, Nov 15, 2013 at 12:53 AM, Mark Mueller <markkmuel...@gmail.com> wrote: > This and the subsequent patch are the first steps in adding support to load > textures > via GPU instead of CPU. This patch expands Mesa's gl_formats such that all > GLUser > format/type combinations are represented and thus can be communicated to > lower levels > within dri drivers. The new formats are source only thus they require no > associated > Texstore functions or render targets, therefore they are added _privately_ at > the end > of the gl_formats list. > > Signed-off-by: Mark Mueller <markkmuel...@gmail.com> > --- > src/mesa/main/formats.c | 441 > +++++++++++++++++++++++++++++++++++++++++++++- > src/mesa/main/formats.h | 70 +++++++- > src/mesa/main/texformat.c | 271 ++++++++++++++++++++++++++++ > src/mesa/main/texformat.h | 11 ++ > 4 files changed, 789 insertions(+), 4 deletions(-) > > diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c > index 07d2a72..2c32bba 100644 > --- a/src/mesa/main/formats.c > +++ b/src/mesa/main/formats.c > @@ -76,7 +76,7 @@ struct gl_format_info > * These must be in the same order as the MESA_FORMAT_* enums so that > * we can do lookups without searching. > */ > -static struct gl_format_info format_info[MESA_FORMAT_COUNT] = > +static struct gl_format_info format_info[MESA_PRIVATE_FORMAT_COUNT] = > { > { > MESA_FORMAT_NONE, /* Name */ > @@ -1572,7 +1572,7 @@ static struct gl_format_info > format_info[MESA_FORMAT_COUNT] = > }, > { > MESA_FORMAT_RGB9_E5_FLOAT, > - "MESA_FORMAT_RGB9_E5", > + "MESA_FORMAT_RGB9_E5_FLOAT", > GL_RGB, > GL_FLOAT, > 9, 9, 9, 0, > @@ -1763,6 +1763,440 @@ static struct gl_format_info > format_info[MESA_FORMAT_COUNT] = > 0, 0, 0, 0, 0, > 1, 1, 16 > }, > + > + /* > + * Formats to exactly represent format/type combinations for OGLUser > provided > + * textures. These formats are required only for caching of an unaltered > copy of > + * the application texture prior to passing them to the GPU, where they > are > + * processed to the final internalFormat and miptree location. Texstore > functions > + * do not apply and these are not intended to be used as render targets. > + * Listing is based on the order presented in the glTexImage2D spec. > + */ > + /* Red Solo - !cup */ > + { > + MESA_FORMAT_R32, > + "MESA_FORMAT_R32", > + GL_RED, > + GL_UNSIGNED_NORMALIZED, > + 16, 0, 0, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 2 > + }, > + { > + MESA_FORMAT_SIGNED_R32, > + "MESA_FORMAT_SIGNED_R32", > + GL_RED, > + GL_SIGNED_NORMALIZED, > + 32, 0, 0, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 4 > + }, > + > + /* Red Green - !show */ > + { > + MESA_FORMAT_SIGNED_RG88, > + "MESA_FORMAT_SIGNED_RG88", > + GL_RG, > + GL_SIGNED_NORMALIZED, > + 8, 8, 0, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 2 > + }, > + { > + MESA_FORMAT_SIGNED_RG1616, > + "MESA_FORMAT_SIGNED_RG1616", > + GL_RG, > + GL_SIGNED_NORMALIZED, > + 16, 16, 0, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 4 > + }, > + { > + MESA_FORMAT_RG3232, > + "MESA_FORMAT_RG3232", > + GL_RG, > + GL_UNSIGNED_NORMALIZED, > + 32, 32, 0, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 8 > + }, > + { > + MESA_FORMAT_SIGNED_RG3232, > + "MESA_FORMAT_SIGNED_RG3232", > + GL_RG, > + GL_SIGNED_NORMALIZED, > + 32, 32, 0, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 8 > + }, > + > + /* Red Green Blue */ > + { > + MESA_FORMAT_SIGNED_RGB888, > + "MESA_FORMAT_SIGNED_RGB888", > + GL_RGB, > + GL_SIGNED_NORMALIZED, > + 8, 8, 8, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 3 > + }, > + { > + MESA_FORMAT_RGB161616, > + "MESA_FORMAT_RG161616", > + GL_RGB, > + GL_UNSIGNED_NORMALIZED, > + 16, 16, 16, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 6 > + }, > + { > + MESA_FORMAT_SIGNED_RGB161616, > + "MESA_FORMAT_SIGNED_RGB161616", > + GL_RGB, > + GL_SIGNED_NORMALIZED, > + 16, 16, 16, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 6 > + }, > + { > + MESA_FORMAT_RGB323232, > + "MESA_FORMAT_RGB323232", > + GL_RGB, > + GL_UNSIGNED_NORMALIZED, > + 32, 32, 32, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 12 > + }, > + { > + MESA_FORMAT_SIGNED_RGB323232, > + "MESA_FORMAT_SIGNED_RGB323232", > + GL_RGB, > + GL_SIGNED_NORMALIZED, > + 32, 32, 32, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 12 > + }, > + { > + MESA_FORMAT_RGB233_REV, > + "MESA_FORMAT_RGB233_REV", > + GL_RGB, > + GL_UNSIGNED_NORMALIZED, > + 3, 3, 2, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 1 > + }, > + { > + MESA_FORMAT_RGB101111_REV, > + "MESA_FORMAT_RGB101111_REV", > + GL_RGB, > + GL_UNSIGNED_NORMALIZED, > + 11, 11, 10, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 4 > + }, > + > + /* Blue Green Red */ > + { > + MESA_FORMAT_SIGNED_BGR888, > + "MESA_FORMAT_SIGNED_BGR888", > + GL_RGB, > + GL_SIGNED_NORMALIZED, > + 8, 8, 8, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 3 > + }, > + { > + MESA_FORMAT_BGR161616, > + "MESA_FORMAT_BGR161616", > + GL_RGB, > + GL_UNSIGNED_NORMALIZED, > + 16, 16, 16, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 6 > + }, > + { > + MESA_FORMAT_SIGNED_BGR161616, > + "MESA_FORMAT_SIGNED_BGR161616", > + GL_RGB, > + GL_SIGNED_NORMALIZED, > + 16, 16, 16, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 6 > + }, > + { > + MESA_FORMAT_BGR_FLOAT16, > + "MESA_FORMAT_BGR_FLOAT16", > + GL_RGB, > + GL_FLOAT, > + 16, 16, 16, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 6 > + }, > + { > + MESA_FORMAT_BGR323232, > + "MESA_FORMAT_BGR323232", > + GL_RGB, > + GL_UNSIGNED_NORMALIZED, > + 32, 32, 32, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 12 > + }, > + { > + MESA_FORMAT_SIGNED_BGR323232, > + "MESA_FORMAT_SIGNED_BGR323232", > + GL_RGB, > + GL_SIGNED_NORMALIZED, > + 32, 32, 32, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 12 > + }, > + { > + MESA_FORMAT_BGR_FLOAT32, > + "MESA_FORMAT_BGR_FLOAT32", > + GL_RGB, > + GL_FLOAT, > + 32, 32, 32, 0, > + 0, 0, 0, 0, 0, > + 1, 1, 12 > + }, > + > + /* Red Green Blue Alpha */ > + { > + MESA_FORMAT_RGBA16161616, > + "MESA_FORMAT_RGBA161616", > + GL_RGBA, > + GL_UNSIGNED_NORMALIZED, > + 16, 16, 16, 16, > + 0, 0, 0, 0, 0, > + 1, 1, 8 > + }, > + { > + MESA_FORMAT_SIGNED_RGBA16161616, > + "MESA_FORMAT_SIGNED_RGBA161616", > + GL_RGBA, > + GL_SIGNED_NORMALIZED, > + 16, 16, 16, 16, > + 0, 0, 0, 0, 0, > + 1, 1, 8 > + }, > + { > + MESA_FORMAT_RGBA32323232, > + "MESA_FORMAT_RGBA323232", > + GL_RGBA, > + GL_UNSIGNED_NORMALIZED, > + 32, 32, 32, 32, > + 0, 0, 0, 0, 0, > + 1, 1, 16 > + }, > + { > + MESA_FORMAT_SIGNED_RGBA32323232, > + "MESA_FORMAT_SIGNED_RGBA323232", > + GL_RGBA, > + GL_SIGNED_NORMALIZED, > + 32, 32, 32, 32, > + 0, 0, 0, 0, 0, > + 1, 1, 16 > + }, > + { > + MESA_FORMAT_RGBA1010102, > + "MESA_FORMAT_RGBA1010102", > + GL_RGBA, > + GL_UNSIGNED_NORMALIZED, > + 10, 10, 10, 2, > + 0, 0, 0, 0, 0, > + 1, 1, 4 > + }, > + { > + MESA_FORMAT_RGBA2101010_REV, > + "MESA_FORMAT_RGBA2101010_REV", > + GL_RGBA, > + GL_UNSIGNED_NORMALIZED, > + 10, 10, 10, 2, > + 0, 0, 0, 0, 0, > + 1, 1, 4 > + }, > + { > + MESA_FORMAT_RGBA5999_REV, > + "MESA_FORMAT_RGBA5999_REV", > + GL_RGBA, > + GL_UNSIGNED_NORMALIZED, > + 9, 9, 9, 5, > + 0, 0, 0, 0, 0, > + 1, 1, 4 > + }, > + { > + MESA_FORMAT_RGBA4444, /* Name */ > + "MESA_FORMAT_RGBA4444", /* StrName */ > + GL_RGBA, /* BaseFormat */ > + GL_UNSIGNED_NORMALIZED, /* DataType */ > + 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */ > + 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ > + 1, 1, 2 /* BlockWidth/Height,Bytes */ > + }, > + { > + MESA_FORMAT_RGBA4444_REV, /* Name */ > + "MESA_FORMAT_RGBA4444_REV", /* StrName */ > + GL_RGBA, /* BaseFormat */ > + GL_UNSIGNED_NORMALIZED, /* DataType */ > + 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */ > + 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ > + 1, 1, 2 /* BlockWidth/Height,Bytes */ > + }, > + { > + MESA_FORMAT_RGBA1555_REV, /* Name */ > + "MESA_FORMAT_RGBA1555_REV", /* StrName */ > + GL_RGBA, /* BaseFormat */ > + GL_UNSIGNED_NORMALIZED, /* DataType */ > + 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */ > + 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ > + 1, 1, 2 /* BlockWidth/Height,Bytes */ > + }, > + > + /* Blue Green Red Alpha */ > + { > + MESA_FORMAT_BGRA8888, /* Name */ > + "MESA_FORMAT_BGRA8888", /* StrName */ > + GL_RGBA, /* BaseFormat */ > + GL_UNSIGNED_NORMALIZED, /* DataType */ > + 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */ > + 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ > + 1, 1, 4 /* BlockWidth/Height,Bytes */ > + }, > + { > + MESA_FORMAT_BGRA8888_REV, /* Name */ > + "MESA_FORMAT_BGRA8888", /* StrName */ > + GL_RGBA, /* BaseFormat */ > + GL_UNSIGNED_NORMALIZED, /* DataType */ > + 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */ > + 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ > + 1, 1, 4 /* BlockWidth/Height,Bytes */ > + }, > + { > + MESA_FORMAT_SIGNED_BGRA8888, > + "MESA_FORMAT_SIGNED_BGRA8888", > + GL_RGBA, > + GL_SIGNED_NORMALIZED, > + 8, 8, 8, 8, > + 0, 0, 0, 0, 0, > + 1, 1, 4 > + }, > + { > + MESA_FORMAT_BGRA16161616, > + "MESA_FORMAT_BGRA16161616", > + GL_RGBA, > + GL_UNSIGNED_NORMALIZED, > + 16, 16, 16, 16, > + 0, 0, 0, 0, 0, > + 1, 1, 8 > + }, > + { > + MESA_FORMAT_SIGNED_BGRA16161616, > + "MESA_FORMAT_SIGNED_BGRA16161616", > + GL_RGBA, > + GL_SIGNED_NORMALIZED, > + 16, 16, 16, 16, > + 0, 0, 0, 0, 0, > + 1, 1, 8 > + }, > + { > + MESA_FORMAT_BGRA_FLOAT16, > + "MESA_FORMAT_BGRA_FLOAT16", > + GL_RGBA, > + GL_FLOAT, > + 16, 16, 16, 16, > + 0, 0, 0, 0, 0, > + 1, 1, 8 > + }, > + { > + MESA_FORMAT_BGRA32323232, > + "MESA_FORMAT_BGRA32323232", > + GL_RGBA, > + GL_UNSIGNED_NORMALIZED, > + 32, 32, 32, 32, > + 0, 0, 0, 0, 0, > + 1, 1, 16 > + }, > + { > + MESA_FORMAT_SIGNED_BGRA32323232, > + "MESA_FORMAT_SIGNED_BGRA32323232", > + GL_RGBA, > + GL_SIGNED_NORMALIZED, > + 32, 32, 32, 32, > + 0, 0, 0, 0, 0, > + 1, 1, 16 > + }, > + { > + MESA_FORMAT_BGRA_FLOAT32, > + "MESA_FORMAT_BGRA_FLOAT32", > + GL_RGBA, > + GL_FLOAT, > + 32, 32, 32, 32, > + 0, 0, 0, 0, 0, > + 1, 1, 16 > + }, > + { > + MESA_FORMAT_BGRA4444, /* Name */ > + "MESA_FORMAT_BGRA4444", /* StrName */ > + GL_RGBA, /* BaseFormat */ > + GL_UNSIGNED_NORMALIZED, /* DataType */ > + 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */ > + 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ > + 1, 1, 2 /* BlockWidth/Height,Bytes */ > + }, > + { > + MESA_FORMAT_BGRA4444_REV, /* Name */ > + "MESA_FORMAT_BGRA4444_REV", /* StrName */ > + GL_RGBA, /* BaseFormat */ > + GL_UNSIGNED_NORMALIZED, /* DataType */ > + 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */ > + 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ > + 1, 1, 2 /* BlockWidth/Height,Bytes */ > + }, > + { > + MESA_FORMAT_BGRA5551, /* Name */ > + "MESA_FORMAT_BGRA5551", /* StrName */ > + GL_RGBA, /* BaseFormat */ > + GL_UNSIGNED_NORMALIZED, /* DataType */ > + 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */ > + 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ > + 1, 1, 2 /* BlockWidth/Height,Bytes */ > + }, > + { > + MESA_FORMAT_BGRA1555_REV, /* Name */ > + "MESA_FORMAT_BGRA1555_REV", /* StrName */ > + GL_RGBA, /* BaseFormat */ > + GL_UNSIGNED_NORMALIZED, /* DataType */ > + 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */ > + 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ > + 1, 1, 2 /* BlockWidth/Height,Bytes */ > + }, > + { > + MESA_FORMAT_BGRA1010102, > + "MESA_FORMAT_BGRA1010102", > + GL_RGBA, > + GL_UNSIGNED_NORMALIZED, > + 10, 10, 10, 2, > + 0, 0, 0, 0, 0, > + 1, 1, 4 > + }, > + { > + MESA_FORMAT_BGRA2101010_REV, > + "MESA_FORMAT_BGRA2101010_REV", > + GL_RGBA, > + GL_UNSIGNED_NORMALIZED, > + 10, 10, 10, 2, > + 0, 0, 0, 0, 0, > + 1, 1, 4 > + }, > + { > + MESA_FORMAT_BGRA5999_REV, > + "MESA_FORMAT_BGRA5999_REV", > + GL_RGBA, > + GL_UNSIGNED_NORMALIZED, > + 9, 9, 9, 5, > + 0, 0, 0, 0, 0, > + 1, 1, 4 > + }, > }; > > > @@ -2221,7 +2655,7 @@ _mesa_test_formats(void) > { > GLuint i; > > - STATIC_ASSERT(Elements(format_info) == MESA_FORMAT_COUNT); > + STATIC_ASSERT(Elements(format_info) == MESA_PRIVATE_FORMAT_COUNT); > > for (i = 0; i < MESA_FORMAT_COUNT; i++) { > const struct gl_format_info *info = _mesa_get_format_info(i); > @@ -3361,6 +3795,7 @@ _mesa_format_matches_format_and_type(gl_format > gl_format, > case MESA_FORMAT_XBGR32323232_FLOAT: > case MESA_FORMAT_XBGR32323232_UINT: > case MESA_FORMAT_XBGR32323232_SINT: > + default: > return GL_FALSE; > } > > diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h > index 64b4b9a..687b525 100644 > --- a/src/mesa/main/formats.h > +++ b/src/mesa/main/formats.h > @@ -304,7 +304,75 @@ typedef enum > MESA_FORMAT_XBGR32323232_UINT, /* ... */ > MESA_FORMAT_XBGR32323232_SINT, /* ... */ > > - MESA_FORMAT_COUNT > + MESA_FORMAT_COUNT, > + > + /* > + * Formats to exactly represent format/type combinations for OGLUser > provided > + * textures. These formats are required only for caching of an unaltered > copy of > + * the application texture prior to passing them to the GPU, where they > are > + * processed to the final internalFormat and miptree location. Texstore > functions > + * do not apply and these are not intended to be used as render targets. > + * Listing is based on the order presented in the glTexImage2D spec. > + */ > + /* Red Solo - !cup */ > + MESA_FORMAT_R32 = MESA_FORMAT_COUNT, > + MESA_FORMAT_SIGNED_R32, > + > + /* Red Green - !show */ > + MESA_FORMAT_SIGNED_RG88, > + MESA_FORMAT_SIGNED_RG1616, > + MESA_FORMAT_RG3232, > + MESA_FORMAT_SIGNED_RG3232, > + > + /* Red Green Blue */ > + MESA_FORMAT_SIGNED_RGB888, > + MESA_FORMAT_RGB161616, > + MESA_FORMAT_SIGNED_RGB161616, > + MESA_FORMAT_RGB323232, > + MESA_FORMAT_SIGNED_RGB323232, > + MESA_FORMAT_RGB233_REV, > + MESA_FORMAT_RGB101111_REV, > + > + /* Blue Green Red */ > + MESA_FORMAT_SIGNED_BGR888, > + MESA_FORMAT_BGR161616, > + MESA_FORMAT_SIGNED_BGR161616, > + MESA_FORMAT_BGR_FLOAT16, > + MESA_FORMAT_BGR323232, > + MESA_FORMAT_SIGNED_BGR323232, > + MESA_FORMAT_BGR_FLOAT32, > + > + /* Red Green Blue Alpha */ > + MESA_FORMAT_RGBA16161616, > + MESA_FORMAT_SIGNED_RGBA16161616, > + MESA_FORMAT_RGBA32323232, > + MESA_FORMAT_SIGNED_RGBA32323232, > + MESA_FORMAT_RGBA1010102, > + MESA_FORMAT_RGBA2101010_REV, > + MESA_FORMAT_RGBA5999_REV, > + MESA_FORMAT_RGBA4444, > + MESA_FORMAT_RGBA4444_REV, > + MESA_FORMAT_RGBA1555_REV, > + > + /* Blue Green Red Alpha */ > + MESA_FORMAT_BGRA8888, > + MESA_FORMAT_BGRA8888_REV, > + MESA_FORMAT_SIGNED_BGRA8888, > + MESA_FORMAT_BGRA16161616, > + MESA_FORMAT_SIGNED_BGRA16161616, > + MESA_FORMAT_BGRA_FLOAT16, > + MESA_FORMAT_BGRA32323232, > + MESA_FORMAT_SIGNED_BGRA32323232, > + MESA_FORMAT_BGRA_FLOAT32, > + MESA_FORMAT_BGRA4444, > + MESA_FORMAT_BGRA4444_REV, > + MESA_FORMAT_BGRA5551, > + MESA_FORMAT_BGRA1555_REV, > + MESA_FORMAT_BGRA1010102, > + MESA_FORMAT_BGRA2101010_REV, > + MESA_FORMAT_BGRA5999_REV, > + > + MESA_PRIVATE_FORMAT_COUNT > } gl_format; > > > diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c > index d3aa477..713fdf2 100644 > --- a/src/mesa/main/texformat.c > +++ b/src/mesa/main/texformat.c > @@ -831,3 +831,274 @@ _mesa_tex_target_is_array(GLenum target) > return GL_FALSE; > } > } > + > +/** > + * Choose a texture format that exaclty matches the application texture > + * given the format, and type Format parameters passed to glTexImage(). > + * > + * \param ctx the GL context. > + * \param format incoming image pixel format. > + * \param type incoming image data type. > + * > + * \return a matching gl_format for the given format/type arguments > + * > + */ > +gl_format > +_mesa_choose_cached_tex_format(struct gl_context *ctx, GLenum format, GLenum > type) > +{ > + switch (format) { > + case GL_RED: > + switch (type) { > + case GL_BYTE: > + return MESA_FORMAT_SIGNED_R8; > + case GL_UNSIGNED_BYTE: > + return MESA_FORMAT_R8; > + case GL_SHORT: > + return MESA_FORMAT_SIGNED_R16; > + case GL_UNSIGNED_SHORT: > + return MESA_FORMAT_R16; > + case GL_INT: > + return MESA_FORMAT_SIGNED_R32; > + case GL_UNSIGNED_INT: > + return MESA_FORMAT_R32; > + case GL_FLOAT: > + return MESA_FORMAT_R_FLOAT32; > + case GL_HALF_FLOAT: > + return MESA_FORMAT_R_FLOAT16; > + } > + break; > + > + case GL_RG: > + switch (type) { > + case GL_BYTE: > + return MESA_FORMAT_SIGNED_RG88; > + case GL_UNSIGNED_BYTE: > + return MESA_FORMAT_RG88; > + case GL_SHORT: > + return MESA_FORMAT_SIGNED_RG1616; > + case GL_UNSIGNED_SHORT: > + return MESA_FORMAT_RG1616; > + case GL_INT: > + return MESA_FORMAT_SIGNED_RG3232; > + case GL_UNSIGNED_INT: > + return MESA_FORMAT_RG3232; > + case GL_FLOAT: > + return MESA_FORMAT_RG_FLOAT32; > + case GL_HALF_FLOAT: > + return MESA_FORMAT_RG_FLOAT16; > + } > + break; > + > + case GL_RGB: > + switch (type) { > + case GL_BYTE: > + return MESA_FORMAT_SIGNED_RGB888; > + case GL_UNSIGNED_BYTE: > + return MESA_FORMAT_RGB888; > + case GL_SHORT: > + return MESA_FORMAT_SIGNED_RGB161616; > + case GL_UNSIGNED_SHORT: > + return MESA_FORMAT_RGB161616; > + case GL_INT: > + return MESA_FORMAT_SIGNED_RGB323232; > + case GL_UNSIGNED_INT: > + return MESA_FORMAT_RGB323232; > + case GL_FLOAT: > + return MESA_FORMAT_RGB_FLOAT32; > + case GL_HALF_FLOAT: > + return MESA_FORMAT_RGB_FLOAT16; > + case GL_UNSIGNED_BYTE_3_3_2: > + return MESA_FORMAT_RGB332; > + case GL_UNSIGNED_BYTE_2_3_3_REV: > + return MESA_FORMAT_RGB233_REV; > + case GL_UNSIGNED_SHORT_5_6_5: > + return MESA_FORMAT_RGB565; > + case GL_UNSIGNED_SHORT_5_6_5_REV: > + return MESA_FORMAT_RGB565_REV; > + case GL_UNSIGNED_INT_10F_11F_11F_REV: > + return MESA_FORMAT_RGB101111_REV; > + } > + break; > + > + case GL_BGR: > + switch (type) { > + case GL_BYTE: > + return MESA_FORMAT_SIGNED_BGR888; > + case GL_UNSIGNED_BYTE: > + return MESA_FORMAT_BGR888; > + case GL_SHORT: > + return MESA_FORMAT_SIGNED_BGR161616; > + case GL_UNSIGNED_SHORT: > + return MESA_FORMAT_BGR161616; > + case GL_INT: > + return MESA_FORMAT_SIGNED_BGR323232; > + case GL_UNSIGNED_INT: > + return MESA_FORMAT_BGR323232; > + case GL_FLOAT: > + return MESA_FORMAT_BGR_FLOAT32; > + case GL_HALF_FLOAT: > + return MESA_FORMAT_BGR_FLOAT16; > + } > + break; > + > + case GL_RGBA: > + switch (type) { > + case GL_BYTE: > + return MESA_FORMAT_SIGNED_RGBA8888; > + case GL_UNSIGNED_BYTE: > + return MESA_FORMAT_RGBA8888; > + case GL_SHORT: > + return MESA_FORMAT_SIGNED_RGBA16161616; > + case GL_UNSIGNED_SHORT: > + return MESA_FORMAT_RGBA16161616; > + case GL_INT: > + return MESA_FORMAT_SIGNED_RGBA32323232; > + case GL_UNSIGNED_INT: > + return MESA_FORMAT_RGBA32323232; > + case GL_FLOAT: > + return MESA_FORMAT_RGBA_FLOAT32; > + case GL_HALF_FLOAT: > + return MESA_FORMAT_RGBA_FLOAT16; > + case GL_UNSIGNED_SHORT_4_4_4_4: > + return MESA_FORMAT_RGBA4444; > + case GL_UNSIGNED_SHORT_4_4_4_4_REV: > + return MESA_FORMAT_RGBA4444_REV; > + case GL_UNSIGNED_SHORT_5_5_5_1: > + return MESA_FORMAT_RGBA5551; > + case GL_UNSIGNED_SHORT_1_5_5_5_REV: > + return MESA_FORMAT_RGBA1555_REV; > + case GL_UNSIGNED_INT_8_8_8_8: > + return MESA_FORMAT_RGBA32323232; > + case GL_UNSIGNED_INT_8_8_8_8_REV: > + return MESA_FORMAT_RGBA8888_REV; > + case GL_UNSIGNED_INT_10_10_10_2: > + return MESA_FORMAT_RGBA1010102; > + case GL_UNSIGNED_INT_2_10_10_10_REV: > + return MESA_FORMAT_RGBA2101010_REV; > + case GL_UNSIGNED_INT_5_9_9_9_REV: > + return MESA_FORMAT_RGBA5999_REV; > + } > + break; > + > + case GL_BGRA: > + switch (type) { > + case GL_BYTE: > + return MESA_FORMAT_SIGNED_BGRA8888; > + case GL_UNSIGNED_BYTE: > + return MESA_FORMAT_BGRA8888; > + case GL_SHORT: > + return MESA_FORMAT_SIGNED_BGRA16161616; > + case GL_UNSIGNED_SHORT: > + return MESA_FORMAT_BGRA16161616; > + case GL_INT: > + return MESA_FORMAT_BGRA32323232; > + case GL_UNSIGNED_INT: > + return MESA_FORMAT_SIGNED_BGRA32323232; > + case GL_FLOAT: > + return MESA_FORMAT_BGRA_FLOAT32; > + case GL_HALF_FLOAT: > + return MESA_FORMAT_BGRA_FLOAT16; > + case GL_UNSIGNED_SHORT_4_4_4_4: > + return MESA_FORMAT_BGRA4444; > + case GL_UNSIGNED_SHORT_4_4_4_4_REV: > + return MESA_FORMAT_BGRA4444_REV; > + case GL_UNSIGNED_SHORT_5_5_5_1: > + return MESA_FORMAT_BGRA5551; > + case GL_UNSIGNED_SHORT_1_5_5_5_REV: > + return MESA_FORMAT_BGRA1555_REV; > + case GL_UNSIGNED_INT_8_8_8_8: > + return MESA_FORMAT_BGRA8888; > + case GL_UNSIGNED_INT_8_8_8_8_REV: > + return MESA_FORMAT_BGRA8888_REV; > + case GL_UNSIGNED_INT_10_10_10_2: > + return MESA_FORMAT_BGRA1010102; > + case GL_UNSIGNED_INT_2_10_10_10_REV: > + return MESA_FORMAT_BGRA2101010_REV; > + case GL_UNSIGNED_INT_5_9_9_9_REV: > + return MESA_FORMAT_BGRA5999_REV; > + } > + break; > + > + case GL_LUMINANCE: > + switch (type) { > + case GL_BYTE: > + return MESA_FORMAT_LUMINANCE_INT8; > + case GL_UNSIGNED_BYTE: > + return MESA_FORMAT_LUMINANCE_UINT8; > + case GL_SHORT: > + return MESA_FORMAT_LUMINANCE_INT16; > + case GL_UNSIGNED_SHORT: > + return MESA_FORMAT_LUMINANCE_UINT16; > + case GL_INT: > + return MESA_FORMAT_LUMINANCE_INT32; > + case GL_UNSIGNED_INT: > + return MESA_FORMAT_LUMINANCE_UINT32; > + case GL_FLOAT: > + return MESA_FORMAT_LUMINANCE_FLOAT32; > + case GL_HALF_FLOAT: > + return MESA_FORMAT_LUMINANCE_FLOAT16; > + } > + break; > + > + case GL_LUMINANCE_ALPHA: > + switch (type) { > + case GL_BYTE: > + return MESA_FORMAT_LUMINANCE_ALPHA_INT8; > + case GL_UNSIGNED_BYTE: > + return MESA_FORMAT_LUMINANCE_ALPHA_UINT8; > + case GL_SHORT: > + return MESA_FORMAT_LUMINANCE_ALPHA_INT16; > + case GL_UNSIGNED_SHORT: > + return MESA_FORMAT_LUMINANCE_ALPHA_UINT16; > + case GL_INT: > + return MESA_FORMAT_LUMINANCE_ALPHA_INT32; > + case GL_UNSIGNED_INT: > + return MESA_FORMAT_LUMINANCE_ALPHA_UINT32; > + case GL_FLOAT: > + return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32; > + case GL_HALF_FLOAT: > + return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16; > + } > + break; > + > + case GL_DEPTH_COMPONENT: > + switch (type) { > + case GL_INT: > + return MESA_FORMAT_Z32; > + case GL_UNSIGNED_INT: > + return MESA_FORMAT_Z32; > + case GL_FLOAT: > + return MESA_FORMAT_Z32_FLOAT; > + } > + break; > + > + case GL_STENCIL_INDEX: > + switch (type) { > + case GL_BYTE: > + case GL_UNSIGNED_BYTE: > + return MESA_FORMAT_S8; > + } > + break; > + > + case GL_DEPTH_STENCIL: > + switch (type) { > + case GL_UNSIGNED_SHORT: > + return MESA_FORMAT_Z24_S8; > + case GL_INT: > + return MESA_FORMAT_Z32; > + case GL_UNSIGNED_INT: > + return MESA_FORMAT_Z32; > + case GL_FLOAT: > + return MESA_FORMAT_Z32_FLOAT_X24S8; > + case GL_UNSIGNED_INT_24_8_EXT: /* GL_EXT_packed_depth_stencil */ > + return MESA_FORMAT_Z24_S8; > + case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: > + return MESA_FORMAT_S8_Z24; > + } > + break; > + } > + > + _mesa_problem(ctx, "%s(): unexpected format %s and type %s\n", > + __FUNCTION__, _mesa_lookup_enum_by_nr(format), > _mesa_lookup_enum_by_nr(type)); > + return MESA_FORMAT_NONE; > +} > diff --git a/src/mesa/main/texformat.h b/src/mesa/main/texformat.h > index 88ad4d1..66d50b3 100644 > --- a/src/mesa/main/texformat.h > +++ b/src/mesa/main/texformat.h > @@ -29,13 +29,24 @@ > > #include "formats.h" > > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > struct gl_context; > > extern gl_format > +_mesa_choose_cached_tex_format(struct gl_context *ctx, GLenum format, GLenum > type); > +extern gl_format > _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, > GLint internalFormat, GLenum format, GLenum type); > > extern GLboolean > _mesa_tex_target_is_array(GLenum target); > > +#ifdef __cplusplus > +} > +#endif > + > #endif > -- > 1.8.3.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev