[Mesa-dev] i915: Only invert wpos when rendering to the system framebuffer.

Henri Verbeet hverbeet at gmail.com
Sat Feb 26 22:22:28 PST 2011


---
 src/mesa/drivers/dri/i915/intel_tris.c |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/mesa/drivers/dri/i915/intel_tris.c b/src/mesa/drivers/dri/i915/intel_tris.c
index cf9291c..7bcb72f 100644
--- a/src/mesa/drivers/dri/i915/intel_tris.c
+++ b/src/mesa/drivers/dri/i915/intel_tris.c
@@ -490,6 +490,7 @@ static void
 intel_wpos_triangle(struct intel_context *intel,
                     intelVertexPtr v0, intelVertexPtr v1, intelVertexPtr v2)
 {
+   const struct gl_framebuffer *fb = intel->ctx.DrawBuffer;
    GLuint offset = intel->wpos_offset;
    GLuint size = intel->wpos_size;
    GLfloat *v0_wpos = (GLfloat *)((char *)v0 + offset);
@@ -500,10 +501,11 @@ intel_wpos_triangle(struct intel_context *intel,
    __memcpy(v1_wpos, v1, size);
    __memcpy(v2_wpos, v2, size);
 
-   v0_wpos[1] = -v0_wpos[1] + intel->ctx.DrawBuffer->Height;
-   v1_wpos[1] = -v1_wpos[1] + intel->ctx.DrawBuffer->Height;
-   v2_wpos[1] = -v2_wpos[1] + intel->ctx.DrawBuffer->Height;
-
+   if (!fb->Name) {
+      v0_wpos[1] = -v0_wpos[1] + fb->Height;
+      v1_wpos[1] = -v1_wpos[1] + fb->Height;
+      v2_wpos[1] = -v2_wpos[1] + fb->Height;
+   }
 
    intel_draw_triangle(intel, v0, v1, v2);
 }
@@ -513,6 +515,7 @@ static void
 intel_wpos_line(struct intel_context *intel,
                 intelVertexPtr v0, intelVertexPtr v1)
 {
+   const struct gl_framebuffer *fb = intel->ctx.DrawBuffer;
    GLuint offset = intel->wpos_offset;
    GLuint size = intel->wpos_size;
    GLfloat *v0_wpos = (GLfloat *)((char *)v0 + offset);
@@ -521,8 +524,10 @@ intel_wpos_line(struct intel_context *intel,
    __memcpy(v0_wpos, v0, size);
    __memcpy(v1_wpos, v1, size);
 
-   v0_wpos[1] = -v0_wpos[1] + intel->ctx.DrawBuffer->Height;
-   v1_wpos[1] = -v1_wpos[1] + intel->ctx.DrawBuffer->Height;
+   if (!fb->Name) {
+      v0_wpos[1] = -v0_wpos[1] + fb->Height;
+      v1_wpos[1] = -v1_wpos[1] + fb->Height;
+   }
 
    intel_draw_line(intel, v0, v1);
 }
@@ -531,12 +536,15 @@ intel_wpos_line(struct intel_context *intel,
 static void
 intel_wpos_point(struct intel_context *intel, intelVertexPtr v0)
 {
+   const struct gl_framebuffer *fb = intel->ctx.DrawBuffer;
    GLuint offset = intel->wpos_offset;
    GLuint size = intel->wpos_size;
    GLfloat *v0_wpos = (GLfloat *)((char *)v0 + offset);
 
    __memcpy(v0_wpos, v0, size);
-   v0_wpos[1] = -v0_wpos[1] + intel->ctx.DrawBuffer->Height;
+
+   if (!fb->Name)
+      v0_wpos[1] = -v0_wpos[1] + fb->Height;
 
    intel_draw_point(intel, v0);
 }
-- 
1.7.2.3



More information about the mesa-dev mailing list