Log the switch value when reaching an UNREACHABLE().

Bug 20025568

Change-Id: I37d2c7171e0704b4064e56e8ca8799f930038d87
Reviewed-on: https://swiftshader-review.googlesource.com/3481
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGL/Context.cpp b/src/OpenGL/libGL/Context.cpp
index 635e8ab..69217d9 100644
--- a/src/OpenGL/libGL/Context.cpp
+++ b/src/OpenGL/libGL/Context.cpp
@@ -1213,7 +1213,7 @@
     {

         return static_cast<Texture2D*>(getSamplerTexture(mState.activeSampler, PROXY_TEXTURE_2D));

     }

-    else UNREACHABLE();

+    else UNREACHABLE(target);

 

     return 0;

 }

@@ -1234,7 +1234,7 @@
         case TEXTURE_2D:       return mTexture2DZero;

         case PROXY_TEXTURE_2D: return mProxyTexture2DZero;

         case TEXTURE_CUBE:     return mTextureCubeMapZero;

-        default: UNREACHABLE();

+        default: UNREACHABLE(type);

         }

     }

 

@@ -1276,53 +1276,53 @@
     // because it is stored as a float, despite the fact that the GL ES 2.0 spec names

     // GetIntegerv as its native query function. As it would require conversion in any

     // case, this should make no difference to the calling application.

-    switch (pname)

+    switch(pname)

     {

-      case GL_LINE_WIDTH:               *params = mState.lineWidth;            break;

-      case GL_SAMPLE_COVERAGE_VALUE:    *params = mState.sampleCoverageValue;  break;

-      case GL_DEPTH_CLEAR_VALUE:        *params = mState.depthClearValue;      break;

-      case GL_POLYGON_OFFSET_FACTOR:    *params = mState.polygonOffsetFactor;  break;

-      case GL_POLYGON_OFFSET_UNITS:     *params = mState.polygonOffsetUnits;   break;

-      case GL_ALIASED_LINE_WIDTH_RANGE:

+    case GL_LINE_WIDTH:               *params = mState.lineWidth;            break;

+    case GL_SAMPLE_COVERAGE_VALUE:    *params = mState.sampleCoverageValue;  break;

+    case GL_DEPTH_CLEAR_VALUE:        *params = mState.depthClearValue;      break;

+    case GL_POLYGON_OFFSET_FACTOR:    *params = mState.polygonOffsetFactor;  break;

+    case GL_POLYGON_OFFSET_UNITS:     *params = mState.polygonOffsetUnits;   break;

+    case GL_ALIASED_LINE_WIDTH_RANGE:

         params[0] = ALIASED_LINE_WIDTH_RANGE_MIN;

         params[1] = ALIASED_LINE_WIDTH_RANGE_MAX;

         break;

-      case GL_ALIASED_POINT_SIZE_RANGE:

+    case GL_ALIASED_POINT_SIZE_RANGE:

         params[0] = ALIASED_POINT_SIZE_RANGE_MIN;

         params[1] = ALIASED_POINT_SIZE_RANGE_MAX;

         break;

-      case GL_DEPTH_RANGE:

+    case GL_DEPTH_RANGE:

         params[0] = mState.zNear;

         params[1] = mState.zFar;

         break;

-      case GL_COLOR_CLEAR_VALUE:

+    case GL_COLOR_CLEAR_VALUE:

         params[0] = mState.colorClearValue.red;

         params[1] = mState.colorClearValue.green;

         params[2] = mState.colorClearValue.blue;

         params[3] = mState.colorClearValue.alpha;

         break;

-      case GL_BLEND_COLOR:

+    case GL_BLEND_COLOR:

         params[0] = mState.blendColor.red;

         params[1] = mState.blendColor.green;

         params[2] = mState.blendColor.blue;

         params[3] = mState.blendColor.alpha;

         break;

-	  case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:

+	case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:

         *params = MAX_TEXTURE_MAX_ANISOTROPY;

 		break;

-	  case GL_MODELVIEW_MATRIX:

+	case GL_MODELVIEW_MATRIX:

 		for(int i = 0; i < 16; i++)

 		{

 			params[i] = modelView.current()[i % 4][i / 4];

 		}

 		break;

-	  case GL_PROJECTION_MATRIX:

+	case GL_PROJECTION_MATRIX:

 		for(int i = 0; i < 16; i++)

 		{

 			params[i] = projection.current()[i % 4][i / 4];

 		}

 		break;

-      default:

+    default:

         return false;

     }

 

@@ -1544,159 +1544,159 @@
     // in the case that one calls glGetIntegerv to retrieve a float-typed state variable, we

     // place DEPTH_CLEAR_VALUE with the floats. This should make no difference to the calling

     // application.

-    switch (pname)

+    switch(pname)

     {

-      case GL_COMPRESSED_TEXTURE_FORMATS:

+    case GL_COMPRESSED_TEXTURE_FORMATS:

 		{

             *type = GL_INT;

 			*numParams = NUM_COMPRESSED_TEXTURE_FORMATS;

         }

 		break;

-      case GL_SHADER_BINARY_FORMATS:

+    case GL_SHADER_BINARY_FORMATS:

         {

             *type = GL_INT;

             *numParams = 0;

         }

         break;

-      case GL_MAX_VERTEX_ATTRIBS:

-      case GL_MAX_VERTEX_UNIFORM_VECTORS:

-      case GL_MAX_VARYING_VECTORS:

-      case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:

-      case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS:

-      case GL_MAX_TEXTURE_IMAGE_UNITS:

-      case GL_MAX_FRAGMENT_UNIFORM_VECTORS:

-      case GL_MAX_RENDERBUFFER_SIZE:

-      case GL_NUM_SHADER_BINARY_FORMATS:

-      case GL_NUM_COMPRESSED_TEXTURE_FORMATS:

-      case GL_ARRAY_BUFFER_BINDING:

-      case GL_FRAMEBUFFER_BINDING:

-      case GL_RENDERBUFFER_BINDING:

-      case GL_CURRENT_PROGRAM:

-      case GL_PACK_ALIGNMENT:

-      case GL_UNPACK_ALIGNMENT:

-      case GL_GENERATE_MIPMAP_HINT:

-      case GL_FRAGMENT_SHADER_DERIVATIVE_HINT:

-      case GL_RED_BITS:

-      case GL_GREEN_BITS:

-      case GL_BLUE_BITS:

-      case GL_ALPHA_BITS:

-      case GL_DEPTH_BITS:

-      case GL_STENCIL_BITS:

-      case GL_ELEMENT_ARRAY_BUFFER_BINDING:

-      case GL_CULL_FACE_MODE:

-      case GL_FRONT_FACE:

-      case GL_ACTIVE_TEXTURE:

-      case GL_STENCIL_FUNC:

-      case GL_STENCIL_VALUE_MASK:

-      case GL_STENCIL_REF:

-      case GL_STENCIL_FAIL:

-      case GL_STENCIL_PASS_DEPTH_FAIL:

-      case GL_STENCIL_PASS_DEPTH_PASS:

-      case GL_STENCIL_BACK_FUNC:

-      case GL_STENCIL_BACK_VALUE_MASK:

-      case GL_STENCIL_BACK_REF:

-      case GL_STENCIL_BACK_FAIL:

-      case GL_STENCIL_BACK_PASS_DEPTH_FAIL:

-      case GL_STENCIL_BACK_PASS_DEPTH_PASS:

-      case GL_DEPTH_FUNC:

-      case GL_BLEND_SRC_RGB:

-      case GL_BLEND_SRC_ALPHA:

-      case GL_BLEND_DST_RGB:

-      case GL_BLEND_DST_ALPHA:

-      case GL_BLEND_EQUATION_RGB:

-      case GL_BLEND_EQUATION_ALPHA:

-      case GL_STENCIL_WRITEMASK:

-      case GL_STENCIL_BACK_WRITEMASK:

-      case GL_STENCIL_CLEAR_VALUE:

-      case GL_SUBPIXEL_BITS:

-      case GL_MAX_TEXTURE_SIZE:

-      case GL_MAX_CUBE_MAP_TEXTURE_SIZE:

-      case GL_SAMPLE_BUFFERS:

-      case GL_SAMPLES:

-      case GL_IMPLEMENTATION_COLOR_READ_TYPE:

-      case GL_IMPLEMENTATION_COLOR_READ_FORMAT:

-      case GL_TEXTURE_BINDING_2D:

-      case GL_TEXTURE_BINDING_CUBE_MAP:

-      case GL_MAX_VERTEX_UNIFORM_COMPONENTS:

-      case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:

-      case GL_MAX_ARRAY_TEXTURE_LAYERS:

+    case GL_MAX_VERTEX_ATTRIBS:

+    case GL_MAX_VERTEX_UNIFORM_VECTORS:

+    case GL_MAX_VARYING_VECTORS:

+    case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:

+    case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS:

+    case GL_MAX_TEXTURE_IMAGE_UNITS:

+    case GL_MAX_FRAGMENT_UNIFORM_VECTORS:

+    case GL_MAX_RENDERBUFFER_SIZE:

+    case GL_NUM_SHADER_BINARY_FORMATS:

+    case GL_NUM_COMPRESSED_TEXTURE_FORMATS:

+    case GL_ARRAY_BUFFER_BINDING:

+    case GL_FRAMEBUFFER_BINDING:

+    case GL_RENDERBUFFER_BINDING:

+    case GL_CURRENT_PROGRAM:

+    case GL_PACK_ALIGNMENT:

+    case GL_UNPACK_ALIGNMENT:

+    case GL_GENERATE_MIPMAP_HINT:

+    case GL_FRAGMENT_SHADER_DERIVATIVE_HINT:

+    case GL_RED_BITS:

+    case GL_GREEN_BITS:

+    case GL_BLUE_BITS:

+    case GL_ALPHA_BITS:

+    case GL_DEPTH_BITS:

+    case GL_STENCIL_BITS:

+    case GL_ELEMENT_ARRAY_BUFFER_BINDING:

+    case GL_CULL_FACE_MODE:

+    case GL_FRONT_FACE:

+    case GL_ACTIVE_TEXTURE:

+    case GL_STENCIL_FUNC:

+    case GL_STENCIL_VALUE_MASK:

+    case GL_STENCIL_REF:

+    case GL_STENCIL_FAIL:

+    case GL_STENCIL_PASS_DEPTH_FAIL:

+    case GL_STENCIL_PASS_DEPTH_PASS:

+    case GL_STENCIL_BACK_FUNC:

+    case GL_STENCIL_BACK_VALUE_MASK:

+    case GL_STENCIL_BACK_REF:

+    case GL_STENCIL_BACK_FAIL:

+    case GL_STENCIL_BACK_PASS_DEPTH_FAIL:

+    case GL_STENCIL_BACK_PASS_DEPTH_PASS:

+    case GL_DEPTH_FUNC:

+    case GL_BLEND_SRC_RGB:

+    case GL_BLEND_SRC_ALPHA:

+    case GL_BLEND_DST_RGB:

+    case GL_BLEND_DST_ALPHA:

+    case GL_BLEND_EQUATION_RGB:

+    case GL_BLEND_EQUATION_ALPHA:

+    case GL_STENCIL_WRITEMASK:

+    case GL_STENCIL_BACK_WRITEMASK:

+    case GL_STENCIL_CLEAR_VALUE:

+    case GL_SUBPIXEL_BITS:

+    case GL_MAX_TEXTURE_SIZE:

+    case GL_MAX_CUBE_MAP_TEXTURE_SIZE:

+    case GL_SAMPLE_BUFFERS:

+    case GL_SAMPLES:

+    case GL_IMPLEMENTATION_COLOR_READ_TYPE:

+    case GL_IMPLEMENTATION_COLOR_READ_FORMAT:

+    case GL_TEXTURE_BINDING_2D:

+    case GL_TEXTURE_BINDING_CUBE_MAP:

+    case GL_MAX_VERTEX_UNIFORM_COMPONENTS:

+    case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:

+    case GL_MAX_ARRAY_TEXTURE_LAYERS:

         {

             *type = GL_INT;

             *numParams = 1;

         }

         break;

-      case GL_MAX_SAMPLES:

+    case GL_MAX_SAMPLES:

         {

             *type = GL_INT;

             *numParams = 1;

         }

         break;

-      case GL_MAX_VIEWPORT_DIMS:

+    case GL_MAX_VIEWPORT_DIMS:

         {

             *type = GL_INT;

             *numParams = 2;

         }

         break;

-      case GL_VIEWPORT:

-      case GL_SCISSOR_BOX:

+    case GL_VIEWPORT:

+    case GL_SCISSOR_BOX:

         {

             *type = GL_INT;

             *numParams = 4;

         }

         break;

-      case GL_SHADER_COMPILER:

-      case GL_SAMPLE_COVERAGE_INVERT:

-      case GL_DEPTH_WRITEMASK:

-      case GL_CULL_FACE:                // CULL_FACE through DITHER are natural to IsEnabled,

-      case GL_POLYGON_OFFSET_FILL:      // but can be retrieved through the Get{Type}v queries.

-      case GL_SAMPLE_ALPHA_TO_COVERAGE: // For this purpose, they are treated here as bool-natural

-      case GL_SAMPLE_COVERAGE:

-      case GL_SCISSOR_TEST:

-      case GL_STENCIL_TEST:

-      case GL_DEPTH_TEST:

-      case GL_BLEND:

-      case GL_DITHER:

+    case GL_SHADER_COMPILER:

+    case GL_SAMPLE_COVERAGE_INVERT:

+    case GL_DEPTH_WRITEMASK:

+    case GL_CULL_FACE:                // CULL_FACE through DITHER are natural to IsEnabled,

+    case GL_POLYGON_OFFSET_FILL:      // but can be retrieved through the Get{Type}v queries.

+    case GL_SAMPLE_ALPHA_TO_COVERAGE: // For this purpose, they are treated here as bool-natural

+    case GL_SAMPLE_COVERAGE:

+    case GL_SCISSOR_TEST:

+    case GL_STENCIL_TEST:

+    case GL_DEPTH_TEST:

+    case GL_BLEND:

+    case GL_DITHER:

         {

             *type = GL_BOOL;

             *numParams = 1;

         }

         break;

-      case GL_COLOR_WRITEMASK:

+    case GL_COLOR_WRITEMASK:

         {

             *type = GL_BOOL;

             *numParams = 4;

         }

         break;

-      case GL_POLYGON_OFFSET_FACTOR:

-      case GL_POLYGON_OFFSET_UNITS:

-      case GL_SAMPLE_COVERAGE_VALUE:

-      case GL_DEPTH_CLEAR_VALUE:

-      case GL_LINE_WIDTH:

+    case GL_POLYGON_OFFSET_FACTOR:

+    case GL_POLYGON_OFFSET_UNITS:

+    case GL_SAMPLE_COVERAGE_VALUE:

+    case GL_DEPTH_CLEAR_VALUE:

+    case GL_LINE_WIDTH:

         {

             *type = GL_FLOAT;

             *numParams = 1;

         }

         break;

-      case GL_ALIASED_LINE_WIDTH_RANGE:

-      case GL_ALIASED_POINT_SIZE_RANGE:

-      case GL_DEPTH_RANGE:

+    case GL_ALIASED_LINE_WIDTH_RANGE:

+    case GL_ALIASED_POINT_SIZE_RANGE:

+    case GL_DEPTH_RANGE:

         {

             *type = GL_FLOAT;

             *numParams = 2;

         }

         break;

-      case GL_COLOR_CLEAR_VALUE:

-      case GL_BLEND_COLOR:

+    case GL_COLOR_CLEAR_VALUE:

+    case GL_BLEND_COLOR:

         {

             *type = GL_FLOAT;

             *numParams = 4;

         }

         break;

-	  case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:

+	case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:

         *type = GL_FLOAT;

         *numParams = 1;

         break;

-      default:

+    default:

         return false;

     }

 

@@ -2145,7 +2145,7 @@
 	{

 		textureUsed = program ? program->getVertexShader()->usesSampler(index) : false;

 	}

-	else UNREACHABLE();

+	else UNREACHABLE(type);

 

 	sw::Resource *resource = 0;

 

@@ -2344,7 +2344,7 @@
 					break;

 				default:

 					UNIMPLEMENTED();   // FIXME

-					UNREACHABLE();

+					UNREACHABLE(renderTarget->getInternalFormat());

 				}

 

 				switch(format)

@@ -2358,7 +2358,7 @@
 						dest[4 * i + j * outputPitch + 2] = (unsigned char)(255 * b + 0.5f);

 						dest[4 * i + j * outputPitch + 3] = (unsigned char)(255 * a + 0.5f);

 						break;

-					default: UNREACHABLE();

+					default: UNREACHABLE(type);

 					}

 					break;

 				case GL_BGRA_EXT:

@@ -2398,7 +2398,7 @@
 							((unsigned short)(31 * g + 0.5f) << 5) |

 							((unsigned short)(31 * b + 0.5f) << 0);

 						break;

-					default: UNREACHABLE();

+					default: UNREACHABLE(type);

 					}

 					break;

 				case GL_RGB:   // IMPLEMENTATION_COLOR_READ_FORMAT

@@ -2410,10 +2410,10 @@
 							((unsigned short)(63 * g + 0.5f) << 5) |

 							((unsigned short)(31 * r + 0.5f) << 11);

 						break;

-					default: UNREACHABLE();

+					default: UNREACHABLE(type);

 					}

 					break;

-				default: UNREACHABLE();

+				default: UNREACHABLE(format);

 				}

 			}

         }

@@ -2796,7 +2796,7 @@
       case GL_LINE_LOOP:

       case GL_LINE_STRIP:

         return false;

-      default: UNREACHABLE();

+      default: UNREACHABLE(drawMode);

     }

 

     return false;

@@ -3095,7 +3095,7 @@
 	case GL_MODELVIEW:  return modelView;                     break;

 	case GL_PROJECTION: return projection;                    break;

 	case GL_TEXTURE:    return texture[mState.activeSampler]; break;

-	default:            UNREACHABLE(); return modelView;      break;

+	default:            UNREACHABLE(matrixMode); return modelView;      break;

 	}

 }

 

@@ -3252,7 +3252,7 @@
 	case GL_NOTEQUAL: device->setAlphaCompare(sw::ALPHA_NOTEQUAL);     break;

 	case GL_GEQUAL:   device->setAlphaCompare(sw::ALPHA_GREATEREQUAL); break;

 	case GL_ALWAYS:   device->setAlphaCompare(sw::ALPHA_ALWAYS);       break;

-	default: UNREACHABLE();

+	default: UNREACHABLE(func);

 	}

 

 	device->setAlphaReference(gl::clamp01(ref));

@@ -3578,7 +3578,7 @@
         UNIMPLEMENTED();

         break;

     default:

-        UNREACHABLE();

+        UNREACHABLE(drawMode);

     }

 

 	restoreAttribs();

@@ -3626,7 +3626,7 @@
         device->setEmissiveMaterialSource(sw::MATERIAL_MATERIAL);

         break;

     default:

-        UNREACHABLE();

+        UNREACHABLE(mode);

     }

 }

 

diff --git a/src/OpenGL/libGL/Context.h b/src/OpenGL/libGL/Context.h
index 6a9e42c..893047b 100644
--- a/src/OpenGL/libGL/Context.h
+++ b/src/OpenGL/libGL/Context.h
@@ -371,7 +371,7 @@
 

     int typeSize() const

     {

-        switch (mType)

+        switch(mType)

         {

         case GL_BYTE:           return mSize * sizeof(GLbyte);

         case GL_UNSIGNED_BYTE:  return mSize * sizeof(GLubyte);

@@ -379,7 +379,7 @@
         case GL_UNSIGNED_SHORT: return mSize * sizeof(GLushort);

         case GL_FIXED:          return mSize * sizeof(GLfixed);

         case GL_FLOAT:          return mSize * sizeof(GLfloat);

-        default: UNREACHABLE(); return mSize * sizeof(GLfloat);

+        default: UNREACHABLE(mType); return mSize * sizeof(GLfloat);

         }

     }

 

diff --git a/src/OpenGL/libGL/Device.cpp b/src/OpenGL/libGL/Device.cpp
index 1979141..b683318 100644
--- a/src/OpenGL/libGL/Device.cpp
+++ b/src/OpenGL/libGL/Device.cpp
@@ -278,7 +278,7 @@
 			lockable = true;

 			break;

 		default:

-			UNREACHABLE();

+			UNREACHABLE(format);

 		}

 

 		Image *surface = new Image(0, width, height, format, multiSampleDepth, lockable, true);

@@ -331,7 +331,7 @@
 			case DRAW_TRIANGLELIST:  drawType = sw::DRAW_INDEXEDTRIANGLELIST32;  break;

 			case DRAW_TRIANGLESTRIP: drawType = sw::DRAW_INDEXEDTRIANGLESTRIP32; break;

 			case DRAW_TRIANGLEFAN:   drawType = sw::DRAW_INDEXEDTRIANGLEFAN32;	  break;

-			default: UNREACHABLE();

+			default: UNREACHABLE(type);

 			}

 		}

 		else if(indexSize == 2)

@@ -345,7 +345,7 @@
 			case DRAW_TRIANGLELIST:  drawType = sw::DRAW_INDEXEDTRIANGLELIST16;  break;

 			case DRAW_TRIANGLESTRIP: drawType = sw::DRAW_INDEXEDTRIANGLESTRIP16; break;

 			case DRAW_TRIANGLEFAN:   drawType = sw::DRAW_INDEXEDTRIANGLEFAN16;   break;

-			default: UNREACHABLE();

+			default: UNREACHABLE(type);

 			}

 		}

 		else if(indexSize == 1)

@@ -359,10 +359,10 @@
 			case DRAW_TRIANGLELIST:  drawType = sw::DRAW_INDEXEDTRIANGLELIST8;  break;

 			case DRAW_TRIANGLESTRIP: drawType = sw::DRAW_INDEXEDTRIANGLESTRIP8; break;

 			case DRAW_TRIANGLEFAN:   drawType = sw::DRAW_INDEXEDTRIANGLEFAN8;   break;

-			default: UNREACHABLE();

+			default: UNREACHABLE(type);

 			}

 		}

-		else UNREACHABLE();

+		else UNREACHABLE(indexSize);

 

 		draw(drawType, indexOffset, primitiveCount);

 	}

@@ -388,7 +388,7 @@
 		case DRAW_TRIANGLESTRIP: drawType = sw::DRAW_TRIANGLESTRIP; break;

 		case DRAW_TRIANGLEFAN:   drawType = sw::DRAW_TRIANGLEFAN;   break;

         case DRAW_QUADLIST:      drawType = sw::DRAW_QUADLIST;      break;

-		default: UNREACHABLE();

+		default: UNREACHABLE(primitiveType);

 		}

 

 		draw(drawType, 0, primitiveCount);

diff --git a/src/OpenGL/libGL/Framebuffer.cpp b/src/OpenGL/libGL/Framebuffer.cpp
index 048a70a..220da2d 100644
--- a/src/OpenGL/libGL/Framebuffer.cpp
+++ b/src/OpenGL/libGL/Framebuffer.cpp
@@ -53,10 +53,7 @@
 	{
 		buffer = context->getTexture(handle)->getRenderbuffer(type);
 	}
-	else
-	{
-		UNREACHABLE();
-	}
+	else UNREACHABLE(type);
 
 	return buffer;
 }
@@ -269,7 +266,7 @@
 		}
 		else
 		{
-			UNREACHABLE();
+			UNREACHABLE(mColorbufferType);
 			return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
 		}
 
@@ -311,7 +308,7 @@
 		}
 		else
 		{
-			UNREACHABLE();
+			UNREACHABLE(mDepthbufferType);
 			return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
 		}
 
@@ -363,7 +360,7 @@
 		}
 		else
 		{
-			UNREACHABLE();
+			UNREACHABLE(mStencilbufferType);
 			return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
 		}
 
diff --git a/src/OpenGL/libGL/Image.cpp b/src/OpenGL/libGL/Image.cpp
index 94829bb..b01712a 100644
--- a/src/OpenGL/libGL/Image.cpp
+++ b/src/OpenGL/libGL/Image.cpp
@@ -186,7 +186,7 @@
 			{
 				return sw::FORMAT_A8;
 			}
-			else UNREACHABLE();
+			else UNREACHABLE(format);
 		}
 		else if(type == GL_UNSIGNED_SHORT || type == GL_UNSIGNED_INT)
 		{
@@ -194,7 +194,7 @@
 			{
 				return sw::FORMAT_D32FS8_TEXTURE;
 			}
-			else UNREACHABLE();
+			else UNREACHABLE(format);
 		}
 		else if(type == GL_UNSIGNED_INT_24_8_EXT)
 		{
@@ -202,7 +202,7 @@
 			{
 				return sw::FORMAT_D32FS8_TEXTURE;
 			}
-			else UNREACHABLE();
+			else UNREACHABLE(format);
 		}
 		else if(type == GL_UNSIGNED_SHORT_4_4_4_4)
 		{
@@ -221,7 +221,7 @@
             return sw::FORMAT_A8R8G8B8;
         }
 
-		else UNREACHABLE();
+		else UNREACHABLE(type);
 
 		return sw::FORMAT_A8R8G8B8;
 	}
@@ -257,7 +257,7 @@
 				case GL_BGRA_EXT:
 					loadBGRAImageData(xoffset, yoffset, width, height, inputPitch, input, buffer);
 					break;
-				default: UNREACHABLE();
+				default: UNREACHABLE(format);
 				}
 				break;
 			case GL_UNSIGNED_SHORT_5_6_5:
@@ -266,7 +266,7 @@
 				case GL_RGB:
 					loadRGB565ImageData(xoffset, yoffset, width, height, inputPitch, input, buffer);
 					break;
