With the comment typo noticed by Ilia fixed (which I did not notice), this patch is
Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> On 05/27/2015 02:49 AM, Kevin Rogovin wrote: > Change references to gl_framebuffer::Width, Height, MaxNumLayers > and Visual::samples to use the _mesa_geometry_ convenience functions > for those places where the geometry of the gl_framebuffer is needed > (in contrast to the geometry of the intersection of the attachments > of the gl_framebuffer). > > This patch is to pave the way to enable GL_ARB_framebuffer_no_attachments > on Gen7 and higher in i965. > > v2: > Remove changes that would only be active in Gen4/5. > Type and casting changes for consistency and readability. > > v3: > Updates for rebase against master. > > v4: > Use unsigned int inplace of int and remove casts to int. > Formatting fixes. > > Signed-off-by: Kevin Rogovin <kevin.rogo...@intel.com> > --- > src/mesa/drivers/dri/i965/brw_clip_state.c | 9 ++++++--- > src/mesa/drivers/dri/i965/brw_misc_state.c | 9 ++++++--- > src/mesa/drivers/dri/i965/brw_sf_state.c | 6 ++++++ > src/mesa/drivers/dri/i965/brw_state_upload.c | 6 ++++-- > src/mesa/drivers/dri/i965/brw_wm.c | 7 ++++--- > src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 12 +++++++----- > src/mesa/drivers/dri/i965/gen6_clip_state.c | 10 +++++++--- > src/mesa/drivers/dri/i965/gen6_multisample_state.c | 3 ++- > src/mesa/drivers/dri/i965/gen6_scissor_state.c | 12 +++++++++--- > src/mesa/drivers/dri/i965/gen6_sf_state.c | 3 ++- > src/mesa/drivers/dri/i965/gen6_viewport_state.c | 5 +++-- > src/mesa/drivers/dri/i965/gen6_wm_state.c | 3 ++- > src/mesa/drivers/dri/i965/gen7_sf_state.c | 3 ++- > src/mesa/drivers/dri/i965/gen7_viewport_state.c | 5 +++-- > src/mesa/drivers/dri/i965/gen7_wm_state.c | 3 ++- > src/mesa/drivers/dri/i965/gen8_viewport_state.c | 8 +++++--- > 16 files changed, 70 insertions(+), 34 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_clip_state.c > b/src/mesa/drivers/dri/i965/brw_clip_state.c > index 3223834..dee74db 100644 > --- a/src/mesa/drivers/dri/i965/brw_clip_state.c > +++ b/src/mesa/drivers/dri/i965/brw_clip_state.c > @@ -32,6 +32,7 @@ > #include "brw_context.h" > #include "brw_state.h" > #include "brw_defines.h" > +#include "main/framebuffer.h" > > static void > upload_clip_vp(struct brw_context *brw) > @@ -59,7 +60,9 @@ brw_upload_clip_unit(struct brw_context *brw) > struct brw_clip_unit_state *clip; > > /* _NEW_BUFFERS */ > - struct gl_framebuffer *fb = ctx->DrawBuffer; > + const struct gl_framebuffer *fb = ctx->DrawBuffer; > + const float fb_width = (float)_mesa_geometric_width(fb); > + const float fb_height = (float)_mesa_geometric_height(fb); > > upload_clip_vp(brw); > > @@ -127,8 +130,8 @@ brw_upload_clip_unit(struct brw_context *brw) > /* enable guardband clipping if we can */ > if (ctx->ViewportArray[0].X == 0 && > ctx->ViewportArray[0].Y == 0 && > - ctx->ViewportArray[0].Width == (float) fb->Width && > - ctx->ViewportArray[0].Height == (float) fb->Height) > + ctx->ViewportArray[0].Width == fb_width && > + ctx->ViewportArray[0].Height == fb_height) > { > clip->clip5.guard_band_enable = 1; > clip->clip6.clipper_viewport_state_ptr = > diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c > b/src/mesa/drivers/dri/i965/brw_misc_state.c > index 67a693b..5a4515b 100644 > --- a/src/mesa/drivers/dri/i965/brw_misc_state.c > +++ b/src/mesa/drivers/dri/i965/brw_misc_state.c > @@ -39,6 +39,7 @@ > #include "brw_state.h" > #include "brw_defines.h" > > +#include "main/framebuffer.h" > #include "main/fbobject.h" > #include "main/glformats.h" > > @@ -46,12 +47,14 @@ > static void upload_drawing_rect(struct brw_context *brw) > { > struct gl_context *ctx = &brw->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); > > BEGIN_BATCH(4); > OUT_BATCH(_3DSTATE_DRAWING_RECTANGLE << 16 | (4 - 2)); > OUT_BATCH(0); /* xmin, ymin */ > - OUT_BATCH(((ctx->DrawBuffer->Width - 1) & 0xffff) | > - ((ctx->DrawBuffer->Height - 1) << 16)); > + OUT_BATCH(((fb_width - 1) & 0xffff) | ((fb_height - 1) << 16)); > OUT_BATCH(0); > ADVANCE_BATCH(); > } > @@ -767,7 +770,7 @@ static void upload_polygon_stipple_offset(struct > brw_context *brw) > * works just fine, and there's no window system to worry about. > */ > if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) > - OUT_BATCH((32 - (ctx->DrawBuffer->Height & 31)) & 31); > + OUT_BATCH((32 - (_mesa_geometric_height(ctx->DrawBuffer) & 31)) & 31); > else > OUT_BATCH(0); > ADVANCE_BATCH(); > diff --git a/src/mesa/drivers/dri/i965/brw_sf_state.c > b/src/mesa/drivers/dri/i965/brw_sf_state.c > index 014b434..5d98922 100644 > --- a/src/mesa/drivers/dri/i965/brw_sf_state.c > +++ b/src/mesa/drivers/dri/i965/brw_sf_state.c > @@ -52,6 +52,12 @@ static void upload_sf_vp(struct brw_context *brw) > sizeof(*sfv), 32, &brw->sf.vp_offset); > memset(sfv, 0, sizeof(*sfv)); > > + /* Accessing the fields Width and Height of gl_framebuffer to produce the > + * values to program the viewport and scissor is fine as long as the > + * gl_framebuffer has atleast one attachment. > + */ > + assert(ctx->DrawBuffer->_HasAttachments); > + > if (render_to_fbo) { > y_scale = 1.0; > y_bias = 0; > diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c > b/src/mesa/drivers/dri/i965/brw_state_upload.c > index 84b0861..08d1ac2 100644 > --- a/src/mesa/drivers/dri/i965/brw_state_upload.c > +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c > @@ -41,6 +41,7 @@ > #include "brw_gs.h" > #include "brw_wm.h" > #include "brw_cs.h" > +#include "main/framebuffer.h" > > static const struct brw_tracked_state *gen4_atoms[] = > { > @@ -660,6 +661,7 @@ brw_upload_pipeline_state(struct brw_context *brw, > int i; > static int dirty_count = 0; > struct brw_state_flags state = brw->state.pipelines[pipeline]; > + unsigned int fb_samples = _mesa_geometric_samples(ctx->DrawBuffer); > > brw_select_pipeline(brw, pipeline); > > @@ -696,8 +698,8 @@ brw_upload_pipeline_state(struct brw_context *brw, > brw->ctx.NewDriverState |= BRW_NEW_META_IN_PROGRESS; > } > > - if (brw->num_samples != ctx->DrawBuffer->Visual.samples) { > - brw->num_samples = ctx->DrawBuffer->Visual.samples; > + if (brw->num_samples != fb_samples) { > + brw->num_samples = fb_samples; > brw->ctx.NewDriverState |= BRW_NEW_NUM_SAMPLES; > } > > diff --git a/src/mesa/drivers/dri/i965/brw_wm.c > b/src/mesa/drivers/dri/i965/brw_wm.c > index 45a03bb..592a729 100644 > --- a/src/mesa/drivers/dri/i965/brw_wm.c > +++ b/src/mesa/drivers/dri/i965/brw_wm.c > @@ -36,6 +36,7 @@ > #include "main/formats.h" > #include "main/fbobject.h" > #include "main/samplerobj.h" > +#include "main/framebuffer.h" > #include "program/prog_parameter.h" > #include "program/program.h" > #include "intel_mipmap_tree.h" > @@ -462,7 +463,7 @@ static void brw_wm_populate_key( struct brw_context *brw, > GLuint lookup = 0; > GLuint line_aa; > bool program_uses_dfdy = fp->program.UsesDFdy; > - bool multisample_fbo = ctx->DrawBuffer->Visual.samples > 1; > + const bool multisample_fbo = _mesa_geometric_samples(ctx->DrawBuffer) > 1; > > memset(key, 0, sizeof(*key)); > > @@ -561,7 +562,7 @@ static void brw_wm_populate_key( struct brw_context *brw, > * drawable height in order to invert the Y axis. > */ > if (fp->program.Base.InputsRead & VARYING_BIT_POS) { > - key->drawable_height = ctx->DrawBuffer->Height; > + key->drawable_height = _mesa_geometric_height(ctx->DrawBuffer); > } > > if ((fp->program.Base.InputsRead & VARYING_BIT_POS) || program_uses_dfdy) > { > @@ -580,7 +581,7 @@ static void brw_wm_populate_key( struct brw_context *brw, > key->persample_shading = > _mesa_get_min_invocations_per_fragment(ctx, &fp->program, true) > 1; > if (key->persample_shading) > - key->persample_2x = ctx->DrawBuffer->Visual.samples == 2; > + key->persample_2x = _mesa_geometric_samples(ctx->DrawBuffer) == 2; > > key->compute_pos_offset = > _mesa_get_min_invocations_per_fragment(ctx, &fp->program, false) > 1 && > diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > index 160dd2f..72aad96 100644 > --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > @@ -35,6 +35,7 @@ > #include "main/mtypes.h" > #include "main/samplerobj.h" > #include "program/prog_parameter.h" > +#include "main/framebuffer.h" > > #include "intel_mipmap_tree.h" > #include "intel_batchbuffer.h" > @@ -738,6 +739,9 @@ brw_update_renderbuffer_surfaces(struct brw_context *brw, > uint32_t *surf_offset) > { > GLuint i; > + const unsigned int w = _mesa_geometric_width(fb); > + const unsigned int h = _mesa_geometric_height(fb); > + const unsigned int s = _mesa_geometric_samples(fb); > > /* Update surfaces for drawing buffers */ > if (fb->_NumColorDrawBuffers >= 1) { > @@ -748,17 +752,15 @@ brw_update_renderbuffer_surfaces(struct brw_context > *brw, > surf_offset[surf_index] = > brw->vtbl.update_renderbuffer_surface( > brw, fb->_ColorDrawBuffers[i], > - fb->MaxNumLayers > 0, i, surf_index); > + _mesa_geometric_layers(fb) > 0, i, surf_index); > } else { > - brw->vtbl.emit_null_surface_state( > - brw, fb->Width, fb->Height, fb->Visual.samples, > + brw->vtbl.emit_null_surface_state(brw, w, h, s, > &surf_offset[surf_index]); > } > } > } else { > const uint32_t surf_index = render_target_start; > - brw->vtbl.emit_null_surface_state( > - brw, fb->Width, fb->Height, fb->Visual.samples, > + brw->vtbl.emit_null_surface_state(brw, w, h, s, > &surf_offset[surf_index]); > } > } > diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c > b/src/mesa/drivers/dri/i965/gen6_clip_state.c > index aaf90df..9a29366 100644 > --- a/src/mesa/drivers/dri/i965/gen6_clip_state.c > +++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c > @@ -31,6 +31,7 @@ > #include "brw_util.h" > #include "intel_batchbuffer.h" > #include "main/fbobject.h" > +#include "main/framebuffer.h" > > static void > upload_clip_state(struct brw_context *brw) > @@ -145,11 +146,14 @@ upload_clip_state(struct brw_context *brw) > * the viewport, so we can ignore this restriction. > */ > if (brw->gen < 8) { > + const float fb_width = (float)_mesa_geometric_width(fb); > + const float fb_height = (float)_mesa_geometric_height(fb); > + > for (unsigned i = 0; i < ctx->Const.MaxViewports; i++) { > if (ctx->ViewportArray[i].X != 0 || > ctx->ViewportArray[i].Y != 0 || > - ctx->ViewportArray[i].Width != (float) fb->Width || > - ctx->ViewportArray[i].Height != (float) fb->Height) { > + ctx->ViewportArray[i].Width != fb_width || > + ctx->ViewportArray[i].Height != fb_height) { > dw2 &= ~GEN6_CLIP_GB_TEST; > break; > } > @@ -179,7 +183,7 @@ upload_clip_state(struct brw_context *brw) > dw2); > OUT_BATCH(U_FIXED(0.125, 3) << GEN6_CLIP_MIN_POINT_WIDTH_SHIFT | > U_FIXED(255.875, 3) << GEN6_CLIP_MAX_POINT_WIDTH_SHIFT | > - (fb->MaxNumLayers > 0 ? 0 : GEN6_CLIP_FORCE_ZERO_RTAINDEX) | > + (_mesa_geometric_layers(fb) > 0 ? 0 : > GEN6_CLIP_FORCE_ZERO_RTAINDEX) | > ((ctx->Const.MaxViewports - 1) & GEN6_CLIP_MAX_VP_INDEX_MASK)); > ADVANCE_BATCH(); > } > diff --git a/src/mesa/drivers/dri/i965/gen6_multisample_state.c > b/src/mesa/drivers/dri/i965/gen6_multisample_state.c > index ec46479..36734f5 100644 > --- a/src/mesa/drivers/dri/i965/gen6_multisample_state.c > +++ b/src/mesa/drivers/dri/i965/gen6_multisample_state.c > @@ -26,6 +26,7 @@ > #include "brw_context.h" > #include "brw_defines.h" > #include "brw_multisample_state.h" > +#include "main/framebuffer.h" > > void > gen6_get_sample_position(struct gl_context *ctx, > @@ -34,7 +35,7 @@ gen6_get_sample_position(struct gl_context *ctx, > { > uint8_t bits; > > - switch (fb->Visual.samples) { > + switch (_mesa_geometric_samples(fb)) { > case 1: > result[0] = result[1] = 0.5f; > return; > diff --git a/src/mesa/drivers/dri/i965/gen6_scissor_state.c > b/src/mesa/drivers/dri/i965/gen6_scissor_state.c > index 0111f15..17b4a7f 100644 > --- a/src/mesa/drivers/dri/i965/gen6_scissor_state.c > +++ b/src/mesa/drivers/dri/i965/gen6_scissor_state.c > @@ -39,6 +39,8 @@ gen6_upload_scissor_state(struct brw_context *brw) > const bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer); > struct gen6_scissor_rect *scissor; > uint32_t scissor_state_offset; > + const unsigned int fb_width= _mesa_geometric_width(ctx->DrawBuffer); > + const unsigned int fb_height = _mesa_geometric_height(ctx->DrawBuffer); > > scissor = brw_state_batch(brw, AUB_TRACE_SCISSOR_STATE, > sizeof(*scissor) * ctx->Const.MaxViewports, 32, > @@ -56,7 +58,11 @@ gen6_upload_scissor_state(struct brw_context *brw) > for (unsigned i = 0; i < ctx->Const.MaxViewports; i++) { > int bbox[4]; > > - _mesa_scissor_bounding_box(ctx, ctx->DrawBuffer, i, bbox); > + bbox[0] = 0; > + bbox[1] = fb_width; > + bbox[2] = 0; > + bbox[3] = fb_height; > + _mesa_intersect_scissor_bounding_box(ctx, i, bbox); > > if (bbox[0] == bbox[1] || bbox[2] == bbox[3]) { > /* If the scissor was out of bounds and got clamped to 0 > width/height > @@ -80,8 +86,8 @@ gen6_upload_scissor_state(struct brw_context *brw) > /* memory: Y=0=top */ > scissor[i].xmin = bbox[0]; > scissor[i].xmax = bbox[1] - 1; > - scissor[i].ymin = ctx->DrawBuffer->Height - bbox[3]; > - scissor[i].ymax = ctx->DrawBuffer->Height - bbox[2] - 1; > + scissor[i].ymin = fb_height - bbox[3]; > + scissor[i].ymax = fb_height - bbox[2] - 1; > } > } > BEGIN_BATCH(2); > diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c > b/src/mesa/drivers/dri/i965/gen6_sf_state.c > index e445ce2..834213e 100644 > --- a/src/mesa/drivers/dri/i965/gen6_sf_state.c > +++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c > @@ -31,6 +31,7 @@ > #include "brw_util.h" > #include "main/macros.h" > #include "main/fbobject.h" > +#include "main/framebuffer.h" > #include "intel_batchbuffer.h" > > /** > @@ -273,7 +274,7 @@ upload_sf_state(struct brw_context *brw) > int i; > /* _NEW_BUFFER */ > bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer); > - bool multisampled_fbo = ctx->DrawBuffer->Visual.samples > 1; > + const bool multisampled_fbo = _mesa_geometric_samples(ctx->DrawBuffer) > > 1; > > const int urb_entry_read_offset = BRW_SF_URB_ENTRY_READ_OFFSET; > float point_size; > diff --git a/src/mesa/drivers/dri/i965/gen6_viewport_state.c > b/src/mesa/drivers/dri/i965/gen6_viewport_state.c > index 2fb0182..7c8d884 100644 > --- a/src/mesa/drivers/dri/i965/gen6_viewport_state.c > +++ b/src/mesa/drivers/dri/i965/gen6_viewport_state.c > @@ -30,6 +30,7 @@ > #include "brw_defines.h" > #include "intel_batchbuffer.h" > #include "main/fbobject.h" > +#include "main/framebuffer.h" > #include "main/viewport.h" > > /* The clip VP defines the guardband region where expensive clipping is > skipped > @@ -93,10 +94,10 @@ gen6_upload_sf_vp(struct brw_context *brw) > /* _NEW_BUFFERS */ > if (render_to_fbo) { > y_scale = 1.0; > - y_bias = 0; > + y_bias = 0.0; > } else { > y_scale = -1.0; > - y_bias = ctx->DrawBuffer->Height; > + y_bias = (float)_mesa_geometric_height(ctx->DrawBuffer); > } > > for (unsigned i = 0; i < ctx->Const.MaxViewports; i++) { > diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c > b/src/mesa/drivers/dri/i965/gen6_wm_state.c > index 7081eb7..d1748ba 100644 > --- a/src/mesa/drivers/dri/i965/gen6_wm_state.c > +++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c > @@ -33,6 +33,7 @@ > #include "program/program.h" > #include "program/prog_parameter.h" > #include "program/prog_statevars.h" > +#include "main/framebuffer.h" > #include "intel_batchbuffer.h" > > static void > @@ -284,7 +285,7 @@ upload_wm_state(struct brw_context *brw) > const struct brw_wm_prog_data *prog_data = brw->wm.prog_data; > > /* _NEW_BUFFERS */ > - const bool multisampled_fbo = ctx->DrawBuffer->Visual.samples > 1; > + const bool multisampled_fbo = _mesa_geometric_samples(ctx->DrawBuffer) > > 1; > > /* In case of non 1x per sample shading, only one of SIMD8 and SIMD16 > * should be enabled. We do 'SIMD16 only' dispatch if a SIMD16 shader > diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c > b/src/mesa/drivers/dri/i965/gen7_sf_state.c > index 58e3337..60f6efa 100644 > --- a/src/mesa/drivers/dri/i965/gen7_sf_state.c > +++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c > @@ -27,6 +27,7 @@ > #include "brw_util.h" > #include "main/macros.h" > #include "main/fbobject.h" > +#include "main/framebuffer.h" > #include "intel_batchbuffer.h" > > static void > @@ -109,7 +110,7 @@ upload_sf_state(struct brw_context *brw) > float point_size; > /* _NEW_BUFFERS */ > bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer); > - bool multisampled_fbo = ctx->DrawBuffer->Visual.samples > 1; > + const bool multisampled_fbo = _mesa_geometric_samples(ctx->DrawBuffer) > > 1; > > dw1 = GEN6_SF_STATISTICS_ENABLE; > > diff --git a/src/mesa/drivers/dri/i965/gen7_viewport_state.c > b/src/mesa/drivers/dri/i965/gen7_viewport_state.c > index eb59684..b655205 100644 > --- a/src/mesa/drivers/dri/i965/gen7_viewport_state.c > +++ b/src/mesa/drivers/dri/i965/gen7_viewport_state.c > @@ -26,6 +26,7 @@ > #include "brw_defines.h" > #include "intel_batchbuffer.h" > #include "main/fbobject.h" > +#include "main/framebuffer.h" > #include "main/viewport.h" > > static void > @@ -45,10 +46,10 @@ gen7_upload_sf_clip_viewport(struct brw_context *brw) > /* _NEW_BUFFERS */ > if (render_to_fbo) { > y_scale = 1.0; > - y_bias = 0; > + y_bias = 0.0; > } else { > y_scale = -1.0; > - y_bias = ctx->DrawBuffer->Height; > + y_bias = (float)_mesa_geometric_height(ctx->DrawBuffer); > } > > for (unsigned i = 0; i < ctx->Const.MaxViewports; i++) { > diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c > b/src/mesa/drivers/dri/i965/gen7_wm_state.c > index b918275..1c47076 100644 > --- a/src/mesa/drivers/dri/i965/gen7_wm_state.c > +++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c > @@ -30,6 +30,7 @@ > #include "program/program.h" > #include "program/prog_parameter.h" > #include "program/prog_statevars.h" > +#include "main/framebuffer.h" > #include "intel_batchbuffer.h" > > static void > @@ -45,7 +46,7 @@ upload_wm_state(struct brw_context *brw) > uint32_t dw1, dw2; > > /* _NEW_BUFFERS */ > - bool multisampled_fbo = ctx->DrawBuffer->Visual.samples > 1; > + const bool multisampled_fbo = _mesa_geometric_samples(ctx->DrawBuffer) > > 1; > > dw1 = dw2 = 0; > dw1 |= GEN7_WM_STATISTICS_ENABLE; > diff --git a/src/mesa/drivers/dri/i965/gen8_viewport_state.c > b/src/mesa/drivers/dri/i965/gen8_viewport_state.c > index 322e466..2d8eeb1 100644 > --- a/src/mesa/drivers/dri/i965/gen8_viewport_state.c > +++ b/src/mesa/drivers/dri/i965/gen8_viewport_state.c > @@ -26,6 +26,7 @@ > #include "brw_defines.h" > #include "intel_batchbuffer.h" > #include "main/fbobject.h" > +#include "main/framebuffer.h" > #include "main/viewport.h" > > static void > @@ -33,6 +34,7 @@ gen8_upload_sf_clip_viewport(struct brw_context *brw) > { > struct gl_context *ctx = &brw->ctx; > float y_scale, y_bias; > + const float fb_height = (float)_mesa_geometric_height(ctx->DrawBuffer); > const bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer); > > float *vp = brw_state_batch(brw, AUB_TRACE_SF_VP_STATE, > @@ -47,7 +49,7 @@ gen8_upload_sf_clip_viewport(struct brw_context *brw) > y_bias = 0; > } else { > y_scale = -1.0; > - y_bias = ctx->DrawBuffer->Height; > + y_bias = fb_height; > } > > for (unsigned i = 0; i < ctx->Const.MaxViewports; i++) { > @@ -116,8 +118,8 @@ gen8_upload_sf_clip_viewport(struct brw_context *brw) > } else { > vp[12] = ctx->ViewportArray[i].X; > vp[13] = viewport_Xmax - 1; > - vp[14] = ctx->DrawBuffer->Height - viewport_Ymax; > - vp[15] = ctx->DrawBuffer->Height - ctx->ViewportArray[i].Y - 1; > + vp[14] = fb_height - viewport_Ymax; > + vp[15] = fb_height - ctx->ViewportArray[i].Y - 1; > } > > vp += 16; > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev