summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mesa/pipe/i915simple/i915_state.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/mesa/pipe/i915simple/i915_state.c b/src/mesa/pipe/i915simple/i915_state.c
index ebc55eb6346..a176165b74a 100644
--- a/src/mesa/pipe/i915simple/i915_state.c
+++ b/src/mesa/pipe/i915simple/i915_state.c
@@ -189,11 +189,24 @@ 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, viewport);
+ draw_set_viewport_state(i915->draw, &i915->viewport);
/* Using tnl/ and vf/ modules is temporary while getting started.
* Full pipe will have vertex shader, vertex fetch of its own.