-				default: UNREACHABLE();
+				default: UNREACHABLE(format);
 				}
 				break;
 			case GL_UNSIGNED_SHORT_4_4_4_4:
@@ -275,7 +275,7 @@
 				case GL_RGBA:
 					loadRGBA4444ImageData(xoffset, yoffset, width, height, inputPitch, input, buffer);
 					break;
-				default: UNREACHABLE();
+				default: UNREACHABLE(format);
 				}
 				break;
 			case GL_UNSIGNED_SHORT_5_5_5_1:
@@ -284,7 +284,7 @@
 				case GL_RGBA:
 					loadRGBA5551ImageData(xoffset, yoffset, width, height, inputPitch, input, buffer);
 					break;
-				default: UNREACHABLE();
+				default: UNREACHABLE(format);
 				}
 				break;
 			case GL_FLOAT:
@@ -306,10 +306,10 @@
 				case GL_RGBA:
 					loadRGBAFloatImageData(xoffset, yoffset, width, height, inputPitch, input, buffer);
 					break;
-				default: UNREACHABLE();
+				default: UNREACHABLE(format);
 				}
 				break;
-			  case GL_HALF_FLOAT:
+			case GL_HALF_FLOAT:
 				switch(format)
 				{
 				// float textures are converted to RGBA, not BGRA
@@ -328,7 +328,7 @@
 				case GL_RGBA:
 					loadRGBAHalfFloatImageData(xoffset, yoffset, width, height, inputPitch, input, buffer);
 					break;
-				default: UNREACHABLE();
+				default: UNREACHABLE(format);
 				}
 				break;
 			case GL_UNSIGNED_SHORT:
@@ -340,7 +340,7 @@
 			case GL_UNSIGNED_INT_24_8_EXT:
 				loadD24S8ImageData(xoffset, yoffset, width, height, inputPitch, input, buffer);
 				break;
-			default: UNREACHABLE();
+			default: UNREACHABLE(type);
 			}
 		}
 
diff --git a/src/OpenGL/libGL/IndexDataManager.cpp b/src/OpenGL/libGL/IndexDataManager.cpp
index 3dbfe44..492122d 100644
--- a/src/OpenGL/libGL/IndexDataManager.cpp
+++ b/src/OpenGL/libGL/IndexDataManager.cpp
@@ -57,7 +57,7 @@
     {

         memcpy(output, input, count * sizeof(GLushort));

     }

-    else UNREACHABLE();

+    else UNREACHABLE(type);

 }

 

 template<class IndexType>

@@ -87,7 +87,7 @@
     {

         computeRange(static_cast<const GLushort*>(indices), count, minIndex, maxIndex);

     }

-    else UNREACHABLE();

+    else UNREACHABLE(type);

 }

 

 GLenum IndexDataManager::prepareIndexData(GLenum type, GLsizei count, Buffer *buffer, const void *indices, TranslatedIndexData *translated)

@@ -107,7 +107,7 @@
           case GL_UNSIGNED_BYTE:  alignedOffset = (offset % sizeof(GLubyte) == 0);  break;

           case GL_UNSIGNED_SHORT: alignedOffset = (offset % sizeof(GLushort) == 0); break;

           case GL_UNSIGNED_INT:   alignedOffset = (offset % sizeof(GLuint) == 0);   break;

-          default: UNREACHABLE(); alignedOffset = false;

+          default: UNREACHABLE(type); alignedOffset = false;

         }

 

         if(typeSize(type) * count + offset > static_cast<std::size_t>(buffer->size()))

@@ -162,7 +162,7 @@
     case GL_UNSIGNED_INT:   return sizeof(GLuint);

     case GL_UNSIGNED_SHORT: return sizeof(GLushort);

     case GL_UNSIGNED_BYTE:  return sizeof(GLubyte);

-    default: UNREACHABLE(); return sizeof(GLushort);

+    default: UNREACHABLE(type); return sizeof(GLushort);

     }

 }

 

diff --git a/src/OpenGL/libGL/Program.cpp b/src/OpenGL/libGL/Program.cpp
index 21b7995..777b1b3 100644
--- a/src/OpenGL/libGL/Program.cpp
+++ b/src/OpenGL/libGL/Program.cpp
@@ -125,7 +125,7 @@
 			fragmentShader = (FragmentShader*)shader;

 			fragmentShader->addRef();

 		}

-		else UNREACHABLE();

+		else UNREACHABLE(shader->getType());

 

 		return true;

 	}

@@ -152,7 +152,7 @@
 			fragmentShader->release();

 			fragmentShader = 0;

 		}

-		else UNREACHABLE();

+		else UNREACHABLE(shader->getType());

 

 		return true;

 	}

@@ -231,7 +231,7 @@
 				logicalTextureUnit = samplersVS[samplerIndex].logicalTextureUnit;

 			}

 			break;

-		default: UNREACHABLE();

+		default: UNREACHABLE(type);

 		}

 

 		if(logicalTextureUnit >= 0 && logicalTextureUnit < MAX_COMBINED_TEXTURE_IMAGE_UNITS)

@@ -255,7 +255,7 @@
 			ASSERT(samplerIndex < sizeof(samplersVS)/sizeof(samplersVS[0]));

 			ASSERT(samplersVS[samplerIndex].active);

 			return samplersVS[samplerIndex].textureType;

-		default: UNREACHABLE();

+		default: UNREACHABLE(type);

 		}

 

 		return TEXTURE_2D;

@@ -799,9 +799,9 @@
 			return false;

 		}

 

-		switch (UniformComponentType(targetUniform->type))

+		switch(UniformComponentType(targetUniform->type))

 		{

-		  case GL_BOOL:

+		case GL_BOOL:

 			{

 				GLboolean *boolParams = (GLboolean*)targetUniform->data + uniformIndex[location].element * count;

 

@@ -811,11 +811,11 @@
 				}

 			}

 			break;

-		  case GL_FLOAT:

+		case GL_FLOAT:

 			memcpy(params, targetUniform->data + uniformIndex[location].element * count * sizeof(GLfloat),

 				   count * sizeof(GLfloat));

 			break;

-		  case GL_INT:

+		case GL_INT:

 			{

 				GLint *intParams = (GLint*)targetUniform->data + uniformIndex[location].element * count;

 

@@ -825,7 +825,7 @@
 				}

 			}

 			break;

-		  default: UNREACHABLE();

+		default: UNREACHABLE(targetUniform->type);

 		}

 

 		return true;

@@ -847,9 +847,9 @@
 			return false;

 		}

 

-		switch (UniformComponentType(targetUniform->type))

+		switch(UniformComponentType(targetUniform->type))

 		{

-		  case GL_BOOL:

+		case GL_BOOL:

 			{

 				GLboolean *boolParams = targetUniform->data + uniformIndex[location].element * count;

 

@@ -859,7 +859,7 @@
 				}

 			}

 			break;

-		  case GL_FLOAT:

+		case GL_FLOAT:

 			{

 				GLfloat *floatParams = (GLfloat*)targetUniform->data + uniformIndex[location].element * count;

 

@@ -869,11 +869,11 @@
 				}

 			}

 			break;

-		  case GL_INT:

+		case GL_INT:

 			memcpy(params, targetUniform->data + uniformIndex[location].element * count * sizeof(GLint),

 				   count * sizeof(GLint));

 			break;

-		  default: UNREACHABLE();

+		default: UNREACHABLE(targetUniform->type);

 		}

 

 		return true;

@@ -910,25 +910,25 @@
 

 				switch(targetUniform->type)

 				{

-				  case GL_BOOL:       applyUniform1bv(location, size, b);       break;

-				  case GL_BOOL_VEC2:  applyUniform2bv(location, size, b);       break;

-				  case GL_BOOL_VEC3:  applyUniform3bv(location, size, b);       break;

-				  case GL_BOOL_VEC4:  applyUniform4bv(location, size, b);       break;

-				  case GL_FLOAT:      applyUniform1fv(location, size, f);       break;

-				  case GL_FLOAT_VEC2: applyUniform2fv(location, size, f);       break;

-				  case GL_FLOAT_VEC3: applyUniform3fv(location, size, f);       break;

-				  case GL_FLOAT_VEC4: applyUniform4fv(location, size, f);       break;

-				  case GL_FLOAT_MAT2: applyUniformMatrix2fv(location, size, f); break;

-				  case GL_FLOAT_MAT3: applyUniformMatrix3fv(location, size, f); break;

-				  case GL_FLOAT_MAT4: applyUniformMatrix4fv(location, size, f); break;

-				  case GL_SAMPLER_2D:

-				  case GL_SAMPLER_CUBE:

-				  case GL_INT:        applyUniform1iv(location, size, i);       break;

-				  case GL_INT_VEC2:   applyUniform2iv(location, size, i);       break;

-				  case GL_INT_VEC3:   applyUniform3iv(location, size, i);       break;

-				  case GL_INT_VEC4:   applyUniform4iv(location, size, i);       break;

-				  default:

-					UNREACHABLE();

+				case GL_BOOL:       applyUniform1bv(location, size, b);       break;

+				case GL_BOOL_VEC2:  applyUniform2bv(location, size, b);       break;

+				case GL_BOOL_VEC3:  applyUniform3bv(location, size, b);       break;

+				case GL_BOOL_VEC4:  applyUniform4bv(location, size, b);       break;

+				case GL_FLOAT:      applyUniform1fv(location, size, f);       break;

+				case GL_FLOAT_VEC2: applyUniform2fv(location, size, f);       break;

+				case GL_FLOAT_VEC3: applyUniform3fv(location, size, f);       break;

+				case GL_FLOAT_VEC4: applyUniform4fv(location, size, f);       break;

+				case GL_FLOAT_MAT2: applyUniformMatrix2fv(location, size, f); break;

+				case GL_FLOAT_MAT3: applyUniformMatrix3fv(location, size, f); break;

+				case GL_FLOAT_MAT4: applyUniformMatrix4fv(location, size, f); break;

+				case GL_SAMPLER_2D:

+				case GL_SAMPLER_CUBE:

+				case GL_INT:        applyUniform1iv(location, size, i);       break;

+				case GL_INT_VEC2:   applyUniform2iv(location, size, i);       break;

+				case GL_INT_VEC3:   applyUniform3iv(location, size, i);       break;

+				case GL_INT_VEC4:   applyUniform4iv(location, size, i);       break;

+				default:

+					UNREACHABLE(targetUniform->type);

 				}

 

 				targetUniform->dirty = false;

@@ -1059,7 +1059,7 @@
 					success = true;

 				}

 			}

-			else UNREACHABLE();

+			else UNREACHABLE(m);

 

 			if(!success)

 			{

@@ -1347,7 +1347,7 @@
 						return false;

 					}

 				}

-				else UNREACHABLE();

+				else UNREACHABLE(shader);

 

 				index++;

 			}

@@ -1391,7 +1391,7 @@
 		{

 			uniform->psRegisterIndex = registerIndex;

 		}

-		else UNREACHABLE();

+		else UNREACHABLE(shader);

 

 		if(location == -1)   // Not previously defined

 		{

@@ -1420,7 +1420,7 @@
 				return false;

 			}

 		}

-		else UNREACHABLE();

+		else UNREACHABLE(shader);

 

 		return true;

 	}

diff --git a/src/OpenGL/libGL/ResourceManager.cpp b/src/OpenGL/libGL/ResourceManager.cpp
index 383a66f..49352ae 100644
--- a/src/OpenGL/libGL/ResourceManager.cpp
+++ b/src/OpenGL/libGL/ResourceManager.cpp
@@ -103,7 +103,7 @@
     {
         mShaderMap[handle] = new FragmentShader(this, handle);
     }
-    else UNREACHABLE();
+    else UNREACHABLE(type);
 
     return handle;
 }
@@ -333,7 +333,7 @@
         }
         else
         {
-            UNREACHABLE();
+            UNREACHABLE(type);
             return;
         }
 
diff --git a/src/OpenGL/libGL/Shader.cpp b/src/OpenGL/libGL/Shader.cpp
index bb574a3..ec611cd 100644
--- a/src/OpenGL/libGL/Shader.cpp
+++ b/src/OpenGL/libGL/Shader.cpp
@@ -296,7 +296,7 @@
     {
         return GL_FLOAT_MAT4;
     }
-    else UNREACHABLE();
+    else UNREACHABLE(type);
 
     return GL_NONE;
 }
@@ -322,7 +322,7 @@
           case GL_FLOAT_VEC3: return true;
           case GL_FLOAT_VEC2: return true;
           case GL_FLOAT:      return true;
-          default: UNREACHABLE();
+          default: UNREACHABLE(y.type);
         }
         break;
       case GL_FLOAT_VEC4:
@@ -335,7 +335,7 @@
           case GL_FLOAT_VEC3: return true;
           case GL_FLOAT_VEC2: return true;
           case GL_FLOAT:      return true;
