Mesa (mesa_7_0_branch): Fix fragment.position in textured CopyPixels.

Gary Wong gary at kemper.freedesktop.org
Mon Sep 29 13:22:06 UTC 2008


Module: Mesa
Branch: mesa_7_0_branch
Commit: 3239ec474e3542a49a929bfbf9af9413d9eab3d5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3239ec474e3542a49a929bfbf9af9413d9eab3d5

Author: Gary Wong <gtw at gnu.org>
Date:   Mon Sep 29 09:06:39 2008 -0400

Fix fragment.position in textured CopyPixels.

(The previous code was bug-compatible with fragment.position being
computed in screen coords instead of window coords (bug #9151).  Since
that was fixed, in commit 9c8f27ba1366da07e20e86a0d48341ea97f5cda4,
the meta-op fragment program must be updated to correctly use window
coords as well.)

---

 src/mesa/drivers/dri/i965/brw_metaops.c |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_metaops.c b/src/mesa/drivers/dri/i965/brw_metaops.c
index cd6d287..c2f93a7 100644
--- a/src/mesa/drivers/dri/i965/brw_metaops.c
+++ b/src/mesa/drivers/dri/i965/brw_metaops.c
@@ -145,8 +145,8 @@ static const char *fp_prog =
 static const char *fp_tex_prog =
       "!!ARBfp1.0\n"
       "TEMP a;\n"
-      "ADD a, fragment.position, program.local[0];\n"
-      "MUL a, a, program.local[1];\n"
+      "MUL a, fragment.position, program.local[0];\n"
+      "ADD a, a, program.local[1];\n"
       "TEX result.color, a, texture[0], 2D;\n"
       "MOV result.depth.z, fragment.position;\n"
       "END\n";
@@ -339,16 +339,20 @@ static void meta_frame_buffer_texture( struct intel_context *intel,
       instead of brw->attribs.FragmentProgram. */
    intel->ctx.FragmentProgram.Current = brw->metaops.fp_tex;
 
-   brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 0 ] = xoff;
-   brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 1 ] = yoff;
+   brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 0 ] =
+      1.0 / region->pitch;
+   brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 1 ] =
+      -1.0 / region->height;
    brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 2 ] = 0.0;
-   brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 3 ] = 0.0;
+   brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 3 ] = 1.0;
+   
    brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 0 ] =
-      1.0 / region->pitch;
+      ( intel->driDrawable->x + xoff + 0.5 ) / region->pitch;
    brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 1 ] =
-      -1.0 / region->height;
+      ( intel->driDrawable->y + intel->driDrawable->h - yoff - 0.5 ) /
+      region->height;
    brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 2 ] = 0.0;
-   brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 3 ] = 1.0;
+   brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 3 ] = 0.0;
    
    brw->state.dirty.mesa |= _NEW_PROGRAM;
 }




More information about the mesa-commit mailing list