On Tue, Nov 6, 2018 at 3:03 PM Ilia Mirkin <imir...@alum.mit.edu> wrote:
>
> On Tue, Nov 6, 2018 at 5:18 PM Kristian H. Kristensen
> <hoegsb...@gmail.com> wrote:
> >
> > This also turns on EXT_multisampled_render_to_texture which is a
> > subset of EXT_multisampled_render_to_texture2, allowing only
> > COLOR_ATTACHMENT0.
>
> You also enable the texture2 variant as well, no?

Yes, I'll update the subject.

>
> >
> > Signed-off-by: Kristian H. Kristensen <hoegsb...@chromium.org>
> > ---
> >  .../EXT_multisampled_render_to_texture.xml    | 34 ++++++++++++++
> >  src/mapi/glapi/gen/Makefile.am                |  1 +
> >  src/mapi/glapi/gen/gl_API.xml                 |  2 +
> >  src/mapi/glapi/gen/meson.build                |  1 +
> >  src/mesa/drivers/common/meta.c                |  2 +-
> >  src/mesa/main/extensions_table.h              |  2 +
> >  src/mesa/main/fbobject.c                      | 45 +++++++++++++------
> >  src/mesa/main/fbobject.h                      |  8 +++-
> >  src/mesa/main/mtypes.h                        |  2 +
> >  9 files changed, 81 insertions(+), 16 deletions(-)
> >  create mode 100644 
> > src/mapi/glapi/gen/EXT_multisampled_render_to_texture.xml
> >
> > diff --git a/src/mapi/glapi/gen/EXT_multisampled_render_to_texture.xml 
> > b/src/mapi/glapi/gen/EXT_multisampled_render_to_texture.xml
> > new file mode 100644
> > index 00000000000..cf44e6976f0
> > --- /dev/null
> > +++ b/src/mapi/glapi/gen/EXT_multisampled_render_to_texture.xml
> > @@ -0,0 +1,34 @@
> > +<?xml version="1.0"?>
> > +<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
> > +
> > +<OpenGLAPI>
> > +
> > +<category name="GL_EXT_multisampled_render_to_texture" number="106">
> > +
> > +    <enum name="RENDERBUFFER_SAMPLES_EXT"                   
> > value="0x8CAB"/>
> > +    <enum name="FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT"     
> > value="0x8D56"/>
> > +    <enum name="MAX_SAMPLES_EXT"                            
> > value="0x8D57"/>
> > +    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT" 
> > value="0x8D6C"/>
>
> I don't see any logic to enable retrieving these (*_SAMPLES_EXT), so I
> think this implementation is slightly incomplete.

Will add.

> > +
> > +<!-- Already defined in FramebufferTexture2DMultisampleEXT
>
> I think you meant to say something else here...

Oh yea, this is a bit of a circular reference, isn't it... updated to
EXT_framebuffer_object.xml

