diff options
author | Topi Pohjolainen <topi.pohjolainen@intel.com> | 2017-11-22 21:41:47 +0200 |
---|---|---|
committer | Topi Pohjolainen <topi.pohjolainen@intel.com> | 2018-01-10 12:33:50 +0200 |
commit | 1bd114c07bcab3f9ea8ad633e5842da0a06123e2 (patch) | |
tree | 783e42888b3fd37d6f8a9f90dfb7a4b1882e2c9b | |
parent | 1669c3b0946b30bf84d82c9a44580ec0d20d373e (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.cpp | 11 |
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); |