On 2016-03-16 20:32:18, Kenneth Graunke wrote: > OpenGL ES 3.x contains a table of sized internal formats and their > required properties. In particular, each format is marked as > "Color Renderable" or "Texture Filterable". > > This patch introduces two functions that can be used to query the > information from that table. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/mesa/main/glformats.c | 83 > +++++++++++++++++++++++++++++++++++++++++++++++ > src/mesa/main/glformats.h | 7 ++++ > 2 files changed, 90 insertions(+) > > diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c > index cf64958..96ab393 100644 > --- a/src/mesa/main/glformats.c > +++ b/src/mesa/main/glformats.c > @@ -3556,3 +3556,86 @@ _mesa_format_from_format_and_type(GLenum format, > GLenum type) > */ > unreachable("Unsupported format"); > } > + > +/** > + * Returns true if \p internal_format is a sized internal format that > + * is marked "Color Renderable" in Table 8.10 of the ES 3.2 specification. > + */ > +bool > +_mesa_is_es3_color_renderable(GLenum internal_format) > +{ > + switch (internal_format) { > + case GL_R8: > + case GL_RG8: > + case GL_RGB8: > + case GL_RGB565: > + case GL_RGBA4: > + case GL_RGB5_A1: > + case GL_RGBA8: > + case GL_RGB10_A2: > + case GL_RGB10_A2UI: > + case GL_SRGB8_ALPHA8:
> + case GL_R16F: > + case GL_RG16F: > + case GL_RGBA16F: > + case GL_R32F: > + case GL_RG32F: > + case GL_RGBA32F: > + case GL_R11F_G11F_B10F: I don't expect that it makes a difference, but I noticed that ES 3.0 doesn't require these 7. Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com> > + case GL_R8I: > + case GL_R8UI: > + case GL_R16I: > + case GL_R16UI: > + case GL_R32I: > + case GL_R32UI: > + case GL_RG8I: > + case GL_RG8UI: > + case GL_RG16I: > + case GL_RG16UI: > + case GL_RG32I: > + case GL_RG32UI: > + case GL_RGBA8I: > + case GL_RGBA8UI: > + case GL_RGBA16I: > + case GL_RGBA16UI: > + case GL_RGBA32I: > + case GL_RGBA32UI: > + return true; > + default: > + return false; > + } > +} > + > +/** > + * Returns true if \p internal_format is a sized internal format that > + * is marked "Texture Filterable" in Table 8.10 of the ES 3.2 specification. > + */ > +bool > +_mesa_is_es3_texture_filterable(GLenum internal_format) > +{ > + switch (internal_format) { > + case GL_R8: > + case GL_R8_SNORM: > + case GL_RG8: > + case GL_RG8_SNORM: > + case GL_RGB8: > + case GL_RGB8_SNORM: > + case GL_RGB565: > + case GL_RGBA4: > + case GL_RGB5_A1: > + case GL_RGBA8: > + case GL_RGBA8_SNORM: > + case GL_RGB10_A2: > + case GL_SRGB8: > + case GL_SRGB8_ALPHA8: > + case GL_R16F: > + case GL_RG16F: > + case GL_RGB16F: > + case GL_RGBA16F: > + case GL_R11F_G11F_B10F: > + case GL_RGB9_E5: > + return true; > + default: > + return false; > + } > +} > diff --git a/src/mesa/main/glformats.h b/src/mesa/main/glformats.h > index 00d2767..c73f464 100644 > --- a/src/mesa/main/glformats.h > +++ b/src/mesa/main/glformats.h > @@ -28,6 +28,7 @@ > #define GLFORMATS_H > > > +#include <stdbool.h> > #include <GL/gl.h> > > > @@ -144,6 +145,12 @@ _mesa_base_tex_format(const struct gl_context *ctx, > GLint internalFormat ); > extern uint32_t > _mesa_format_from_format_and_type(GLenum format, GLenum type); > > +extern bool > +_mesa_is_es3_color_renderable(GLenum internal_format); > + > +extern bool > +_mesa_is_es3_texture_filterable(GLenum internal_format); > + > #ifdef __cplusplus > } > #endif > -- > 2.7.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev