glsl: Add ir_unop_sin_reduced and ir_unop_cos_reduced
The operate just like ir_unop_sin and ir_unop_cos except that they expect their inputs to be limited to the range [-pi, pi]. Several GPUs require this limited range for their sine and cosine instructions, so having these as operations (along with a to-be-written lowering pass) helps this architectures. These new operations also matche the semantics of the GL_ARB_fragment_program SCS instruction. Having these as operations helps in generating GLSL IR directly from assembly fragment programs.
This commit is contained in:
@@ -216,6 +216,7 @@ ir_expression::constant_expression_value()
|
||||
break;
|
||||
|
||||
case ir_unop_sin:
|
||||
case ir_unop_sin_reduced:
|
||||
assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
|
||||
for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
||||
data.f[c] = sinf(op[0]->value.f[c]);
|
||||
@@ -223,6 +224,7 @@ ir_expression::constant_expression_value()
|
||||
break;
|
||||
|
||||
case ir_unop_cos:
|
||||
case ir_unop_cos_reduced:
|
||||
assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
|
||||
for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
||||
data.f[c] = cosf(op[0]->value.f[c]);
|
||||
|
Reference in New Issue
Block a user