[Mesa-dev] [PATCH 05/17] mesa/st: Use _mesa_geometric_ functions appropriately

Ilia Mirkin imirkin at alum.mit.edu
Fri Mar 25 03:17:54 UTC 2016


On Thu, Mar 24, 2016 at 8:11 PM, Edward O'Callaghan
<eocallaghan at alterapraxis.com> wrote:
> Change references to gl_framebuffer::Width, Height, MaxNumLayers
> and Visual::samples to use the _mesa_geometric_ convenience functions
> for those places where the geometry of the gl_framebuffer is needed.
> This is in contrast to the geometry of the intersection of the
> attachments of the gl_framebuffer.
>
> This patch paves the way to enable GL_ARB_framebuffer_no_attachements
> for all gallium drivers.
>
> Signed-off-by: Edward O'Callaghan <eocallaghan at alterapraxis.com>
> Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
> Reviewed-by: Brian Paul <brianp at vmware.com>
> Reviewed-by: Marek Olšák <marek.olsak at amd.com>
> ---
>  src/mesa/state_tracker/st_atom_rasterizer.c | 2 +-
>  src/mesa/state_tracker/st_atom_scissor.c    | 8 ++++++--
>  src/mesa/state_tracker/st_cb_drawtex.c      | 9 +++++----
>  src/mesa/state_tracker/st_cb_msaa.c         | 4 +++-
>  4 files changed, 15 insertions(+), 8 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_atom_rasterizer.c b/src/mesa/state_tracker/st_atom_rasterizer.c
> index 366163e..ed9deb0 100644
> --- a/src/mesa/state_tracker/st_atom_rasterizer.c
> +++ b/src/mesa/state_tracker/st_atom_rasterizer.c
> @@ -244,7 +244,7 @@ static void update_raster_state( struct st_context *st )
>           _mesa_is_multisample_enabled(ctx) &&
>           ctx->Multisample.SampleShading &&
>           ctx->Multisample.MinSampleShadingValue *
> -         ctx->DrawBuffer->Visual.samples > 1;
> +         _mesa_geometric_samples(ctx->DrawBuffer) > 1;
>
>     /* _NEW_SCISSOR */
>     raster->scissor = ctx->Scissor.EnableFlags;
> diff --git a/src/mesa/state_tracker/st_atom_scissor.c b/src/mesa/state_tracker/st_atom_scissor.c
> index 4ebe799..605d5cb 100644
> --- a/src/mesa/state_tracker/st_atom_scissor.c
> +++ b/src/mesa/state_tracker/st_atom_scissor.c
> @@ -32,6 +32,7 @@
>
>
>  #include "main/macros.h"
> +#include "main/framebuffer.h"
>  #include "st_context.h"
>  #include "pipe/p_context.h"
>  #include "st_atom.h"
> @@ -46,14 +47,17 @@ update_scissor( struct st_context *st )
>     struct pipe_scissor_state scissor[PIPE_MAX_VIEWPORTS];
>     const struct gl_context *ctx = st->ctx;
>     const struct gl_framebuffer *fb = ctx->DrawBuffer;
> +   const unsigned int fb_width = _mesa_geometric_width(fb);
> +   const unsigned int fb_height = _mesa_geometric_height(fb);
>     GLint miny, maxy;
>     unsigned i;
>     bool changed = false;
> +
>     for (i = 0 ; i < ctx->Const.MaxViewports; i++) {
>        scissor[i].minx = 0;
>        scissor[i].miny = 0;
> -      scissor[i].maxx = fb->Width;
> -      scissor[i].maxy = fb->Height;
> +      scissor[i].maxx = fb_width;
> +      scissor[i].maxy = fb_height;
>
>        if (ctx->Scissor.EnableFlags & (1 << i)) {
>           /* need to be careful here with xmax or ymax < 0 */
> diff --git a/src/mesa/state_tracker/st_cb_drawtex.c b/src/mesa/state_tracker/st_cb_drawtex.c
> index a792629..e2af235 100644
> --- a/src/mesa/state_tracker/st_cb_drawtex.c
> +++ b/src/mesa/state_tracker/st_cb_drawtex.c
> @@ -16,6 +16,7 @@
>  #include "main/image.h"
>  #include "main/macros.h"
>  #include "main/teximage.h"
> +#include "main/framebuffer.h"
>  #include "program/program.h"
>  #include "program/prog_print.h"
>
> @@ -166,8 +167,8 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
>        /* positions (in clip coords) */
>        {
>           const struct gl_framebuffer *fb = ctx->DrawBuffer;
> -         const GLfloat fb_width = (GLfloat)fb->Width;
> -         const GLfloat fb_height = (GLfloat)fb->Height;
> +         const GLfloat fb_width = (GLfloat)_mesa_geometric_width(fb);
> +         const GLfloat fb_height = (GLfloat)_mesa_geometric_height(fb);
>
>           const GLfloat clip_x0 = (GLfloat)(x0 / fb_width * 2.0 - 1.0);
>           const GLfloat clip_y0 = (GLfloat)(y0 / fb_height * 2.0 - 1.0);
> @@ -262,8 +263,8 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
>     {
>        const struct gl_framebuffer *fb = ctx->DrawBuffer;
>        const GLboolean invert = (st_fb_orientation(fb) == Y_0_TOP);
> -      const GLfloat width = (GLfloat)fb->Width;
> -      const GLfloat height = (GLfloat)fb->Height;
> +      const GLfloat width = (GLfloat)_mesa_geometric_width(fb);
> +      const GLfloat height = (GLfloat)_mesa_geometric_height(fb);
>        struct pipe_viewport_state vp;
>        vp.scale[0] =  0.5f * width;
>        vp.scale[1] = height * (invert ? -0.5f : 0.5f);
> diff --git a/src/mesa/state_tracker/st_cb_msaa.c b/src/mesa/state_tracker/st_cb_msaa.c
> index d581f21..09923c8 100644
> --- a/src/mesa/state_tracker/st_cb_msaa.c
> +++ b/src/mesa/state_tracker/st_cb_msaa.c
> @@ -27,6 +27,7 @@
>
>  #include "main/bufferobj.h"
>  #include "main/imports.h"
> +#include "main/framebuffer.h"
>
>  #include "state_tracker/st_cb_msaa.h"
>  #include "state_tracker/st_context.h"
> @@ -43,11 +44,12 @@ st_GetSamplePosition(struct gl_context *ctx,
>                       GLfloat *outPos)
>  {
>     struct st_context *st = st_context(ctx);
> +   unsigned int fb_samples = _mesa_geometric_samples(fb);

Don't you need to do this after the st_validate_state is done flushing
out state updates including _NumSamples? I'd just get rid of the
temporary if I were you...

>
>     st_validate_state(st, ST_PIPELINE_RENDER);
>
>     if (st->pipe->get_sample_position)
> -      st->pipe->get_sample_position(st->pipe, (unsigned) fb->Visual.samples,
> +      st->pipe->get_sample_position(st->pipe, fb_samples,
>                                      index, outPos);
>     else
>        outPos[0] = outPos[1] = 0.5f;
> --
> 2.5.5
>
> _______________________________________________
> 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