> > +    <function name="RenderbufferStorageMultisampleEXT" es2="2.0">
> > +        <param name="target" type="GLenum"/>
> > +       <param name="samples" type="GLsizei"/>
> > +        <param name="internalformat" type="GLenum"/>
> > +        <param name="width" type="GLsizei"/>
> > +       <param name="height" type="GLsizei"/>
> > +    </function>
> > +-->
> > +
> > +    <function name="FramebufferTexture2DMultisampleEXT" es2="2.0">
> > +        <param name="target" type="GLenum"/>
> > +        <param name="attachment" type="GLenum"/>
> > +        <param name="textarget" type="GLenum"/>
> > +        <param name="texture" type="GLuint"/>
> > +        <param name="level" type="GLint"/>
> > +        <param name="samples" type="GLsizei"/>
> > +    </function>
> > +
> > +</category>
> > +
> > +</OpenGLAPI>
> > diff --git a/src/mapi/glapi/gen/Makefile.am b/src/mapi/glapi/gen/Makefile.am
> > index 6e0ee1e1687..40538b0ff2e 100644
> > --- a/src/mapi/glapi/gen/Makefile.am
> > +++ b/src/mapi/glapi/gen/Makefile.am
> > @@ -200,6 +200,7 @@ API_XML = \
> >         EXT_external_objects_fd.xml \
> >         EXT_framebuffer_object.xml \
> >         EXT_gpu_shader4.xml \
> > +       EXT_multisampled_render_to_texture.xml \
> >         EXT_packed_depth_stencil.xml \
> >         EXT_provoking_vertex.xml \
> >         EXT_separate_shader_objects.xml \
> > diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
> > index aae9a5835db..ee4d13f1f06 100644
> > --- a/src/mapi/glapi/gen/gl_API.xml
> > +++ b/src/mapi/glapi/gen/gl_API.xml
> > @@ -8166,6 +8166,8 @@
> >
> >  <xi:include href="ARB_robustness.xml" 
> > xmlns:xi="http://www.w3.org/2001/XInclude"/>
> >
> > +<xi:include href="EXT_multisampled_render_to_texture.xml" 
> > xmlns:xi="http://www.w3.org/2001/XInclude"/>
> > +
> >  <xi:include href="ARB_base_instance.xml" 
> > xmlns:xi="http://www.w3.org/2001/XInclude"/>
> >
> >  <category name="GL_ARB_transform_feedback_instanced" number="109">
> > diff --git a/src/mapi/glapi/gen/meson.build b/src/mapi/glapi/gen/meson.build
> > index f494e9707b6..8cc163b2989 100644
> > --- a/src/mapi/glapi/gen/meson.build
> > +++ b/src/mapi/glapi/gen/meson.build
> > @@ -107,6 +107,7 @@ api_xml_files = files(
> >    'EXT_external_objects_fd.xml',
> >    'EXT_framebuffer_object.xml',
> >    'EXT_gpu_shader4.xml',
> > +  'EXT_multisampled_render_to_texture.xml',
> >    'EXT_packed_depth_stencil.xml',
> >    'EXT_provoking_vertex.xml',
> >    'EXT_separate_shader_objects.xml',
> > diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
> > index 4392c4bbd88..3515e312023 100644
> > --- a/src/mesa/drivers/common/meta.c
> > +++ b/src/mesa/drivers/common/meta.c
> > @@ -127,7 +127,7 @@ _mesa_meta_framebuffer_texture_image(struct gl_context 
> > *ctx,
> >     assert(att);
> >
> >     _mesa_framebuffer_texture(ctx, fb, attachment, att, texObj, texTarget,
> > -                             level, layer, false);
> > +                             level, att->NumSamples, layer, false);
> >  }
> >
> >  static struct gl_shader *
> > diff --git a/src/mesa/main/extensions_table.h 
> > b/src/mesa/main/extensions_table.h
> > index a516a1b17f8..f13b8b6a21a 100644
> > --- a/src/mesa/main/extensions_table.h
> > +++ b/src/mesa/main/extensions_table.h
> > @@ -241,6 +241,8 @@ EXT(EXT_map_buffer_range                    , 
> > ARB_map_buffer_range
> >  EXT(EXT_memory_object                       , EXT_memory_object            
> >           , GLL, GLC,  x , ES2, 2017)
> >  EXT(EXT_memory_object_fd                    , EXT_memory_object_fd         
> >           , GLL, GLC,  x , ES2, 2017)
> >  EXT(EXT_multi_draw_arrays                   , dummy_true                   
> >           , GLL,  x , ES1, ES2, 1999)
> > +EXT(EXT_multisampled_render_to_texture      , 
> > EXT_multisampled_render_to_texture     ,  x ,  x ,  x , ES2, 2016)
> > +EXT(EXT_multisampled_render_to_texture2     , 
> > EXT_multisampled_render_to_texture     ,  x ,  x ,  x , ES2, 2016)
> >  EXT(EXT_occlusion_query_boolean             , ARB_occlusion_query          
> >           ,  x ,  x ,  x , ES2, 2001)
> >  EXT(EXT_packed_depth_stencil                , dummy_true                   
> >           , GLL, GLC,  x ,  x , 2005)
> >  EXT(EXT_packed_float                        , EXT_packed_float             
> >           , GLL, GLC,  x ,  x , 2004)
> > diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> > index c3dded6b928..d270dbb1648 100644
> > --- a/src/mesa/main/fbobject.c
> > +++ b/src/mesa/main/fbobject.c
> > @@ -497,8 +497,8 @@ set_texture_attachment(struct gl_context *ctx,
> >                         struct gl_framebuffer *fb,
> >                         struct gl_renderbuffer_attachment *att,
> >                         struct gl_texture_object *texObj,
> > -                       GLenum texTarget, GLuint level, GLuint layer,
> > -                       GLboolean layered)
> > +                       GLenum texTarget, GLuint level, GLsizei samples,
> > +                       GLuint layer, GLboolean layered)
> >  {
> >     struct gl_renderbuffer *rb = att->Renderbuffer;
> >
> > @@ -520,6 +520,7 @@ set_texture_attachment(struct gl_context *ctx,
> >
> >     /* always update these fields */
> >     att->TextureLevel = level;
> > +   att->NumSamples = samples;
> >     att->CubeMapFace = _mesa_tex_target_to_face(texTarget);
> >     att->Zoffset = layer;
> >     att->Layered = layered;
> > @@ -1084,8 +1085,11 @@ _mesa_test_framebuffer_completeness(struct 
> > gl_context *ctx,
> >              return;
> >           }
> >
> > -         attNumSamples = texImg->NumSamples;
> > -         attNumStorageSamples = texImg->NumSamples;
> > +         if (att->NumSamples > 0)
> > +            attNumSamples = att->NumSamples;
> > +         else
> > +            attNumSamples = texImg->NumSamples;
> > +         attNumStorageSamples = attNumSamples;
>
> Do you want attNumStorageSamples to be attNumSamples here, or
> texImg->NumSamples? Not sure what this affects...

I don't know how or if at all this extension is supposed to interact
with AMD_framebuffer_multisample_advanced. The checks further down
require sample counts for all color attachments to match and storage
sample counts for all color attachments to match. The
EXT_multisampled_render_to_texture extension allows for texture color
attachments to be either fully multisampled or non-multisampled as
long as their attachment sample count are all the same. For that to
work right, we must consider the attachment sample count both the
sample count and the storage sample count.

>
> >        }
> >        else if (att->Type == GL_RENDERBUFFER_EXT) {
> >           minWidth = MIN2(minWidth, att->Renderbuffer->Width);
> > @@ -3497,7 +3501,8 @@ _mesa_framebuffer_texture(struct gl_context *ctx, 
> > struct gl_framebuffer *fb,
> >                            GLenum attachment,
> >                            struct gl_renderbuffer_attachment *att,
> >                            struct gl_texture_object *texObj, GLenum 
> > textarget,
> > -                          GLint level, GLuint layer, GLboolean layered)
> > +                          GLint level, GLsizei samples,
> > +                          GLuint layer, GLboolean layered)
> >  {
> >     FLUSH_VERTICES(ctx, _NEW_BUFFERS);
> >
> > @@ -3508,6 +3513,7 @@ _mesa_framebuffer_texture(struct gl_context *ctx, 
> > struct gl_framebuffer *fb,
> >            level == fb->Attachment[BUFFER_STENCIL].TextureLevel &&
> >            _mesa_tex_target_to_face(textarget) ==
> >            fb->Attachment[BUFFER_STENCIL].CubeMapFace &&
> > +          samples == fb->Attachment[BUFFER_STENCIL].NumSamples &&
> >            layer == fb->Attachment[BUFFER_STENCIL].Zoffset) {
> >           /* The texture object is already attached to the stencil 
> > attachment
> >            * point. Don't create a new renderbuffer; just reuse the stencil
> > @@ -3521,13 +3527,14 @@ _mesa_framebuffer_texture(struct gl_context *ctx, 
> > struct gl_framebuffer *fb,
> >                   level == fb->Attachment[BUFFER_DEPTH].TextureLevel &&
> >                   _mesa_tex_target_to_face(textarget) ==
> >                   fb->Attachment[BUFFER_DEPTH].CubeMapFace &&
> > +                 samples == fb->Attachment[BUFFER_DEPTH].NumSamples &&
> >                   layer == fb->Attachment[BUFFER_DEPTH].Zoffset) {
> >           /* As above, but with depth and stencil transposed. */
> >           reuse_framebuffer_texture_attachment(fb, BUFFER_STENCIL,
> >                                                BUFFER_DEPTH);
> >        } else {
> >           set_texture_attachment(ctx, fb, att, texObj, textarget,
> > -                                level, layer, layered);
> > +                                level, samples, layer, layered);
> >
> >           if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
> >              /* Above we created a new renderbuffer and attached it to the
> > @@ -3582,15 +3589,15 @@ framebuffer_texture_with_dims_no_error(GLenum 
> > target, GLenum attachment,
> >        get_attachment(ctx, fb, attachment, NULL);
> >
> >     _mesa_framebuffer_texture(ctx, fb, attachment, att, texObj, textarget,
> > -                             level, layer, GL_FALSE);
> > +                             level, NO_SAMPLES, layer, GL_FALSE);
> >  }
> >
> >
> >  static void
> >  framebuffer_texture_with_dims(int dims, GLenum target,
> >                                GLenum attachment, GLenum textarget,
> > -                              GLuint texture, GLint level, GLint layer,
> > -                              const char *caller)
> > +                              GLuint texture, GLint level, GLsizei samples,
> > +                              GLint layer, const char *caller)
> >  {
> >     GET_CURRENT_CONTEXT(ctx);
> >     struct gl_framebuffer *fb;
> > @@ -3625,7 +3632,7 @@ framebuffer_texture_with_dims(int dims, GLenum target,
> >        return;
> >
> >     _mesa_framebuffer_texture(ctx, fb, attachment, att, texObj, textarget,
> > -                             level, layer, GL_FALSE);
> > +                             level, samples, layer, GL_FALSE);
> >  }
> >
> >
> > @@ -3644,7 +3651,7 @@ _mesa_FramebufferTexture1D(GLenum target, GLenum 
> > attachment,
> >                             GLenum textarget, GLuint texture, GLint level)
> >  {
> >     framebuffer_texture_with_dims(1, target, attachment, textarget, texture,
> > -                                 level, 0, "glFramebufferTexture1D");
> > +                                 level, 0, 0, "glFramebufferTexture1D");
> >  }
> >
> >
> > @@ -3663,7 +3670,17 @@ _mesa_FramebufferTexture2D(GLenum target, GLenum 
> > attachment,
> >                             GLenum textarget, GLuint texture, GLint level)
> >  {
> >     framebuffer_texture_with_dims(2, target, attachment, textarget, texture,
> > -                                 level, 0, "glFramebufferTexture2D");
> > +                                 level, 0, 0, "glFramebufferTexture2D");
> > +}
> > +
> > +
> > +void GLAPIENTRY
> > +_mesa_FramebufferTexture2DMultisampleEXT(GLenum target, GLenum attachment,
> > +                                         GLenum textarget, GLuint texture,
> > +                                         GLint level, GLsizei samples)
> > +{
> > +   framebuffer_texture_with_dims(2, target, attachment, textarget, texture,
> > +                                 level, samples, 0, 
> > "glFramebufferTexture2DMultisampleEXT");
> >  }
> >
> >
> > @@ -3683,7 +3700,7 @@ _mesa_FramebufferTexture3D(GLenum target, GLenum 
> > attachment,
> >                             GLint level, GLint layer)
> >  {
> >     framebuffer_texture_with_dims(3, target, attachment, textarget, texture,
> > -                                 level, layer, "glFramebufferTexture3D");
> > +                                 level, 0, layer, 
> > "glFramebufferTexture3D");
> >  }
> >
> >
> > @@ -3773,7 +3790,7 @@ frame_buffer_texture(GLuint framebuffer, GLenum 
> > target,
> >     }
> >
> >     _mesa_framebuffer_texture(ctx, fb, attachment, att, texObj, textarget,
> > -                             level, layer, layered);
> > +                             level, 0, layer, layered);
> >  }
> >
> >  void GLAPIENTRY
> > diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h
> > index 5cd3c60297f..fcf9835dfa4 100644
> > --- a/src/mesa/main/fbobject.h
> > +++ b/src/mesa/main/fbobject.h
> > @@ -129,7 +129,8 @@ _mesa_framebuffer_texture(struct gl_context *ctx, 
> > struct gl_framebuffer *fb,
> >                            GLenum attachment,
> >                            struct gl_renderbuffer_attachment *att,
> >                            struct gl_texture_object *texObj, GLenum 
> > textarget,
> > -                          GLint level, GLuint layer, GLboolean layered);
> > +                          GLint level, GLsizei samples,
> > +                          GLuint layer, GLboolean layered);
> >
> >  extern GLenum
> >  _mesa_check_framebuffer_status(struct gl_context *ctx,
> > @@ -250,6 +251,11 @@ extern void GLAPIENTRY
> >  _mesa_FramebufferTexture2D(GLenum target, GLenum attachment,
> >                                GLenum textarget, GLuint texture, GLint 
> > level);
> >
> > +void GLAPIENTRY
> > +_mesa_FramebufferTexture2DMultisampleEXT(GLenum target, GLenum attachment,
> > +                                         GLenum textarget, GLuint texture,
> > +                                         GLint level, GLsizei samples);
> > +
> >  extern void GLAPIENTRY
> >  _mesa_FramebufferTexture3D_no_error(GLenum target, GLenum attachment,
> >                                      GLenum textarget, GLuint texture,
> > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> > index 656e1226f94..88ec55ff333 100644
> > --- a/src/mesa/main/mtypes.h
> > +++ b/src/mesa/main/mtypes.h
> > @@ -3404,6 +3404,7 @@ struct gl_renderbuffer_attachment
> >      */
> >     struct gl_texture_object *Texture;
> >     GLuint TextureLevel; /**< Attached mipmap level. */
> > +   GLsizei NumSamples;  /**< from FramebufferTexture2DMultisampleEXT */
> >     GLuint CubeMapFace;  /**< 0 .. 5, for cube map textures. */
> >     GLuint Zoffset;      /**< Slice for 3D textures,  or layer for both 1D
> >                           * and 2D array textures */
> > @@ -4244,6 +4245,7 @@ struct gl_extensions
> >     GLboolean EXT_gpu_shader4;
> >     GLboolean EXT_memory_object;
> >     GLboolean EXT_memory_object_fd;
> > +   GLboolean EXT_multisampled_render_to_texture;
> >     GLboolean EXT_packed_float;
> >     GLboolean EXT_pixel_buffer_object;
> >     GLboolean EXT_point_parameters;
> > --
> > 2.19.1.930.g4563a0d9d0-goog
> >
> > _______________________________________________
> > 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

Reply via email to