mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
Implement the ++var and --var operators, improve some constructors.
This commit is contained in:
parent
0a097675f1
commit
c410994653
3 changed files with 843 additions and 811 deletions
|
|
@ -102,13 +102,13 @@
|
|||
//
|
||||
|
||||
//bp:
|
||||
vec4 vec4(const float a1, const float b1, const float c1, const float d1)
|
||||
{
|
||||
__retVal.x = a1;
|
||||
__retVal.y = b1;
|
||||
__retVal.z = c1;
|
||||
__retVal.w = d1;
|
||||
}
|
||||
//vec4 vec4(const float a1, const float b1, const float c1, const float d1)
|
||||
//{
|
||||
// __retVal.x = a1;
|
||||
// __retVal.y = b1;
|
||||
// __retVal.z = c1;
|
||||
// __retVal.w = d1;
|
||||
//}
|
||||
|
||||
////
|
||||
//// Assorted constructors
|
||||
|
|
@ -150,12 +150,14 @@ int __constructor (const int i) {
|
|||
return i;
|
||||
}
|
||||
|
||||
float __constructor (const float f) {
|
||||
return f;
|
||||
float __constructor(const float f)
|
||||
{
|
||||
__retVal = f.x;
|
||||
}
|
||||
|
||||
vec2 __constructor (const float f) {
|
||||
return vec2 (f, f);
|
||||
vec2 __constructor(const float f)
|
||||
{
|
||||
__retVal.xy = f.xx;
|
||||
}
|
||||
|
||||
vec2 __constructor (const int i) {
|
||||
|
|
@ -170,10 +172,7 @@ vec2 __constructor (const bool b) {
|
|||
|
||||
vec3 __constructor(const float f)
|
||||
{
|
||||
// return vec3 (f, f, f);
|
||||
__retVal.x = f;
|
||||
__retVal.y = f;
|
||||
__retVal.z = f;
|
||||
__retVal.xyz = f.xxx;
|
||||
}
|
||||
|
||||
vec3 __constructor (const int i) {
|
||||
|
|
@ -192,11 +191,9 @@ vec3 __constructor(const vec4 v)
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//bp: TODO replace with asm == f.xxxx
|
||||
vec4 __constructor (const float f) {
|
||||
return vec4 (f, f, f, f);
|
||||
vec4 __constructor(const float f)
|
||||
{
|
||||
__retVal.xyzw = f.xxxx;
|
||||
}
|
||||
|
||||
vec4 __constructor (const int i) {
|
||||
|
|
@ -1899,140 +1896,155 @@ void __operator *= (inout vec4 v, const mat4 m)
|
|||
|
||||
//// pre-decrement operators
|
||||
|
||||
void __operator -- (inout int a)
|
||||
int __operator --(inout int a)
|
||||
{
|
||||
a -= 1;
|
||||
a = a - 1;
|
||||
__retVal = a;
|
||||
}
|
||||
|
||||
void __operator -- (inout ivec2 v)
|
||||
ivec2 __operator --(inout ivec2 v)
|
||||
{
|
||||
--v.x;
|
||||
--v.y;
|
||||
v = v - ivec2(1);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator -- (inout ivec3 v)
|
||||
ivec3 __operator --(inout ivec3 v)
|
||||
{
|
||||
--v.x;
|
||||
--v.y;
|
||||
--v.z;
|
||||
v = v - ivec3(1);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator -- (inout ivec4 v)
|
||||
ivec4 __operator --(inout ivec4 v)
|
||||
{
|
||||
--v.x;
|
||||
--v.y;
|
||||
--v.z;
|
||||
--v.w;
|
||||
v = v - ivec4(1);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator -- (inout float a)
|
||||
|
||||
float __operator --(inout float a)
|
||||
{
|
||||
a -= 1.0;
|
||||
a = a - 1.0;
|
||||
__retVal = a;
|
||||
}
|
||||
|
||||
void __operator -- (inout vec2 v)
|
||||
vec2 __operator --(inout vec2 v)
|
||||
{
|
||||
vec2 one = vec1(1.0, 1.0);
|
||||
v = v - one;
|
||||
v = v - vec2(1.0);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator -- (inout vec3 v)
|
||||
vec3 __operator --(inout vec3 v)
|
||||
{
|
||||
vec3 one = vec1(1.0, 1.0, 1.0);
|
||||
v = v - one;
|
||||
v = v - vec3(1.0);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator -- (inout vec4 v)
|
||||
vec4 __operator --(inout vec4 v)
|
||||
{
|
||||
vec4 one = vec1(1.0, 1.0, 1.0, 1.0);
|
||||
v = v - one;
|
||||
v = v - vec4(1.0);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator -- (inout mat2 m)
|
||||
|
||||
mat2 __operator --(inout mat2 m)
|
||||
{
|
||||
--m[0];
|
||||
--m[1];
|
||||
m[0] = m[0] - vec2(1.0);
|
||||
m[1] = m[1] - vec2(1.0);
|
||||
__retVal = m;
|
||||
}
|
||||
|
||||
void __operator -- (inout mat3 m)
|
||||
mat3 __operator --(inout mat3 m)
|
||||
{
|
||||
--m[0];
|
||||
--m[1];
|
||||
--m[2];
|
||||
m[0] = m[0] - vec3(1.0);
|
||||
m[1] = m[1] - vec3(1.0);
|
||||
m[2] = m[2] - vec3(1.0);
|
||||
__retVal = m;
|
||||
}
|
||||
|
||||
void __operator -- (inout mat4 m)
|
||||
mat4 __operator --(inout mat4 m)
|
||||
{
|
||||
--m[0];
|
||||
--m[1];
|
||||
--m[2];
|
||||
--m[3];
|
||||
m[0] = m[0] - vec4(1.0);
|
||||
m[1] = m[1] - vec4(1.0);
|
||||
m[2] = m[2] - vec4(1.0);
|
||||
m[3] = m[3] - vec4(1.0);
|
||||
__retVal = m;
|
||||
}
|
||||
|
||||
|
||||
//// pre-increment operators
|
||||
|
||||
void __operator ++ (inout float a)
|
||||
float __operator ++(inout int a)
|
||||
{
|
||||
a += 1.0;
|
||||
a = a + 1;
|
||||
__retVal = a;
|
||||
}
|
||||
|
||||
void __operator ++ (inout int a) {
|
||||
a += 1;
|
||||
ivec2 __operator ++(inout ivec2 v)
|
||||
{
|
||||
v = v + ivec2(1);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator ++ (inout vec2 v) {
|
||||
++v.x;
|
||||
++v.y;
|
||||
ivec3 __operator ++(inout ivec3 v)
|
||||
{
|
||||
v = v + ivec3(1);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator ++ (inout vec3 v) {
|
||||
++v.x;
|
||||
++v.y;
|
||||
++v.z;
|
||||
ivec4 __operator ++(inout ivec4 v)
|
||||
{
|
||||
v = v + ivec4(1);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator ++ (inout vec4 v) {
|
||||
++v.x;
|
||||
++v.y;
|
||||
++v.z;
|
||||
++v.w;
|
||||
|
||||
float __operator ++(inout float a)
|
||||
{
|
||||
a = a + 1.0;
|
||||
__retVal = a;
|
||||
}
|
||||
|
||||
void __operator ++ (inout ivec2 v) {
|
||||
++v.x;
|
||||
++v.y;
|
||||
vec2 __operator ++(inout vec2 v)
|
||||
{
|
||||
v = v + vec2(1.0);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator ++ (inout ivec3 v) {
|
||||
++v.x;
|
||||
++v.y;
|
||||
++v.z;
|
||||
vec3 __operator ++(inout vec3 v)
|
||||
{
|
||||
v = v + vec3(1.0);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator ++ (inout ivec4 v) {
|
||||
++v.x;
|
||||
++v.y;
|
||||
++v.z;
|
||||
++v.w;
|
||||
vec4 __operator ++(inout vec4 v)
|
||||
{
|
||||
v = v + vec4(1.0);
|
||||
__retVal = v;
|
||||
}
|
||||
|
||||
void __operator ++ (inout mat2 m) {
|
||||
++m[0];
|
||||
++m[1];
|
||||
|
||||
mat2 __operator ++(inout mat2 m)
|
||||
{
|
||||
m[0] = m[0] + vec2(1.0);
|
||||
m[1] = m[1] + vec2(1.0);
|
||||
__retVal = m;
|
||||
}
|
||||
|
||||
void __operator ++ (inout mat3 m) {
|
||||
++m[0];
|
||||
++m[1];
|
||||
++m[2];
|
||||
mat3 __operator ++(inout mat3 m)
|
||||
{
|
||||
m[0] = m[0] + vec3(1.0);
|
||||
m[1] = m[1] + vec3(1.0);
|
||||
m[2] = m[2] + vec3(1.0);
|
||||
__retVal = m;
|
||||
}
|
||||
|
||||
void __operator ++ (inout mat4 m) {
|
||||
++m[0];
|
||||
++m[1];
|
||||
++m[2];
|
||||
++m[3];
|
||||
mat4 __operator ++(inout mat4 m)
|
||||
{
|
||||
m[0] = m[0] + vec4(1.0);
|
||||
m[1] = m[1] + vec4(1.0);
|
||||
m[2] = m[2] + vec4(1.0);
|
||||
m[3] = m[3] + vec4(1.0);
|
||||
__retVal = m;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2208,6 +2220,13 @@ bool __operator ! (const bool a) {
|
|||
return a == false;
|
||||
}
|
||||
|
||||
bool __logicalAnd(const bool a, const bool b)
|
||||
{
|
||||
if (a)
|
||||
return b;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1303,10 +1303,10 @@ _slang_gen_function_call_name(slang_assemble_ctx *A, const char *name,
|
|||
fun = _slang_locate_function(A->space.funcs, atom, params, param_count,
|
||||
&A->space, A->atoms);
|
||||
if (!fun) {
|
||||
/* XXX temporary */
|
||||
print_funcs(A->space.funcs);
|
||||
|
||||
fun = _slang_locate_function(A->space.funcs, atom, params, param_count,
|
||||
&A->space, A->atoms);
|
||||
fun = _slang_locate_function(A->space.funcs, atom, params, param_count,
|
||||
&A->space, A->atoms);
|
||||
|
||||
RETURN_ERROR2("Undefined function", name, 0);
|
||||
}
|
||||
|
|
@ -2027,7 +2027,6 @@ _slang_gen_operation(slang_assemble_ctx * A, slang_operation *oper)
|
|||
slang_ir_node *assign = new_node(IR_MOVE, var, sum);
|
||||
return assign;
|
||||
}
|
||||
|
||||
case slang_oper_postdecrement: /* var-- */
|
||||
/* XXX not 100% about this */
|
||||
{
|
||||
|
|
@ -2040,21 +2039,17 @@ _slang_gen_operation(slang_assemble_ctx * A, slang_operation *oper)
|
|||
|
||||
case slang_oper_preincrement: /* ++var */
|
||||
{
|
||||
slang_ir_node *var = _slang_gen_operation(A, &oper->children[0]);
|
||||
slang_ir_node *one = new_float_literal(1.0, 1.0, 1.0, 1.0);
|
||||
slang_ir_node *sum = new_node(IR_ADD, var, one);
|
||||
slang_ir_node *assign = new_node(IR_MOVE, var, sum);
|
||||
assign->Store = var->Store;
|
||||
return assign;
|
||||
slang_ir_node *n;
|
||||
assert(oper->num_children == 1);
|
||||
n = _slang_gen_function_call_name(A, "++", oper, NULL);
|
||||
return n;
|
||||
}
|
||||
case slang_oper_predecrement: /* --var */
|
||||
{
|
||||
slang_ir_node *var = _slang_gen_operation(A, &oper->children[0]);
|
||||
slang_ir_node *one = new_float_literal(1.0, 1.0, 1.0, 1.0);
|
||||
slang_ir_node *sum = new_node(IR_SUB, var, one);
|
||||
slang_ir_node *assign = new_node(IR_MOVE, var, sum);
|
||||
assign->Store = var->Store;
|
||||
return assign;
|
||||
slang_ir_node *n;
|
||||
assert(oper->num_children == 1);
|
||||
n = _slang_gen_function_call_name(A, "--", oper, NULL);
|
||||
return n;
|
||||
}
|
||||
|
||||
case slang_oper_sequence:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue