瀏覽代碼

nir: Add lowering from ibitfield_extract/ubitfield_extract to shifts.

V3D doesn't have opcodes for ibfe/ubfe, so we need to lower similarly to
glsl/lower_instructions.cpp.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
tags/18.2-branchpoint
Eric Anholt 7 年之前
父節點
當前提交
af88acf4c4
共有 2 個檔案被更改,包括 19 行新增0 行删除
  1. 3
    0
      src/compiler/nir/nir.h
  2. 16
    0
      src/compiler/nir/nir_opt_algebraic.py

+ 3
- 0
src/compiler/nir/nir.h 查看文件

@@ -1903,7 +1903,10 @@ typedef struct nir_shader_compiler_options {
bool lower_fsqrt;
bool lower_fmod32;
bool lower_fmod64;
/** Lowers ibitfield_extract/ubitfield_extract to ibfe/ubfe. */
bool lower_bitfield_extract;
/** Lowers ibitfield_extract/ubitfield_extract to bfm, compares, shifts. */
bool lower_bitfield_extract_to_shifts;
/** Lowers bitfield_insert to bfi/bfm */
bool lower_bitfield_insert;
/** Lowers bitfield_insert to bfm, compares, and shifts. */

+ 16
- 0
src/compiler/nir/nir_opt_algebraic.py 查看文件

@@ -539,6 +539,22 @@ optimizations = [
('ubfe', 'value', 'offset', 'bits')),
'options->lower_bitfield_extract'),

(('ibitfield_extract', 'value', 'offset', 'bits'),
('bcsel', ('ieq', 0, 'bits'),
0,
('ishr',
('ishl', 'value', ('isub', ('isub', 32, 'bits'), 'offset')),
('isub', 32, 'bits'))),
'options->lower_bitfield_extract_to_shifts'),

(('ubitfield_extract', 'value', 'offset', 'bits'),
('iand',
('ushr', 'value', 'offset'),
('bcsel', ('ieq', 'bits', 32),
0xffffffff,
('bfm', 'bits', 0))),
'options->lower_bitfield_extract_to_shifts'),

(('extract_i8', a, 'b@32'),
('ishr', ('ishl', a, ('imul', ('isub', 3, b), 8)), 24),
'options->lower_extract_byte'),

Loading…
取消
儲存