-          default: UNREACHABLE();
+          default: UNREACHABLE(y.type);
         }
         break;
       case GL_FLOAT_MAT3:
@@ -348,7 +348,7 @@
           case GL_FLOAT_VEC3: return true;
           case GL_FLOAT_VEC2: return true;
           case GL_FLOAT:      return true;
-          default: UNREACHABLE();
+          default: UNREACHABLE(y.type);
         }
         break;
       case GL_FLOAT_VEC3:
@@ -361,7 +361,7 @@
           case GL_FLOAT_VEC3: return true;
           case GL_FLOAT_VEC2: return true;
           case GL_FLOAT:      return true;
-          default: UNREACHABLE();
+          default: UNREACHABLE(y.type);
         }
         break;
       case GL_FLOAT_VEC2:
@@ -374,11 +374,11 @@
           case GL_FLOAT_VEC3: return false;
           case GL_FLOAT_VEC2: return true;
           case GL_FLOAT:      return true;
-          default: UNREACHABLE();
+          default: UNREACHABLE(y.type);
         }
         break;
       case GL_FLOAT: return false;
-      default: UNREACHABLE();
+      default: UNREACHABLE(x.type);
     }
 
     return false;
diff --git a/src/OpenGL/libGL/Texture.cpp b/src/OpenGL/libGL/Texture.cpp
index 74c1daa..e6b761d 100644
--- a/src/OpenGL/libGL/Texture.cpp
+++ b/src/OpenGL/libGL/Texture.cpp
@@ -263,7 +263,7 @@
     case GL_NEAREST_MIPMAP_LINEAR:

     case GL_LINEAR_MIPMAP_LINEAR:

         return true;

-    default: UNREACHABLE();

+    default: UNREACHABLE(mMinFilter);

     }

 

 	return false;

diff --git a/src/OpenGL/libGL/VertexDataManager.cpp b/src/OpenGL/libGL/VertexDataManager.cpp
index 1c8501c..f322487 100644
--- a/src/OpenGL/libGL/VertexDataManager.cpp
+++ b/src/OpenGL/libGL/VertexDataManager.cpp
@@ -181,7 +181,7 @@
 				case GL_UNSIGNED_SHORT: translated[i].type = sw::STREAMTYPE_USHORT; break;

 				case GL_FIXED:          translated[i].type = sw::STREAMTYPE_FIXED;  break;

 				case GL_FLOAT:          translated[i].type = sw::STREAMTYPE_FLOAT;  break;

-				default: UNREACHABLE(); translated[i].type = sw::STREAMTYPE_FLOAT;  break;

+				default: UNREACHABLE(attribs[i].mType); translated[i].type = sw::STREAMTYPE_FLOAT;  break;

 				}

 

 				translated[i].count = attribs[i].mSize;

diff --git a/src/OpenGL/libGL/libGL.cpp b/src/OpenGL/libGL/libGL.cpp
index c33294a..98101fc 100644
--- a/src/OpenGL/libGL/libGL.cpp
+++ b/src/OpenGL/libGL/libGL.cpp
@@ -897,7 +897,7 @@
 			case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:

 				texture->setCompressedImage(target, level, internalformat, width, height, imageSize, data);

 				break;

-			default: UNREACHABLE();

+			default: UNREACHABLE(target);

 			}

 		}

 	}

@@ -984,10 +984,7 @@
 				texture->subImageCompressed(target, level, xoffset, yoffset, width, height, format, imageSize, data);

 			}

 		}

-		else

-		{

-			UNREACHABLE();

-		}

+		else UNREACHABLE(target);

 	}

 }

 

@@ -1134,7 +1131,7 @@
 

 			texture->copyImage(target, level, internalformat, x, y, width, height, framebuffer);

 		}

-		else UNREACHABLE();

+		else UNREACHABLE(target);

 	}

 }

 

@@ -1200,7 +1197,7 @@
 		{

 			texture = context->getTextureCubeMap();

 		}

-		else UNREACHABLE();

+		else UNREACHABLE(target);

 

 		if(!validateSubImageParams(false, width, height, xoffset, yoffset, target, level, GL_NONE, texture))

 		{

@@ -2610,7 +2607,7 @@
 		{

 			attachmentObjectType = GL_TEXTURE;

 		}

-		else UNREACHABLE();

+		else UNREACHABLE(attachmentType);

 

 		switch(pname)

 		{

@@ -4646,10 +4643,7 @@
 				texture->subImage(target, level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);

 			}

 		}

-		else

-		{

-			UNREACHABLE();

-		}

+		else UNREACHABLE(target);

 	}

 }

 

@@ -5625,7 +5619,7 @@
 			case GL_UNSIGNED_INT: context->callList(((unsigned int*)lists)[i]); break;

 			default:

 				UNIMPLEMENTED();

-				UNREACHABLE();

+				UNREACHABLE(type);

 			}

 		}

 	}

@@ -7669,7 +7663,7 @@
 		break;

 	default:

 		UNIMPLEMENTED();

-		UNREACHABLE();

+		UNREACHABLE(texture);

 	}

 

 	gl::Context *context = gl::getContext();

diff --git a/src/OpenGL/libGL/main.cpp b/src/OpenGL/libGL/main.cpp
index 4a09aa5..0c7eabe 100644
--- a/src/OpenGL/libGL/main.cpp
+++ b/src/OpenGL/libGL/main.cpp
@@ -279,7 +279,7 @@
             context->recordInvalidFramebufferOperation();

             TRACE("\t! Error generated: invalid framebuffer operation\n");

             break;

-        default: UNREACHABLE();

+        default: UNREACHABLE(errorCode);

         }

     }

 }

diff --git a/src/OpenGL/libGL/utilities.cpp b/src/OpenGL/libGL/utilities.cpp
index b39d8ba..42ae5aa 100644
--- a/src/OpenGL/libGL/utilities.cpp
+++ b/src/OpenGL/libGL/utilities.cpp
@@ -50,7 +50,7 @@
 		case GL_FLOAT_MAT4:

 			return 16;

 		default:

-			UNREACHABLE();

+			UNREACHABLE(type);

 		}

 

 		return 0;

@@ -81,7 +81,7 @@
 		case GL_INT_VEC4:

 			return GL_INT;

 		default:

-			UNREACHABLE();

+			UNREACHABLE(type);

 		}

 

 		return GL_NONE;

@@ -127,7 +127,7 @@
 		case GL_FLOAT_MAT4:

 			return 4;

 		default:

-			UNREACHABLE();

+			UNREACHABLE(type);

 		}

 

 		return 0;

