When assigning a block of register to normal uniforms, pack the ubo uniform registers next to it.
Signed-off-by: Abdiel Janulgue <abdiel.janul...@linux.intel.com> --- src/mesa/drivers/dri/i965/brw_fs.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index d62050e..9a73691 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -1670,7 +1670,7 @@ fs_visitor::assign_curb_setup() if (inst->src[i].file == UNIFORM) { int uniform_nr = inst->src[i].reg + inst->src[i].reg_offset; int constant_nr; - if (uniform_nr >= 0 && uniform_nr < (int) uniforms) { + if (uniform_nr >= 0 && uniform_nr < (int) (uniforms + ubo_uniforms)) { constant_nr = push_constant_loc[uniform_nr]; } else { /* Section 5.11 of the OpenGL 4.1 spec says: @@ -2105,8 +2105,9 @@ fs_visitor::move_uniform_array_access_to_pull_constants() if (dispatch_width != 8) return; - pull_constant_loc = ralloc_array(mem_ctx, int, uniforms); - memset(pull_constant_loc, -1, sizeof(pull_constant_loc[0]) * uniforms); + unsigned int total_uniforms = uniforms + ubo_uniforms; + pull_constant_loc = ralloc_array(mem_ctx, int, total_uniforms); + memset(pull_constant_loc, -1, sizeof(pull_constant_loc[0]) * total_uniforms); /* Walk through and find array access of uniforms. Put a copy of that * uniform in the pull constant buffer. @@ -2156,9 +2157,10 @@ fs_visitor::assign_constant_locations() if (dispatch_width != 8) return; + unsigned int total_uniforms = uniforms + ubo_uniforms; /* Find which UNIFORM registers are still in use. */ - bool is_live[uniforms]; - for (unsigned int i = 0; i < uniforms; i++) { + bool is_live[total_uniforms]; + for (unsigned int i = 0; i < total_uniforms; i++) { is_live[i] = false; } @@ -2168,7 +2170,7 @@ fs_visitor::assign_constant_locations() continue; int constant_nr = inst->src[i].reg + inst->src[i].reg_offset; - if (constant_nr >= 0 && constant_nr < (int) uniforms) + if (constant_nr >= 0 && constant_nr < (int) total_uniforms) is_live[constant_nr] = true; } } @@ -2184,9 +2186,9 @@ fs_visitor::assign_constant_locations() unsigned int max_push_components = 16 * 8; unsigned int num_push_constants = 0; - push_constant_loc = ralloc_array(mem_ctx, int, uniforms); + push_constant_loc = ralloc_array(mem_ctx, int, total_uniforms); - for (unsigned int i = 0; i < uniforms; i++) { + for (unsigned int i = 0; i < total_uniforms; i++) { if (!is_live[i] || pull_constant_loc[i] != -1) { /* This UNIFORM register is either dead, or has already been demoted * to a pull const. Mark it as no longer living in the param[] array. @@ -2210,7 +2212,8 @@ fs_visitor::assign_constant_locations() } } - stage_prog_data->nr_params = num_push_constants; + stage_prog_data->nr_params = 0; + stage_prog_data->nr_ubo_params = ubo_uniforms; /* Up until now, the param[] array has been indexed by reg + reg_offset * of UNIFORM registers. Condense it to only contain the uniforms we @@ -2224,6 +2227,7 @@ fs_visitor::assign_constant_locations() assert(remapped <= (int)i); stage_prog_data->param[remapped] = stage_prog_data->param[i]; + stage_prog_data->nr_params++; } } -- 1.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev