On Tue, Nov 6, 2018 at 2:31 PM Kristian H. Kristensen
<hoegsb...@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 <hoegsb...@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"

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.

>  };
>
>  /**
> 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@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