Commit 3b6c9cff by Alexis Hetu Committed by Nicolas Capens

Replace if/else with switch.

Change-Id: I970a64ffdc18b240239092615f87a59b84c5e364 Reviewed-on: https://swiftshader-review.googlesource.com/3071Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent 9919b6c8
......@@ -275,12 +275,17 @@ namespace sw
}
#endif
if(state.destFormat == FORMAT_X8R8G8B8 || state.destFormat == FORMAT_A8R8G8B8)
switch(state.destFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
{
Int x = x0;
if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == FORMAT_A8R8G8B8)
switch(state.sourceFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
For(, x < width - 3, x += 4)
{
*Pointer<Int4>(d, 1) = *Pointer<Int4>(s, width % 4 ? 1 : 16);
......@@ -288,9 +293,9 @@ namespace sw
s += 4 * sBytes;
d += 4 * dBytes;
}
}
else if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
{
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
For(, x < width - 3, x += 4)
{
Int4 bgra = *Pointer<Int4>(s, width % 4 ? 1 : 16);
......@@ -302,9 +307,8 @@ namespace sw
s += 4 * sBytes;
d += 4 * dBytes;
}
}
else if(state.sourceFormat == FORMAT_A16B16G16R16)
{
break;
case FORMAT_A16B16G16R16:
For(, x < width - 1, x += 2)
{
UShort4 c0 = As<UShort4>(Swizzle(*Pointer<Short4>(s + 0), 0xC6)) >> 8;
......@@ -315,16 +319,22 @@ namespace sw
s += 2 * sBytes;
d += 2 * dBytes;
}
break;
default:
ASSERT(false);
break;
}
else ASSERT(false);
For(, x < width, x++)
{
if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == FORMAT_A8R8G8B8)
switch(state.sourceFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
*Pointer<Int>(d) = *Pointer<Int>(s);
}
else if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
{
Int rgba = *Pointer<Int>(s);
......@@ -332,24 +342,33 @@ namespace sw
((rgba & Int(0x000000FF)) << 16) |
(rgba & Int(0xFF00FF00));
}
else if(state.sourceFormat == FORMAT_A16B16G16R16)
break;
case FORMAT_A16B16G16R16:
{
UShort4 c = As<UShort4>(Swizzle(*Pointer<Short4>(s), 0xC6)) >> 8;
*Pointer<Int>(d) = Int(As<Int2>(Pack(c, c)));
}
else ASSERT(false);
break;
default:
ASSERT(false);
break;
}
s += sBytes;
d += dBytes;
}
}
else if(state.destFormat == FORMAT_X8B8G8R8 || state.destFormat == FORMAT_A8B8G8R8)
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
{
Int x = x0;
if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
switch(state.sourceFormat)
{
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
For(, x < width - 3, x += 4)
{
*Pointer<Int4>(d, 1) = *Pointer<Int4>(s, width % 4 ? 1 : 16);
......@@ -357,9 +376,9 @@ namespace sw
s += 4 * sBytes;
d += 4 * dBytes;
}
}
else if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == FORMAT_A8R8G8B8)
{
break;
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
For(, x < width - 3, x += 4)
{
Int4 bgra = *Pointer<Int4>(s, width % 4 ? 1 : 16);
......@@ -371,9 +390,8 @@ namespace sw
s += 4 * sBytes;
d += 4 * dBytes;
}
}
else if(state.sourceFormat == FORMAT_A16B16G16R16)
{
break;
case FORMAT_A16B16G16R16:
For(, x < width - 1, x += 2)
{
UShort4 c0 = *Pointer<UShort4>(s + 0) >> 8;
......@@ -384,67 +402,86 @@ namespace sw
s += 2 * sBytes;
d += 2 * dBytes;
}
break;
default:
ASSERT(false);
break;
}
else ASSERT(false);
For(, x < width, x++)
{
if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
switch(state.sourceFormat)
{
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
*Pointer<Int>(d) = *Pointer<Int>(s);
}
else if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == FORMAT_A8R8G8B8)
break;
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
{
Int bgra = *Pointer<Int>(s);
*Pointer<Int>(d) = ((bgra & Int(0x00FF0000)) >> 16) |
((bgra & Int(0x000000FF)) << 16) |
(bgra & Int(0xFF00FF00));
}
else if(state.sourceFormat == FORMAT_A16B16G16R16)
break;
case FORMAT_A16B16G16R16:
{
UShort4 c = *Pointer<UShort4>(s) >> 8;
*Pointer<Int>(d) = Int(As<Int2>(Pack(c, c)));
}
else ASSERT(false);
break;
default:
ASSERT(false);
break;
}
s += sBytes;
d += dBytes;
}
}
else if(state.destFormat == FORMAT_R8G8B8)
case FORMAT_R8G8B8:
{
For(Int x = x0, x < width, x++)
{
if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == FORMAT_A8R8G8B8)
switch(state.sourceFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
*Pointer<Byte>(d + 0) = *Pointer<Byte>(s + 0);
*Pointer<Byte>(d + 1) = *Pointer<Byte>(s + 1);
*Pointer<Byte>(d + 2) = *Pointer<Byte>(s + 2);
}
else if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
{
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
*Pointer<Byte>(d + 0) = *Pointer<Byte>(s + 2);
*Pointer<Byte>(d + 1) = *Pointer<Byte>(s + 1);
*Pointer<Byte>(d + 2) = *Pointer<Byte>(s + 0);
}
else if(state.sourceFormat == FORMAT_A16B16G16R16)
{
break;
case FORMAT_A16B16G16R16:
*Pointer<Byte>(d + 0) = *Pointer<Byte>(s + 5);
*Pointer<Byte>(d + 1) = *Pointer<Byte>(s + 3);
*Pointer<Byte>(d + 2) = *Pointer<Byte>(s + 1);
break;
default:
ASSERT(false);
break;
}
else ASSERT(false);
s += sBytes;
d += dBytes;
}
}
else if(state.destFormat == FORMAT_R5G6B5)
break;
case FORMAT_R5G6B5:
{
For(Int x = x0, x < width, x++)
{
if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == FORMAT_A8R8G8B8)
switch(state.sourceFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
{
Int c = *Pointer<Int>(s);
......@@ -452,7 +489,9 @@ namespace sw
(c & 0x0000FC00) >> 5 |
(c & 0x000000F8) >> 3);
}
else if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
{
Int c = *Pointer<Int>(s);
......@@ -460,7 +499,8 @@ namespace sw
(c & 0x0000FC00) >> 5 |
(c & 0x000000F8) << 8);
}
else if(state.sourceFormat == FORMAT_A16B16G16R16)
break;
case FORMAT_A16B16G16R16:
{
UShort4 cc = *Pointer<UShort4>(s) >> 8;
Int c = Int(As<Int2>(Pack(cc, cc)));
......@@ -469,13 +509,21 @@ namespace sw
(c & 0x0000FC00) >> 5 |
(c & 0x000000F8) << 8);
}
else ASSERT(false);
break;
default:
ASSERT(false);
break;
}
s += sBytes;
d += dBytes;
}
}
else ASSERT(false);
break;
default:
ASSERT(false);
break;
}
}
#if DISPLAY_LOGO
......@@ -551,19 +599,23 @@ namespace sw
c1 = UnpackLow(As<Byte8>(c1), *Pointer<Byte8>(c));
if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == FORMAT_A8R8G8B8)
switch(state.sourceFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
c2 = UnpackLow(As<Byte8>(c2), *Pointer<Byte8>(s));
}
else if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
{
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
c2 = Swizzle(UnpackLow(As<Byte8>(c2), *Pointer<Byte8>(s)), 0xC6);
}
else if(state.sourceFormat == FORMAT_A16B16G16R16)
{
break;
case FORMAT_A16B16G16R16:
c2 = Swizzle(*Pointer<Short4>(s + 0), 0xC6);
break;
default:
ASSERT(false);
break;
}
else ASSERT(false);
c1 = As<Short4>(As<UShort4>(c1) >> 9);
c2 = As<Short4>(As<UShort4>(c2) >> 9);
......@@ -575,17 +627,21 @@ namespace sw
c1 = c1 + c2;
c1 = c1 + c1;
if(state.destFormat == FORMAT_X8R8G8B8 || state.destFormat == FORMAT_A8R8G8B8)
switch(state.destFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
*Pointer<UInt>(d) = UInt(As<Long>(Pack(As<UShort4>(c1), As<UShort4>(c1))));
}
else if(state.destFormat == FORMAT_X8B8G8R8 || state.destFormat == FORMAT_A8B8G8R8)
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
{
c1 = Swizzle(c1, 0xC6);
*Pointer<UInt>(d) = UInt(As<Long>(Pack(As<UShort4>(c1), As<UShort4>(c1))));
}
else if(state.destFormat == FORMAT_R8G8B8)
break;
case FORMAT_R8G8B8:
{
Int c = Int(As<Int2>(Pack(As<UShort4>(c1), As<UShort4>(c1))));
......@@ -593,7 +649,8 @@ namespace sw
*Pointer<Byte>(d + 1) = Byte(c >> 8);
*Pointer<Byte>(d + 2) = Byte(c >> 16);
}
else if(state.destFormat == FORMAT_R5G6B5)
break;
case FORMAT_R5G6B5:
{
Int c = Int(As<Int2>(Pack(As<UShort4>(c1), As<UShort4>(c1))));
......@@ -601,7 +658,11 @@ namespace sw
(c & 0x0000FC00) >> 5 |
(c & 0x000000F8) >> 3);
}
else ASSERT(false);
break;
default:
ASSERT(false);
break;
}
}
void FrameBuffer::threadFunction(void *parameters)
......
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