Commit 9651718a by Alexis Hetu Committed by Alexis Hétu

Renamed Vector4i to Vector4s

The current Vector4i was a vector of shorts and OpenGL ES 3.0 actually requires vectors of ints and uints, so I renamed Vector4i to Vector4s so that I may later add Vector4i and Vector4u with the proper internal representation. Change-Id: I9d413c459154c7ef9ddafc46b9fb7fa6186633b8 Reviewed-on: https://swiftshader-review.googlesource.com/2851Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent b14178b6
...@@ -283,7 +283,7 @@ namespace sw ...@@ -283,7 +283,7 @@ namespace sw
else else
{ {
r.current = r.diffuse; r.current = r.diffuse;
Vector4i temp(0x0000, 0x0000, 0x0000, 0x0000); Vector4s temp(0x0000, 0x0000, 0x0000, 0x0000);
for(int stage = 0; stage < 8; stage++) for(int stage = 0; stage < 8; stage++)
{ {
...@@ -292,7 +292,7 @@ namespace sw ...@@ -292,7 +292,7 @@ namespace sw
break; break;
} }
Vector4i texture; Vector4s texture;
if(state.textureStage[stage].usesTexture) if(state.textureStage[stage].usesTexture)
{ {
...@@ -660,15 +660,15 @@ namespace sw ...@@ -660,15 +660,15 @@ namespace sw
return zMask != 0; return zMask != 0;
} }
void PixelRoutine::blendTexture(Registers &r, Vector4i &temp, Vector4i &texture, int stage) void PixelRoutine::blendTexture(Registers &r, Vector4s &temp, Vector4s &texture, int stage)
{ {
Vector4i *arg1; Vector4s *arg1;
Vector4i *arg2; Vector4s *arg2;
Vector4i *arg3; Vector4s *arg3;
Vector4i res; Vector4s res;
Vector4i constant; Vector4s constant;
Vector4i tfactor; Vector4s tfactor;
const TextureStage::State &textureStage = state.textureStage[stage]; const TextureStage::State &textureStage = state.textureStage[stage];
...@@ -762,9 +762,9 @@ namespace sw ...@@ -762,9 +762,9 @@ namespace sw
ASSERT(false); ASSERT(false);
} }
Vector4i mod1; Vector4s mod1;
Vector4i mod2; Vector4s mod2;
Vector4i mod3; Vector4s mod3;
switch(textureStage.firstModifier) switch(textureStage.firstModifier)
{ {
...@@ -1628,7 +1628,7 @@ namespace sw ...@@ -1628,7 +1628,7 @@ namespace sw
cMask[3] &= aMask3; cMask[3] &= aMask3;
} }
Bool PixelRoutine::alphaTest(Registers &r, Int cMask[4], Vector4i &current) Bool PixelRoutine::alphaTest(Registers &r, Int cMask[4], Vector4s &current)
{ {
if(!state.alphaTestActive()) if(!state.alphaTestActive())
{ {
...@@ -1700,7 +1700,7 @@ namespace sw ...@@ -1700,7 +1700,7 @@ namespace sw
return pass != 0x0; return pass != 0x0;
} }
void PixelRoutine::fogBlend(Registers &r, Vector4i &current, Float4 &f, Float4 &z, Float4 &rhw) void PixelRoutine::fogBlend(Registers &r, Vector4s &current, Float4 &f, Float4 &z, Float4 &rhw)
{ {
if(!state.fogActive) if(!state.fogActive)
{ {
...@@ -1799,7 +1799,7 @@ namespace sw ...@@ -1799,7 +1799,7 @@ namespace sw
} }
} }
void PixelRoutine::specularPixel(Vector4i &current, Vector4i &specular) void PixelRoutine::specularPixel(Vector4s &current, Vector4s &specular)
{ {
if(!state.specularAdd) if(!state.specularAdd)
{ {
...@@ -2014,7 +2014,7 @@ namespace sw ...@@ -2014,7 +2014,7 @@ namespace sw
} }
} }
void PixelRoutine::sampleTexture(Registers &r, Vector4i &c, int coordinates, int stage, bool project) void PixelRoutine::sampleTexture(Registers &r, Vector4s &c, int coordinates, int stage, bool project)
{ {
Float4 u = r.vf[2 + coordinates].x; Float4 u = r.vf[2 + coordinates].x;
Float4 v = r.vf[2 + coordinates].y; Float4 v = r.vf[2 + coordinates].y;
...@@ -2032,7 +2032,7 @@ namespace sw ...@@ -2032,7 +2032,7 @@ namespace sw
sampleTexture(r, c, stage, u, v, w, q, project); sampleTexture(r, c, stage, u, v, w, q, project);
} }
void PixelRoutine::sampleTexture(Registers &r, Vector4i &c, int stage, Float4 &u, Float4 &v, Float4 &w, Float4 &q, bool project, bool bias, bool fixed12) void PixelRoutine::sampleTexture(Registers &r, Vector4s &c, int stage, Float4 &u, Float4 &v, Float4 &w, Float4 &q, bool project, bool bias, bool fixed12)
{ {
Vector4f dsx; Vector4f dsx;
Vector4f dsy; Vector4f dsy;
...@@ -2040,7 +2040,7 @@ namespace sw ...@@ -2040,7 +2040,7 @@ namespace sw
sampleTexture(r, c, stage, u, v, w, q, dsx, dsy, project, bias, fixed12, false); sampleTexture(r, c, stage, u, v, w, q, dsx, dsy, project, bias, fixed12, false);
} }
void PixelRoutine::sampleTexture(Registers &r, Vector4i &c, int stage, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool project, bool bias, bool fixed12, bool gradients, bool lodProvided) void PixelRoutine::sampleTexture(Registers &r, Vector4s &c, int stage, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool project, bool bias, bool fixed12, bool gradients, bool lodProvided)
{ {
#if PERF_PROFILE #if PERF_PROFILE
Long texTime = Ticks(); Long texTime = Ticks();
...@@ -2076,7 +2076,7 @@ namespace sw ...@@ -2076,7 +2076,7 @@ namespace sw
} }
else else
{ {
Int index = As<Int>(Float(reg(r, sampler).x.x)); Int index = As<Int>(Float(fetchRegisterF(r, sampler).x.x));
for(int i = 0; i < TEXTURE_IMAGE_UNITS; i++) for(int i = 0; i < TEXTURE_IMAGE_UNITS; i++)
{ {
...@@ -2155,7 +2155,7 @@ namespace sw ...@@ -2155,7 +2155,7 @@ namespace sw
} }
} }
void PixelRoutine::rasterOperation(Vector4i &current, Registers &r, Float4 &fog, Pointer<Byte> &cBuffer, Int &x, Int sMask[4], Int zMask[4], Int cMask[4]) void PixelRoutine::rasterOperation(Vector4s &current, Registers &r, Float4 &fog, Pointer<Byte> &cBuffer, Int &x, Int sMask[4], Int zMask[4], Int cMask[4])
{ {
if(!state.colorWriteActive(0)) if(!state.colorWriteActive(0))
{ {
...@@ -2190,7 +2190,7 @@ namespace sw ...@@ -2190,7 +2190,7 @@ namespace sw
for(unsigned int q = 0; q < state.multiSample; q++) for(unsigned int q = 0; q < state.multiSample; q++)
{ {
Pointer<Byte> buffer = cBuffer + q * *Pointer<Int>(r.data + OFFSET(DrawData,colorSliceB[0])); Pointer<Byte> buffer = cBuffer + q * *Pointer<Int>(r.data + OFFSET(DrawData,colorSliceB[0]));
Vector4i color = current; Vector4s color = current;
if(state.multiSampleMask & (1 << q)) if(state.multiSampleMask & (1 << q))
{ {
...@@ -2255,7 +2255,7 @@ namespace sw ...@@ -2255,7 +2255,7 @@ namespace sw
for(unsigned int q = 0; q < state.multiSample; q++) for(unsigned int q = 0; q < state.multiSample; q++)
{ {
Pointer<Byte> buffer = cBuffer[index] + q * *Pointer<Int>(r.data + OFFSET(DrawData,colorSliceB[index])); Pointer<Byte> buffer = cBuffer[index] + q * *Pointer<Int>(r.data + OFFSET(DrawData,colorSliceB[index]));
Vector4i color; Vector4s color;
color.x = convertFixed16(oC[index].x, false); color.x = convertFixed16(oC[index].x, false);
color.y = convertFixed16(oC[index].y, false); color.y = convertFixed16(oC[index].y, false);
...@@ -2290,7 +2290,7 @@ namespace sw ...@@ -2290,7 +2290,7 @@ namespace sw
} }
} }
void PixelRoutine::blendFactor(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, BlendFactor blendFactorActive) void PixelRoutine::blendFactor(Registers &r, const Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorActive)
{ {
switch(blendFactorActive) switch(blendFactorActive)
{ {
...@@ -2371,7 +2371,7 @@ namespace sw ...@@ -2371,7 +2371,7 @@ namespace sw
} }
} }
void PixelRoutine::blendFactorAlpha(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, BlendFactor blendFactorAlphaActive) void PixelRoutine::blendFactorAlpha(Registers &r, const Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorAlphaActive)
{ {
switch(blendFactorAlphaActive) switch(blendFactorAlphaActive)
{ {
...@@ -2421,7 +2421,7 @@ namespace sw ...@@ -2421,7 +2421,7 @@ namespace sw
} }
} }
void PixelRoutine::alphaBlend(Registers &r, int index, Pointer<Byte> &cBuffer, Vector4i &current, Int &x) void PixelRoutine::alphaBlend(Registers &r, int index, Pointer<Byte> &cBuffer, Vector4s &current, Int &x)
{ {
if(!state.alphaBlendActive) if(!state.alphaBlendActive)
{ {
...@@ -2430,7 +2430,7 @@ namespace sw ...@@ -2430,7 +2430,7 @@ namespace sw
Pointer<Byte> buffer; Pointer<Byte> buffer;
Vector4i pixel; Vector4s pixel;
Short4 c01; Short4 c01;
Short4 c23; Short4 c23;
...@@ -2569,8 +2569,8 @@ namespace sw ...@@ -2569,8 +2569,8 @@ namespace sw
} }
// Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor // Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor
Vector4i sourceFactor; Vector4s sourceFactor;
Vector4i destFactor; Vector4s destFactor;
blendFactor(r, sourceFactor, current, pixel, state.sourceBlendFactor); blendFactor(r, sourceFactor, current, pixel, state.sourceBlendFactor);
blendFactor(r, destFactor, current, pixel, state.destBlendFactor); blendFactor(r, destFactor, current, pixel, state.destBlendFactor);
...@@ -2677,7 +2677,7 @@ namespace sw ...@@ -2677,7 +2677,7 @@ namespace sw
} }
} }
void PixelRoutine::writeColor(Registers &r, int index, Pointer<Byte> &cBuffer, Int &x, Vector4i &current, Int &sMask, Int &zMask, Int &cMask) void PixelRoutine::writeColor(Registers &r, int index, Pointer<Byte> &cBuffer, Int &x, Vector4s &current, Int &sMask, Int &zMask, Int &cMask)
{ {
if(!state.colorWriteActive(index)) if(!state.colorWriteActive(index))
{ {
...@@ -3233,7 +3233,7 @@ namespace sw ...@@ -3233,7 +3233,7 @@ namespace sw
Pointer<Byte> buffer; Pointer<Byte> buffer;
Vector4f pixel; Vector4f pixel;
Vector4i color; Vector4s color;
Short4 c01; Short4 c01;
Short4 c23; Short4 c23;
...@@ -3550,7 +3550,7 @@ namespace sw ...@@ -3550,7 +3550,7 @@ namespace sw
return; return;
} }
Vector4i color; Vector4s color;
switch(state.targetFormat[index]) switch(state.targetFormat[index])
{ {
...@@ -3750,7 +3750,7 @@ namespace sw ...@@ -3750,7 +3750,7 @@ namespace sw
void PixelRoutine::ps_1_x(Registers &r, Int cMask[4]) void PixelRoutine::ps_1_x(Registers &r, Int cMask[4])
{ {
int pad = 0; // Count number of texm3x3pad instructions int pad = 0; // Count number of texm3x3pad instructions
Vector4i dPairing; // Destination for first pairing instruction Vector4s dPairing; // Destination for first pairing instruction
for(size_t i = 0; i < shader->getLength(); i++) for(size_t i = 0; i < shader->getLength(); i++)
{ {
...@@ -3775,14 +3775,14 @@ namespace sw ...@@ -3775,14 +3775,14 @@ namespace sw
bool pairing = i + 1 < shader->getLength() && shader->getInstruction(i + 1)->coissue; // First instruction of pair bool pairing = i + 1 < shader->getLength() && shader->getInstruction(i + 1)->coissue; // First instruction of pair
bool coissue = instruction->coissue; // Second instruction of pair bool coissue = instruction->coissue; // Second instruction of pair
Vector4i d; Vector4s d;
Vector4i s0; Vector4s s0;
Vector4i s1; Vector4s s1;
Vector4i s2; Vector4s s2;
if(src0.type != Shader::PARAMETER_VOID) s0 = regi(r, src0); if(src0.type != Shader::PARAMETER_VOID) s0 = fetchRegisterS(r, src0);
if(src1.type != Shader::PARAMETER_VOID) s1 = regi(r, src1); if(src1.type != Shader::PARAMETER_VOID) s1 = fetchRegisterS(r, src1);
if(src2.type != Shader::PARAMETER_VOID) s2 = regi(r, src2); if(src2.type != Shader::PARAMETER_VOID) s2 = fetchRegisterS(r, src2);
Float4 u = version < 0x0104 ? r.vf[2 + dst.index].x : r.vf[2 + src0.index].x; Float4 u = version < 0x0104 ? r.vf[2 + dst.index].x : r.vf[2 + src0.index].x;
Float4 v = version < 0x0104 ? r.vf[2 + dst.index].y : r.vf[2 + src0.index].y; Float4 v = version < 0x0104 ? r.vf[2 + dst.index].y : r.vf[2 + src0.index].y;
...@@ -3838,7 +3838,7 @@ namespace sw ...@@ -3838,7 +3838,7 @@ namespace sw
} }
else else
{ {
TEXKILL(cMask, r.ri[dst.index]); TEXKILL(cMask, r.rs[dst.index]);
} }
} }
else ASSERT(false); else ASSERT(false);
...@@ -4011,10 +4011,10 @@ namespace sw ...@@ -4011,10 +4011,10 @@ namespace sw
} }
} }
if(src0.type != Shader::PARAMETER_VOID) s0 = reg(r, src0); if(src0.type != Shader::PARAMETER_VOID) s0 = fetchRegisterF(r, src0);
if(src1.type != Shader::PARAMETER_VOID) s1 = reg(r, src1); if(src1.type != Shader::PARAMETER_VOID) s1 = fetchRegisterF(r, src1);
if(src2.type != Shader::PARAMETER_VOID) s2 = reg(r, src2); if(src2.type != Shader::PARAMETER_VOID) s2 = fetchRegisterF(r, src2);
if(src3.type != Shader::PARAMETER_VOID) s3 = reg(r, src3); if(src3.type != Shader::PARAMETER_VOID) s3 = fetchRegisterF(r, src3);
switch(opcode) switch(opcode)
{ {
...@@ -4323,12 +4323,12 @@ namespace sw ...@@ -4323,12 +4323,12 @@ namespace sw
return RoundShort4(cf * Float4(0x1000)); return RoundShort4(cf * Float4(0x1000));
} }
void PixelRoutine::convertFixed12(Vector4i &ci, Vector4f &cf) void PixelRoutine::convertFixed12(Vector4s &cs, Vector4f &cf)
{ {
ci.x = convertFixed12(cf.x); cs.x = convertFixed12(cf.x);
ci.y = convertFixed12(cf.y); cs.y = convertFixed12(cf.y);
ci.z = convertFixed12(cf.z); cs.z = convertFixed12(cf.z);
ci.w = convertFixed12(cf.w); cs.w = convertFixed12(cf.w);
} }
UShort4 PixelRoutine::convertFixed16(Float4 &cf, bool saturate) UShort4 PixelRoutine::convertFixed16(Float4 &cf, bool saturate)
...@@ -4336,33 +4336,33 @@ namespace sw ...@@ -4336,33 +4336,33 @@ namespace sw
return UShort4(cf * Float4(0xFFFF), saturate); return UShort4(cf * Float4(0xFFFF), saturate);
} }
void PixelRoutine::convertFixed16(Vector4i &ci, Vector4f &cf, bool saturate) void PixelRoutine::convertFixed16(Vector4s &cs, Vector4f &cf, bool saturate)
{ {
ci.x = convertFixed16(cf.x, saturate); cs.x = convertFixed16(cf.x, saturate);
ci.y = convertFixed16(cf.y, saturate); cs.y = convertFixed16(cf.y, saturate);
ci.z = convertFixed16(cf.z, saturate); cs.z = convertFixed16(cf.z, saturate);
ci.w = convertFixed16(cf.w, saturate); cs.w = convertFixed16(cf.w, saturate);
} }
Float4 PixelRoutine::convertSigned12(Short4 &ci) Float4 PixelRoutine::convertSigned12(Short4 &cs)
{ {
return Float4(ci) * Float4(1.0f / 0x0FFE); return Float4(cs) * Float4(1.0f / 0x0FFE);
} }
void PixelRoutine::convertSigned12(Vector4f &cf, Vector4i &ci) void PixelRoutine::convertSigned12(Vector4f &cf, Vector4s &cs)
{ {
cf.x = convertSigned12(ci.x); cf.x = convertSigned12(cs.x);
cf.y = convertSigned12(ci.y); cf.y = convertSigned12(cs.y);
cf.z = convertSigned12(ci.z); cf.z = convertSigned12(cs.z);
cf.w = convertSigned12(ci.w); cf.w = convertSigned12(cs.w);
} }
Float4 PixelRoutine::convertUnsigned16(UShort4 ci) Float4 PixelRoutine::convertUnsigned16(UShort4 cs)
{ {
return Float4(ci) * Float4(1.0f / 0xFFFF); return Float4(cs) * Float4(1.0f / 0xFFFF);
} }
void PixelRoutine::sRGBtoLinear16_16(Registers &r, Vector4i &c) void PixelRoutine::sRGBtoLinear16_16(Registers &r, Vector4s &c)
{ {
c.x = As<UShort4>(c.x) >> 4; c.x = As<UShort4>(c.x) >> 4;
c.y = As<UShort4>(c.y) >> 4; c.y = As<UShort4>(c.y) >> 4;
...@@ -4371,7 +4371,7 @@ namespace sw ...@@ -4371,7 +4371,7 @@ namespace sw
sRGBtoLinear12_16(r, c); sRGBtoLinear12_16(r, c);
} }
void PixelRoutine::sRGBtoLinear12_16(Registers &r, Vector4i &c) void PixelRoutine::sRGBtoLinear12_16(Registers &r, Vector4s &c)
{ {
Pointer<Byte> LUT = r.constants + OFFSET(Constants,sRGBtoLin12_16); Pointer<Byte> LUT = r.constants + OFFSET(Constants,sRGBtoLin12_16);
...@@ -4391,7 +4391,7 @@ namespace sw ...@@ -4391,7 +4391,7 @@ namespace sw
c.z = Insert(c.z, *Pointer<Short>(LUT + 2 * Int(Extract(c.z, 3))), 3); c.z = Insert(c.z, *Pointer<Short>(LUT + 2 * Int(Extract(c.z, 3))), 3);
} }
void PixelRoutine::linearToSRGB16_16(Registers &r, Vector4i &c) void PixelRoutine::linearToSRGB16_16(Registers &r, Vector4s &c)
{ {
c.x = As<UShort4>(c.x) >> 4; c.x = As<UShort4>(c.x) >> 4;
c.y = As<UShort4>(c.y) >> 4; c.y = As<UShort4>(c.y) >> 4;
...@@ -4400,7 +4400,7 @@ namespace sw ...@@ -4400,7 +4400,7 @@ namespace sw
linearToSRGB12_16(r, c); linearToSRGB12_16(r, c);
} }
void PixelRoutine::linearToSRGB12_16(Registers &r, Vector4i &c) void PixelRoutine::linearToSRGB12_16(Registers &r, Vector4s &c)
{ {
Pointer<Byte> LUT = r.constants + OFFSET(Constants,linToSRGB12_16); Pointer<Byte> LUT = r.constants + OFFSET(Constants,linToSRGB12_16);
...@@ -4436,7 +4436,7 @@ namespace sw ...@@ -4436,7 +4436,7 @@ namespace sw
return Min(Max(linear, Float4(0.0f)), Float4(1.0f)); return Min(Max(linear, Float4(0.0f)), Float4(1.0f));
} }
void PixelRoutine::MOV(Vector4i &dst, Vector4i &src0) void PixelRoutine::MOV(Vector4s &dst, Vector4s &src0)
{ {
dst.x = src0.x; dst.x = src0.x;
dst.y = src0.y; dst.y = src0.y;
...@@ -4444,7 +4444,7 @@ namespace sw ...@@ -4444,7 +4444,7 @@ namespace sw
dst.w = src0.w; dst.w = src0.w;
} }
void PixelRoutine::ADD(Vector4i &dst, Vector4i &src0, Vector4i &src1) void PixelRoutine::ADD(Vector4s &dst, Vector4s &src0, Vector4s &src1)
{ {
dst.x = AddSat(src0.x, src1.x); dst.x = AddSat(src0.x, src1.x);
dst.y = AddSat(src0.y, src1.y); dst.y = AddSat(src0.y, src1.y);
...@@ -4452,7 +4452,7 @@ namespace sw ...@@ -4452,7 +4452,7 @@ namespace sw
dst.w = AddSat(src0.w, src1.w); dst.w = AddSat(src0.w, src1.w);
} }
void PixelRoutine::SUB(Vector4i &dst, Vector4i &src0, Vector4i &src1) void PixelRoutine::SUB(Vector4s &dst, Vector4s &src0, Vector4s &src1)
{ {
dst.x = SubSat(src0.x, src1.x); dst.x = SubSat(src0.x, src1.x);
dst.y = SubSat(src0.y, src1.y); dst.y = SubSat(src0.y, src1.y);
...@@ -4460,7 +4460,7 @@ namespace sw ...@@ -4460,7 +4460,7 @@ namespace sw
dst.w = SubSat(src0.w, src1.w); dst.w = SubSat(src0.w, src1.w);
} }
void PixelRoutine::MAD(Vector4i &dst, Vector4i &src0, Vector4i &src1, Vector4i &src2) void PixelRoutine::MAD(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2)
{ {
// FIXME: Long fixed-point multiply fixup // FIXME: Long fixed-point multiply fixup
{dst.x = MulHigh(src0.x, src1.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, src2.x);} {dst.x = MulHigh(src0.x, src1.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, src2.x);}
...@@ -4469,7 +4469,7 @@ namespace sw ...@@ -4469,7 +4469,7 @@ namespace sw
{dst.w = MulHigh(src0.w, src1.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, src2.w);} {dst.w = MulHigh(src0.w, src1.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, src2.w);}
} }
void PixelRoutine::MUL(Vector4i &dst, Vector4i &src0, Vector4i &src1) void PixelRoutine::MUL(Vector4s &dst, Vector4s &src0, Vector4s &src1)
{ {
// FIXME: Long fixed-point multiply fixup // FIXME: Long fixed-point multiply fixup
{dst.x = MulHigh(src0.x, src1.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x);} {dst.x = MulHigh(src0.x, src1.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x);}
...@@ -4478,7 +4478,7 @@ namespace sw ...@@ -4478,7 +4478,7 @@ namespace sw
{dst.w = MulHigh(src0.w, src1.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w);} {dst.w = MulHigh(src0.w, src1.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w);}
} }
void PixelRoutine::DP3(Vector4i &dst, Vector4i &src0, Vector4i &src1) void PixelRoutine::DP3(Vector4s &dst, Vector4s &src0, Vector4s &src1)
{ {
Short4 t0; Short4 t0;
Short4 t1; Short4 t1;
...@@ -4496,7 +4496,7 @@ namespace sw ...@@ -4496,7 +4496,7 @@ namespace sw
dst.w = t0; dst.w = t0;
} }
void PixelRoutine::DP4(Vector4i &dst, Vector4i &src0, Vector4i &src1) void PixelRoutine::DP4(Vector4s &dst, Vector4s &src0, Vector4s &src1)
{ {
Short4 t0; Short4 t0;
Short4 t1; Short4 t1;
...@@ -4516,7 +4516,7 @@ namespace sw ...@@ -4516,7 +4516,7 @@ namespace sw
dst.w = t0; dst.w = t0;
} }
void PixelRoutine::LRP(Vector4i &dst, Vector4i &src0, Vector4i &src1, Vector4i &src2) void PixelRoutine::LRP(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2)
{ {
// FIXME: Long fixed-point multiply fixup // FIXME: Long fixed-point multiply fixup
{dst.x = SubSat(src1.x, src2.x); dst.x = MulHigh(dst.x, src0.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, src2.x);} {dst.x = SubSat(src1.x, src2.x); dst.x = MulHigh(dst.x, src0.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, dst.x); dst.x = AddSat(dst.x, src2.x);}
...@@ -4525,7 +4525,7 @@ namespace sw ...@@ -4525,7 +4525,7 @@ namespace sw
{dst.w = SubSat(src1.w, src2.w); dst.w = MulHigh(dst.w, src0.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, src2.w);} {dst.w = SubSat(src1.w, src2.w); dst.w = MulHigh(dst.w, src0.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, dst.w); dst.w = AddSat(dst.w, src2.w);}
} }
void PixelRoutine::TEXCOORD(Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int coordinate) void PixelRoutine::TEXCOORD(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int coordinate)
{ {
Float4 uw; Float4 uw;
Float4 vw; Float4 vw;
...@@ -4567,7 +4567,7 @@ namespace sw ...@@ -4567,7 +4567,7 @@ namespace sw
dst.w = Short4(0x1000); dst.w = Short4(0x1000);
} }
void PixelRoutine::TEXCRD(Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int coordinate, bool project) void PixelRoutine::TEXCRD(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int coordinate, bool project)
{ {
Float4 uw = u; Float4 uw = u;
Float4 vw = v; Float4 vw = v;
...@@ -4616,7 +4616,7 @@ namespace sw ...@@ -4616,7 +4616,7 @@ namespace sw
} }
} }
void PixelRoutine::TEXDP3(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, Vector4i &src) void PixelRoutine::TEXDP3(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, Vector4s &src)
{ {
TEXM3X3PAD(r, u, v, s, src, 0, false); TEXM3X3PAD(r, u, v, s, src, 0, false);
...@@ -4628,7 +4628,7 @@ namespace sw ...@@ -4628,7 +4628,7 @@ namespace sw
dst.w = t0; dst.w = t0;
} }
void PixelRoutine::TEXDP3TEX(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4i &src0) void PixelRoutine::TEXDP3TEX(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0)
{ {
TEXM3X3PAD(r, u, v, s, src0, 0, false); TEXM3X3PAD(r, u, v, s, src0, 0, false);
...@@ -4650,7 +4650,7 @@ namespace sw ...@@ -4650,7 +4650,7 @@ namespace sw
} }
} }
void PixelRoutine::TEXKILL(Int cMask[4], Vector4i &src) void PixelRoutine::TEXKILL(Int cMask[4], Vector4s &src)
{ {
Short4 test = src.x | src.y | src.z; Short4 test = src.x | src.y | src.z;
Int kill = SignMask(Pack(test, test)) ^ 0x0000000F; Int kill = SignMask(Pack(test, test)) ^ 0x0000000F;
...@@ -4661,12 +4661,12 @@ namespace sw ...@@ -4661,12 +4661,12 @@ namespace sw
} }
} }
void PixelRoutine::TEX(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int sampler, bool project) void PixelRoutine::TEX(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int sampler, bool project)
{ {
sampleTexture(r, dst, sampler, u, v, s, s, project); sampleTexture(r, dst, sampler, u, v, s, s, project);
} }
void PixelRoutine::TEXLD(Registers &r, Vector4i &dst, Vector4i &src, int sampler, bool project) void PixelRoutine::TEXLD(Registers &r, Vector4s &dst, Vector4s &src, int sampler, bool project)
{ {
Float4 u = Float4(src.x) * Float4(1.0f / 0x0FFE); Float4 u = Float4(src.x) * Float4(1.0f / 0x0FFE);
Float4 v = Float4(src.y) * Float4(1.0f / 0x0FFE); Float4 v = Float4(src.y) * Float4(1.0f / 0x0FFE);
...@@ -4675,7 +4675,7 @@ namespace sw ...@@ -4675,7 +4675,7 @@ namespace sw
sampleTexture(r, dst, sampler, u, v, s, s, project); sampleTexture(r, dst, sampler, u, v, s, s, project);
} }
void PixelRoutine::TEXBEM(Registers &r, Vector4i &dst, Vector4i &src, Float4 &u, Float4 &v, Float4 &s, int stage) void PixelRoutine::TEXBEM(Registers &r, Vector4s &dst, Vector4s &src, Float4 &u, Float4 &v, Float4 &s, int stage)
{ {
Float4 du = Float4(src.x) * Float4(1.0f / 0x0FFE); Float4 du = Float4(src.x) * Float4(1.0f / 0x0FFE);
Float4 dv = Float4(src.y) * Float4(1.0f / 0x0FFE); Float4 dv = Float4(src.y) * Float4(1.0f / 0x0FFE);
...@@ -4696,7 +4696,7 @@ namespace sw ...@@ -4696,7 +4696,7 @@ namespace sw
sampleTexture(r, dst, stage, u_, v_, s, s); sampleTexture(r, dst, stage, u_, v_, s, s);
} }
void PixelRoutine::TEXBEML(Registers &r, Vector4i &dst, Vector4i &src, Float4 &u, Float4 &v, Float4 &s, int stage) void PixelRoutine::TEXBEML(Registers &r, Vector4s &dst, Vector4s &src, Float4 &u, Float4 &v, Float4 &s, int stage)
{ {
Float4 du = Float4(src.x) * Float4(1.0f / 0x0FFE); Float4 du = Float4(src.x) * Float4(1.0f / 0x0FFE);
Float4 dv = Float4(src.y) * Float4(1.0f / 0x0FFE); Float4 dv = Float4(src.y) * Float4(1.0f / 0x0FFE);
...@@ -4730,7 +4730,7 @@ namespace sw ...@@ -4730,7 +4730,7 @@ namespace sw
dst.z = MulHigh(dst.z, L); dst.z = dst.z << 4; dst.z = MulHigh(dst.z, L); dst.z = dst.z << 4;
} }
void PixelRoutine::TEXREG2AR(Registers &r, Vector4i &dst, Vector4i &src0, int stage) void PixelRoutine::TEXREG2AR(Registers &r, Vector4s &dst, Vector4s &src0, int stage)
{ {
Float4 u = Float4(src0.w) * Float4(1.0f / 0x0FFE); Float4 u = Float4(src0.w) * Float4(1.0f / 0x0FFE);
Float4 v = Float4(src0.x) * Float4(1.0f / 0x0FFE); Float4 v = Float4(src0.x) * Float4(1.0f / 0x0FFE);
...@@ -4739,7 +4739,7 @@ namespace sw ...@@ -4739,7 +4739,7 @@ namespace sw
sampleTexture(r, dst, stage, u, v, s, s); sampleTexture(r, dst, stage, u, v, s, s);
} }
void PixelRoutine::TEXREG2GB(Registers &r, Vector4i &dst, Vector4i &src0, int stage) void PixelRoutine::TEXREG2GB(Registers &r, Vector4s &dst, Vector4s &src0, int stage)
{ {
Float4 u = Float4(src0.y) * Float4(1.0f / 0x0FFE); Float4 u = Float4(src0.y) * Float4(1.0f / 0x0FFE);
Float4 v = Float4(src0.z) * Float4(1.0f / 0x0FFE); Float4 v = Float4(src0.z) * Float4(1.0f / 0x0FFE);
...@@ -4748,7 +4748,7 @@ namespace sw ...@@ -4748,7 +4748,7 @@ namespace sw
sampleTexture(r, dst, stage, u, v, s, s); sampleTexture(r, dst, stage, u, v, s, s);
} }
void PixelRoutine::TEXREG2RGB(Registers &r, Vector4i &dst, Vector4i &src0, int stage) void PixelRoutine::TEXREG2RGB(Registers &r, Vector4s &dst, Vector4s &src0, int stage)
{ {
Float4 u = Float4(src0.x) * Float4(1.0f / 0x0FFE); Float4 u = Float4(src0.x) * Float4(1.0f / 0x0FFE);
Float4 v = Float4(src0.y) * Float4(1.0f / 0x0FFE); Float4 v = Float4(src0.y) * Float4(1.0f / 0x0FFE);
...@@ -4757,7 +4757,7 @@ namespace sw ...@@ -4757,7 +4757,7 @@ namespace sw
sampleTexture(r, dst, stage, u, v, s, s); sampleTexture(r, dst, stage, u, v, s, s);
} }
void PixelRoutine::TEXM3X2DEPTH(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, Vector4i &src, bool signedScaling) void PixelRoutine::TEXM3X2DEPTH(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, Vector4s &src, bool signedScaling)
{ {
TEXM3X2PAD(r, u, v, s, src, 1, signedScaling); TEXM3X2PAD(r, u, v, s, src, 1, signedScaling);
...@@ -4767,12 +4767,12 @@ namespace sw ...@@ -4767,12 +4767,12 @@ namespace sw
r.oDepth = r.u_; r.oDepth = r.u_;
} }
void PixelRoutine::TEXM3X2PAD(Registers &r, Float4 &u, Float4 &v, Float4 &s, Vector4i &src0, int component, bool signedScaling) void PixelRoutine::TEXM3X2PAD(Registers &r, Float4 &u, Float4 &v, Float4 &s, Vector4s &src0, int component, bool signedScaling)
{ {
TEXM3X3PAD(r, u, v, s, src0, component, signedScaling); TEXM3X3PAD(r, u, v, s, src0, component, signedScaling);
} }
void PixelRoutine::TEXM3X2TEX(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4i &src0, bool signedScaling) void PixelRoutine::TEXM3X2TEX(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0, bool signedScaling)
{ {
TEXM3X2PAD(r, u, v, s, src0, 1, signedScaling); TEXM3X2PAD(r, u, v, s, src0, 1, signedScaling);
...@@ -4781,7 +4781,7 @@ namespace sw ...@@ -4781,7 +4781,7 @@ namespace sw
sampleTexture(r, dst, stage, r.u_, r.v_, r.w_, r.w_); sampleTexture(r, dst, stage, r.u_, r.v_, r.w_, r.w_);
} }
void PixelRoutine::TEXM3X3(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, Vector4i &src0, bool signedScaling) void PixelRoutine::TEXM3X3(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, Vector4s &src0, bool signedScaling)
{ {
TEXM3X3PAD(r, u, v, s, src0, 2, signedScaling); TEXM3X3PAD(r, u, v, s, src0, 2, signedScaling);
...@@ -4791,7 +4791,7 @@ namespace sw ...@@ -4791,7 +4791,7 @@ namespace sw
dst.w = Short4(0x1000); dst.w = Short4(0x1000);
} }
void PixelRoutine::TEXM3X3PAD(Registers &r, Float4 &u, Float4 &v, Float4 &s, Vector4i &src0, int component, bool signedScaling) void PixelRoutine::TEXM3X3PAD(Registers &r, Float4 &u, Float4 &v, Float4 &s, Vector4s &src0, int component, bool signedScaling)
{ {
if(component == 0 || previousScaling != signedScaling) // FIXME: Other source modifiers? if(component == 0 || previousScaling != signedScaling) // FIXME: Other source modifiers?
{ {
...@@ -4815,7 +4815,7 @@ namespace sw ...@@ -4815,7 +4815,7 @@ namespace sw
} }
} }
void PixelRoutine::TEXM3X3SPEC(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4i &src0, Vector4i &src1) void PixelRoutine::TEXM3X3SPEC(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0, Vector4s &src1)
{ {
TEXM3X3PAD(r, u, v, s, src0, 2, false); TEXM3X3PAD(r, u, v, s, src0, 2, false);
...@@ -4852,14 +4852,14 @@ namespace sw ...@@ -4852,14 +4852,14 @@ namespace sw
sampleTexture(r, dst, stage, u__, v__, w__, w__); sampleTexture(r, dst, stage, u__, v__, w__, w__);
} }
void PixelRoutine::TEXM3X3TEX(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4i &src0, bool signedScaling) void PixelRoutine::TEXM3X3TEX(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0, bool signedScaling)
{ {
TEXM3X3PAD(r, u, v, s, src0, 2, signedScaling); TEXM3X3PAD(r, u, v, s, src0, 2, signedScaling);
sampleTexture(r, dst, stage, r.u_, r.v_, r.w_, r.w_); sampleTexture(r, dst, stage, r.u_, r.v_, r.w_, r.w_);
} }
void PixelRoutine::TEXM3X3VSPEC(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4i &src0) void PixelRoutine::TEXM3X3VSPEC(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0)
{ {
TEXM3X3PAD(r, u, v, s, src0, 2, false); TEXM3X3PAD(r, u, v, s, src0, 2, false);
...@@ -4898,8 +4898,8 @@ namespace sw ...@@ -4898,8 +4898,8 @@ namespace sw
void PixelRoutine::TEXDEPTH(Registers &r) void PixelRoutine::TEXDEPTH(Registers &r)
{ {
r.u_ = Float4(r.ri[5].x); r.u_ = Float4(r.rs[5].x);
r.v_ = Float4(r.ri[5].y); r.v_ = Float4(r.rs[5].y);
// z / w // z / w
r.u_ *= Rcp_pp(r.v_); // FIXME: Set result to 1.0 when division by zero r.u_ *= Rcp_pp(r.v_); // FIXME: Set result to 1.0 when division by zero
...@@ -4907,7 +4907,7 @@ namespace sw ...@@ -4907,7 +4907,7 @@ namespace sw
r.oDepth = r.u_; r.oDepth = r.u_;
} }
void PixelRoutine::CND(Vector4i &dst, Vector4i &src0, Vector4i &src1, Vector4i &src2) void PixelRoutine::CND(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2)
{ {
{Short4 t0; t0 = src0.x; t0 = CmpGT(t0, Short4(0x0800, 0x0800, 0x0800, 0x0800)); Short4 t1; t1 = src1.x; t1 = t1 & t0; t0 = ~t0 & src2.x; t0 = t0 | t1; dst.x = t0;}; {Short4 t0; t0 = src0.x; t0 = CmpGT(t0, Short4(0x0800, 0x0800, 0x0800, 0x0800)); Short4 t1; t1 = src1.x; t1 = t1 & t0; t0 = ~t0 & src2.x; t0 = t0 | t1; dst.x = t0;};
{Short4 t0; t0 = src0.y; t0 = CmpGT(t0, Short4(0x0800, 0x0800, 0x0800, 0x0800)); Short4 t1; t1 = src1.y; t1 = t1 & t0; t0 = ~t0 & src2.y; t0 = t0 | t1; dst.y = t0;}; {Short4 t0; t0 = src0.y; t0 = CmpGT(t0, Short4(0x0800, 0x0800, 0x0800, 0x0800)); Short4 t1; t1 = src1.y; t1 = t1 & t0; t0 = ~t0 & src2.y; t0 = t0 | t1; dst.y = t0;};
...@@ -4915,7 +4915,7 @@ namespace sw ...@@ -4915,7 +4915,7 @@ namespace sw
{Short4 t0; t0 = src0.w; t0 = CmpGT(t0, Short4(0x0800, 0x0800, 0x0800, 0x0800)); Short4 t1; t1 = src1.w; t1 = t1 & t0; t0 = ~t0 & src2.w; t0 = t0 | t1; dst.w = t0;}; {Short4 t0; t0 = src0.w; t0 = CmpGT(t0, Short4(0x0800, 0x0800, 0x0800, 0x0800)); Short4 t1; t1 = src1.w; t1 = t1 & t0; t0 = ~t0 & src2.w; t0 = t0 | t1; dst.w = t0;};
} }
void PixelRoutine::CMP(Vector4i &dst, Vector4i &src0, Vector4i &src1, Vector4i &src2) void PixelRoutine::CMP(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2)
{ {
{Short4 t0 = CmpGT(Short4(0x0000, 0x0000, 0x0000, 0x0000), src0.x); Short4 t1; t1 = src2.x; t1 &= t0; t0 = ~t0 & src1.x; t0 |= t1; dst.x = t0;}; {Short4 t0 = CmpGT(Short4(0x0000, 0x0000, 0x0000, 0x0000), src0.x); Short4 t1; t1 = src2.x; t1 &= t0; t0 = ~t0 & src1.x; t0 |= t1; dst.x = t0;};
{Short4 t0 = CmpGT(Short4(0x0000, 0x0000, 0x0000, 0x0000), src0.y); Short4 t1; t1 = src2.y; t1 &= t0; t0 = ~t0 & src1.y; t0 |= t1; dst.y = t0;}; {Short4 t0 = CmpGT(Short4(0x0000, 0x0000, 0x0000, 0x0000), src0.y); Short4 t1; t1 = src2.y; t1 &= t0; t0 = ~t0 & src1.y; t0 |= t1; dst.y = t0;};
...@@ -4923,7 +4923,7 @@ namespace sw ...@@ -4923,7 +4923,7 @@ namespace sw
{Short4 t0 = CmpGT(Short4(0x0000, 0x0000, 0x0000, 0x0000), src0.w); Short4 t1; t1 = src2.w; t1 &= t0; t0 = ~t0 & src1.w; t0 |= t1; dst.w = t0;}; {Short4 t0 = CmpGT(Short4(0x0000, 0x0000, 0x0000, 0x0000), src0.w); Short4 t1; t1 = src2.w; t1 &= t0; t0 = ~t0 & src1.w; t0 |= t1; dst.w = t0;};
} }
void PixelRoutine::BEM(Registers &r, Vector4i &dst, Vector4i &src0, Vector4i &src1, int stage) void PixelRoutine::BEM(Registers &r, Vector4s &dst, Vector4s &src0, Vector4s &src1, int stage)
{ {
Short4 t0; Short4 t0;
Short4 t1; Short4 t1;
...@@ -4945,8 +4945,8 @@ namespace sw ...@@ -4945,8 +4945,8 @@ namespace sw
void PixelRoutine::M3X2(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1) void PixelRoutine::M3X2(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1)
{ {
Vector4f row0 = reg(r, src1, 0); Vector4f row0 = fetchRegisterF(r, src1, 0);
Vector4f row1 = reg(r, src1, 1); Vector4f row1 = fetchRegisterF(r, src1, 1);
dst.x = dot3(src0, row0); dst.x = dot3(src0, row0);
dst.y = dot3(src0, row1); dst.y = dot3(src0, row1);
...@@ -4954,9 +4954,9 @@ namespace sw ...@@ -4954,9 +4954,9 @@ namespace sw
void PixelRoutine::M3X3(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1) void PixelRoutine::M3X3(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1)
{ {
Vector4f row0 = reg(r, src1, 0); Vector4f row0 = fetchRegisterF(r, src1, 0);
Vector4f row1 = reg(r, src1, 1); Vector4f row1 = fetchRegisterF(r, src1, 1);
Vector4f row2 = reg(r, src1, 2); Vector4f row2 = fetchRegisterF(r, src1, 2);
dst.x = dot3(src0, row0); dst.x = dot3(src0, row0);
dst.y = dot3(src0, row1); dst.y = dot3(src0, row1);
...@@ -4965,10 +4965,10 @@ namespace sw ...@@ -4965,10 +4965,10 @@ namespace sw
void PixelRoutine::M3X4(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1) void PixelRoutine::M3X4(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1)
{ {
Vector4f row0 = reg(r, src1, 0); Vector4f row0 = fetchRegisterF(r, src1, 0);
Vector4f row1 = reg(r, src1, 1); Vector4f row1 = fetchRegisterF(r, src1, 1);
Vector4f row2 = reg(r, src1, 2); Vector4f row2 = fetchRegisterF(r, src1, 2);
Vector4f row3 = reg(r, src1, 3); Vector4f row3 = fetchRegisterF(r, src1, 3);
dst.x = dot3(src0, row0); dst.x = dot3(src0, row0);
dst.y = dot3(src0, row1); dst.y = dot3(src0, row1);
...@@ -4978,9 +4978,9 @@ namespace sw ...@@ -4978,9 +4978,9 @@ namespace sw
void PixelRoutine::M4X3(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1) void PixelRoutine::M4X3(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1)
{ {
Vector4f row0 = reg(r, src1, 0); Vector4f row0 = fetchRegisterF(r, src1, 0);
Vector4f row1 = reg(r, src1, 1); Vector4f row1 = fetchRegisterF(r, src1, 1);
Vector4f row2 = reg(r, src1, 2); Vector4f row2 = fetchRegisterF(r, src1, 2);
dst.x = dot4(src0, row0); dst.x = dot4(src0, row0);
dst.y = dot4(src0, row1); dst.y = dot4(src0, row1);
...@@ -4989,10 +4989,10 @@ namespace sw ...@@ -4989,10 +4989,10 @@ namespace sw
void PixelRoutine::M4X4(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1) void PixelRoutine::M4X4(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1)
{ {
Vector4f row0 = reg(r, src1, 0); Vector4f row0 = fetchRegisterF(r, src1, 0);
Vector4f row1 = reg(r, src1, 1); Vector4f row1 = fetchRegisterF(r, src1, 1);
Vector4f row2 = reg(r, src1, 2); Vector4f row2 = fetchRegisterF(r, src1, 2);
Vector4f row3 = reg(r, src1, 3); Vector4f row3 = fetchRegisterF(r, src1, 3);
dst.x = dot4(src0, row0); dst.x = dot4(src0, row0);
dst.y = dot4(src0, row1); dst.y = dot4(src0, row1);
...@@ -5372,7 +5372,7 @@ namespace sw ...@@ -5372,7 +5372,7 @@ namespace sw
} }
else else
{ {
Int4 condition = As<Int4>(reg(r, src).x); Int4 condition = As<Int4>(fetchRegisterF(r, src).x);
IF(r, condition); IF(r, condition);
} }
} }
...@@ -5541,7 +5541,7 @@ namespace sw ...@@ -5541,7 +5541,7 @@ namespace sw
Nucleus::setInsertBlock(testBlock); Nucleus::setInsertBlock(testBlock);
r.enableContinue = restoreContinue; r.enableContinue = restoreContinue;
const Vector4f &src = reg(r, temporaryRegister); const Vector4f &src = fetchRegisterF(r, temporaryRegister);
Int4 condition = As<Int4>(src.x); Int4 condition = As<Int4>(src.x);
condition &= r.enableStack[r.enableIndex - 1]; condition &= r.enableStack[r.enableIndex - 1];
r.enableStack[r.enableIndex] = condition; r.enableStack[r.enableIndex] = condition;
...@@ -5604,46 +5604,46 @@ namespace sw ...@@ -5604,46 +5604,46 @@ namespace sw
// FIXME: Use enableLeave in other control-flow constructs // FIXME: Use enableLeave in other control-flow constructs
} }
void PixelRoutine::writeDestination(Registers &r, Vector4i &d, const Dst &dst) void PixelRoutine::writeDestination(Registers &r, Vector4s &d, const Dst &dst)
{ {
switch(dst.type) switch(dst.type)
{ {
case Shader::PARAMETER_TEMP: case Shader::PARAMETER_TEMP:
if(dst.mask & 0x1) r.ri[dst.index].x = d.x; if(dst.mask & 0x1) r.rs[dst.index].x = d.x;
if(dst.mask & 0x2) r.ri[dst.index].y = d.y; if(dst.mask & 0x2) r.rs[dst.index].y = d.y;
if(dst.mask & 0x4) r.ri[dst.index].z = d.z; if(dst.mask & 0x4) r.rs[dst.index].z = d.z;
if(dst.mask & 0x8) r.ri[dst.index].w = d.w; if(dst.mask & 0x8) r.rs[dst.index].w = d.w;
break; break;
case Shader::PARAMETER_INPUT: case Shader::PARAMETER_INPUT:
if(dst.mask & 0x1) r.vi[dst.index].x = d.x; if(dst.mask & 0x1) r.vs[dst.index].x = d.x;
if(dst.mask & 0x2) r.vi[dst.index].y = d.y; if(dst.mask & 0x2) r.vs[dst.index].y = d.y;
if(dst.mask & 0x4) r.vi[dst.index].z = d.z; if(dst.mask & 0x4) r.vs[dst.index].z = d.z;
if(dst.mask & 0x8) r.vi[dst.index].w = d.w; if(dst.mask & 0x8) r.vs[dst.index].w = d.w;
break; break;
case Shader::PARAMETER_CONST: ASSERT(false); break; case Shader::PARAMETER_CONST: ASSERT(false); break;
case Shader::PARAMETER_TEXTURE: case Shader::PARAMETER_TEXTURE:
if(dst.mask & 0x1) r.ti[dst.index].x = d.x; if(dst.mask & 0x1) r.ts[dst.index].x = d.x;
if(dst.mask & 0x2) r.ti[dst.index].y = d.y; if(dst.mask & 0x2) r.ts[dst.index].y = d.y;
if(dst.mask & 0x4) r.ti[dst.index].z = d.z; if(dst.mask & 0x4) r.ts[dst.index].z = d.z;
if(dst.mask & 0x8) r.ti[dst.index].w = d.w; if(dst.mask & 0x8) r.ts[dst.index].w = d.w;
break; break;
case Shader::PARAMETER_COLOROUT: case Shader::PARAMETER_COLOROUT:
if(dst.mask & 0x1) r.vi[dst.index].x = d.x; if(dst.mask & 0x1) r.vs[dst.index].x = d.x;
if(dst.mask & 0x2) r.vi[dst.index].y = d.y; if(dst.mask & 0x2) r.vs[dst.index].y = d.y;
if(dst.mask & 0x4) r.vi[dst.index].z = d.z; if(dst.mask & 0x4) r.vs[dst.index].z = d.z;
if(dst.mask & 0x8) r.vi[dst.index].w = d.w; if(dst.mask & 0x8) r.vs[dst.index].w = d.w;
break; break;
default: default:
ASSERT(false); ASSERT(false);
} }
} }
Vector4i PixelRoutine::regi(Registers &r, const Src &src) Vector4s PixelRoutine::fetchRegisterS(Registers &r, const Src &src)
{ {
Vector4i *reg; Vector4s *reg;
int i = src.index; int i = src.index;
Vector4i c; Vector4s c;
if(src.type == Shader::PARAMETER_CONST) if(src.type == Shader::PARAMETER_CONST)
{ {
...@@ -5655,12 +5655,12 @@ namespace sw ...@@ -5655,12 +5655,12 @@ namespace sw
switch(src.type) switch(src.type)
{ {
case Shader::PARAMETER_TEMP: reg = &r.ri[i]; break; case Shader::PARAMETER_TEMP: reg = &r.rs[i]; break;
case Shader::PARAMETER_INPUT: reg = &r.vi[i]; break; case Shader::PARAMETER_INPUT: reg = &r.vs[i]; break;
case Shader::PARAMETER_CONST: reg = &c; break; case Shader::PARAMETER_CONST: reg = &c; break;
case Shader::PARAMETER_TEXTURE: reg = &r.ti[i]; break; case Shader::PARAMETER_TEXTURE: reg = &r.ts[i]; break;
case Shader::PARAMETER_VOID: return r.ri[0]; // Dummy case Shader::PARAMETER_VOID: return r.rs[0]; // Dummy
case Shader::PARAMETER_FLOAT4LITERAL: return r.ri[0]; // Dummy case Shader::PARAMETER_FLOAT4LITERAL: return r.rs[0]; // Dummy
default: default:
ASSERT(false); ASSERT(false);
} }
...@@ -5670,7 +5670,7 @@ namespace sw ...@@ -5670,7 +5670,7 @@ namespace sw
const Short4 &z = (*reg)[(src.swizzle >> 4) & 0x3]; const Short4 &z = (*reg)[(src.swizzle >> 4) & 0x3];
const Short4 &w = (*reg)[(src.swizzle >> 6) & 0x3]; const Short4 &w = (*reg)[(src.swizzle >> 6) & 0x3];
Vector4i mod; Vector4s mod;
switch(src.modifier) switch(src.modifier)
{ {
...@@ -5765,7 +5765,7 @@ namespace sw ...@@ -5765,7 +5765,7 @@ namespace sw
return mod; return mod;
} }
Vector4f PixelRoutine::reg(Registers &r, const Src &src, int offset) Vector4f PixelRoutine::fetchRegisterF(Registers &r, const Src &src, int offset)
{ {
Vector4f reg; Vector4f reg;
int i = src.index + offset; int i = src.index + offset;
......
...@@ -38,7 +38,7 @@ namespace sw ...@@ -38,7 +38,7 @@ namespace sw
struct Registers struct Registers
{ {
Registers(const PixelShader *shader) : Registers(const PixelShader *shader) :
current(ri[0]), diffuse(vi[0]), specular(vi[1]), current(rs[0]), diffuse(vs[0]), specular(vs[1]),
rf(shader && shader->dynamicallyIndexedTemporaries), rf(shader && shader->dynamicallyIndexedTemporaries),
vf(shader && shader->dynamicallyIndexedInput) vf(shader && shader->dynamicallyIndexedInput)
{ {
...@@ -91,13 +91,13 @@ namespace sw ...@@ -91,13 +91,13 @@ namespace sw
Float4 Dv[10][4]; Float4 Dv[10][4];
Float4 Df; Float4 Df;
Vector4i &current; Vector4s &current;
Vector4i &diffuse; Vector4s &diffuse;
Vector4i &specular; Vector4s &specular;
Vector4i ri[6]; Vector4s rs[6];
Vector4i vi[2]; Vector4s vs[2];
Vector4i ti[6]; Vector4s ts[6];
RegisterArray<4096> rf; RegisterArray<4096> rf;
RegisterArray<10> vf; RegisterArray<10> vf;
...@@ -157,30 +157,30 @@ namespace sw ...@@ -157,30 +157,30 @@ namespace sw
void stencilOperation(Registers &r, Byte8 &newValue, Byte8 &bufferValue, StencilOperation stencilPassOperation, StencilOperation stencilZFailOperation, StencilOperation stencilFailOperation, bool CCW, Int &zMask, Int &sMask); void stencilOperation(Registers &r, Byte8 &newValue, Byte8 &bufferValue, StencilOperation stencilPassOperation, StencilOperation stencilZFailOperation, StencilOperation stencilFailOperation, bool CCW, Int &zMask, Int &sMask);
void stencilOperation(Registers &r, Byte8 &output, Byte8 &bufferValue, StencilOperation operation, bool CCW); void stencilOperation(Registers &r, Byte8 &output, Byte8 &bufferValue, StencilOperation operation, bool CCW);
Bool depthTest(Registers &r, Pointer<Byte> &zBuffer, int q, Int &x, Float4 &z, Int &sMask, Int &zMask, Int &cMask); Bool depthTest(Registers &r, Pointer<Byte> &zBuffer, int q, Int &x, Float4 &z, Int &sMask, Int &zMask, Int &cMask);
void blendTexture(Registers &r, Vector4i &temp, Vector4i &texture, int stage); void blendTexture(Registers &r, Vector4s &temp, Vector4s &texture, int stage);
void alphaTest(Registers &r, Int &aMask, Short4 &alpha); void alphaTest(Registers &r, Int &aMask, Short4 &alpha);
void alphaToCoverage(Registers &r, Int cMask[4], Float4 &alpha); void alphaToCoverage(Registers &r, Int cMask[4], Float4 &alpha);
Bool alphaTest(Registers &r, Int cMask[4], Vector4i &current); Bool alphaTest(Registers &r, Int cMask[4], Vector4s &current);
Bool alphaTest(Registers &r, Int cMask[4], Vector4f &c0); Bool alphaTest(Registers &r, Int cMask[4], Vector4f &c0);
void fogBlend(Registers &r, Vector4i &current, Float4 &fog, Float4 &z, Float4 &rhw); void fogBlend(Registers &r, Vector4s &current, Float4 &fog, Float4 &z, Float4 &rhw);
void fogBlend(Registers &r, Vector4f &c0, Float4 &fog, Float4 &z, Float4 &rhw); void fogBlend(Registers &r, Vector4f &c0, Float4 &fog, Float4 &z, Float4 &rhw);
void pixelFog(Registers &r, Float4 &visibility, Float4 &z, Float4 &rhw); void pixelFog(Registers &r, Float4 &visibility, Float4 &z, Float4 &rhw);
void specularPixel(Vector4i &current, Vector4i &specular); void specularPixel(Vector4s &current, Vector4s &specular);
void sampleTexture(Registers &r, Vector4i &c, int coordinates, int sampler, bool project = false); void sampleTexture(Registers &r, Vector4s &c, int coordinates, int sampler, bool project = false);
void sampleTexture(Registers &r, Vector4i &c, int sampler, Float4 &u, Float4 &v, Float4 &w, Float4 &q, bool project = false, bool bias = false, bool fixed12 = true); void sampleTexture(Registers &r, Vector4s &c, int sampler, Float4 &u, Float4 &v, Float4 &w, Float4 &q, bool project = false, bool bias = false, bool fixed12 = true);
void sampleTexture(Registers &r, Vector4i &c, int sampler, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool project = false, bool bias = false, bool fixed12 = true, bool gradients = false, bool lodProvided = false); void sampleTexture(Registers &r, Vector4s &c, int sampler, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool project = false, bool bias = false, bool fixed12 = true, bool gradients = false, bool lodProvided = false);
void sampleTexture(Registers &r, Vector4f &c, const Src &sampler, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool project = false, bool bias = false, bool gradients = false, bool lodProvided = false); void sampleTexture(Registers &r, Vector4f &c, const Src &sampler, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool project = false, bool bias = false, bool gradients = false, bool lodProvided = false);
void sampleTexture(Registers &r, Vector4f &c, int sampler, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool project = false, bool bias = false, bool gradients = false, bool lodProvided = false); void sampleTexture(Registers &r, Vector4f &c, int sampler, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool project = false, bool bias = false, bool gradients = false, bool lodProvided = false);
// Raster operations // Raster operations
void clampColor(Vector4f oC[4]); void clampColor(Vector4f oC[4]);
void rasterOperation(Vector4i &current, Registers &r, Float4 &fog, Pointer<Byte> &cBuffer, Int &x, Int sMask[4], Int zMask[4], Int cMask[4]); void rasterOperation(Vector4s &current, Registers &r, Float4 &fog, Pointer<Byte> &cBuffer, Int &x, Int sMask[4], Int zMask[4], Int cMask[4]);
void rasterOperation(Vector4f oC[4], Registers &r, Float4 &fog, Pointer<Byte> cBuffer[4], Int &x, Int sMask[4], Int zMask[4], Int cMask[4]); void rasterOperation(Vector4f oC[4], Registers &r, Float4 &fog, Pointer<Byte> cBuffer[4], Int &x, Int sMask[4], Int zMask[4], Int cMask[4]);
void blendFactor(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, BlendFactor blendFactorActive); void blendFactor(Registers &r, const Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorActive);
void blendFactorAlpha(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, BlendFactor blendFactorAlphaActive); void blendFactorAlpha(Registers &r, const Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorAlphaActive);
void alphaBlend(Registers &r, int index, Pointer<Byte> &cBuffer, Vector4i &current, Int &x); void alphaBlend(Registers &r, int index, Pointer<Byte> &cBuffer, Vector4s &current, Int &x);
void writeColor(Registers &r, int index, Pointer<Byte> &cBuffer, Int &i, Vector4i &current, Int &sMask, Int &zMask, Int &cMask); void writeColor(Registers &r, int index, Pointer<Byte> &cBuffer, Int &i, Vector4s &current, Int &sMask, Int &zMask, Int &cMask);
void blendFactor(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorActive); void blendFactor(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorActive);
void blendFactorAlpha(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorAlphaActive); void blendFactorAlpha(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorAlphaActive);
void alphaBlend(Registers &r, int index, Pointer<Byte> &cBuffer, Vector4f &oC, Int &x); void alphaBlend(Registers &r, int index, Pointer<Byte> &cBuffer, Vector4f &oC, Int &x);
...@@ -192,53 +192,53 @@ namespace sw ...@@ -192,53 +192,53 @@ namespace sw
void ps_2_x(Registers &r, Int cMask[4]); void ps_2_x(Registers &r, Int cMask[4]);
Short4 convertFixed12(RValue<Float4> cf); Short4 convertFixed12(RValue<Float4> cf);
void convertFixed12(Vector4i &ci, Vector4f &cf); void convertFixed12(Vector4s &cs, Vector4f &cf);
Float4 convertSigned12(Short4 &ci); Float4 convertSigned12(Short4 &cs);
void convertSigned12(Vector4f &cf, Vector4i &ci); void convertSigned12(Vector4f &cf, Vector4s &cs);
Float4 convertUnsigned16(UShort4 ci); Float4 convertUnsigned16(UShort4 cs);
UShort4 convertFixed16(Float4 &cf, bool saturate = true); UShort4 convertFixed16(Float4 &cf, bool saturate = true);
void convertFixed16(Vector4i &ci, Vector4f &cf, bool saturate = true); void convertFixed16(Vector4s &cs, Vector4f &cf, bool saturate = true);
void sRGBtoLinear16_16(Registers &r, Vector4i &c); void sRGBtoLinear16_16(Registers &r, Vector4s &c);
void sRGBtoLinear12_16(Registers &r, Vector4i &c); void sRGBtoLinear12_16(Registers &r, Vector4s &c);
void linearToSRGB16_16(Registers &r, Vector4i &c); void linearToSRGB16_16(Registers &r, Vector4s &c);
void linearToSRGB12_16(Registers &r, Vector4i &c); void linearToSRGB12_16(Registers &r, Vector4s &c);
Float4 sRGBtoLinear(const Float4 &x); Float4 sRGBtoLinear(const Float4 &x);
Float4 linearToSRGB(const Float4 &x); Float4 linearToSRGB(const Float4 &x);
// ps_1_x instructions // ps_1_x instructions
void MOV(Vector4i &dst, Vector4i &src0); void MOV(Vector4s &dst, Vector4s &src0);
void ADD(Vector4i &dst, Vector4i &src0, Vector4i &src1); void ADD(Vector4s &dst, Vector4s &src0, Vector4s &src1);
void SUB(Vector4i &dst, Vector4i &src0, Vector4i &src1); void SUB(Vector4s &dst, Vector4s &src0, Vector4s &src1);
void MAD(Vector4i &dst, Vector4i &src0, Vector4i &src1, Vector4i &src2); void MAD(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2);
void MUL(Vector4i &dst, Vector4i &src0, Vector4i &src1); void MUL(Vector4s &dst, Vector4s &src0, Vector4s &src1);
void DP3(Vector4i &dst, Vector4i &src0, Vector4i &src1); void DP3(Vector4s &dst, Vector4s &src0, Vector4s &src1);
void DP4(Vector4i &dst, Vector4i &src0, Vector4i &src1); void DP4(Vector4s &dst, Vector4s &src0, Vector4s &src1);
void LRP(Vector4i &dst, Vector4i &src0, Vector4i &src1, Vector4i &src2); void LRP(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2);
void TEXCOORD(Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int coordinate); void TEXCOORD(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int coordinate);
void TEXCRD(Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int coordinate, bool project); void TEXCRD(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int coordinate, bool project);
void TEXDP3(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, Vector4i &src); void TEXDP3(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, Vector4s &src);
void TEXDP3TEX(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4i &src0); void TEXDP3TEX(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0);
void TEXKILL(Int cMask[4], Float4 &u, Float4 &v, Float4 &s); void TEXKILL(Int cMask[4], Float4 &u, Float4 &v, Float4 &s);
void TEXKILL(Int cMask[4], Vector4i &dst); void TEXKILL(Int cMask[4], Vector4s &dst);
void TEX(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int stage, bool project); void TEX(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, bool project);
void TEXLD(Registers &r, Vector4i &dst, Vector4i &src, int stage, bool project); void TEXLD(Registers &r, Vector4s &dst, Vector4s &src, int stage, bool project);
void TEXBEM(Registers &r, Vector4i &dst, Vector4i &src, Float4 &u, Float4 &v, Float4 &s, int stage); void TEXBEM(Registers &r, Vector4s &dst, Vector4s &src, Float4 &u, Float4 &v, Float4 &s, int stage);
void TEXBEML(Registers &r, Vector4i &dst, Vector4i &src, Float4 &u, Float4 &v, Float4 &s, int stage); void TEXBEML(Registers &r, Vector4s &dst, Vector4s &src, Float4 &u, Float4 &v, Float4 &s, int stage);
void TEXREG2AR(Registers &r, Vector4i &dst, Vector4i &src0, int stage); void TEXREG2AR(Registers &r, Vector4s &dst, Vector4s &src0, int stage);
void TEXREG2GB(Registers &r, Vector4i &dst, Vector4i &src0, int stage); void TEXREG2GB(Registers &r, Vector4s &dst, Vector4s &src0, int stage);
void TEXREG2RGB(Registers &r, Vector4i &dst, Vector4i &src0, int stage); void TEXREG2RGB(Registers &r, Vector4s &dst, Vector4s &src0, int stage);
void TEXM3X2DEPTH(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, Vector4i &src, bool signedScaling); void TEXM3X2DEPTH(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, Vector4s &src, bool signedScaling);
void TEXM3X2PAD(Registers &r, Float4 &u, Float4 &v, Float4 &s, Vector4i &src0, int component, bool signedScaling); void TEXM3X2PAD(Registers &r, Float4 &u, Float4 &v, Float4 &s, Vector4s &src0, int component, bool signedScaling);
void TEXM3X2TEX(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4i &src0, bool signedScaling); void TEXM3X2TEX(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0, bool signedScaling);
void TEXM3X3(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, Vector4i &src0, bool signedScaling); void TEXM3X3(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, Vector4s &src0, bool signedScaling);
void TEXM3X3PAD(Registers &r, Float4 &u, Float4 &v, Float4 &s, Vector4i &src0, int component, bool signedScaling); void TEXM3X3PAD(Registers &r, Float4 &u, Float4 &v, Float4 &s, Vector4s &src0, int component, bool signedScaling);
void TEXM3X3SPEC(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4i &src0, Vector4i &src1); void TEXM3X3SPEC(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0, Vector4s &src1);
void TEXM3X3TEX(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4i &src0, bool singedScaling); void TEXM3X3TEX(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0, bool singedScaling);
void TEXM3X3VSPEC(Registers &r, Vector4i &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4i &src0); void TEXM3X3VSPEC(Registers &r, Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0);
void TEXDEPTH(Registers &r); void TEXDEPTH(Registers &r);
void CND(Vector4i &dst, Vector4i &src0, Vector4i &src1, Vector4i &src2); void CND(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2);
void CMP(Vector4i &dst, Vector4i &src0, Vector4i &src1, Vector4i &src2); void CMP(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2);
void BEM(Registers &r, Vector4i &dst, Vector4i &src0, Vector4i &src1, int stage); void BEM(Registers &r, Vector4s &dst, Vector4s &src0, Vector4s &src1, int stage);
// ps_2_x instructions // ps_2_x instructions
void M3X2(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1); void M3X2(Registers &r, Vector4f &dst, Vector4f &src0, const Src &src1);
...@@ -281,9 +281,9 @@ namespace sw ...@@ -281,9 +281,9 @@ namespace sw
void RET(Registers &r); void RET(Registers &r);
void LEAVE(Registers &r); void LEAVE(Registers &r);
void writeDestination(Registers &r, Vector4i &d, const Dst &dst); void writeDestination(Registers &r, Vector4s &d, const Dst &dst);
Vector4i regi(Registers &r, const Src &src); Vector4s fetchRegisterS(Registers &r, const Src &src);
Vector4f reg(Registers &r, const Src &src, int offset = 0); Vector4f fetchRegisterF(Registers &r, const Src &src, int offset = 0);
Vector4f readConstant(Registers &r, const Src &src, int offset = 0); Vector4f readConstant(Registers &r, const Src &src, int offset = 0);
Int relativeAddress(Registers &r, const Shader::Parameter &var); Int relativeAddress(Registers &r, const Shader::Parameter &var);
Int4 enableMask(Registers &r, const Shader::Instruction *instruction); Int4 enableMask(Registers &r, const Shader::Instruction *instruction);
......
...@@ -20,7 +20,7 @@ namespace sw ...@@ -20,7 +20,7 @@ namespace sw
{ {
} }
void SamplerCore::sampleTexture(Pointer<Byte> &texture, Vector4i &c, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool bias, bool fixed12, bool gradients, bool lodProvided) void SamplerCore::sampleTexture(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool bias, bool fixed12, bool gradients, bool lodProvided)
{ {
#if PERF_PROFILE #if PERF_PROFILE
AddAtomic(Pointer<Long>(&profiler.texOperations), 4); AddAtomic(Pointer<Long>(&profiler.texOperations), 4);
...@@ -257,26 +257,26 @@ namespace sw ...@@ -257,26 +257,26 @@ namespace sw
} }
else else
{ {
Vector4i ci; Vector4s cs;
sampleTexture(texture, ci, u, v, w, q, dsx, dsy, bias, false, gradients, lodProvided); sampleTexture(texture, cs, u, v, w, q, dsx, dsy, bias, false, gradients, lodProvided);
for(int component = 0; component < textureComponentCount(); component++) for(int component = 0; component < textureComponentCount(); component++)
{ {
if(state.sRGB && isRGBComponent(component)) if(state.sRGB && isRGBComponent(component))
{ {
sRGBtoLinear16_12(ci[component]); // FIXME: Perform linearization at surface level for read-only textures sRGBtoLinear16_12(cs[component]); // FIXME: Perform linearization at surface level for read-only textures
convertSigned12(c[component], ci[component]); convertSigned12(c[component], cs[component]);
} }
else else
{ {
if(hasUnsignedTextureComponent(component)) if(hasUnsignedTextureComponent(component))
{ {
convertUnsigned16(c[component], ci[component]); convertUnsigned16(c[component], cs[component]);
} }
else else
{ {
convertSigned15(c[component], ci[component]); convertSigned15(c[component], cs[component]);
} }
} }
} }
...@@ -381,7 +381,7 @@ namespace sw ...@@ -381,7 +381,7 @@ namespace sw
return uvw; return uvw;
} }
void SamplerCore::sampleFilter(Pointer<Byte> &texture, Vector4i &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool lodProvided) void SamplerCore::sampleFilter(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool lodProvided)
{ {
bool volumeTexture = state.textureType == TEXTURE_3D; bool volumeTexture = state.textureType == TEXTURE_3D;
...@@ -389,7 +389,7 @@ namespace sw ...@@ -389,7 +389,7 @@ namespace sw
if(state.mipmapFilter > MIPMAP_POINT) if(state.mipmapFilter > MIPMAP_POINT)
{ {
Vector4i cc; Vector4s cc;
sampleAniso(texture, cc, u, v, w, lod, anisotropy, uDelta, vDelta, face, true, lodProvided); sampleAniso(texture, cc, u, v, w, lod, anisotropy, uDelta, vDelta, face, true, lodProvided);
...@@ -479,7 +479,7 @@ namespace sw ...@@ -479,7 +479,7 @@ namespace sw
} }
} }
void SamplerCore::sampleAniso(Pointer<Byte> &texture, Vector4i &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool secondLOD, bool lodProvided) void SamplerCore::sampleAniso(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool secondLOD, bool lodProvided)
{ {
if(state.textureFilter != FILTER_ANISOTROPIC || lodProvided) if(state.textureFilter != FILTER_ANISOTROPIC || lodProvided)
{ {
...@@ -489,7 +489,7 @@ namespace sw ...@@ -489,7 +489,7 @@ namespace sw
{ {
Int a = RoundInt(anisotropy); Int a = RoundInt(anisotropy);
Vector4i cSum; Vector4s cSum;
cSum.x = Short4(0, 0, 0, 0); cSum.x = Short4(0, 0, 0, 0);
cSum.y = Short4(0, 0, 0, 0); cSum.y = Short4(0, 0, 0, 0);
...@@ -535,7 +535,7 @@ namespace sw ...@@ -535,7 +535,7 @@ namespace sw
} }
} }
void SamplerCore::sampleQuad(Pointer<Byte> &texture, Vector4i &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Int face[4], bool secondLOD) void SamplerCore::sampleQuad(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Int face[4], bool secondLOD)
{ {
if(state.textureType != TEXTURE_3D) if(state.textureType != TEXTURE_3D)
{ {
...@@ -547,7 +547,7 @@ namespace sw ...@@ -547,7 +547,7 @@ namespace sw
} }
} }
void SamplerCore::sampleQuad2D(Pointer<Byte> &texture, Vector4i &c, Float4 &u, Float4 &v, Float &lod, Int face[4], bool secondLOD) void SamplerCore::sampleQuad2D(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float &lod, Int face[4], bool secondLOD)
{ {
int componentCount = textureComponentCount(); int componentCount = textureComponentCount();
bool gather = state.textureFilter == FILTER_GATHER; bool gather = state.textureFilter == FILTER_GATHER;
...@@ -569,10 +569,10 @@ namespace sw ...@@ -569,10 +569,10 @@ namespace sw
} }
else else
{ {
Vector4i c0; Vector4s c0;
Vector4i c1; Vector4s c1;
Vector4i c2; Vector4s c2;
Vector4i c3; Vector4s c3;
Short4 uuuu0 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), state.addressingModeU == ADDRESSING_WRAP, gather ? 0 : -1); Short4 uuuu0 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), state.addressingModeU == ADDRESSING_WRAP, gather ? 0 : -1);
Short4 vvvv0 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), state.addressingModeV == ADDRESSING_WRAP, gather ? 0 : -1); Short4 vvvv0 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), state.addressingModeV == ADDRESSING_WRAP, gather ? 0 : -1);
...@@ -754,7 +754,7 @@ namespace sw ...@@ -754,7 +754,7 @@ namespace sw
} }
} }
void SamplerCore::sample3D(Pointer<Byte> &texture, Vector4i &c_, Float4 &u_, Float4 &v_, Float4 &w_, Float &lod, bool secondLOD) void SamplerCore::sample3D(Pointer<Byte> &texture, Vector4s &c_, Float4 &u_, Float4 &v_, Float4 &w_, Float &lod, bool secondLOD)
{ {
int componentCount = textureComponentCount(); int componentCount = textureComponentCount();
...@@ -778,7 +778,7 @@ namespace sw ...@@ -778,7 +778,7 @@ namespace sw
} }
else else
{ {
Vector4i c[2][2][2]; Vector4s c[2][2][2];
Short4 u[2][2][2]; Short4 u[2][2][2];
Short4 v[2][2][2]; Short4 v[2][2][2];
...@@ -1471,7 +1471,7 @@ namespace sw ...@@ -1471,7 +1471,7 @@ namespace sw
index[3] = Extract(As<Int2>(uuu2), 1); index[3] = Extract(As<Int2>(uuu2), 1);
} }
void SamplerCore::sampleTexel(Vector4i &c, Short4 &uuuu, Short4 &vvvv, Short4 &wwww, Pointer<Byte> &mipmap, Pointer<Byte> buffer[4]) void SamplerCore::sampleTexel(Vector4s &c, Short4 &uuuu, Short4 &vvvv, Short4 &wwww, Pointer<Byte> &mipmap, Pointer<Byte> buffer[4])
{ {
Int index[4]; Int index[4];
...@@ -1746,40 +1746,40 @@ namespace sw ...@@ -1746,40 +1746,40 @@ namespace sw
} }
} }
void SamplerCore::convertFixed12(Short4 &ci, Float4 &cf) void SamplerCore::convertFixed12(Short4 &cs, Float4 &cf)
{ {
ci = RoundShort4(cf * Float4(0x1000)); cs = RoundShort4(cf * Float4(0x1000));
} }
void SamplerCore::convertFixed12(Vector4i &ci, Vector4f &cf) void SamplerCore::convertFixed12(Vector4s &cs, Vector4f &cf)
{ {
convertFixed12(ci.x, cf.x); convertFixed12(cs.x, cf.x);
convertFixed12(ci.y, cf.y); convertFixed12(cs.y, cf.y);
convertFixed12(ci.z, cf.z); convertFixed12(cs.z, cf.z);
convertFixed12(ci.w, cf.w); convertFixed12(cs.w, cf.w);
} }
void SamplerCore::convertSigned12(Float4 &cf, Short4 &ci) void SamplerCore::convertSigned12(Float4 &cf, Short4 &cs)
{ {
cf = Float4(ci) * Float4(1.0f / 0x0FFE); cf = Float4(cs) * Float4(1.0f / 0x0FFE);
} }
// void SamplerCore::convertSigned12(Vector4f &cf, Vector4i &ci) // void SamplerCore::convertSigned12(Vector4f &cf, Vector4s &cs)
// { // {
// convertSigned12(cf.x, ci.x); // convertSigned12(cf.x, cs.x);
// convertSigned12(cf.y, ci.y); // convertSigned12(cf.y, cs.y);
// convertSigned12(cf.z, ci.z); // convertSigned12(cf.z, cs.z);
// convertSigned12(cf.w, ci.w); // convertSigned12(cf.w, cs.w);
// } // }
void SamplerCore::convertSigned15(Float4 &cf, Short4 &ci) void SamplerCore::convertSigned15(Float4 &cf, Short4 &cs)
{ {
cf = Float4(ci) * Float4(1.0f / 0x7FFF); cf = Float4(cs) * Float4(1.0f / 0x7FFF);
} }
void SamplerCore::convertUnsigned16(Float4 &cf, Short4 &ci) void SamplerCore::convertUnsigned16(Float4 &cf, Short4 &cs)
{ {
cf = Float4(As<UShort4>(ci)) * Float4(1.0f / 0xFFFF); cf = Float4(As<UShort4>(cs)) * Float4(1.0f / 0xFFFF);
} }
void SamplerCore::sRGBtoLinear16_12(Short4 &c) void SamplerCore::sRGBtoLinear16_12(Short4 &c)
......
...@@ -22,18 +22,18 @@ namespace sw ...@@ -22,18 +22,18 @@ namespace sw
public: public:
SamplerCore(Pointer<Byte> &r, const Sampler::State &state); SamplerCore(Pointer<Byte> &r, const Sampler::State &state);
void sampleTexture(Pointer<Byte> &texture, Vector4i &c, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool bias = false, bool fixed12 = true, bool gradients = false, bool lodProvided = false); void sampleTexture(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool bias = false, bool fixed12 = true, bool gradients = false, bool lodProvided = false);
void sampleTexture(Pointer<Byte> &texture, Vector4f &c, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool bias = false, bool gradients = false, bool lodProvided = false); void sampleTexture(Pointer<Byte> &texture, Vector4f &c, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &dsx, Vector4f &dsy, bool bias = false, bool gradients = false, bool lodProvided = false);
private: private:
void border(Short4 &mask, Float4 &coordinates); void border(Short4 &mask, Float4 &coordinates);
void border(Int4 &mask, Float4 &coordinates); void border(Int4 &mask, Float4 &coordinates);
Short4 offsetSample(Short4 &uvw, Pointer<Byte> &mipmap, int halfOffset, bool wrap, int count); Short4 offsetSample(Short4 &uvw, Pointer<Byte> &mipmap, int halfOffset, bool wrap, int count);
void sampleFilter(Pointer<Byte> &texture, Vector4i &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool lodProvided); void sampleFilter(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool lodProvided);
void sampleAniso(Pointer<Byte> &texture, Vector4i &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool secondLOD, bool lodProvided); void sampleAniso(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool secondLOD, bool lodProvided);
void sampleQuad(Pointer<Byte> &texture, Vector4i &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Int face[4], bool secondLOD); void sampleQuad(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Int face[4], bool secondLOD);
void sampleQuad2D(Pointer<Byte> &texture, Vector4i &c, Float4 &u, Float4 &v, Float &lod, Int face[4], bool secondLOD); void sampleQuad2D(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float &lod, Int face[4], bool secondLOD);
void sample3D(Pointer<Byte> &texture, Vector4i &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, bool secondLOD); void sample3D(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, bool secondLOD);
void sampleFloatFilter(Pointer<Byte> &texture, Vector4f &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool lodProvided); void sampleFloatFilter(Pointer<Byte> &texture, Vector4f &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool lodProvided);
void sampleFloatAniso(Pointer<Byte> &texture, Vector4f &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool secondLOD, bool lodProvided); void sampleFloatAniso(Pointer<Byte> &texture, Vector4f &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool secondLOD, bool lodProvided);
void sampleFloat(Pointer<Byte> &texture, Vector4f &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Int face[4], bool secondLOD); void sampleFloat(Pointer<Byte> &texture, Vector4f &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Int face[4], bool secondLOD);
...@@ -43,13 +43,13 @@ namespace sw ...@@ -43,13 +43,13 @@ namespace sw
void computeLod3D(Pointer<Byte> &texture, Float &lod, Float4 &u, Float4 &v, Float4 &w, const Float &lodBias, Vector4f &dsx, Vector4f &dsy, bool bias, bool gradients, bool lodProvided); void computeLod3D(Pointer<Byte> &texture, Float &lod, Float4 &u, Float4 &v, Float4 &w, const Float &lodBias, Vector4f &dsx, Vector4f &dsy, bool bias, bool gradients, bool lodProvided);
void cubeFace(Int face[4], Float4 &U, Float4 &V, Float4 &lodU, Float4 &lodV, Float4 &x, Float4 &y, Float4 &z); void cubeFace(Int face[4], Float4 &U, Float4 &V, Float4 &lodU, Float4 &lodV, Float4 &x, Float4 &y, Float4 &z);
void computeIndices(Int index[4], Short4 uuuu, Short4 vvvv, Short4 wwww, const Pointer<Byte> &mipmap); void computeIndices(Int index[4], Short4 uuuu, Short4 vvvv, Short4 wwww, const Pointer<Byte> &mipmap);
void sampleTexel(Vector4i &c, Short4 &u, Short4 &v, Short4 &s, Pointer<Byte> &mipmap, Pointer<Byte> buffer[4]); void sampleTexel(Vector4s &c, Short4 &u, Short4 &v, Short4 &s, Pointer<Byte> &mipmap, Pointer<Byte> buffer[4]);
void sampleTexel(Vector4f &c, Short4 &u, Short4 &v, Short4 &s, Float4 &z, Pointer<Byte> &mipmap, Pointer<Byte> buffer[4]); void sampleTexel(Vector4f &c, Short4 &u, Short4 &v, Short4 &s, Float4 &z, Pointer<Byte> &mipmap, Pointer<Byte> buffer[4]);
void selectMipmap(Pointer<Byte> &texture, Pointer<Byte> buffer[4], Pointer<Byte> &mipmap, Float &lod, Int face[4], bool secondLOD); void selectMipmap(Pointer<Byte> &texture, Pointer<Byte> buffer[4], Pointer<Byte> &mipmap, Float &lod, Int face[4], bool secondLOD);
void address(Short4 &uuuu, Float4 &uw, AddressingMode addressingMode); void address(Short4 &uuuu, Float4 &uw, AddressingMode addressingMode);
void convertFixed12(Short4 &ci, Float4 &cf); void convertFixed12(Short4 &ci, Float4 &cf);
void convertFixed12(Vector4i &ci, Vector4f &cf); void convertFixed12(Vector4s &cs, Vector4f &cf);
void convertSigned12(Float4 &cf, Short4 &ci); void convertSigned12(Float4 &cf, Short4 &ci);
void convertSigned15(Float4 &cf, Short4 &ci); void convertSigned15(Float4 &cf, Short4 &ci);
void convertUnsigned16(Float4 &cf, Short4 &ci); void convertUnsigned16(Float4 &cf, Short4 &ci);
......
...@@ -21,11 +21,11 @@ namespace sw ...@@ -21,11 +21,11 @@ namespace sw
extern TranscendentalPrecision rcpPrecision; extern TranscendentalPrecision rcpPrecision;
extern TranscendentalPrecision rsqPrecision; extern TranscendentalPrecision rsqPrecision;
Vector4i::Vector4i() Vector4s::Vector4s()
{ {
} }
Vector4i::Vector4i(unsigned short x, unsigned short y, unsigned short z, unsigned short w) Vector4s::Vector4s(unsigned short x, unsigned short y, unsigned short z, unsigned short w)
{ {
this->x = Short4(x); this->x = Short4(x);
this->y = Short4(y); this->y = Short4(y);
...@@ -33,7 +33,7 @@ namespace sw ...@@ -33,7 +33,7 @@ namespace sw
this->w = Short4(w); this->w = Short4(w);
} }
Vector4i::Vector4i(const Vector4i &rhs) Vector4s::Vector4s(const Vector4s &rhs)
{ {
x = rhs.x; x = rhs.x;
y = rhs.y; y = rhs.y;
...@@ -41,7 +41,7 @@ namespace sw ...@@ -41,7 +41,7 @@ namespace sw
w = rhs.w; w = rhs.w;
} }
Vector4i &Vector4i::operator=(const Vector4i &rhs) Vector4s &Vector4s::operator=(const Vector4s &rhs)
{ {
x = rhs.x; x = rhs.x;
y = rhs.y; y = rhs.y;
...@@ -51,7 +51,7 @@ namespace sw ...@@ -51,7 +51,7 @@ namespace sw
return *this; return *this;
} }
Short4 &Vector4i::operator[](int i) Short4 &Vector4s::operator[](int i)
{ {
switch(i) switch(i)
{ {
......
...@@ -18,15 +18,15 @@ ...@@ -18,15 +18,15 @@
namespace sw namespace sw
{ {
class Vector4i class Vector4s
{ {
public: public:
Vector4i(); Vector4s();
Vector4i(unsigned short x, unsigned short y, unsigned short z, unsigned short w); Vector4s(unsigned short x, unsigned short y, unsigned short z, unsigned short w);
Vector4i(const Vector4i &rhs); Vector4s(const Vector4s &rhs);
Short4 &operator[](int i); Short4 &operator[](int i);
Vector4i &operator=(const Vector4i &rhs); Vector4s &operator=(const Vector4s &rhs);
Short4 x; Short4 x;
Short4 y; Short4 y;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment