This patch generates the gather table entries for ordinary uniforms if they are present. The uniform constants here will later be packed together with UBO constants.
Signed-off-by: Abdiel Janulgue <abdiel.janul...@linux.intel.com> --- src/mesa/drivers/dri/i965/brw_fs.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index d240371..e39d821 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -1863,8 +1863,11 @@ fs_visitor::assign_constant_locations() } } - stage_prog_data->nr_params = num_push_constants; stage_prog_data->nr_pull_params = num_pull_constants; + stage_prog_data->nr_params = 0; + + unsigned const_reg_access[uniforms]; + memset(const_reg_access, 0, sizeof(const_reg_access)); /* Up until now, the param[] array has been indexed by reg + reg_offset * of UNIFORM registers. Move pull constants into pull_param[] and @@ -1881,8 +1884,21 @@ fs_visitor::assign_constant_locations() stage_prog_data->pull_param[pull_constant_loc[i]] = value; } else if (push_constant_loc[i] != -1) { stage_prog_data->param[push_constant_loc[i]] = value; + int p = stage_prog_data->nr_params++; + + /* access table for uniform registers*/ + const_reg_access[(ALIGN(prog_data->nr_params, 4) / 4) - 1] |= + (1 << (p % 4)); } } + + int num_consts = ALIGN(prog_data->nr_params, 4) / 4; + for (int i = 0; i < num_consts; i++) { + int p = stage_prog_data->nr_gather_table++; + stage_prog_data->gather_table[p].reg = -1; + stage_prog_data->gather_table[p].channel_mask = + const_reg_access[i]; + } } /** -- 1.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev