[Mesa-dev] [PATCH 2/4] st/mesa: Add support for EXT_multisampled_render_to_texture
Kristian Høgsberg
hoegsberg at gmail.com
Tue Nov 6 20:53:13 UTC 2018
On Tue, Nov 6, 2018 at 12:09 PM Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>
> On Tue, Nov 6, 2018 at 2:31 PM Kristian H. Kristensen
> <hoegsberg at gmail.com> wrote:
> >
> > In gallium, we model the attachment sample count as a new nr_samples
> > field in pipe_surface. A driver can indicate support for the extension
> > using the new pipe cap, PIPE_CAP_MULTISAMPLED_RENDER_TO_TEXTURE.
> >
> > Signed-off-by: Kristian H. Kristensen <hoegsberg at chromium.org>
> > ---
> > src/gallium/include/pipe/p_defines.h | 1 +
> > src/gallium/include/pipe/p_state.h | 6 ++++++
> > src/mesa/state_tracker/st_cb_fbo.c | 3 +++
> > src/mesa/state_tracker/st_cb_fbo.h | 1 +
> > src/mesa/state_tracker/st_extensions.c | 1 +
> > 5 files changed, 12 insertions(+)
> >
> > diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
> > index dacedf5b936..0ecfaf3ba5e 100644
> > --- a/src/gallium/include/pipe/p_defines.h
> > +++ b/src/gallium/include/pipe/p_defines.h
> > @@ -823,6 +823,7 @@ enum pipe_cap
> > PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTER_BUFFERS,
> > PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET,
> > PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET,
> > + PIPE_CAP_MULTISAMPLED_RENDER_TO_TEXTURE,
>
> I think you forgot to "git add src/gallium/docs/source/screen.rst"
Ah yes, uhm, forgot :) Didn't know about that, will update.
> Also, I don't feel strongly about a situation where there are so few
> st/mesa changes, but most of the time, gallium changes are done
> separately of st/mesa changes.
I thought that might be the case. I'll split the commit.
> > };
> >
> > /**
> > diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
> > index fd670345aad..89cffb15bd8 100644
> > --- a/src/gallium/include/pipe/p_state.h
> > +++ b/src/gallium/include/pipe/p_state.h
> > @@ -443,6 +443,12 @@ struct pipe_surface
> > uint16_t width; /**< logical width in pixels */
> > uint16_t height; /**< logical height in pixels */
> >
> > + /** Number of samples for the surface. This can be different from the
> > + * resource nr_samples when the resource is bound using
> > + * FramebufferTexture2DMultisampleEXT.
> > + */
> > + unsigned nr_samples:8;
> > +
> > union pipe_surface_desc u;
> > };
> >
> > diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
> > index 0e535257cb4..8901a8680ef 100644
> > --- a/src/mesa/state_tracker/st_cb_fbo.c
> > +++ b/src/mesa/state_tracker/st_cb_fbo.c
> > @@ -516,6 +516,7 @@ st_update_renderbuffer_surface(struct st_context *st,
> > surf->texture != resource ||
> > surf->width != rtt_width ||
> > surf->height != rtt_height ||
> > + surf->nr_samples != strb->rtt_nr_samples ||
> > surf->u.tex.level != level ||
> > surf->u.tex.first_layer != first_layer ||
> > surf->u.tex.last_layer != last_layer) {
> > @@ -523,6 +524,7 @@ st_update_renderbuffer_surface(struct st_context *st,
> > struct pipe_surface surf_tmpl;
> > memset(&surf_tmpl, 0, sizeof(surf_tmpl));
> > surf_tmpl.format = format;
> > + surf_tmpl.nr_samples = strb->rtt_nr_samples;
> > surf_tmpl.u.tex.level = level;
> > surf_tmpl.u.tex.first_layer = first_layer;
> > surf_tmpl.u.tex.last_layer = last_layer;
> > @@ -572,6 +574,7 @@ st_render_texture(struct gl_context *ctx,
> > strb->rtt_face = att->CubeMapFace;
> > strb->rtt_slice = att->Zoffset;
> > strb->rtt_layered = att->Layered;
> > + strb->rtt_nr_samples = att->NumSamples;
> > pipe_resource_reference(&strb->texture, pt);
> >
> > st_update_renderbuffer_surface(st, strb);
> > diff --git a/src/mesa/state_tracker/st_cb_fbo.h b/src/mesa/state_tracker/st_cb_fbo.h
> > index 345c11442c6..046f01713ce 100644
> > --- a/src/mesa/state_tracker/st_cb_fbo.h
> > +++ b/src/mesa/state_tracker/st_cb_fbo.h
> > @@ -69,6 +69,7 @@ struct st_renderbuffer
> > boolean is_rtt; /**< whether Driver.RenderTexture was called */
> > unsigned rtt_face, rtt_slice;
> > boolean rtt_layered; /**< whether glFramebufferTexture was called */
> > + unsigned rtt_nr_samples; /**< from FramebufferTexture2DMultisampleEXT */
> > };
> >
> >
> > diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
> > index 16889074f66..9a1594212dd 100644
> > --- a/src/mesa/state_tracker/st_extensions.c
> > +++ b/src/mesa/state_tracker/st_extensions.c
> > @@ -740,6 +740,7 @@ void st_init_extensions(struct pipe_screen *screen,
> > { o(EXT_draw_buffers2), PIPE_CAP_INDEP_BLEND_ENABLE },
> > { o(EXT_memory_object), PIPE_CAP_MEMOBJ },
> > { o(EXT_memory_object_fd), PIPE_CAP_MEMOBJ },
> > + { o(EXT_multisampled_render_to_texture), PIPE_CAP_MULTISAMPLED_RENDER_TO_TEXTURE },
> > { o(EXT_semaphore), PIPE_CAP_FENCE_SIGNAL },
> > { o(EXT_semaphore_fd), PIPE_CAP_FENCE_SIGNAL },
> > { o(EXT_texture_array), PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS },
> > --
> > 2.19.1.930.g4563a0d9d0-goog
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list