i965/fs: demote_pull_constants() did not take into account double types

The constants could be double, and it was allocating size for float types
for the destination register of varying pull constant loads.

Then the fs_visitor::validate() will complain.

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
Samuel Iglesias Gonsálvez 2015-11-27 12:52:22 +01:00
parent c3fab3d000
commit 03687ab77f
1 changed files with 8 additions and 1 deletions

View File

@ -2231,9 +2231,16 @@ fs_visitor::lower_constant_loads()
if (pull_index == -1)
continue;
const unsigned index = stage_prog_data->binding_table.pull_constants_start;
fs_reg dst;
if (type_sz(inst->src[i].type) <= 4)
dst = vgrf(glsl_type::float_type);
else
dst = vgrf(glsl_type::double_type);
assert(inst->src[i].stride == 0);
fs_reg dst = vgrf(glsl_type::float_type);
const fs_builder ubld = ibld.exec_all().group(8, 0);
struct brw_reg offset = brw_imm_ud((unsigned)(pull_index * 4) & ~15);
ubld.emit(FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD,