summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTopi Pohjolainen <topi.pohjolainen@intel.com>2017-11-22 21:41:47 +0200
committerTopi Pohjolainen <topi.pohjolainen@intel.com>2018-01-10 12:33:50 +0200
commit1bd114c07bcab3f9ea8ad633e5842da0a06123e2 (patch)
tree783e42888b3fd37d6f8a9f90dfb7a4b1882e2c9b
parent1669c3b0946b30bf84d82c9a44580ec0d20d373e (diff)
intel/compiler/fs: Prepare nir_emit_if() for 16-bit sources
Comparison operations using 16-bit sources produce 16-bit results (0xFFFF/0x0000) instead of (0xFFFFFFF/0x00000000). Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
-rw-r--r--src/intel/compiler/brw_fs_nir.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp
index 135361ebeb..463cb27ff1 100644
--- a/src/intel/compiler/brw_fs_nir.cpp
+++ b/src/intel/compiler/brw_fs_nir.cpp
@@ -395,10 +395,15 @@ fs_visitor::nir_emit_cf_list(exec_list *list)
void
fs_visitor::nir_emit_if(nir_if *if_stmt)
{
+ const fs_reg src = get_nir_src(if_stmt->condition);
+ fs_inst *inst;
+
/* first, put the condition into f0 */
- fs_inst *inst = bld.MOV(bld.null_reg_d(),
- retype(get_nir_src(if_stmt->condition),
- BRW_REGISTER_TYPE_D));
+ if (brw_reg_type_to_size(src.type) == 2)
+ inst = bld.MOV(bld.null_reg_w(), retype(src, BRW_REGISTER_TYPE_W));
+ else
+ inst = bld.MOV(bld.null_reg_d(), retype(src, BRW_REGISTER_TYPE_D));
+
inst->conditional_mod = BRW_CONDITIONAL_NZ;
bld.IF(BRW_PREDICATE_NORMAL);