Replace if/else with switch.
Change-Id: I970a64ffdc18b240239092615f87a59b84c5e364
Reviewed-on: https://swiftshader-review.googlesource.com/3071
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/Main/FrameBuffer.cpp b/src/Main/FrameBuffer.cpp
index 17563ca..098184b 100644
--- a/src/Main/FrameBuffer.cpp
+++ b/src/Main/FrameBuffer.cpp
@@ -275,207 +275,255 @@
}
#endif
- if(state.destFormat == FORMAT_X8R8G8B8 || state.destFormat == FORMAT_A8R8G8B8)
+ switch(state.destFormat)
{
- Int x = x0;
-
- if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == FORMAT_A8R8G8B8)
+ case FORMAT_X8R8G8B8:
+ case FORMAT_A8R8G8B8:
{
- For(, x < width - 3, x += 4)
- {
- *Pointer<Int4>(d, 1) = *Pointer<Int4>(s, width % 4 ? 1 : 16);
+ Int x = x0;
- s += 4 * sBytes;
- d += 4 * dBytes;
+ 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);
+
+ s += 4 * sBytes;
+ d += 4 * dBytes;
+ }
+ break;
+ case FORMAT_X8B8G8R8:
+ case FORMAT_A8B8G8R8:
+ For(, x < width - 3, x += 4)
+ {
+ Int4 bgra = *Pointer<Int4>(s, width % 4 ? 1 : 16);
+
+ *Pointer<Int4>(d, 1) = ((bgra & Int4(0x00FF0000)) >> 16) |
+ ((bgra & Int4(0x000000FF)) << 16) |
+ (bgra & Int4(0xFF00FF00));
+
+ s += 4 * sBytes;
+ d += 4 * dBytes;
+ }
+ break;
+ case FORMAT_A16B16G16R16:
+ For(, x < width - 1, x += 2)
+ {
+ UShort4 c0 = As<UShort4>(Swizzle(*Pointer<Short4>(s + 0), 0xC6)) >> 8;
+ UShort4 c1 = As<UShort4>(Swizzle(*Pointer<Short4>(s + 8), 0xC6)) >> 8;
+
+ *Pointer<Int2>(d) = As<Int2>(Pack(c0, c1));
+
+ s += 2 * sBytes;
+ d += 2 * dBytes;
+ }
+ break;
+ default:
+ ASSERT(false);
+ break;
+ }
+
+ For(, x < width, x++)
+ {
+ switch(state.sourceFormat)
+ {
+ case FORMAT_X8R8G8B8:
+ case FORMAT_A8R8G8B8:
+ *Pointer<Int>(d) = *Pointer<Int>(s);
+ break;
+ case FORMAT_X8B8G8R8:
+ case FORMAT_A8B8G8R8:
+ {
+ Int rgba = *Pointer<Int>(s);
+
+ *Pointer<Int>(d) = ((rgba & Int(0x00FF0000)) >> 16) |
+ ((rgba & Int(0x000000FF)) << 16) |
+ (rgba & Int(0xFF00FF00));
+ }
+ break;
+ case FORMAT_A16B16G16R16:
+ {
+ UShort4 c = As<UShort4>(Swizzle(*Pointer<Short4>(s), 0xC6)) >> 8;
+
+ *Pointer<Int>(d) = Int(As<Int2>(Pack(c, c)));
+ }
+ break;
+ default:
+ ASSERT(false);
+ break;
+ }
+
+ s += sBytes;
+ d += dBytes;
}
}
- else if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
+ break;
+ case FORMAT_X8B8G8R8:
+ case FORMAT_A8B8G8R8:
{
- For(, x < width - 3, x += 4)
+ Int x = x0;
+
+ switch(state.sourceFormat)
{
- Int4 bgra = *Pointer<Int4>(s, width % 4 ? 1 : 16);
+ case FORMAT_X8B8G8R8:
+ case FORMAT_A8B8G8R8:
+ For(, x < width - 3, x += 4)
+ {
+ *Pointer<Int4>(d, 1) = *Pointer<Int4>(s, width % 4 ? 1 : 16);
- *Pointer<Int4>(d, 1) = ((bgra & Int4(0x00FF0000)) >> 16) |
- ((bgra & Int4(0x000000FF)) << 16) |
- (bgra & Int4(0xFF00FF00));
+ s += 4 * sBytes;
+ d += 4 * dBytes;
+ }
+ break;
+ case FORMAT_X8R8G8B8:
+ case FORMAT_A8R8G8B8:
+ For(, x < width - 3, x += 4)
+ {
+ Int4 bgra = *Pointer<Int4>(s, width % 4 ? 1 : 16);
- s += 4 * sBytes;
- d += 4 * dBytes;
+ *Pointer<Int4>(d, 1) = ((bgra & Int4(0x00FF0000)) >> 16) |
+ ((bgra & Int4(0x000000FF)) << 16) |
+ (bgra & Int4(0xFF00FF00));
+
+ s += 4 * sBytes;
+ d += 4 * dBytes;
+ }
+ break;
+ case FORMAT_A16B16G16R16:
+ For(, x < width - 1, x += 2)
+ {
+ UShort4 c0 = *Pointer<UShort4>(s + 0) >> 8;
+ UShort4 c1 = *Pointer<UShort4>(s + 8) >> 8;
+
+ *Pointer<Int2>(d) = As<Int2>(Pack(c0, c1));
+
+ s += 2 * sBytes;
+ d += 2 * dBytes;
+ }
+ break;
+ default:
+ ASSERT(false);
+ break;
+ }
+
+ For(, x < width, x++)
+ {
+ switch(state.sourceFormat)
+ {
+ case FORMAT_X8B8G8R8:
+ case FORMAT_A8B8G8R8:
+ *Pointer<Int>(d) = *Pointer<Int>(s);
+ 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));
+ }
+ break;
+ case FORMAT_A16B16G16R16:
+ {
+ UShort4 c = *Pointer<UShort4>(s) >> 8;
+
+ *Pointer<Int>(d) = Int(As<Int2>(Pack(c, c)));
+ }
+ break;
+ default:
+ ASSERT(false);
+ break;
+ }
+
+ s += sBytes;
+ d += dBytes;
}
}
- else if(state.sourceFormat == FORMAT_A16B16G16R16)
+ case FORMAT_R8G8B8:
{
- For(, x < width - 1, x += 2)
+ For(Int x = x0, x < width, x++)
{
- UShort4 c0 = As<UShort4>(Swizzle(*Pointer<Short4>(s + 0), 0xC6)) >> 8;
- UShort4 c1 = As<UShort4>(Swizzle(*Pointer<Short4>(s + 8), 0xC6)) >> 8;
+ 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);
+ 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);
+ 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;
+ }
- *Pointer<Int2>(d) = As<Int2>(Pack(c0, c1));
-
- s += 2 * sBytes;
- d += 2 * dBytes;
+ s += sBytes;
+ d += dBytes;
}
}
- else ASSERT(false);
-
- For(, x < width, x++)
+ break;
+ case FORMAT_R5G6B5:
{
- if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == FORMAT_A8R8G8B8)
+ For(Int x = x0, x < width, x++)
{
- *Pointer<Int>(d) = *Pointer<Int>(s);
- }
- else if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
- {
- Int rgba = *Pointer<Int>(s);
+ switch(state.sourceFormat)
+ {
+ case FORMAT_X8R8G8B8:
+ case FORMAT_A8R8G8B8:
+ {
+ Int c = *Pointer<Int>(s);
- *Pointer<Int>(d) = ((rgba & Int(0x00FF0000)) >> 16) |
- ((rgba & Int(0x000000FF)) << 16) |
- (rgba & Int(0xFF00FF00));
- }
- else if(state.sourceFormat == FORMAT_A16B16G16R16)
- {
- UShort4 c = As<UShort4>(Swizzle(*Pointer<Short4>(s), 0xC6)) >> 8;
+ *Pointer<Short>(d) = Short((c & 0x00F80000) >> 8 |
+ (c & 0x0000FC00) >> 5 |
+ (c & 0x000000F8) >> 3);
+ }
+ break;
+ case FORMAT_X8B8G8R8:
+ case FORMAT_A8B8G8R8:
+ {
+ Int c = *Pointer<Int>(s);
- *Pointer<Int>(d) = Int(As<Int2>(Pack(c, c)));
- }
- else ASSERT(false);
+ *Pointer<Short>(d) = Short((c & 0x00F80000) >> 19 |
+ (c & 0x0000FC00) >> 5 |
+ (c & 0x000000F8) << 8);
+ }
+ break;
+ case FORMAT_A16B16G16R16:
+ {
+ UShort4 cc = *Pointer<UShort4>(s) >> 8;
+ Int c = Int(As<Int2>(Pack(cc, cc)));
- s += sBytes;
- d += dBytes;
+ *Pointer<Short>(d) = Short((c & 0x00F80000) >> 19 |
+ (c & 0x0000FC00) >> 5 |
+ (c & 0x000000F8) << 8);
+ }
+ break;
+ default:
+ ASSERT(false);
+ break;
+ }
+
+ s += sBytes;
+ d += dBytes;
+ }
}
+ break;
+ default:
+ ASSERT(false);
+ break;
}
- else if(state.destFormat == FORMAT_X8B8G8R8 || state.destFormat == FORMAT_A8B8G8R8)
- {
- Int x = x0;
-
- if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
- {
- For(, x < width - 3, x += 4)
- {
- *Pointer<Int4>(d, 1) = *Pointer<Int4>(s, width % 4 ? 1 : 16);
-
- s += 4 * sBytes;
- d += 4 * dBytes;
- }
- }
- else if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == FORMAT_A8R8G8B8)
- {
- For(, x < width - 3, x += 4)
- {
- Int4 bgra = *Pointer<Int4>(s, width % 4 ? 1 : 16);
-
- *Pointer<Int4>(d, 1) = ((bgra & Int4(0x00FF0000)) >> 16) |
- ((bgra & Int4(0x000000FF)) << 16) |
- (bgra & Int4(0xFF00FF00));
-
- s += 4 * sBytes;
- d += 4 * dBytes;
- }
- }
- else if(state.sourceFormat == FORMAT_A16B16G16R16)
- {
- For(, x < width - 1, x += 2)
- {
- UShort4 c0 = *Pointer<UShort4>(s + 0) >> 8;
- UShort4 c1 = *Pointer<UShort4>(s + 8) >> 8;
-
- *Pointer<Int2>(d) = As<Int2>(Pack(c0, c1));
-
- s += 2 * sBytes;
- d += 2 * dBytes;
- }
- }
- else ASSERT(false);
-
- For(, x < width, x++)
- {
- if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
- {
- *Pointer<Int>(d) = *Pointer<Int>(s);
- }
- else if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == 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)
- {
- UShort4 c = *Pointer<UShort4>(s) >> 8;
-
- *Pointer<Int>(d) = Int(As<Int2>(Pack(c, c)));
- }
- else ASSERT(false);
-
- s += sBytes;
- d += dBytes;
- }
- }
- else if(state.destFormat == FORMAT_R8G8B8)
- {
- For(Int x = x0, x < width, x++)
- {
- if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == 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)
- {
- *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)
- {
- *Pointer<Byte>(d + 0) = *Pointer<Byte>(s + 5);
- *Pointer<Byte>(d + 1) = *Pointer<Byte>(s + 3);
- *Pointer<Byte>(d + 2) = *Pointer<Byte>(s + 1);
- }
- else ASSERT(false);
-
- s += sBytes;
- d += dBytes;
- }
- }
- else if(state.destFormat == FORMAT_R5G6B5)
- {
- For(Int x = x0, x < width, x++)
- {
- if(state.sourceFormat == FORMAT_X8R8G8B8 || state.sourceFormat == FORMAT_A8R8G8B8)
- {
- Int c = *Pointer<Int>(s);
-
- *Pointer<Short>(d) = Short((c & 0x00F80000) >> 8 |
- (c & 0x0000FC00) >> 5 |
- (c & 0x000000F8) >> 3);
- }
- else if(state.sourceFormat == FORMAT_X8B8G8R8 || state.sourceFormat == FORMAT_A8B8G8R8)
- {
- Int c = *Pointer<Int>(s);
-
- *Pointer<Short>(d) = Short((c & 0x00F80000) >> 19 |
- (c & 0x0000FC00) >> 5 |
- (c & 0x000000F8) << 8);
- }
- else if(state.sourceFormat == FORMAT_A16B16G16R16)
- {
- UShort4 cc = *Pointer<UShort4>(s) >> 8;
- Int c = Int(As<Int2>(Pack(cc, cc)));
-
- *Pointer<Short>(d) = Short((c & 0x00F80000) >> 19 |
- (c & 0x0000FC00) >> 5 |
- (c & 0x000000F8) << 8);
- }
- else ASSERT(false);
-
- s += sBytes;
- d += dBytes;
- }
- }
- else ASSERT(false);
}
#if DISPLAY_LOGO
@@ -551,19 +599,23 @@
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,33 +627,42 @@
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)
- {
- c1 = Swizzle(c1, 0xC6);
+ 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)
- {
- Int c = Int(As<Int2>(Pack(As<UShort4>(c1), As<UShort4>(c1))));
+ *Pointer<UInt>(d) = UInt(As<Long>(Pack(As<UShort4>(c1), As<UShort4>(c1))));
+ }
+ break;
+ case FORMAT_R8G8B8:
+ {
+ Int c = Int(As<Int2>(Pack(As<UShort4>(c1), As<UShort4>(c1))));
- *Pointer<Byte>(d + 0) = Byte(c >> 0);
- *Pointer<Byte>(d + 1) = Byte(c >> 8);
- *Pointer<Byte>(d + 2) = Byte(c >> 16);
- }
- else if(state.destFormat == FORMAT_R5G6B5)
- {
- Int c = Int(As<Int2>(Pack(As<UShort4>(c1), As<UShort4>(c1))));
+ *Pointer<Byte>(d + 0) = Byte(c >> 0);
+ *Pointer<Byte>(d + 1) = Byte(c >> 8);
+ *Pointer<Byte>(d + 2) = Byte(c >> 16);
+ }
+ break;
+ case FORMAT_R5G6B5:
+ {
+ Int c = Int(As<Int2>(Pack(As<UShort4>(c1), As<UShort4>(c1))));
- *Pointer<Short>(d) = Short((c & 0x00F80000) >> 8 |
- (c & 0x0000FC00) >> 5 |
- (c & 0x000000F8) >> 3);
+ *Pointer<Short>(d) = Short((c & 0x00F80000) >> 8 |
+ (c & 0x0000FC00) >> 5 |
+ (c & 0x000000F8) >> 3);
+ }
+ break;
+ default:
+ ASSERT(false);
+ break;
}
- else ASSERT(false);
}
void FrameBuffer::threadFunction(void *parameters)