Re: [Mesa-dev] [PATCH] st/mesa: fix WPOS adjustment, with more comments

2011-04-29 Thread Marek Olšák
Tested-by: Marek Olšák mar...@gmail.com

On Wed, Apr 27, 2011 at 8:53 PM, Christoph Bumiller
e0425...@student.tuwien.ac.at wrote:
 Again, with a more detailed explanation added as comments.

 On 20.04.2011 17:33, Christoph Bumiller wrote:

 On 04/19/2011 04:00 AM, Christoph Bumiller wrote:

   On 16.04.2011 18:50, Christoph Bumiller wrote:

 I hope the new version is correct, the commit message describes why I
 did the first change, and the second change is described in a comment.

 Note that the MAD for inversion uses Height - 1 instead of Height.

 With this, piglit glsl-arb-fragment-coord-conventions and
 fbo-depth-sample-compare pass on nvc0.

 I was assuming that integer pixel centers for size 100 range from 0 to
 99 and half-integer pixel centers from 0.5 to 99.5.

 Attached a better version of the patch, potentially saving an
 instruction and avoiding precision issues with NEAREST filtering that
 made piglit's blending-in-shader fail.

 The only other location I found STATE_FB_WPOS_Y_TRANSFORM used was
 r600 classic, which should also work more correctly now since (at
 least according to gallium caps) it uses half-integer pixel center,
 and for H=100, 0.5 * -1 + 99 obviously isn't the desired 99.5.

 Please review.

 Unfortunately I found another small error making a more precise piglit
 test that draws to a float buffer instead of mangling the coordinate
 like the original test does, which conceals errors.

 Now there's a dependency again on whether inversion is actually done or
 not, so I added a check on the inversion constant in the shader, but
 maybe adding additional uniforms or even adjusting
 STATE_FB_WPOS_Y_TRANSFORM dependent on the coordinat convention might be
 nicer ?

 Sorry for not noticing right away,
 Christoph

 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev


 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] st/mesa: fix WPOS adjustment, with more comments

2011-04-27 Thread Christoph Bumiller
Again, with a more detailed explanation added as comments.

On 20.04.2011 17:33, Christoph Bumiller wrote:
 On 04/19/2011 04:00 AM, Christoph Bumiller wrote:
   On 16.04.2011 18:50, Christoph Bumiller wrote:
 I hope the new version is correct, the commit message describes why I
 did the first change, and the second change is described in a comment.

 Note that the MAD for inversion uses Height - 1 instead of Height.

 With this, piglit glsl-arb-fragment-coord-conventions and
 fbo-depth-sample-compare pass on nvc0.

 I was assuming that integer pixel centers for size 100 range from 0 to
 99 and half-integer pixel centers from 0.5 to 99.5.

 Attached a better version of the patch, potentially saving an
 instruction and avoiding precision issues with NEAREST filtering that
 made piglit's blending-in-shader fail.

 The only other location I found STATE_FB_WPOS_Y_TRANSFORM used was
 r600 classic, which should also work more correctly now since (at
 least according to gallium caps) it uses half-integer pixel center,
 and for H=100, 0.5 * -1 + 99 obviously isn't the desired 99.5.

 Please review.
 Unfortunately I found another small error making a more precise piglit
 test that draws to a float buffer instead of mangling the coordinate
 like the original test does, which conceals errors.

 Now there's a dependency again on whether inversion is actually done or
 not, so I added a check on the inversion constant in the shader, but
 maybe adding additional uniforms or even adjusting
 STATE_FB_WPOS_Y_TRANSFORM dependent on the coordinat convention might be
 nicer ?

 Sorry for not noticing right away,
 Christoph


 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev

From 1353940f25d8566554621e907938da1e294d9a77 Mon Sep 17 00:00:00 2001
From: Christoph Bumiller e0425...@student.tuwien.ac.at
Date: Wed, 27 Apr 2011 20:51:50 +0200
Subject: [PATCH 1/2] mesa,st/mesa: fix WPOS adjustment

---
 src/mesa/program/prog_statevars.c|4 +-
 src/mesa/program/prog_statevars.h|2 +-
 src/mesa/state_tracker/st_mesa_to_tgsi.c |  110 +++---
 3 files changed, 74 insertions(+), 42 deletions(-)

diff --git a/src/mesa/program/prog_statevars.c 
b/src/mesa/program/prog_statevars.c
index 1fd26f4..d94d7fe 100644
--- a/src/mesa/program/prog_statevars.c
+++ b/src/mesa/program/prog_statevars.c
@@ -602,11 +602,11 @@ _mesa_fetch_state(struct gl_context *ctx, const 
gl_state_index state[],
 value[0] = 1.0F;
 value[1] = 0.0F;
 value[2] = -1.0F;
-value[3] = (GLfloat) (ctx-DrawBuffer-Height - 1);
+value[3] = (GLfloat) ctx-DrawBuffer-Height;
  } else {
 /* Flipping Y upside down (XY) followed by identity (ZW). */
 value[0] = -1.0F;
-value[1] = (GLfloat) (ctx-DrawBuffer-Height - 1);
+value[1] = (GLfloat) ctx-DrawBuffer-Height;
 value[2] = 1.0F;
 value[3] = 0.0F;
  }
diff --git a/src/mesa/program/prog_statevars.h 
b/src/mesa/program/prog_statevars.h
index 9fe8d81..04af3f4 100644
--- a/src/mesa/program/prog_statevars.h
+++ b/src/mesa/program/prog_statevars.h
@@ -120,7 +120,7 @@ typedef enum gl_state_index_ {
STATE_PT_BIAS,   /** Pixel transfer RGBA bias */
STATE_SHADOW_AMBIENT,/** ARB_shadow_ambient fail value; token[2] 
is texture unit index */
STATE_FB_SIZE,   /** (width-1, height-1, 0, 0) */
-   STATE_FB_WPOS_Y_TRANSFORM,   /** (1, 0, -1, height-1) if a FBO is bound, 
(-1, height-1, 1, 0) otherwise */
+   STATE_FB_WPOS_Y_TRANSFORM,   /** (1, 0, -1, height) if a FBO is bound, 
(-1, height, 1, 0) otherwise */
STATE_ROT_MATRIX_0,  /** ATI_envmap_bumpmap, rot matrix row 0 */
STATE_ROT_MATRIX_1,  /** ATI_envmap_bumpmap, rot matrix row 1 */
STATE_INTERNAL_DRIVER   /* first available state index for drivers 
(must be last) */
diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c 
b/src/mesa/state_tracker/st_mesa_to_tgsi.c
index c07739f..a41e5b1 100644
--- a/src/mesa/state_tracker/st_mesa_to_tgsi.c
+++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c
@@ -752,37 +752,15 @@ compile_instruction(
 
 
 /**
- * Emit the TGSI instructions to adjust the WPOS pixel center convention
- * Basically, add (adjX, adjY) to the fragment position.
- */
-static void
-emit_adjusted_wpos( struct st_translate *t,
-const struct gl_program *program,
-GLfloat adjX, GLfloat adjY)
-{
-   struct ureg_program *ureg = t-ureg;
-   struct ureg_dst wpos_temp = ureg_DECL_temporary(ureg);
-   struct ureg_src wpos_input = t-inputs[t-inputMapping[FRAG_ATTRIB_WPOS]];
-
-   /* Note that we bias X and Y and pass Z and W through unchanged.
-* The shader might also use gl_FragCoord.w and .z.
-*/
-   ureg_ADD(ureg, wpos_temp, wpos_input,
-ureg_imm4f(ureg, adjX, adjY, 0.0f,