From 03687ab77fea7893f8786ce407d6f4d108b28012 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Samuel=20Iglesias=20Gons=C3=A1lvez?= Date: Fri, 27 Nov 2015 12:52:22 +0100 Subject: [PATCH] i965/fs: demote_pull_constants() did not take into account double types MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Kenneth Graunke Reviewed-by: Jordan Justen --- src/mesa/drivers/dri/i965/brw_fs.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index f2bad0d185f..e105f4084fe 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -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, -- 2.30.2