I believe the bit in src/mesa/main/mtypes.h can be removed. Otherwise, this is
Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu> It is customary to also include a note in relnotes/version.html that the ext was added. On Tue, Nov 15, 2016 at 6:16 AM, Lionel Landwerlin <llandwer...@gmail.com> wrote: > v2: Replace helper function by qualifier struct field (Ilia) > Enable NV_image_formats using ARB_shader_image_load_store (Ilia) > > Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98480 > Cc: Ilia Mirkin <imir...@alum.mit.edu> > --- > src/compiler/glsl/glsl_parser.yy | 86 > +++++++++++++++++--------------- > src/compiler/glsl/glsl_parser_extras.cpp | 2 + > src/compiler/glsl/glsl_parser_extras.h | 2 + > src/mesa/main/extensions_table.h | 1 + > src/mesa/main/mtypes.h | 1 + > src/mesa/main/shaderimage.c | 22 +++++--- > 6 files changed, 67 insertions(+), 47 deletions(-) > > diff --git a/src/compiler/glsl/glsl_parser.yy > b/src/compiler/glsl/glsl_parser.yy > index 7d709c7..a48dc68 100644 > --- a/src/compiler/glsl/glsl_parser.yy > +++ b/src/compiler/glsl/glsl_parser.yy > @@ -1296,51 +1296,55 @@ layout_qualifier_id: > unsigned required_glsl; > /** Minimum GLSL ES version required for the image format. */ > unsigned required_essl; > + /* NV_image_formats */ > + bool nv_image_formats; > } map[] = { > - { "rgba32f", GL_RGBA32F, GLSL_TYPE_FLOAT, 130, 310 }, > - { "rgba16f", GL_RGBA16F, GLSL_TYPE_FLOAT, 130, 310 }, > - { "rg32f", GL_RG32F, GLSL_TYPE_FLOAT, 130, 0 }, > - { "rg16f", GL_RG16F, GLSL_TYPE_FLOAT, 130, 0 }, > - { "r11f_g11f_b10f", GL_R11F_G11F_B10F, GLSL_TYPE_FLOAT, 130, > 0 }, > - { "r32f", GL_R32F, GLSL_TYPE_FLOAT, 130, 310 }, > - { "r16f", GL_R16F, GLSL_TYPE_FLOAT, 130, 0 }, > - { "rgba32ui", GL_RGBA32UI, GLSL_TYPE_UINT, 130, 310 }, > - { "rgba16ui", GL_RGBA16UI, GLSL_TYPE_UINT, 130, 310 }, > - { "rgb10_a2ui", GL_RGB10_A2UI, GLSL_TYPE_UINT, 130, 0 }, > - { "rgba8ui", GL_RGBA8UI, GLSL_TYPE_UINT, 130, 310 }, > - { "rg32ui", GL_RG32UI, GLSL_TYPE_UINT, 130, 0 }, > - { "rg16ui", GL_RG16UI, GLSL_TYPE_UINT, 130, 0 }, > - { "rg8ui", GL_RG8UI, GLSL_TYPE_UINT, 130, 0 }, > - { "r32ui", GL_R32UI, GLSL_TYPE_UINT, 130, 310 }, > - { "r16ui", GL_R16UI, GLSL_TYPE_UINT, 130, 0 }, > - { "r8ui", GL_R8UI, GLSL_TYPE_UINT, 130, 0 }, > - { "rgba32i", GL_RGBA32I, GLSL_TYPE_INT, 130, 310 }, > - { "rgba16i", GL_RGBA16I, GLSL_TYPE_INT, 130, 310 }, > - { "rgba8i", GL_RGBA8I, GLSL_TYPE_INT, 130, 310 }, > - { "rg32i", GL_RG32I, GLSL_TYPE_INT, 130, 0 }, > - { "rg16i", GL_RG16I, GLSL_TYPE_INT, 130, 0 }, > - { "rg8i", GL_RG8I, GLSL_TYPE_INT, 130, 0 }, > - { "r32i", GL_R32I, GLSL_TYPE_INT, 130, 310 }, > - { "r16i", GL_R16I, GLSL_TYPE_INT, 130, 0 }, > - { "r8i", GL_R8I, GLSL_TYPE_INT, 130, 0 }, > - { "rgba16", GL_RGBA16, GLSL_TYPE_FLOAT, 130, 0 }, > - { "rgb10_a2", GL_RGB10_A2, GLSL_TYPE_FLOAT, 130, 0 }, > - { "rgba8", GL_RGBA8, GLSL_TYPE_FLOAT, 130, 310 }, > - { "rg16", GL_RG16, GLSL_TYPE_FLOAT, 130, 0 }, > - { "rg8", GL_RG8, GLSL_TYPE_FLOAT, 130, 0 }, > - { "r16", GL_R16, GLSL_TYPE_FLOAT, 130, 0 }, > - { "r8", GL_R8, GLSL_TYPE_FLOAT, 130, 0 }, > - { "rgba16_snorm", GL_RGBA16_SNORM, GLSL_TYPE_FLOAT, 130, 0 }, > - { "rgba8_snorm", GL_RGBA8_SNORM, GLSL_TYPE_FLOAT, 130, 310 }, > - { "rg16_snorm", GL_RG16_SNORM, GLSL_TYPE_FLOAT, 130, 0 }, > - { "rg8_snorm", GL_RG8_SNORM, GLSL_TYPE_FLOAT, 130, 0 }, > - { "r16_snorm", GL_R16_SNORM, GLSL_TYPE_FLOAT, 130, 0 }, > - { "r8_snorm", GL_R8_SNORM, GLSL_TYPE_FLOAT, 130, 0 } > + { "rgba32f", GL_RGBA32F, GLSL_TYPE_FLOAT, 130, 310, false }, > + { "rgba16f", GL_RGBA16F, GLSL_TYPE_FLOAT, 130, 310, false }, > + { "rg32f", GL_RG32F, GLSL_TYPE_FLOAT, 130, 0, true }, > + { "rg16f", GL_RG16F, GLSL_TYPE_FLOAT, 130, 0, true }, > + { "r11f_g11f_b10f", GL_R11F_G11F_B10F, GLSL_TYPE_FLOAT, 130, > 0, true }, > + { "r32f", GL_R32F, GLSL_TYPE_FLOAT, 130, 310, false }, > + { "r16f", GL_R16F, GLSL_TYPE_FLOAT, 130, 0, true }, > + { "rgba32ui", GL_RGBA32UI, GLSL_TYPE_UINT, 130, 310, false }, > + { "rgba16ui", GL_RGBA16UI, GLSL_TYPE_UINT, 130, 310, false }, > + { "rgb10_a2ui", GL_RGB10_A2UI, GLSL_TYPE_UINT, 130, 0, true }, > + { "rgba8ui", GL_RGBA8UI, GLSL_TYPE_UINT, 130, 310, false }, > + { "rg32ui", GL_RG32UI, GLSL_TYPE_UINT, 130, 0, true }, > + { "rg16ui", GL_RG16UI, GLSL_TYPE_UINT, 130, 0, true }, > + { "rg8ui", GL_RG8UI, GLSL_TYPE_UINT, 130, 0, true }, > + { "r32ui", GL_R32UI, GLSL_TYPE_UINT, 130, 310, false }, > + { "r16ui", GL_R16UI, GLSL_TYPE_UINT, 130, 0, true }, > + { "r8ui", GL_R8UI, GLSL_TYPE_UINT, 130, 0, true }, > + { "rgba32i", GL_RGBA32I, GLSL_TYPE_INT, 130, 310, false }, > + { "rgba16i", GL_RGBA16I, GLSL_TYPE_INT, 130, 310, false }, > + { "rgba8i", GL_RGBA8I, GLSL_TYPE_INT, 130, 310, false }, > + { "rg32i", GL_RG32I, GLSL_TYPE_INT, 130, 0, true }, > + { "rg16i", GL_RG16I, GLSL_TYPE_INT, 130, 0, true }, > + { "rg8i", GL_RG8I, GLSL_TYPE_INT, 130, 0, true }, > + { "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 }, > + { "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 }, > + { "rg8", GL_RG8, GLSL_TYPE_FLOAT, 130, 0, true }, > + { "r16", GL_R16, GLSL_TYPE_FLOAT, 130, 0, false }, > + { "r8", GL_R8, GLSL_TYPE_FLOAT, 130, 0, true }, > + { "rgba16_snorm", GL_RGBA16_SNORM, GLSL_TYPE_FLOAT, 130, 0, > false }, > + { "rgba8_snorm", GL_RGBA8_SNORM, GLSL_TYPE_FLOAT, 130, 310, > false }, > + { "rg16_snorm", GL_RG16_SNORM, GLSL_TYPE_FLOAT, 130, 0, false > }, > + { "rg8_snorm", GL_RG8_SNORM, GLSL_TYPE_FLOAT, 130, 0, true }, > + { "r16_snorm", GL_R16_SNORM, GLSL_TYPE_FLOAT, 130, 0, false }, > + { "r8_snorm", GL_R8_SNORM, GLSL_TYPE_FLOAT, 130, 0, true } > }; > > for (unsigned i = 0; i < ARRAY_SIZE(map); i++) { > - if (state->is_version(map[i].required_glsl, > - map[i].required_essl) && > + if ((state->is_version(map[i].required_glsl, > + map[i].required_essl) || > + (state->NV_image_formats_enable && > + map[i].nv_image_formats)) && > match_layout_qualifier($1, map[i].name, state) == 0) { > $$.flags.q.explicit_image_format = 1; > $$.image_format = map[i].format; > diff --git a/src/compiler/glsl/glsl_parser_extras.cpp > b/src/compiler/glsl/glsl_parser_extras.cpp > index 0cb3c12..1f3ba2c 100644 > --- a/src/compiler/glsl/glsl_parser_extras.cpp > +++ b/src/compiler/glsl/glsl_parser_extras.cpp > @@ -28,6 +28,7 @@ > #include "main/core.h" /* for struct gl_context */ > #include "main/context.h" > #include "main/debug_output.h" > +#include "main/formats.h" > #include "main/shaderobj.h" > #include "util/u_atomic.h" /* for p_atomic_cmpxchg */ > #include "util/ralloc.h" > @@ -687,6 +688,7 @@ static const _mesa_glsl_extension > _mesa_glsl_supported_extensions[] = { > EXT_AEP(EXT_texture_buffer), > EXT_AEP(EXT_texture_cube_map_array), > EXT(MESA_shader_integer_functions), > + EXT(NV_image_formats), > }; > > #undef EXT > diff --git a/src/compiler/glsl/glsl_parser_extras.h > b/src/compiler/glsl/glsl_parser_extras.h > index 53abbbc..d757c1d 100644 > --- a/src/compiler/glsl/glsl_parser_extras.h > +++ b/src/compiler/glsl/glsl_parser_extras.h > @@ -765,6 +765,8 @@ struct _mesa_glsl_parse_state { > bool MESA_shader_framebuffer_fetch_non_coherent_warn; > bool MESA_shader_integer_functions_enable; > bool MESA_shader_integer_functions_warn; > + bool NV_image_formats_enable; > + bool NV_image_formats_warn; > /*@}*/ > > /** Extensions supported by the OpenGL implementation. */ > diff --git a/src/mesa/main/extensions_table.h > b/src/mesa/main/extensions_table.h > index 036e62b..d3ec551 100644 > --- a/src/mesa/main/extensions_table.h > +++ b/src/mesa/main/extensions_table.h > @@ -315,6 +315,7 @@ EXT(NV_depth_clamp , > ARB_depth_clamp > EXT(NV_draw_buffers , dummy_true > , x , x , x , ES2, 2011) > EXT(NV_fbo_color_attachments , dummy_true > , x , x , x , ES2, 2010) > EXT(NV_fog_distance , NV_fog_distance > , GLL, x , x , x , 2001) > +EXT(NV_image_formats , ARB_shader_image_load_store > , x , x , x , 31, 2014) > EXT(NV_light_max_exponent , dummy_true > , GLL, x , x , x , 1999) > EXT(NV_packed_depth_stencil , dummy_true > , GLL, GLC, x , x , 2000) > EXT(NV_point_sprite , NV_point_sprite > , GLL, GLC, x , x , 2001) > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index 5e98040..150aa0c 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -3921,6 +3921,7 @@ struct gl_extensions > GLboolean MESA_ycbcr_texture; > GLboolean NV_conditional_render; > GLboolean NV_fog_distance; > + GLboolean NV_image_formats; > GLboolean NV_point_sprite; > GLboolean NV_primitive_restart; > GLboolean NV_texture_barrier; > diff --git a/src/mesa/main/shaderimage.c b/src/mesa/main/shaderimage.c > index db36e3b..5cce3ac 100644 > --- a/src/mesa/main/shaderimage.c > +++ b/src/mesa/main/shaderimage.c > @@ -401,7 +401,7 @@ _mesa_is_shader_image_format_supported(const struct > gl_context *ctx, > > /* Formats supported on unextended desktop GL and the original > * ARB_shader_image_load_store extension, c.f. table 3.21 of the OpenGL > 4.2 > - * specification. > + * specification or by GLES 3.1 with GL_NV_image_formats extension. > */ > case GL_RG32F: > case GL_RG16F: > @@ -418,17 +418,27 @@ _mesa_is_shader_image_format_supported(const struct > gl_context *ctx, > case GL_RG8I: > case GL_R16I: > case GL_R8I: > - case GL_RGBA16: > case GL_RGB10_A2: > - case GL_RG16: > case GL_RG8: > - case GL_R16: > case GL_R8: > + case GL_RG8_SNORM: > + case GL_R8_SNORM: > + return true; > + > + /* Formats supported on unextended desktop GL and the original > + * 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. > + */ > + case GL_RGBA16: > case GL_RGBA16_SNORM: > + case GL_RG16: > case GL_RG16_SNORM: > - case GL_RG8_SNORM: > + case GL_R16: > case GL_R16_SNORM: > - case GL_R8_SNORM: > return _mesa_is_desktop_gl(ctx); > > default: > -- > 2.10.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev