Remove dead ASTC code for GLES

Surface::decodeASTC() was empty, and ENABLE_ASTC hard-coded to 0, so we
never actually supported ASTC for OpenGL ES.

We won't need it in the future since this legacy code is deprecated and
set to be replaced by SwANGLE (which supports ASTC LDR at the moment).
Also note ASTC LDR doesn't become mandatory until OpenGL ES 3.2, and
this legacy code lacks compute shaders to even support ES 3.1.

Bug: b/147536183
Change-Id: I61fe83214cfebe9f83bd49334474e095631af3e7
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/46350
Presubmit-Ready: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Main/Config.hpp b/src/Main/Config.hpp
index 46ba961..9eb7e11 100644
--- a/src/Main/Config.hpp
+++ b/src/Main/Config.hpp
@@ -20,8 +20,6 @@
 #define PERF_HUD 0       // Display time spent on vertex, setup and pixel processing for each thread
 #define PERF_PROFILE 0   // Profile various pipeline stages and display the timing in SwiftConfig
 
-#define ASTC_SUPPORT 0
-
 // Worker thread count when not set by SwiftConfig
 // 0 = process affinity count (recommended)
 // 1 = rendering on main thread (no worker threads), useful for debugging
diff --git a/src/OpenGL/common/Image.cpp b/src/OpenGL/common/Image.cpp
index 2052041..0392450 100644
--- a/src/OpenGL/common/Image.cpp
+++ b/src/OpenGL/common/Image.cpp
@@ -375,34 +375,6 @@
 		case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: return sw::FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2;
 		case GL_COMPRESSED_RGBA8_ETC2_EAC:        return sw::FORMAT_RGBA8_ETC2_EAC;
 		case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: return sw::FORMAT_SRGB8_ALPHA8_ETC2_EAC;
-		case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:   return sw::FORMAT_RGBA_ASTC_4x4_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:   return sw::FORMAT_RGBA_ASTC_5x4_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:   return sw::FORMAT_RGBA_ASTC_5x5_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:   return sw::FORMAT_RGBA_ASTC_6x5_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:   return sw::FORMAT_RGBA_ASTC_6x6_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:   return sw::FORMAT_RGBA_ASTC_8x5_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:   return sw::FORMAT_RGBA_ASTC_8x6_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:   return sw::FORMAT_RGBA_ASTC_8x8_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:  return sw::FORMAT_RGBA_ASTC_10x5_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:  return sw::FORMAT_RGBA_ASTC_10x6_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:  return sw::FORMAT_RGBA_ASTC_10x8_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_10x10_KHR: return sw::FORMAT_RGBA_ASTC_10x10_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_12x10_KHR: return sw::FORMAT_RGBA_ASTC_12x10_KHR;
-		case GL_COMPRESSED_RGBA_ASTC_12x12_KHR: return sw::FORMAT_RGBA_ASTC_12x12_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:   return sw::FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:   return sw::FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:   return sw::FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:   return sw::FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:   return sw::FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:   return sw::FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:   return sw::FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:   return sw::FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:  return sw::FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:  return sw::FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:  return sw::FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR: return sw::FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR: return sw::FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR;
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR: return sw::FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR;
 		case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:    return sw::FORMAT_DXT1;
 		case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:   return sw::FORMAT_DXT1;
 		case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: return sw::FORMAT_DXT3;
@@ -584,48 +556,7 @@
 		case GL_COMPRESSED_SIGNED_RG11_EAC:
 		case GL_COMPRESSED_RGBA8_ETC2_EAC:
 		case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
-		case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
 			return 16 * GetNumCompressedBlocks(width, height, 4, 4);
-		case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 5, 4);
-		case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 5, 5);
-		case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 6, 5);
-		case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 6, 6);
-		case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 8, 5);
-		case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 8, 6);
-		case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 8, 8);
-		case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 10, 5);
-		case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 10, 6);
-		case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 10, 8);
-		case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 10, 10);
-		case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 12, 10);
-		case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
-			return 16 * GetNumCompressedBlocks(width, height, 12, 12);
 		default:
 			UNREACHABLE(format);
 			return 0;
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.hpp b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
index 325578e..b2ab08d 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.hpp
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
@@ -20,11 +20,11 @@
 #include <EGL/egl.h>
 
 #include "Common/SharedLibrary.hpp"
+#include "Renderer/Surface.hpp"
 
 namespace sw
 {
 class FrameBuffer;
-enum Format : unsigned char;
 }
 
 namespace egl
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index 76b20ec..2ad6b02 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -4532,10 +4532,6 @@
 		"GL_EXT_texture_filter_anisotropic",
 		"GL_EXT_texture_format_BGRA8888",
 		"GL_EXT_texture_rg",
-#if (ASTC_SUPPORT)
-		"GL_KHR_texture_compression_astc_hdr",
-		"GL_KHR_texture_compression_astc_ldr",
-#endif
 		"GL_ARB_texture_rectangle",
 		"GL_ANGLE_framebuffer_blit",
 		"GL_ANGLE_framebuffer_multisample",
diff --git a/src/OpenGL/libGLESv2/Context.h b/src/OpenGL/libGLESv2/Context.h
index 5eb28b5..1bb5e49 100644
--- a/src/OpenGL/libGLESv2/Context.h
+++ b/src/OpenGL/libGLESv2/Context.h
@@ -126,36 +126,6 @@
 	GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
 	GL_COMPRESSED_RGBA8_ETC2_EAC,
 	GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
-#if (ASTC_SUPPORT)
-	GL_COMPRESSED_RGBA_ASTC_4x4_KHR,
-	GL_COMPRESSED_RGBA_ASTC_5x4_KHR,
-	GL_COMPRESSED_RGBA_ASTC_5x5_KHR,
-	GL_COMPRESSED_RGBA_ASTC_6x5_KHR,
-	GL_COMPRESSED_RGBA_ASTC_6x6_KHR,
-	GL_COMPRESSED_RGBA_ASTC_8x5_KHR,
-	GL_COMPRESSED_RGBA_ASTC_8x6_KHR,
-	GL_COMPRESSED_RGBA_ASTC_8x8_KHR,
-	GL_COMPRESSED_RGBA_ASTC_10x5_KHR,
-	GL_COMPRESSED_RGBA_ASTC_10x6_KHR,
-	GL_COMPRESSED_RGBA_ASTC_10x8_KHR,
-	GL_COMPRESSED_RGBA_ASTC_10x10_KHR,
-	GL_COMPRESSED_RGBA_ASTC_12x10_KHR,
-	GL_COMPRESSED_RGBA_ASTC_12x12_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
-	GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
-#endif // ASTC_SUPPORT
 #endif // GL_ES_VERSION_3_0
 };
 
diff --git a/src/OpenGL/libGLESv2/libGLESv2.hpp b/src/OpenGL/libGLESv2/libGLESv2.hpp
index e8f956e..80b7507 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.hpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.hpp
@@ -24,7 +24,7 @@
 namespace sw
 {
 class FrameBuffer;
-enum Format : unsigned char;
+enum Format ENUM_UNDERLYING_TYPE_UNSIGNED_INT;
 }
 
 namespace egl
diff --git a/src/OpenGL/libGLESv2/utilities.cpp b/src/OpenGL/libGLESv2/utilities.cpp
index c423b46..1ed35dc 100644
--- a/src/OpenGL/libGLESv2/utilities.cpp
+++ b/src/OpenGL/libGLESv2/utilities.cpp
@@ -343,35 +343,6 @@
 		case GL_COMPRESSED_RGBA8_ETC2_EAC:
 		case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
 			return true;
-		case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:
-		case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
-		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
-			return ASTC_SUPPORT;
 		default:
 			return false;
 		}
diff --git a/src/Renderer/Surface.cpp b/src/Renderer/Surface.cpp
index ca4771f..8ce207a 100644
--- a/src/Renderer/Surface.cpp
+++ b/src/Renderer/Surface.cpp
@@ -1164,48 +1164,7 @@
 			case FORMAT_SIGNED_RG11_EAC:
 			case FORMAT_RGBA8_ETC2_EAC:
 			case FORMAT_SRGB8_ALPHA8_ETC2_EAC:
-			case FORMAT_RGBA_ASTC_4x4_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
 				return (unsigned char*)buffer + 16 * (x / 4) + (y / 4) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_5x4_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
-				return (unsigned char*)buffer + 16 * (x / 5) + (y / 4) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_5x5_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
-				return (unsigned char*)buffer + 16 * (x / 5) + (y / 5) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_6x5_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
-				return (unsigned char*)buffer + 16 * (x / 6) + (y / 5) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_6x6_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
-				return (unsigned char*)buffer + 16 * (x / 6) + (y / 6) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_8x5_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
-				return (unsigned char*)buffer + 16 * (x / 8) + (y / 5) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_8x6_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
-				return (unsigned char*)buffer + 16 * (x / 8) + (y / 6) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_8x8_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
-				return (unsigned char*)buffer + 16 * (x / 8) + (y / 8) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_10x5_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
-				return (unsigned char*)buffer + 16 * (x / 10) + (y / 5) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_10x6_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
-				return (unsigned char*)buffer + 16 * (x / 10) + (y / 6) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_10x8_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
-				return (unsigned char*)buffer + 16 * (x / 10) + (y / 8) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_10x10_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
-				return (unsigned char*)buffer + 16 * (x / 10) + (y / 10) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_12x10_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
-				return (unsigned char*)buffer + 16 * (x / 12) + (y / 10) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_12x12_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
-				return (unsigned char*)buffer + 16 * (x / 12) + (y / 12) * pitchB + z * sliceB;
 			case FORMAT_DXT3:
 			case FORMAT_DXT5:
 			case FORMAT_ATI2:
@@ -1630,34 +1589,6 @@
 		case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:	return 2;
 		case FORMAT_RGBA8_ETC2_EAC:			return 4;
 		case FORMAT_SRGB8_ALPHA8_ETC2_EAC:	return 4;
-		case FORMAT_RGBA_ASTC_4x4_KHR:
-		case FORMAT_RGBA_ASTC_5x4_KHR:
-		case FORMAT_RGBA_ASTC_5x5_KHR:
-		case FORMAT_RGBA_ASTC_6x5_KHR:
-		case FORMAT_RGBA_ASTC_6x6_KHR:
-		case FORMAT_RGBA_ASTC_8x5_KHR:
-		case FORMAT_RGBA_ASTC_8x6_KHR:
-		case FORMAT_RGBA_ASTC_8x8_KHR:
-		case FORMAT_RGBA_ASTC_10x5_KHR:
-		case FORMAT_RGBA_ASTC_10x6_KHR:
-		case FORMAT_RGBA_ASTC_10x8_KHR:
-		case FORMAT_RGBA_ASTC_10x10_KHR:
-		case FORMAT_RGBA_ASTC_12x10_KHR:
-		case FORMAT_RGBA_ASTC_12x12_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR: return 0; // FIXME
 		// Bumpmap formats
 		case FORMAT_V8U8:				return 2;
 		case FORMAT_L6V5U5:				return 2;
@@ -1744,40 +1675,7 @@
 		case FORMAT_SIGNED_RG11_EAC:
 		case FORMAT_RGBA8_ETC2_EAC:
 		case FORMAT_SRGB8_ALPHA8_ETC2_EAC:
-		case FORMAT_RGBA_ASTC_4x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
 			return 16 * ((width + 3) / 4);    // 128 bit per 4x4 block, computed per 4 rows
-		case FORMAT_RGBA_ASTC_5x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
-		case FORMAT_RGBA_ASTC_5x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
-			return 16 * ((width + 4) / 5);
-		case FORMAT_RGBA_ASTC_6x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
-		case FORMAT_RGBA_ASTC_6x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
-			return 16 * ((width + 5) / 6);
-		case FORMAT_RGBA_ASTC_8x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
-		case FORMAT_RGBA_ASTC_8x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
-		case FORMAT_RGBA_ASTC_8x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
-			return 16 * ((width + 7) / 8);
-		case FORMAT_RGBA_ASTC_10x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
-		case FORMAT_RGBA_ASTC_10x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
-		case FORMAT_RGBA_ASTC_10x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
-		case FORMAT_RGBA_ASTC_10x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
-			return 16 * ((width + 9) / 10);
-		case FORMAT_RGBA_ASTC_12x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
-		case FORMAT_RGBA_ASTC_12x12_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
-			return 16 * ((width + 11) / 12);
 		case FORMAT_DXT3:
 		case FORMAT_DXT5:
 			return 16 * ((width + 3) / 4);   // 128 bit per 4x4 block, computed per 4 rows
@@ -1827,40 +1725,7 @@
 		case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
 		case FORMAT_RGBA8_ETC2_EAC:
 		case FORMAT_SRGB8_ALPHA8_ETC2_EAC:
-		case FORMAT_RGBA_ASTC_4x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
-		case FORMAT_RGBA_ASTC_5x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
 			return pitchB(width, border, format, target) * ((height + 3) / 4);   // Pitch computed per 4 rows
-		case FORMAT_RGBA_ASTC_5x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
-		case FORMAT_RGBA_ASTC_6x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
-		case FORMAT_RGBA_ASTC_8x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
-		case FORMAT_RGBA_ASTC_10x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
-			return pitchB(width, border, format, target) * ((height + 4) / 5);   // Pitch computed per 5 rows
-		case FORMAT_RGBA_ASTC_6x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
-		case FORMAT_RGBA_ASTC_8x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
-		case FORMAT_RGBA_ASTC_10x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
-			return pitchB(width, border, format, target) * ((height + 5) / 6);   // Pitch computed per 6 rows
-		case FORMAT_RGBA_ASTC_8x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
-		case FORMAT_RGBA_ASTC_10x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
-			return pitchB(width, border, format, target) * ((height + 7) / 8);   // Pitch computed per 8 rows
-		case FORMAT_RGBA_ASTC_10x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
-		case FORMAT_RGBA_ASTC_12x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
-			return pitchB(width, border, format, target) * ((height + 9) / 10);   // Pitch computed per 10 rows
-		case FORMAT_RGBA_ASTC_12x12_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
-			return pitchB(width, border, format, target) * ((height + 11) / 12);   // Pitch computed per 12 rows
 		case FORMAT_ATI1:
 		case FORMAT_ATI2:
 			return pitchB(width, border, format, target) * align<4>(height);   // Pitch computed per row
@@ -1909,34 +1774,6 @@
 			case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: decodeETC2(destination, source, 1, true);  break; // FIXME: Check destination format
 			case FORMAT_RGBA8_ETC2_EAC:                 decodeETC2(destination, source, 8, false); break; // FIXME: Check destination format
 			case FORMAT_SRGB8_ALPHA8_ETC2_EAC:          decodeETC2(destination, source, 8, true);  break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_4x4_KHR:           decodeASTC(destination, source, 4,  4,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_5x4_KHR:           decodeASTC(destination, source, 5,  4,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_5x5_KHR:           decodeASTC(destination, source, 5,  5,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_6x5_KHR:           decodeASTC(destination, source, 6,  5,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_6x6_KHR:           decodeASTC(destination, source, 6,  6,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_8x5_KHR:           decodeASTC(destination, source, 8,  5,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_8x6_KHR:           decodeASTC(destination, source, 8,  6,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_8x8_KHR:           decodeASTC(destination, source, 8,  8,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_10x5_KHR:          decodeASTC(destination, source, 10, 5,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_10x6_KHR:          decodeASTC(destination, source, 10, 6,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_10x8_KHR:          decodeASTC(destination, source, 10, 8,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_10x10_KHR:         decodeASTC(destination, source, 10, 10, 1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_12x10_KHR:         decodeASTC(destination, source, 12, 10, 1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_12x12_KHR:         decodeASTC(destination, source, 12, 12, 1, false); break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:   decodeASTC(destination, source, 4,  4,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:   decodeASTC(destination, source, 5,  4,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:   decodeASTC(destination, source, 5,  5,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:   decodeASTC(destination, source, 6,  5,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:   decodeASTC(destination, source, 6,  6,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:   decodeASTC(destination, source, 8,  5,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:   decodeASTC(destination, source, 8,  6,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:   decodeASTC(destination, source, 8,  8,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:  decodeASTC(destination, source, 10, 5,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:  decodeASTC(destination, source, 10, 6,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:  decodeASTC(destination, source, 10, 8,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR: decodeASTC(destination, source, 10, 10, 1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR: decodeASTC(destination, source, 12, 10, 1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR: decodeASTC(destination, source, 12, 12, 1, true);  break; // FIXME: Check destination format
 			default:				genericUpdate(destination, source);		break;
 			}
 		}
@@ -2656,10 +2493,6 @@
 		internal.unlockRect();
 	}
 
-	void Surface::decodeASTC(Buffer &internal, Buffer &external, int xBlockSize, int yBlockSize, int zBlockSize, bool isSRGB)
-	{
-	}
-
 	size_t Surface::size(int width, int height, int depth, int border, int samples, Format format)
 	{
 		samples = max(1, samples);
@@ -3060,34 +2893,6 @@
 		case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
 		case FORMAT_RGBA8_ETC2_EAC:
 		case FORMAT_SRGB8_ALPHA8_ETC2_EAC:
-		case FORMAT_RGBA_ASTC_4x4_KHR:
-		case FORMAT_RGBA_ASTC_5x4_KHR:
-		case FORMAT_RGBA_ASTC_5x5_KHR:
-		case FORMAT_RGBA_ASTC_6x5_KHR:
-		case FORMAT_RGBA_ASTC_6x6_KHR:
-		case FORMAT_RGBA_ASTC_8x5_KHR:
-		case FORMAT_RGBA_ASTC_8x6_KHR:
-		case FORMAT_RGBA_ASTC_8x8_KHR:
-		case FORMAT_RGBA_ASTC_10x5_KHR:
-		case FORMAT_RGBA_ASTC_10x6_KHR:
-		case FORMAT_RGBA_ASTC_10x8_KHR:
-		case FORMAT_RGBA_ASTC_10x10_KHR:
-		case FORMAT_RGBA_ASTC_12x10_KHR:
-		case FORMAT_RGBA_ASTC_12x12_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
 			return true;
 		default:
 			return false;
@@ -3870,37 +3675,7 @@
 		case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
 		case FORMAT_RGBA8_ETC2_EAC:
 		case FORMAT_SRGB8_ALPHA8_ETC2_EAC:
-		case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
 			return FORMAT_A8R8G8B8;
-		case FORMAT_RGBA_ASTC_4x4_KHR:
-		case FORMAT_RGBA_ASTC_5x4_KHR:
-		case FORMAT_RGBA_ASTC_5x5_KHR:
-		case FORMAT_RGBA_ASTC_6x5_KHR:
-		case FORMAT_RGBA_ASTC_6x6_KHR:
-		case FORMAT_RGBA_ASTC_8x5_KHR:
-		case FORMAT_RGBA_ASTC_8x6_KHR:
-		case FORMAT_RGBA_ASTC_8x8_KHR:
-		case FORMAT_RGBA_ASTC_10x5_KHR:
-		case FORMAT_RGBA_ASTC_10x6_KHR:
-		case FORMAT_RGBA_ASTC_10x8_KHR:
-		case FORMAT_RGBA_ASTC_10x10_KHR:
-		case FORMAT_RGBA_ASTC_12x10_KHR:
-		case FORMAT_RGBA_ASTC_12x12_KHR:
-			// ASTC supports HDR, so a floating point format is required to represent it properly
-			return FORMAT_A32B32G32R32F; // FIXME: 16FP is probably sufficient, but it's currently unsupported
 		case FORMAT_ATI1:
 			return FORMAT_R8;
 		case FORMAT_R11_EAC:
diff --git a/src/Renderer/Surface.hpp b/src/Renderer/Surface.hpp
index 10c5364..d6d001c 100644
--- a/src/Renderer/Surface.hpp
+++ b/src/Renderer/Surface.hpp
@@ -60,7 +60,7 @@
 	typedef SliceRectT<int> SliceRect;
 	typedef SliceRectT<float> SliceRectF;
 
-	enum Format : unsigned char
+	enum Format ENUM_UNDERLYING_TYPE_UNSIGNED_INT
 	{
 		FORMAT_NULL,
 
@@ -137,34 +137,6 @@
 		FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
 		FORMAT_RGBA8_ETC2_EAC,
 		FORMAT_SRGB8_ALPHA8_ETC2_EAC,
-		FORMAT_RGBA_ASTC_4x4_KHR,
-		FORMAT_RGBA_ASTC_5x4_KHR,
-		FORMAT_RGBA_ASTC_5x5_KHR,
-		FORMAT_RGBA_ASTC_6x5_KHR,
-		FORMAT_RGBA_ASTC_6x6_KHR,
-		FORMAT_RGBA_ASTC_8x5_KHR,
-		FORMAT_RGBA_ASTC_8x6_KHR,
-		FORMAT_RGBA_ASTC_8x8_KHR,
-		FORMAT_RGBA_ASTC_10x5_KHR,
-		FORMAT_RGBA_ASTC_10x6_KHR,
-		FORMAT_RGBA_ASTC_10x8_KHR,
-		FORMAT_RGBA_ASTC_10x10_KHR,
-		FORMAT_RGBA_ASTC_12x10_KHR,
-		FORMAT_RGBA_ASTC_12x12_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR,
 		// Floating-point formats
 		FORMAT_A16F,
 		FORMAT_R16F,
@@ -479,7 +451,6 @@
 		static void decodeATI2(Buffer &internal, Buffer &external);
 		static void decodeEAC(Buffer &internal, Buffer &external, int nbChannels, bool isSigned);
 		static void decodeETC2(Buffer &internal, Buffer &external, int nbAlphaBits, bool isSRGB);
-		static void decodeASTC(Buffer &internal, Buffer &external, int xSize, int ySize, int zSize, bool isSRGB);
 
 		static void update(Buffer &destination, Buffer &source);
 		static void genericUpdate(Buffer &destination, Buffer &source);