@@ -159,7 +159,7 @@
 		case GL_FLOAT_MAT4:

 			return 4;

 		default:

-			UNREACHABLE();

+			UNREACHABLE(type);

 		}

 

 		return 0;

@@ -247,7 +247,7 @@
 			case GL_RGB:             return sizeof(unsigned char) * 3;

 			case GL_RGBA:            return sizeof(unsigned char) * 4;

 			case GL_BGRA_EXT:        return sizeof(unsigned char) * 4;

-			default: UNREACHABLE();

+			default: UNREACHABLE(format);

 			}

 			break;

 		case GL_UNSIGNED_SHORT_4_4_4_4:

@@ -267,7 +267,7 @@
 			case GL_LUMINANCE_ALPHA: return sizeof(float) * 2;

 			case GL_RGB:             return sizeof(float) * 3;

 			case GL_RGBA:            return sizeof(float) * 4;

-			default: UNREACHABLE();

+			default: UNREACHABLE(format);

 			}

 			break;

 		case GL_HALF_FLOAT:

@@ -278,10 +278,10 @@
 			case GL_LUMINANCE_ALPHA: return sizeof(unsigned short) * 2;

 			case GL_RGB:             return sizeof(unsigned short) * 3;

 			case GL_RGBA:            return sizeof(unsigned short) * 4;

-			default: UNREACHABLE();

+			default: UNREACHABLE(format);

 			}

 			break;

-		default: UNREACHABLE();

+		default: UNREACHABLE(type);

 		}

 

 		return 0;

@@ -303,7 +303,7 @@
 		case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: return 3;

 		case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: return 4;

 		case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: return 5;

-		default: UNREACHABLE(); return 0;

+		default: UNREACHABLE(cubeFace); return 0;

 		}

 	}

 

@@ -440,7 +440,7 @@
 		case GL_GREATER:  return sw::DEPTH_GREATER;

 		case GL_GEQUAL:   return sw::DEPTH_GREATEREQUAL;

 		case GL_NOTEQUAL: return sw::DEPTH_NOTEQUAL;

-		default: UNREACHABLE();

+		default: UNREACHABLE(comparison);

 		}

 

 		return sw::DEPTH_ALWAYS;

@@ -458,7 +458,7 @@
 		case GL_GREATER:  return sw::STENCIL_GREATER;

 		case GL_GEQUAL:   return sw::STENCIL_GREATEREQUAL;

 		case GL_NOTEQUAL: return sw::STENCIL_NOTEQUAL;

-		default: UNREACHABLE();

+		default: UNREACHABLE(comparison);

 		}

 

 		return sw::STENCIL_ALWAYS;

@@ -488,7 +488,7 @@
 		case GL_CONSTANT_ALPHA:           return sw::BLEND_CONSTANTALPHA;

 		case GL_ONE_MINUS_CONSTANT_ALPHA: return sw::BLEND_INVCONSTANTALPHA;

 		case GL_SRC_ALPHA_SATURATE:       return sw::BLEND_SRCALPHASAT;

-		default: UNREACHABLE();

+		default: UNREACHABLE(blend);

 		}

 

 		return sw::BLEND_ZERO;

@@ -503,7 +503,7 @@
 		case GL_FUNC_REVERSE_SUBTRACT: return sw::BLENDOP_INVSUB;

 		case GL_MIN_EXT:               return sw::BLENDOP_MIN;

 		case GL_MAX_EXT:               return sw::BLENDOP_MAX;

-		default: UNREACHABLE();

+		default: UNREACHABLE(blendOp);

 		}

 

 		return sw::BLENDOP_ADD;

@@ -521,7 +521,7 @@
 		case GL_INVERT:    return sw::OPERATION_INVERT;

 		case GL_INCR_WRAP: return sw::OPERATION_INCR;

 		case GL_DECR_WRAP: return sw::OPERATION_DECR;

-		default: UNREACHABLE();

+		default: UNREACHABLE(stencilOp);

 		}

 

 		return sw::OPERATION_KEEP;

@@ -535,7 +535,7 @@
 		case GL_REPEAT:            return sw::ADDRESSING_WRAP;

 		case GL_CLAMP_TO_EDGE:     return sw::ADDRESSING_CLAMP;

 		case GL_MIRRORED_REPEAT:   return sw::ADDRESSING_MIRROR;

-		default: UNREACHABLE();

+		default: UNREACHABLE(wrap);

 		}

 

 		return sw::ADDRESSING_WRAP;

@@ -551,7 +551,7 @@
 			return (frontFace == GL_CCW ? sw::CULL_COUNTERCLOCKWISE : sw::CULL_CLOCKWISE);

 		case GL_FRONT_AND_BACK:

 			return sw::CULL_NONE;   // culling will be handled during draw

-		default: UNREACHABLE();

+		default: UNREACHABLE(cullFace);

 		}

 

 		return sw::CULL_COUNTERCLOCKWISE;

@@ -571,7 +571,7 @@
 		{

 		case GL_NEAREST: return sw::FILTER_POINT;

 		case GL_LINEAR:  return sw::FILTER_LINEAR;

-		default: UNREACHABLE();

+		default: UNREACHABLE(magFilter);

 		}

 

 		return sw::FILTER_POINT;

@@ -608,7 +608,7 @@
 		default:

 			*minFilter = sw::FILTER_POINT;

 			*mipFilter = sw::MIPMAP_NONE;

-			UNREACHABLE();

+			UNREACHABLE(texFilter);

 		}

 

 		if(maxAnisotropy > 1.0f)

@@ -673,7 +673,7 @@
         case GL_DEPTH_COMPONENT24:

 		case GL_STENCIL_INDEX8:       

 		case GL_DEPTH24_STENCIL8_EXT: return sw::FORMAT_D24S8;

-		default: UNREACHABLE();       return sw::FORMAT_A8R8G8B8;

+		default: UNREACHABLE(format); return sw::FORMAT_A8R8G8B8;

 		}

 	}

 }

@@ -821,7 +821,7 @@
 		case sw::FORMAT_R5G6B5:   return GL_RGB565;

 		case sw::FORMAT_X8R8G8B8: return GL_RGB8_EXT;

 		default:

-			UNREACHABLE();

+			UNREACHABLE(format);

 		}

 

 		return GL_RGBA4;

@@ -839,7 +839,7 @@
 		case sw::FORMAT_D24S8:

 			return GL_DEPTH24_STENCIL8_EXT;

 		default:

-			UNREACHABLE();

+			UNREACHABLE(format);

 		}

 

 		return GL_DEPTH24_STENCIL8_EXT;