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? > > 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. > + > +<!-- Already defined in FramebufferTexture2DMultisampleEXT I think you meant to say something else here... > + <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... > } > 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