mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
i965: Define helper function to copy an arbitrary live component from some register.
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
3da9f708d4
commit
046abc998c
4 changed files with 28 additions and 0 deletions
|
|
@ -325,6 +325,8 @@ public:
|
|||
void emit_minmax(enum brw_conditional_mod conditionalmod, const fs_reg &dst,
|
||||
const fs_reg &src0, const fs_reg &src1);
|
||||
void emit_discard_jump();
|
||||
/** Copy any live channel from \p src to the first channel of \p dst. */
|
||||
void emit_uniformize(const fs_reg &dst, const fs_reg &src);
|
||||
bool try_emit_b2f_of_comparison(ir_expression *ir);
|
||||
bool try_emit_saturate(ir_expression *ir);
|
||||
bool try_emit_line(ir_expression *ir);
|
||||
|
|
|
|||
|
|
@ -335,6 +335,18 @@ fs_visitor::emit_minmax(enum brw_conditional_mod conditionalmod, const fs_reg &d
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
fs_visitor::emit_uniformize(const fs_reg &dst, const fs_reg &src)
|
||||
{
|
||||
const fs_reg chan_index = vgrf(glsl_type::uint_type);
|
||||
|
||||
emit(SHADER_OPCODE_FIND_LIVE_CHANNEL, component(chan_index, 0))
|
||||
->force_writemask_all = true;
|
||||
emit(SHADER_OPCODE_BROADCAST, component(dst, 0),
|
||||
src, component(chan_index, 0))
|
||||
->force_writemask_all = true;
|
||||
}
|
||||
|
||||
bool
|
||||
fs_visitor::try_emit_saturate(ir_expression *ir)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -299,6 +299,9 @@ public:
|
|||
void emit_lrp(const dst_reg &dst,
|
||||
const src_reg &x, const src_reg &y, const src_reg &a);
|
||||
|
||||
/** Copy any live channel from \p src to the first channel of \p dst. */
|
||||
void emit_uniformize(const dst_reg &dst, const src_reg &src);
|
||||
|
||||
void emit_block_move(dst_reg *dst, src_reg *src,
|
||||
const struct glsl_type *type, brw_predicate predicate);
|
||||
|
||||
|
|
|
|||
|
|
@ -1373,6 +1373,17 @@ vec4_visitor::emit_pull_constant_load_reg(dst_reg dst,
|
|||
emit(pull);
|
||||
}
|
||||
|
||||
void
|
||||
vec4_visitor::emit_uniformize(const dst_reg &dst, const src_reg &src)
|
||||
{
|
||||
const src_reg chan_index(this, glsl_type::uint_type);
|
||||
|
||||
emit(SHADER_OPCODE_FIND_LIVE_CHANNEL, dst_reg(chan_index))
|
||||
->force_writemask_all = true;
|
||||
emit(SHADER_OPCODE_BROADCAST, dst, src, chan_index)
|
||||
->force_writemask_all = true;
|
||||
}
|
||||
|
||||
void
|
||||
vec4_visitor::visit(ir_expression *ir)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue