mesa/st: Use _mesa_geometric_ functions appropriately
authorEdward O'Callaghan <eocallaghan@alterapraxis.com>
Fri, 1 Jan 2016 18:55:49 +0000 (05:55 +1100)
committerDave Airlie <airlied@redhat.com>
Thu, 7 Apr 2016 01:56:35 +0000 (11:56 +1000)
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.

V.2:
 Remove itermeditate variable state.

Signed-off-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/mesa/state_tracker/st_atom_rasterizer.c
src/mesa/state_tracker/st_atom_scissor.c
src/mesa/state_tracker/st_cb_drawtex.c
src/mesa/state_tracker/st_cb_msaa.c

index 366163e42df6102bc514407e00dd5b000ce78d2c..ed9deb0332726a7f5974dd859182370343fae72f 100644 (file)
@@ -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;
index 4ebe799e35d80ed4a527319394170f89f9f93432..605d5cba9e7cebac3e14c60b940943fa991e271b 100644 (file)
@@ -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 */
index a7926295277e98a9367c052759defdd7e1bdbda1..e2af2357f021d03443f99bd8276680c4c02d6cb8 100644 (file)
@@ -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);
index d581f2121b0214175def9b3b0f2c826df108249d..22001e499736e7345ac5abd774c27ebf4a685fbf 100644 (file)
@@ -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"
@@ -47,7 +48,8 @@ st_GetSamplePosition(struct gl_context *ctx,
    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,
+                                    _mesa_geometric_samples(fb),
                                     index, outPos);
    else
       outPos[0] = outPos[1] = 0.5f;