Also adding this: diff --git a/src/mesa/state_tracker/st_atom_viewport.c b/src/mesa/state_tracker/st_atom_viewport.c index b434f0d..d01836f 100644 --- a/src/mesa/state_tracker/st_atom_viewport.c +++ b/src/mesa/state_tracker/st_atom_viewport.c @@ -54,9 +54,10 @@ st_update_viewport( struct st_context *st ) _mesa_get_viewport_xform(ctx, i, scale, translate);
/* _NEW_BUFFERS */ + /* Drawing to a window where the coordinate system is upside down. */ if (st->state.fb_orientation == Y_0_TOP) { scale[1] *= -1; - translate[1] = translate[1] * -1 + st->state.fb_height; + translate[1] = st->state.fb_height - translate[1]; } } Marek On Wed, Jun 14, 2017 at 11:41 PM, Marek Olšák <mar...@gmail.com> wrote: > From: Marek Olšák <marek.ol...@amd.com> > > --- > src/mesa/state_tracker/st_atom_viewport.c | 34 > ++++++++----------------------- > 1 file changed, 9 insertions(+), 25 deletions(-) > > diff --git a/src/mesa/state_tracker/st_atom_viewport.c > b/src/mesa/state_tracker/st_atom_viewport.c > index 1fc8908..9a9d570 100644 > --- a/src/mesa/state_tracker/st_atom_viewport.c > +++ b/src/mesa/state_tracker/st_atom_viewport.c > @@ -36,47 +36,31 @@ > /** > * Update the viewport transformation matrix. Depends on: > * - viewport pos/size > * - depthrange > * - window pos/size or FBO size > */ > void > st_update_viewport( struct st_context *st ) > { > struct gl_context *ctx = st->ctx; > - GLfloat yScale, yBias; > unsigned i; > - /* _NEW_BUFFERS > - */ > - if (st->state.fb_orientation == Y_0_TOP) { > - /* Drawing to a window. The corresponding gallium surface uses > - * Y=0=TOP but OpenGL is Y=0=BOTTOM. So we need to invert the > viewport. > - */ > - yScale = -1; > - yBias = (GLfloat)ctx->DrawBuffer->Height; > - } > - else { > - /* Drawing to an FBO where Y=0=BOTTOM, like OpenGL - don't invert */ > - yScale = 1.0; > - yBias = 0.0; > - } > > /* _NEW_VIEWPORT > */ > - for (i = 0; i < ctx->Const.MaxViewports; i++) > - { > - float scale[3], translate[3]; > - _mesa_get_viewport_xform(ctx, i, scale, translate); > + for (i = 0; i < ctx->Const.MaxViewports; i++) { > + float *scale = st->state.viewport[i].scale; > + float *translate = st->state.viewport[i].translate; > > - st->state.viewport[i].scale[0] = scale[0]; > - st->state.viewport[i].scale[1] = scale[1] * yScale; > - st->state.viewport[i].scale[2] = scale[2]; > + _mesa_get_viewport_xform(ctx, i, scale, translate); > > - st->state.viewport[i].translate[0] = translate[0]; > - st->state.viewport[i].translate[1] = translate[1] * yScale + yBias; > - st->state.viewport[i].translate[2] = translate[2]; > + /* _NEW_BUFFERS */ > + if (st->state.fb_orientation == Y_0_TOP) { > + scale[1] *= -1; > + translate[1] = translate[1] * -1 + st->state.fb_height; > + } > } > > cso_set_viewport(st->cso_context, &st->state.viewport[0]); > if (ctx->Const.MaxViewports > 1) > st->pipe->set_viewport_states(st->pipe, 1, ctx->Const.MaxViewports - > 1, &st->state.viewport[1]); > } > -- > 2.7.4 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev