Update SwiftShader to April code dump.
April code dump from Transgaming. Adds new shader compiler.
diff --git a/src/Renderer/QuadRasterizer.cpp b/src/Renderer/QuadRasterizer.cpp
index 10fcf16..d4548fe 100644
--- a/src/Renderer/QuadRasterizer.cpp
+++ b/src/Renderer/QuadRasterizer.cpp
@@ -1,6 +1,6 @@
// SwiftShader Software Renderer
//
-// Copyright(c) 2005-2011 TransGaming Inc.
+// Copyright(c) 2005-2012 TransGaming Inc.
//
// All rights reserved. No part of this software may be copied, distributed, transmitted,
// transcribed, stored in a retrieval system, translated into any human or computer
@@ -45,7 +45,7 @@
Int cluster(function.arg(2));
Pointer<Byte> data(function.arg(3));
- Registers r;
+ Registers r(shader);
r.constants = *Pointer<Pointer<Byte>>(data + OFFSET(DrawData,constants));
r.cluster = cluster;
r.data = data;
@@ -91,7 +91,7 @@
Return();
}
- routine = function(L"PixelRoutine_%0.16llX", state.shaderHash);
+ routine = function(L"PixelRoutine_%0.8X", state.shaderID);
}
void QuadRasterizer::rasterize(Registers &r, Int &yMin, Int &yMax)
@@ -128,35 +128,35 @@
x0 = Int(*Pointer<Short>(r.primitive + OFFSET(Primitive,outline->left) + (y + 0) * sizeof(Primitive::Span)));
x2 = Int(*Pointer<Short>(r.primitive + OFFSET(Primitive,outline->left) + (y + 1) * sizeof(Primitive::Span)));
- x0 = IfThenElse(x0 < x2, x0, x2);
+ x0 = Min(x0, x2);
for(unsigned int q = 1; q < state.multiSample; q++)
{
Int x0q = Int(*Pointer<Short>(r.primitive + q * sizeof(Primitive) + OFFSET(Primitive,outline->left) + (y + 0) * sizeof(Primitive::Span)));
Int x2q = Int(*Pointer<Short>(r.primitive + q * sizeof(Primitive) + OFFSET(Primitive,outline->left) + (y + 1) * sizeof(Primitive::Span)));
- x0q = IfThenElse(x0q < x2q, x0q, x2q);
+ x0q = Min(x0q, x2q);
- x0 = IfThenElse(x0q < x0, x0q, x0);
+ x0 = Min(x0q, x0);
}
x0 &= 0xFFFFFFFE;
x1 = Int(*Pointer<Short>(r.primitive + OFFSET(Primitive,outline->right) + (y + 0) * sizeof(Primitive::Span)));
x2 = Int(*Pointer<Short>(r.primitive + OFFSET(Primitive,outline->right) + (y + 1) * sizeof(Primitive::Span)));
- x1 = IfThenElse(x1 > x2, x1, x2);
+ x1 = Max(x1, x2);
for(unsigned int q = 1; q < state.multiSample; q++)
{
Int x1q = Int(*Pointer<Short>(r.primitive + q * sizeof(Primitive) + OFFSET(Primitive,outline->right) + (y + 0) * sizeof(Primitive::Span)));
Int x2q = Int(*Pointer<Short>(r.primitive + q * sizeof(Primitive) + OFFSET(Primitive,outline->right) + (y + 1) * sizeof(Primitive::Span)));
- x1q = IfThenElse(x1q > x2q, x1q, x2q);
+ x1q = Max(x1q, x2q);
- x1 = IfThenElse(x1q > x1, x1q, x1);
+ x1 = Max(x1q, x1);
}
Float4 yyyy = Float4(Float(y)) + *Pointer<Float4>(r.primitive + OFFSET(Primitive,yQuad), 16);
- if(state.depthTestActive || state.pixelFogActive())
+ if(interpolateZ())
{
for(unsigned int q = 0; q < state.multiSample; q++)
{
@@ -245,7 +245,7 @@
If(x0 < x1)
{
- if(state.perspective)
+ if(interpolateW())
{
r.Dw = *Pointer<Float4>(r.primitive + OFFSET(Primitive,w.C), 16) + yyyy * *Pointer<Float4>(r.primitive + OFFSET(Primitive,w.B), 16);
}
@@ -299,18 +299,18 @@
{
if(state.colorWriteActive(index))
{
- cBuffer[index] += *Pointer<Int>(r.data + OFFSET(DrawData,colorPitchB[index])) << (1 + log2(clusterCount)); // FIXME: Precompute
+ cBuffer[index] += *Pointer<Int>(r.data + OFFSET(DrawData,colorPitchB[index])) << (1 + sw::log2(clusterCount)); // FIXME: Precompute
}
}
if(state.depthTestActive)
{
- zBuffer += *Pointer<Int>(r.data + OFFSET(DrawData,depthPitchB)) << (1 + log2(clusterCount)); // FIXME: Precompute
+ zBuffer += *Pointer<Int>(r.data + OFFSET(DrawData,depthPitchB)) << (1 + sw::log2(clusterCount)); // FIXME: Precompute
}
if(state.stencilActive)
{
- sBuffer += *Pointer<Int>(r.data + OFFSET(DrawData,stencilPitchB)) << (1 + log2(clusterCount)); // FIXME: Precompute
+ sBuffer += *Pointer<Int>(r.data + OFFSET(DrawData,stencilPitchB)) << (1 + sw::log2(clusterCount)); // FIXME: Precompute
}
y += 2 * clusterCount;