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