Browse Source

i965: Add function to take the abs of immediates.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
tags/10.5-branchpoint
Matt Turner 10 years ago
parent
commit
dbd4c22a37
2 changed files with 40 additions and 0 deletions
  1. 39
    0
      src/mesa/drivers/dri/i965/brw_shader.cpp
  2. 1
    0
      src/mesa/drivers/dri/i965/brw_shader.h

+ 39
- 0
src/mesa/drivers/dri/i965/brw_shader.cpp View File

@@ -659,6 +659,45 @@ brw_negate_immediate(enum brw_reg_type type, struct brw_reg *reg)
return false;
}

bool
brw_abs_immediate(enum brw_reg_type type, struct brw_reg *reg)
{
switch (type) {
case BRW_REGISTER_TYPE_D:
reg->dw1.d = abs(reg->dw1.d);
return true;
case BRW_REGISTER_TYPE_W:
reg->dw1.d = abs((int16_t)reg->dw1.ud);
return true;
case BRW_REGISTER_TYPE_F:
reg->dw1.f = fabsf(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_UQ:
case BRW_REGISTER_TYPE_UD:
case BRW_REGISTER_TYPE_UW:
case BRW_REGISTER_TYPE_UV:
/* Presumably the absolute value modifier on an unsigned source is a
* nop, but it would be nice to confirm.
*/
assert(!"unimplemented: abs unsigned immediate");
case BRW_REGISTER_TYPE_V:
assert(!"unimplemented: abs V immediate");
case BRW_REGISTER_TYPE_Q:
assert(!"unimplemented: abs Q immediate");
case BRW_REGISTER_TYPE_DF:
case BRW_REGISTER_TYPE_HF:
assert(!"unimplemented: abs DF/HF immediate");
}

return false;
}

backend_visitor::backend_visitor(struct brw_context *brw,
struct gl_shader_program *shader_prog,
struct gl_program *prog,

+ 1
- 0
src/mesa/drivers/dri/i965/brw_shader.h View File

@@ -196,6 +196,7 @@ 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);
bool brw_abs_immediate(enum brw_reg_type type, struct brw_reg *reg);

#ifdef __cplusplus
extern "C" {

Loading…
Cancel
Save