You never check EXT_texture_norm16 anywhere... is that right? Should probably respect that in the _mesa_is_es3_* helpers. Also what about shader support? I see no mention in the spec that these should be usable as images, except with NV_image_formats is enabled. You're just exposing them no matter what in ES 3.10.
On Mon, Apr 16, 2018 at 11:04 AM, Tapani Pälli <tapani.pa...@intel.com> wrote: > Patch enables use of short and unsigned short data for texture uploads, > rendering and reading of framebuffers within the restrictions specified > in GL_EXT_texture_norm16 spec. > > Patch also enables those 16bit format layout qualifiers listed in > GL_NV_image_formats that depend on EXT_texture_norm16. > > Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> > --- > src/compiler/glsl/glsl_parser.yy | 12 +++++----- > src/mesa/main/extensions_table.h | 1 + > src/mesa/main/glformats.c | 51 > ++++++++++++++++++++++++++++++++++++++++ > src/mesa/main/mtypes.h | 1 + > src/mesa/main/readpix.c | 10 ++++++++ > src/mesa/main/shaderimage.c | 7 +++--- > 6 files changed, 72 insertions(+), 10 deletions(-) > > diff --git a/src/compiler/glsl/glsl_parser.yy > b/src/compiler/glsl/glsl_parser.yy > index e5ea41d4df..d6c6f39f6c 100644 > --- a/src/compiler/glsl/glsl_parser.yy > +++ b/src/compiler/glsl/glsl_parser.yy > @@ -1340,18 +1340,18 @@ layout_qualifier_id: > { "r32i", GL_R32I, GLSL_TYPE_INT, 130, 310, false }, > { "r16i", GL_R16I, GLSL_TYPE_INT, 130, 0, true }, > { "r8i", GL_R8I, GLSL_TYPE_INT, 130, 0, true }, > - { "rgba16", GL_RGBA16, GLSL_TYPE_FLOAT, 130, 0, false }, > + { "rgba16", GL_RGBA16, GLSL_TYPE_FLOAT, 130, 310, true }, > { "rgb10_a2", GL_RGB10_A2, GLSL_TYPE_FLOAT, 130, 0, true }, > { "rgba8", GL_RGBA8, GLSL_TYPE_FLOAT, 130, 310, false }, > - { "rg16", GL_RG16, GLSL_TYPE_FLOAT, 130, 0, false }, > + { "rg16", GL_RG16, GLSL_TYPE_FLOAT, 130, 310, true }, > { "rg8", GL_RG8, GLSL_TYPE_FLOAT, 130, 0, true }, > - { "r16", GL_R16, GLSL_TYPE_FLOAT, 130, 0, false }, > + { "r16", GL_R16, GLSL_TYPE_FLOAT, 130, 310, true }, > { "r8", GL_R8, GLSL_TYPE_FLOAT, 130, 0, true }, > - { "rgba16_snorm", GL_RGBA16_SNORM, GLSL_TYPE_FLOAT, 130, 0, > false }, > + { "rgba16_snorm", GL_RGBA16_SNORM, GLSL_TYPE_FLOAT, 130, 310, > true }, > { "rgba8_snorm", GL_RGBA8_SNORM, GLSL_TYPE_FLOAT, 130, 310, > false }, > - { "rg16_snorm", GL_RG16_SNORM, GLSL_TYPE_FLOAT, 130, 0, false > }, > + { "rg16_snorm", GL_RG16_SNORM, GLSL_TYPE_FLOAT, 130, 310, > true }, > { "rg8_snorm", GL_RG8_SNORM, GLSL_TYPE_FLOAT, 130, 0, true }, > - { "r16_snorm", GL_R16_SNORM, GLSL_TYPE_FLOAT, 130, 0, false }, > + { "r16_snorm", GL_R16_SNORM, GLSL_TYPE_FLOAT, 130, 310, true > }, > { "r8_snorm", GL_R8_SNORM, GLSL_TYPE_FLOAT, 130, 0, true } > }; > > diff --git a/src/mesa/main/extensions_table.h > b/src/mesa/main/extensions_table.h > index 492f7c3d20..ce5dd80886 100644 > --- a/src/mesa/main/extensions_table.h > +++ b/src/mesa/main/extensions_table.h > @@ -283,6 +283,7 @@ EXT(EXT_texture_format_BGRA8888 , dummy_true > EXT(EXT_texture_integer , EXT_texture_integer > , GLL, GLC, x , x , 2006) > EXT(EXT_texture_lod_bias , dummy_true > , GLL, x , ES1, x , 1999) > EXT(EXT_texture_mirror_clamp , EXT_texture_mirror_clamp > , GLL, GLC, x , x , 2004) > +EXT(EXT_texture_norm16 , EXT_texture_norm16 > , x , x , x , 31, 2014) > EXT(EXT_texture_object , dummy_true > , GLL, x , x , x , 1995) > EXT(EXT_texture_rectangle , NV_texture_rectangle > , GLL, x , x , x , 2004) > EXT(EXT_texture_rg , ARB_texture_rg > , x , x , x , ES2, 2011) > diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c > index 1e797c24c2..b87e4e9e60 100644 > --- a/src/mesa/main/glformats.c > +++ b/src/mesa/main/glformats.c > @@ -2857,6 +2857,16 @@ _mesa_es3_error_check_format_and_type(const struct > gl_context *ctx, > return GL_INVALID_OPERATION; > break; > > + case GL_UNSIGNED_SHORT: > + if (internalFormat != GL_RGBA16) > + return GL_INVALID_OPERATION; > + break; > + > + case GL_SHORT: > + if (internalFormat != GL_RGBA16_SNORM) > + return GL_INVALID_OPERATION; > + break; > + > case GL_UNSIGNED_SHORT_4_4_4_4: > switch (internalFormat) { > case GL_RGBA: > @@ -2984,6 +2994,16 @@ _mesa_es3_error_check_format_and_type(const struct > gl_context *ctx, > return GL_INVALID_OPERATION; > break; > > + case GL_UNSIGNED_SHORT: > + if (internalFormat != GL_RGB16) > + return GL_INVALID_OPERATION; > + break; > + > + case GL_SHORT: > + if (internalFormat != GL_RGB16_SNORM) > + return GL_INVALID_OPERATION; > + break; > + > case GL_UNSIGNED_SHORT_5_6_5: > switch (internalFormat) { > case GL_RGB: > @@ -3115,6 +3135,16 @@ _mesa_es3_error_check_format_and_type(const struct > gl_context *ctx, > return GL_INVALID_OPERATION; > break; > > + case GL_UNSIGNED_SHORT: > + if (internalFormat != GL_RG16) > + return GL_INVALID_OPERATION; > + break; > + > + case GL_SHORT: > + if (internalFormat != GL_RG16_SNORM) > + return GL_INVALID_OPERATION; > + break; > + > case GL_HALF_FLOAT: > case GL_HALF_FLOAT_OES: > switch (internalFormat) { > @@ -3205,6 +3235,16 @@ _mesa_es3_error_check_format_and_type(const struct > gl_context *ctx, > return GL_INVALID_OPERATION; > break; > > + case GL_UNSIGNED_SHORT: > + if (internalFormat != GL_R16) > + return GL_INVALID_OPERATION; > + break; > + > + case GL_SHORT: > + if (internalFormat != GL_R16_SNORM) > + return GL_INVALID_OPERATION; > + break; > + > case GL_HALF_FLOAT: > case GL_HALF_FLOAT_OES: > switch (internalFormat) { > @@ -3718,8 +3758,11 @@ _mesa_is_es3_color_renderable(GLenum internal_format) > case GL_RGB10_A2UI: > case GL_SRGB8_ALPHA8: > case GL_R16F: > + case GL_R16: > case GL_RG16F: > + case GL_RG16: > case GL_RGBA16F: > + case GL_RGBA16: > case GL_R32F: > case GL_RG32F: > case GL_RGBA32F: > @@ -3772,9 +3815,17 @@ _mesa_is_es3_texture_filterable(const struct > gl_context *ctx, > case GL_SRGB8: > case GL_SRGB8_ALPHA8: > case GL_R16F: > + case GL_R16: > + case GL_R16_SNORM: > case GL_RG16F: > + case GL_RG16: > + case GL_RG16_SNORM: > case GL_RGB16F: > + case GL_RGB16: > + case GL_RGB16_SNORM: > case GL_RGBA16F: > + case GL_RGBA16: > + case GL_RGBA16_SNORM: > case GL_R11F_G11F_B10F: > case GL_RGB9_E5: > return true; > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index b65e7b2c3c..a9b3153365 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -4132,6 +4132,7 @@ struct gl_extensions > GLboolean EXT_texture_filter_anisotropic; > GLboolean EXT_texture_integer; > GLboolean EXT_texture_mirror_clamp; > + GLboolean EXT_texture_norm16; > GLboolean EXT_texture_shared_exponent; > GLboolean EXT_texture_snorm; > GLboolean EXT_texture_sRGB; > diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c > index 6ce340ddf9..54f1e57377 100644 > --- a/src/mesa/main/readpix.c > +++ b/src/mesa/main/readpix.c > @@ -927,6 +927,16 @@ read_pixels_es3_error_check(GLenum format, GLenum type, > return GL_NO_ERROR; > if (internalFormat == GL_RGB10_A2UI && type == GL_UNSIGNED_BYTE) > return GL_NO_ERROR; > + /* GL_EXT_texture_norm16 */ > + if (type == GL_UNSIGNED_SHORT) { > + switch (internalFormat) { > + case GL_R16: > + case GL_RG16: > + case GL_RGB16: > + case GL_RGBA16: > + return GL_NO_ERROR; > + } > + } > break; > case GL_BGRA: > /* GL_EXT_read_format_bgra */ > diff --git a/src/mesa/main/shaderimage.c b/src/mesa/main/shaderimage.c > index 596eadd4f8..4348d120cb 100644 > --- a/src/mesa/main/shaderimage.c > +++ b/src/mesa/main/shaderimage.c > @@ -430,9 +430,8 @@ _mesa_is_shader_image_format_supported(const struct > gl_context *ctx, > * ARB_shader_image_load_store extension, c.f. table 3.21 of the OpenGL > 4.2 > * specification. > * > - * These can be supported by GLES 3.1 with GL_NV_image_formats & > - * GL_EXT_texture_norm16 extensions but we don't have support for the > - * latter in Mesa yet. > + * Following formats are supported by GLES 3.1 with GL_NV_image_formats & > + * GL_EXT_texture_norm16 extensions. > */ > case GL_RGBA16: > case GL_RGBA16_SNORM: > @@ -440,7 +439,7 @@ _mesa_is_shader_image_format_supported(const struct > gl_context *ctx, > case GL_RG16_SNORM: > case GL_R16: > case GL_R16_SNORM: > - return _mesa_is_desktop_gl(ctx); > + return true; > > default: > return false; > -- > 2.13.6 > > _______________________________________________ > 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