mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 15:50:17 +01:00
i965: Add function to negate immediates.
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
1f4bdad316
commit
638beee24a
2 changed files with 40 additions and 0 deletions
|
|
@ -620,6 +620,45 @@ brw_saturate_immediate(enum brw_reg_type type, struct brw_reg *reg)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
brw_negate_immediate(enum brw_reg_type type, struct brw_reg *reg)
|
||||
{
|
||||
switch (type) {
|
||||
case BRW_REGISTER_TYPE_D:
|
||||
reg->dw1.d = -reg->dw1.d;
|
||||
return true;
|
||||
case BRW_REGISTER_TYPE_W:
|
||||
reg->dw1.d = -(int16_t)reg->dw1.ud;
|
||||
return true;
|
||||
case BRW_REGISTER_TYPE_F:
|
||||
reg->dw1.f = -reg->dw1.f;
|
||||
return true;
|
||||
case BRW_REGISTER_TYPE_VF:
|
||||
reg->dw1.ud ^= 0x80808080;
|
||||
return true;
|
||||
case BRW_REGISTER_TYPE_UB:
|
||||
case BRW_REGISTER_TYPE_B:
|
||||
unreachable("no UB/B immediates");
|
||||
case BRW_REGISTER_TYPE_UD:
|
||||
case BRW_REGISTER_TYPE_UW:
|
||||
/* Presumably the negate modifier on an unsigned source is the same as
|
||||
* on a signed source but it would be nice to confirm.
|
||||
*/
|
||||
assert(!"unimplemented: negate UD/UW immediate");
|
||||
case BRW_REGISTER_TYPE_UV:
|
||||
case BRW_REGISTER_TYPE_V:
|
||||
assert(!"unimplemented: negate UV/V immediate");
|
||||
case BRW_REGISTER_TYPE_UQ:
|
||||
case BRW_REGISTER_TYPE_Q:
|
||||
assert(!"unimplemented: negate UQ/Q immediate");
|
||||
case BRW_REGISTER_TYPE_DF:
|
||||
case BRW_REGISTER_TYPE_HF:
|
||||
assert(!"unimplemented: negate DF/HF immediate");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
backend_visitor::backend_visitor(struct brw_context *brw,
|
||||
struct gl_shader_program *shader_prog,
|
||||
struct gl_program *prog,
|
||||
|
|
|
|||
|
|
@ -195,6 +195,7 @@ enum brw_conditional_mod brw_conditional_for_comparison(unsigned int op);
|
|||
uint32_t brw_math_function(enum opcode op);
|
||||
const char *brw_instruction_name(enum opcode op);
|
||||
bool brw_saturate_immediate(enum brw_reg_type type, struct brw_reg *reg);
|
||||
bool brw_negate_immediate(enum brw_reg_type type, struct brw_reg *reg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue