mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 19:50:11 +01:00
i965/fs: Add and use get_nir_src_imm().
The next patch wants to inspect the LOD argument and do something different if it's 0.0f. But at that point we've emitted a MOV for it and we just have a register to look at. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
8bf5493899
commit
07353599e0
2 changed files with 19 additions and 4 deletions
|
|
@ -257,6 +257,7 @@ public:
|
||||||
void nir_emit_jump(const brw::fs_builder &bld,
|
void nir_emit_jump(const brw::fs_builder &bld,
|
||||||
nir_jump_instr *instr);
|
nir_jump_instr *instr);
|
||||||
fs_reg get_nir_src(nir_src src);
|
fs_reg get_nir_src(nir_src src);
|
||||||
|
fs_reg get_nir_src_imm(nir_src src);
|
||||||
fs_reg get_nir_dest(nir_dest dest);
|
fs_reg get_nir_dest(nir_dest dest);
|
||||||
fs_reg get_nir_image_deref(const nir_deref_var *deref);
|
fs_reg get_nir_image_deref(const nir_deref_var *deref);
|
||||||
fs_reg get_indirect_offset(nir_intrinsic_instr *instr);
|
fs_reg get_indirect_offset(nir_intrinsic_instr *instr);
|
||||||
|
|
|
||||||
|
|
@ -1470,6 +1470,16 @@ fs_visitor::get_nir_src(nir_src src)
|
||||||
return retype(reg, BRW_REGISTER_TYPE_D);
|
return retype(reg, BRW_REGISTER_TYPE_D);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an IMM for constants; otherwise call get_nir_src() as normal.
|
||||||
|
*/
|
||||||
|
fs_reg
|
||||||
|
fs_visitor::get_nir_src_imm(nir_src src)
|
||||||
|
{
|
||||||
|
nir_const_value *val = nir_src_as_const_value(src);
|
||||||
|
return val ? fs_reg(brw_imm_d(val->i32[0])) : get_nir_src(src);
|
||||||
|
}
|
||||||
|
|
||||||
fs_reg
|
fs_reg
|
||||||
fs_visitor::get_nir_dest(nir_dest dest)
|
fs_visitor::get_nir_dest(nir_dest dest)
|
||||||
{
|
{
|
||||||
|
|
@ -4008,7 +4018,8 @@ fs_visitor::nir_emit_texture(const fs_builder &bld, nir_tex_instr *instr)
|
||||||
fs_reg src = get_nir_src(instr->src[i].src);
|
fs_reg src = get_nir_src(instr->src[i].src);
|
||||||
switch (instr->src[i].src_type) {
|
switch (instr->src[i].src_type) {
|
||||||
case nir_tex_src_bias:
|
case nir_tex_src_bias:
|
||||||
srcs[TEX_LOGICAL_SRC_LOD] = retype(src, BRW_REGISTER_TYPE_F);
|
srcs[TEX_LOGICAL_SRC_LOD] =
|
||||||
|
retype(get_nir_src_imm(instr->src[i].src), BRW_REGISTER_TYPE_F);
|
||||||
break;
|
break;
|
||||||
case nir_tex_src_comparitor:
|
case nir_tex_src_comparitor:
|
||||||
srcs[TEX_LOGICAL_SRC_SHADOW_C] = retype(src, BRW_REGISTER_TYPE_F);
|
srcs[TEX_LOGICAL_SRC_SHADOW_C] = retype(src, BRW_REGISTER_TYPE_F);
|
||||||
|
|
@ -4036,13 +4047,16 @@ fs_visitor::nir_emit_texture(const fs_builder &bld, nir_tex_instr *instr)
|
||||||
case nir_tex_src_lod:
|
case nir_tex_src_lod:
|
||||||
switch (instr->op) {
|
switch (instr->op) {
|
||||||
case nir_texop_txs:
|
case nir_texop_txs:
|
||||||
srcs[TEX_LOGICAL_SRC_LOD] = retype(src, BRW_REGISTER_TYPE_UD);
|
srcs[TEX_LOGICAL_SRC_LOD] =
|
||||||
|
retype(get_nir_src_imm(instr->src[i].src), BRW_REGISTER_TYPE_UD);
|
||||||
break;
|
break;
|
||||||
case nir_texop_txf:
|
case nir_texop_txf:
|
||||||
srcs[TEX_LOGICAL_SRC_LOD] = retype(src, BRW_REGISTER_TYPE_D);
|
srcs[TEX_LOGICAL_SRC_LOD] =
|
||||||
|
retype(get_nir_src_imm(instr->src[i].src), BRW_REGISTER_TYPE_D);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
srcs[TEX_LOGICAL_SRC_LOD] = retype(src, BRW_REGISTER_TYPE_F);
|
srcs[TEX_LOGICAL_SRC_LOD] =
|
||||||
|
retype(get_nir_src_imm(instr->src[i].src), BRW_REGISTER_TYPE_F);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue