Mesa (master): i965: Upload required gen6 VS push constants even when using pull constants.

Eric Anholt anholt at kemper.freedesktop.org
Thu Oct 28 23:29:28 UTC 2010


Module: Mesa
Branch: master
Commit: b271445e3731a512425fa28f20579e8af48bbfa2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b271445e3731a512425fa28f20579e8af48bbfa2

Author: Eric Anholt <eric at anholt.net>
Date:   Thu Oct 28 15:30:09 2010 -0700

i965: Upload required gen6 VS push constants even when using pull constants.

Matches pre-gen6, and fixes glsl-vs-large-uniform-array.

---

 src/mesa/drivers/dri/i965/gen6_vs_state.c |   26 ++++++++++++++++++--------
 1 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index 1d5c570..d8da216 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -40,12 +40,11 @@ upload_vs_state(struct brw_context *brw)
    struct gl_context *ctx = &intel->ctx;
    const struct brw_vertex_program *vp =
       brw_vertex_program_const(brw->vertex_program);
-   unsigned int nr_params = vp->program.Base.Parameters->NumParameters;
+   unsigned int nr_params = brw->vs.prog_data->nr_params / 4;
    drm_intel_bo *constant_bo;
    int i;
 
-   if (vp->use_const_buffer || (nr_params == 0 &&
-				!ctx->Transform.ClipPlanesEnabled)) {
+   if (brw->vs.prog_data->nr_params == 0 && !ctx->Transform.ClipPlanesEnabled) {
       /* Disable the push constant buffers. */
       BEGIN_BATCH(5);
       OUT_BATCH(CMD_3D_CONSTANT_VS_STATE << 16 | (5 - 2));
@@ -89,11 +88,22 @@ upload_vs_state(struct brw_context *brw)
 	 params_uploaded++;
       }
 
-      for (i = 0; i < nr_params; i++) {
-	 memcpy(param, vp->program.Base.Parameters->ParameterValues[i],
-		4 * sizeof(float));
-	 param += 4;
-	 params_uploaded++;
+      if (vp->use_const_buffer) {
+	 for (i = 0; i < vp->program.Base.Parameters->NumParameters; i++) {
+	    if (brw->vs.constant_map[i] != -1) {
+	       memcpy(param + brw->vs.constant_map[i] * 4,
+		      vp->program.Base.Parameters->ParameterValues[i],
+		      4 * sizeof(float));
+	       params_uploaded++;
+	    }
+	 }
+      } else {
+	 for (i = 0; i < nr_params; i++) {
+	    memcpy(param, vp->program.Base.Parameters->ParameterValues[i],
+		   4 * sizeof(float));
+	    param += 4;
+	    params_uploaded++;
+	 }
       }
 
       if (0) {




More information about the mesa-commit mailing list