i965: Consistently use nr_pull_params instead of NumParameters.
authorEric Anholt <eric@anholt.net>
Wed, 21 Nov 2012 22:30:55 +0000 (14:30 -0800)
committerEric Anholt <eric@anholt.net>
Fri, 28 Dec 2012 18:53:50 +0000 (10:53 -0800)
NumParameters used to be an upper bound on the number of vec4s to be
uploaded, which was basically safe (unless your buffer was bound near
the top of address space *and* you array indexed outside the buffer, in
which case I think you might GPU hang).  As I migrate the driver away
from ParameterValues[], this is no longer true.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_vs_surface_state.c
src/mesa/drivers/dri/i965/brw_wm_surface_state.c

index 3985b4811fac6943249acc6226232c7496dfd340..4da7eaa51b9490a8f4a916877b94835d3d0cdb51 100644 (file)
@@ -48,7 +48,6 @@ brw_upload_vs_pull_constants(struct brw_context *brw)
    /* BRW_NEW_VERTEX_PROGRAM */
    struct brw_vertex_program *vp =
       (struct brw_vertex_program *) brw->vertex_program;
-   const struct gl_program_parameter_list *params = vp->program.Base.Parameters;
    int i;
 
    /* Updates the ParamaterValues[i] pointers for all parameters of the
@@ -81,7 +80,7 @@ brw_upload_vs_pull_constants(struct brw_context *brw)
    }
 
    if (0) {
-      for (i = 0; i < params->NumParameters; i++) {
+      for (i = 0; i < ALIGN(brw->vs.prog_data->nr_pull_params, 4) / 4; i++) {
         float *row = (float *)brw->vs.const_bo->virtual + i * 4;
         printf("vs const surface %3d: %4.3f %4.3f %4.3f %4.3f\n",
                i, row[0], row[1], row[2], row[3]);
@@ -92,7 +91,7 @@ brw_upload_vs_pull_constants(struct brw_context *brw)
 
    const int surf = SURF_INDEX_VERT_CONST_BUFFER;
    intel->vtbl.create_constant_surface(brw, brw->vs.const_bo, 0,
-                                      params->NumParameters,
+                                      ALIGN(brw->vs.prog_data->nr_pull_params, 4) / 4,
                                       &brw->vs.surf_offset[surf]);
 
    brw->state.dirty.brw |= BRW_NEW_VS_CONSTBUF;
index 94c01cb3a9d13f679a921b063643514a9a522c12..a2a875fa8b8c94c32371cc90d5ff24f6b8953fc5 100644 (file)
@@ -1026,7 +1026,7 @@ brw_upload_wm_pull_constants(struct brw_context *brw)
    drm_intel_gem_bo_unmap_gtt(brw->wm.const_bo);
 
    intel->vtbl.create_constant_surface(brw, brw->wm.const_bo, 0,
-                                      params->NumParameters,
+                                      ALIGN(brw->wm.prog_data->nr_pull_params, 4) / 4,
                                       &brw->wm.surf_offset[surf_index]);
 
    brw->state.dirty.brw |= BRW_NEW_SURFACES;