Add SwiftShader dump from Feb 6 2013
diff --git a/src/Shader/SetupRoutine.cpp b/src/Shader/SetupRoutine.cpp index d77a21e..8c5835c 100644 --- a/src/Shader/SetupRoutine.cpp +++ b/src/Shader/SetupRoutine.cpp
@@ -33,14 +33,14 @@ void SetupRoutine::generate() { - Function<Bool, Pointer<Byte>, Pointer<Byte>, Pointer<Byte>, Pointer<Byte>> function; + Function<Bool, Pointer<Byte>, Pointer<Byte>, Pointer<Byte>, Pointer<Byte> > function; { Pointer<Byte> primitive(function.arg(0)); Pointer<Byte> tri(function.arg(1)); Pointer<Byte> polygon(function.arg(2)); Pointer<Byte> data(function.arg(3)); - Pointer<Byte> constants = *Pointer<Pointer<Byte>>(data + OFFSET(DrawData,constants)); + Pointer<Byte> constants = *Pointer<Pointer<Byte> >(data + OFFSET(DrawData,constants)); const bool point = state.isDrawPoint; const bool sprite = state.pointSprite; @@ -84,7 +84,7 @@ Float A = (y2 - y0) * x1 + (y1 - y2) * x0 + (y0 - y1) * x2; // Area - If(A == Float(0.0f)) + If(A == 0.0f) { Return(false); } @@ -93,22 +93,22 @@ *Pointer<Float>(v1 + pos * 16 + 12) * *Pointer<Float>(v2 + pos * 16 + 12); - A = IfThenElse(w0w1w2 < Float(0.0f), -A, A); + A = IfThenElse(w0w1w2 < 0.0f, -A, A); if(state.cullMode == Context::CULL_CLOCKWISE) { - If(A >= Float(0.0f)) Return(false); + If(A >= 0.0f) Return(false); } else if(state.cullMode == Context::CULL_COUNTERCLOCKWISE) { - If(A <= Float(0.0f)) Return(false); + If(A <= 0.0f) Return(false); } - d = IfThenElse(A < Float(0.0f), d, Int(0)); + d = IfThenElse(A < 0.0f, d, Int(0)); if(state.twoSidedStencil) { - If(A > Float(0.0f)) + If(A > 0.0f) { *Pointer<Byte8>(primitive + OFFSET(Primitive,clockwiseMask)) = Byte8(0xFFFFFFFFFFFFFFFF); *Pointer<Byte8>(primitive + OFFSET(Primitive,invClockwiseMask)) = Byte8(0x0000000000000000); @@ -122,7 +122,7 @@ if(state.vFace) { - *Pointer<Float>(primitive + OFFSET(Primitive,area)) = Float(0.5f) * A; + *Pointer<Float>(primitive + OFFSET(Primitive,area)) = 0.5f * A; } } else @@ -145,11 +145,11 @@ Do { - Pointer<Float4> p = *Pointer<Pointer<Float4>>(V + i * sizeof(void*)); + Pointer<Float4> p = *Pointer<Pointer<Float4> >(V + i * sizeof(void*)); Float4 v = *Pointer<Float4>(p, 16); Float w = v.w; - Float rhw = IfThenElse(w != Float(0.0f), Float(1.0f) / w, Float(1.0f)); + Float rhw = IfThenElse(w != 0.0f, 1.0f / w, Float(1.0f)); X[i] = RoundInt(*Pointer<Float>(data + OFFSET(DrawData,X0x16)) + v.x * rhw * *Pointer<Float>(data + OFFSET(DrawData,Wx16))); Y[i] = RoundInt(*Pointer<Float>(data + OFFSET(DrawData,Y0x16)) + v.y * rhw * *Pointer<Float>(data + OFFSET(DrawData,Hx16))); @@ -238,7 +238,7 @@ Do { - edge(primitive, data, Int(Xq[i + 1 - d]), Int(Yq[i + 1 - d]), Int(Xq[i + d]), Int(Yq[i + d]), q); + edge(primitive, data, Xq[i + 1 - d], Yq[i + 1 - d], Xq[i + d], Yq[i + d], q); i++; } @@ -329,8 +329,8 @@ Y2 = Y1 + X0 - X1; } - Float dx = Float(X0) * Float(1.0f / 16.0f); - Float dy = Float(Y0) * Float(1.0f / 16.0f); + Float dx = Float(X0) * (1.0f / 16.0f); + Float dy = Float(Y0) * (1.0f / 16.0f); X1 -= X0; Y1 -= Y0; @@ -338,11 +338,11 @@ X2 -= X0; Y2 -= Y0; - Float x1 = w1 * Float(1.0f / 16.0f) * Float(X1); - Float y1 = w1 * Float(1.0f / 16.0f) * Float(Y1); + Float x1 = w1 * (1.0f / 16.0f) * Float(X1); + Float y1 = w1 * (1.0f / 16.0f) * Float(Y1); - Float x2 = w2 * Float(1.0f / 16.0f) * Float(X2); - Float y2 = w2 * Float(1.0f / 16.0f) * Float(Y2); + Float x2 = w2 * (1.0f / 16.0f) * Float(X2); + Float y2 = w2 * (1.0f / 16.0f) * Float(Y2); Float a = x1 * y2 - x2 * y1; @@ -360,9 +360,9 @@ M[0].z = rhw0; - If(a != Float(0.0f)) + If(a != 0.0f) { - Float A = Float(1) / a; + Float A = 1.0f / a; Float D = A * rhw0; M[0].x = (y1 * w2 - y2 * w1) * D; @@ -409,10 +409,10 @@ if(!point) { - Float x1 = Float(X1) * Float(1.0f / 16.0f); - Float y1 = Float(Y1) * Float(1.0f / 16.0f); - Float x2 = Float(X2) * Float(1.0f / 16.0f); - Float y2 = Float(Y2) * Float(1.0f / 16.0f); + Float x1 = Float(X1) * (1.0f / 16.0f); + Float y1 = Float(Y1) * (1.0f / 16.0f); + Float x2 = Float(X2) * (1.0f / 16.0f); + Float y2 = Float(Y2) * (1.0f / 16.0f); Float D = *Pointer<Float>(data + OFFSET(DrawData,depthRange)) / (x1 * y2 - x2 * y1); @@ -489,20 +489,20 @@ } else { - if(component == 0) i.x = Float(0.5f); - if(component == 1) i.x = Float(0.5f); - if(component == 2) i.x = Float(0.0f); - if(component == 3) i.x = Float(1.0f); + if(component == 0) i.x = 0.5f; + if(component == 1) i.x = 0.5f; + if(component == 2) i.x = 0.0f; + if(component == 3) i.x = 1.0f; - if(component == 0) i.y = Float(1.0f); - if(component == 1) i.y = Float(0.5f); - if(component == 2) i.y = Float(0.0f); - if(component == 3) i.y = Float(1.0f); + if(component == 0) i.y = 1.0f; + if(component == 1) i.y = 0.5f; + if(component == 2) i.y = 0.0f; + if(component == 3) i.y = 1.0f; - if(component == 0) i.z = Float(0.5f); - if(component == 1) i.z = Float(1.0f); - if(component == 2) i.z = Float(0.0f); - if(component == 3) i.z = Float(1.0f); + if(component == 0) i.z = 0.5f; + if(component == 1) i.z = 1.0f; + if(component == 2) i.z = 0.0f; + if(component == 3) i.z = 1.0f; i.w = 0; } @@ -514,12 +514,12 @@ m = *Pointer<Float>(v0 + attribute); m = Max(m, *Pointer<Float>(v1 + attribute)); m = Max(m, *Pointer<Float>(v2 + attribute)); - m -= Float(0.5f); // FIXME: m -= 0.5f; + m -= 0.5f; // FIXME: Vectorize - If(Float(i.x) < m) i.x = Float(i.x) + Float(1.0f); - If(Float(i.y) < m) i.y = Float(i.y) + Float(1.0f); - If(Float(i.z) < m) i.z = Float(i.z) + Float(1.0f); + If(Float(i.x) < m) i.x = i.x + 1.0f; + If(Float(i.y) < m) i.y = i.y + 1.0f; + If(Float(i.z) < m) i.z = i.z + 1.0f; } if(!perspective) @@ -551,7 +551,7 @@ } } - void SetupRoutine::edge(Pointer<Byte> &primitive, Pointer<Byte> &data, Int &X1, Int &Y1, Int &X2, Int &Y2, Int &q) + void SetupRoutine::edge(Pointer<Byte> &primitive, Pointer<Byte> &data, const Int &X1, const Int &Y1, const Int &X2, const Int &Y2, Int &q) { If(Y1 != Y2) {