From 3d31252d44fb5983a089b9f3488745757772adea Mon Sep 17 00:00:00 2001 From: Brian Date: Thu, 9 Aug 2007 18:24:37 -0600 Subject: [PATCH] move viewport Y inversion to state tracker --- src/mesa/pipe/i915simple/i915_state.c | 13 ------ src/mesa/state_tracker/st_atom_viewport.c | 57 +++++++++-------------- 2 files changed, 21 insertions(+), 49 deletions(-) diff --git a/src/mesa/pipe/i915simple/i915_state.c b/src/mesa/pipe/i915simple/i915_state.c index a176165b74a..ab00cbc822f 100644 --- a/src/mesa/pipe/i915simple/i915_state.c +++ b/src/mesa/pipe/i915simple/i915_state.c @@ -189,22 +189,9 @@ static void i915_set_viewport_state( struct pipe_context *pipe, const struct pipe_viewport_state *viewport ) { struct i915_context *i915 = i915_context(pipe); - float sy, ty; i915->viewport = *viewport; /* struct copy */ - /* Negate Y scale to flip image vertically. - * The NDC Y coords prior to viewport transformation are in the range - * [y=-1=bottom, y=1=top] - * Intel window coords are in the range [y=0=top, y=H-1=bottom] where H - * is the window height. - * Use the viewport transformation to invert Y. - */ - sy = viewport->scale[1]; - ty = viewport->translate[1]; - i915->viewport.scale[1] = -sy; - i915->viewport.translate[1] = i915->framebuffer.cbufs[0]->height - ty; - /* pass the viewport info to the draw module */ draw_set_viewport_state(i915->draw, &i915->viewport); diff --git a/src/mesa/state_tracker/st_atom_viewport.c b/src/mesa/state_tracker/st_atom_viewport.c index ac91f628aab..1307cbb6d2a 100644 --- a/src/mesa/state_tracker/st_atom_viewport.c +++ b/src/mesa/state_tracker/st_atom_viewport.c @@ -33,9 +33,6 @@ #include "st_atom.h" - - - /** * Update the viewport transformation matrix. Depends on: * - viewport pos/size @@ -45,49 +42,37 @@ static void update_viewport( struct st_context *st ) { GLcontext *ctx = st->ctx; - const GLframebuffer *DrawBuffer = ctx->DrawBuffer; - GLfloat yScale = 1.0; - GLfloat yBias = 0.0; + GLfloat yScale, yBias; - /* _NEW_BUFFERS + /* Negate Y scale to flip image vertically. + * The NDC Y coords prior to viewport transformation are in the range + * [y=-1=bottom, y=1=top] + * Hardware window coords are in the range [y=0=top, y=H-1=bottom] where H + * is the window height. + * Use the viewport transformation to invert Y. */ - if (DrawBuffer) { -#if 0 - if (DrawBuffer->Name) { - /* User created FBO */ - struct st_renderbuffer *irb - = st_renderbuffer(DrawBuffer->_ColorDrawBuffers[0][0]); - if (irb && !irb->RenderToTexture) { - /* y=0=top */ - yScale = -1.0; - yBias = irb->Base.Height; - } - else { - /* y=0=bottom */ - yScale = 1.0; - yBias = 0.0; - } - } - else - { - /* window buffer, y=0=top */ - yScale = -1.0; - yBias = DrawBuffer->Height; - } -#endif + /* _NEW_BUFFERS + */ + if (ctx->DrawBuffer) { + yScale = -1; + yBias = ctx->DrawBuffer->Height ; + } + else { + /* we won't be rendering anything */ + yScale = 1.0; + yBias = 0.0; } + /* _NEW_VIEWPORT + */ { - /* _NEW_VIEWPORT - */ GLfloat x = ctx->Viewport.X; GLfloat y = ctx->Viewport.Y; GLfloat z = ctx->Viewport.Near; GLfloat half_width = ctx->Viewport.Width / 2.0; GLfloat half_height = ctx->Viewport.Height / 2.0; GLfloat half_depth = (ctx->Viewport.Far - ctx->Viewport.Near) / 2.0; - struct pipe_viewport_state vp; vp.scale[0] = half_width; @@ -95,9 +80,9 @@ static void update_viewport( struct st_context *st ) vp.scale[2] = half_depth; vp.scale[3] = 1.0; - vp.translate[0] = (half_width + x); + vp.translate[0] = half_width + x; vp.translate[1] = (half_height + y) * yScale + yBias; - vp.translate[2] = (half_depth + z); + vp.translate[2] = half_depth + z; vp.translate[3] = 0.0; if (memcmp(&vp, &st->state.viewport, sizeof(vp)) != 0) { -- 2.30.2