diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+3.0.2.0
+-------
+* Added support for S3_s3tc, EXT_texture_compression_s3tc, ARB_texture_float, and EXT_packed_depth_stencil extensions.
+
 3.0.1.0
 -------
 * Added `Uniform` instances for `GLmatrix`, `Vertex1`, `Vector1`, `Vector2`, `Vector3`, and `Vector4`.
diff --git a/OpenGL.cabal b/OpenGL.cabal
--- a/OpenGL.cabal
+++ b/OpenGL.cabal
@@ -1,5 +1,5 @@
 name: OpenGL
-version: 3.0.1.0
+version: 3.0.2.0
 synopsis: A binding for the OpenGL graphics system
 description:
   A Haskell binding for the OpenGL graphics system (GL, version 4.5) and its
@@ -23,8 +23,9 @@
 tested-with:
   GHC == 7.8.4
   GHC == 7.10.3
-  GHC == 8.0.1
-  GHC == 8.1
+  GHC == 8.0.2
+  GHC == 8.2.1
+  GHC == 8.3
 cabal-version: >= 1.10
 extra-source-files:
    CHANGELOG.md
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,1 +1,4 @@
-[![Hackage](https://img.shields.io/hackage/v/OpenGL.svg)](https://hackage.haskell.org/package/OpenGL) [![Build Status](https://travis-ci.org/haskell-opengl/OpenGL.png?branch=master)](https://travis-ci.org/haskell-opengl/OpenGL)
+[![Hackage](https://img.shields.io/hackage/v/OpenGL.svg)](https://hackage.haskell.org/package/OpenGL)
+[![Stackage LTS](https://www.stackage.org/package/OpenGL/badge/lts)](https://www.stackage.org/lts/package/OpenGL)
+[![Stackage nightly](https://www.stackage.org/package/OpenGL/badge/nightly)](https://www.stackage.org/nightly/package/OpenGL)
+[![Build Status](https://img.shields.io/travis/haskell-opengl/OpenGL/master.svg)](https://travis-ci.org/haskell-opengl/OpenGL)
diff --git a/src/Graphics/Rendering/OpenGL/GL/DataType.hs b/src/Graphics/Rendering/OpenGL/GL/DataType.hs
--- a/src/Graphics/Rendering/OpenGL/GL/DataType.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/DataType.hs
@@ -15,7 +15,7 @@
 
 module Graphics.Rendering.OpenGL.GL.DataType (
    DataType(..), marshalDataType, unmarshalDataType,
-   DataTypeType(..), marshalDataTypeType, unmarshalDataTypeType
+   DataRepresentation(..), unmarshalDataRepresentation
 ) where
 
 import Graphics.GL
@@ -126,29 +126,20 @@
    | x == GL_4_BYTES = FourBytes
    | otherwise = error ("unmarshalDataType: illegal value " ++ show x)
 
-data DataTypeType
-   = TNone
-   | TSignedNormalized
-   | TUnsignedNormalized
-   | TFloat
-   | TInt
-   | TUnsignedInt
-
-marshalDataTypeType :: DataTypeType -> GLenum
-marshalDataTypeType x = case x of
-   TNone -> GL_NONE
-   TSignedNormalized -> GL_SIGNED_NORMALIZED
-   TUnsignedNormalized -> GL_UNSIGNED_NORMALIZED
-   TFloat -> GL_FLOAT
-   TInt -> GL_INT
-   TUnsignedInt -> GL_UNSIGNED_INT
+data DataRepresentation
+   = SignedNormalizedRepresentation
+   | UnsignedNormalizedRepresentation
+   | FloatRepresentation
+   | IntRepresentation
+   | UnsignedIntRepresentation
+   deriving ( Eq, Ord, Show )
 
-unmarshalDataTypeType :: GLenum -> DataTypeType
-unmarshalDataTypeType x
-   | x == GL_NONE = TNone
-   | x == GL_SIGNED_NORMALIZED = TSignedNormalized
-   | x == GL_UNSIGNED_NORMALIZED = TUnsignedNormalized
-   | x == GL_FLOAT = TFloat
-   | x == GL_INT = TInt
-   | x == GL_UNSIGNED_INT = TUnsignedInt
-   | otherwise = error $ "unmarshalDataTypeType: illegal value " ++ show x
+unmarshalDataRepresentation :: GLenum -> Maybe DataRepresentation
+unmarshalDataRepresentation x
+   | x == GL_SIGNED_NORMALIZED = Just SignedNormalizedRepresentation
+   | x == GL_UNSIGNED_NORMALIZED = Just UnsignedNormalizedRepresentation
+   | x == GL_FLOAT = Just FloatRepresentation
+   | x == GL_INT = Just IntRepresentation
+   | x == GL_UNSIGNED_INT = Just UnsignedIntRepresentation
+   | x == GL_NONE = Nothing
+   | otherwise = error $ "unmarshalDataRepresentation: illegal value " ++ show x
diff --git a/src/Graphics/Rendering/OpenGL/GL/Texturing/PixelInternalFormat.hs b/src/Graphics/Rendering/OpenGL/GL/Texturing/PixelInternalFormat.hs
--- a/src/Graphics/Rendering/OpenGL/GL/Texturing/PixelInternalFormat.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/Texturing/PixelInternalFormat.hs
@@ -133,6 +133,25 @@
    | StencilIndex4
    | StencilIndex8
    | StencilIndex16
+   | RGBS3TC
+   | RGB4S3TC
+   | RGBAS3TC
+   | RGBA4S3TC
+   | RGBADXT5S3TC
+   | RGBA4DXT5S3TC
+   | CompressedRGBAS3TCDXT1
+   | CompressedRGBAS3TCDXT3
+   | CompressedRGBAS3TCDXT5
+   | CompressedRGBS3TCDXT1
+   | Alpha32F
+   | Intensity32F
+   | Luminance32F
+   | LuminanceAlpha32F
+   | Alpha16F
+   | Intensity16F
+   | Luminance16F
+   | LuminanceAlpha16F
+   | Depth24Stencil8
    deriving ( Eq, Ord, Show )
 
 marshalPixelInternalFormat :: PixelInternalFormat -> GLint
@@ -247,6 +266,25 @@
    StencilIndex4 -> GL_STENCIL_INDEX4
    StencilIndex8 -> GL_STENCIL_INDEX8
    StencilIndex16 -> GL_STENCIL_INDEX16
+   RGBS3TC -> GL_RGB_S3TC
+   RGB4S3TC -> GL_RGB4_S3TC
+   RGBAS3TC -> GL_RGBA_S3TC
+   RGBA4S3TC -> GL_RGBA4_S3TC
+   RGBADXT5S3TC -> GL_RGBA_DXT5_S3TC
+   RGBA4DXT5S3TC -> GL_RGBA4_DXT5_S3TC
+   CompressedRGBAS3TCDXT1 -> GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
+   CompressedRGBAS3TCDXT3 -> GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
+   CompressedRGBAS3TCDXT5 -> GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
+   CompressedRGBS3TCDXT1 -> GL_COMPRESSED_RGB_S3TC_DXT1_EXT
+   Alpha32F -> GL_ALPHA32F_ARB
+   Intensity32F -> GL_INTENSITY32F_ARB
+   Luminance32F -> GL_LUMINANCE32F_ARB
+   LuminanceAlpha32F -> GL_LUMINANCE_ALPHA32F_ARB
+   Alpha16F -> GL_ALPHA16F_ARB
+   Intensity16F -> GL_INTENSITY16F_ARB
+   Luminance16F -> GL_LUMINANCE16F_ARB
+   LuminanceAlpha16F -> GL_LUMINANCE_ALPHA16F_ARB
+   Depth24Stencil8 -> GL_DEPTH24_STENCIL8_EXT
 
 -- *sigh* The OpenGL API is sometimes a bit creative in its usage of types...
 marshalPixelInternalFormat' :: PixelInternalFormat -> GLenum
@@ -359,6 +397,25 @@
    | y == GL_STENCIL_INDEX4 = StencilIndex4
    | y == GL_STENCIL_INDEX8 = StencilIndex8
    | y == GL_STENCIL_INDEX16 = StencilIndex16
+   | y == GL_RGB_S3TC = RGBS3TC
+   | y == GL_RGB4_S3TC = RGB4S3TC
+   | y == GL_RGBA_S3TC = RGBAS3TC
+   | y == GL_RGBA4_S3TC = RGBA4S3TC
+   | y == GL_RGBA_DXT5_S3TC = RGBADXT5S3TC
+   | y == GL_RGBA4_DXT5_S3TC = RGBA4DXT5S3TC
+   | y == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = CompressedRGBAS3TCDXT1
+   | y == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = CompressedRGBAS3TCDXT3
+   | y == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = CompressedRGBAS3TCDXT5
+   | y == GL_COMPRESSED_RGB_S3TC_DXT1_EXT = CompressedRGBS3TCDXT1
+   | y == GL_ALPHA32F_ARB = Alpha32F
+   | y == GL_INTENSITY32F_ARB = Intensity32F
+   | y == GL_LUMINANCE32F_ARB = Luminance32F
+   | y == GL_LUMINANCE_ALPHA32F_ARB = LuminanceAlpha32F
+   | y == GL_ALPHA16F_ARB = Alpha16F
+   | y == GL_INTENSITY16F_ARB = Intensity16F
+   | y == GL_LUMINANCE16F_ARB = Luminance16F
+   | y == GL_LUMINANCE_ALPHA16F_ARB = LuminanceAlpha16F
+   | y == GL_DEPTH24_STENCIL8_EXT = Depth24Stencil8
    -- legacy values
    | y == 1 = Luminance'
    | y == 2 = LuminanceAlpha'
diff --git a/src/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs b/src/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs
--- a/src/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs
@@ -16,12 +16,15 @@
    TextureQuery, textureInternalFormat, textureSize1D, textureSize2D,
    textureSize3D, textureBorder, textureRGBASizes, textureSharedSize,
    textureIntensitySize, textureLuminanceSize, textureIndexSize,
-   textureDepthBits, textureCompressedImageSize, textureProxyOK
+   textureDepthBits, textureCompressedImageSize, textureProxyOK,
+   DataRepresentation(..), textureRGBATypes, textureIntensityType,
+   textureLuminanceType, textureDepthType
 ) where
 
 import Control.Monad
 import Data.StateVar
 import Foreign.Marshal.Utils
+import Graphics.Rendering.OpenGL.GL.DataType
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.GL.PixelRectangles
@@ -50,6 +53,13 @@
    | TextureCompressedImageSize
    | TextureCompressed
    | TextureSharedSize
+   | TextureRedType
+   | TextureGreenType
+   | TextureBlueType
+   | TextureAlphaType
+   | TextureLuminanceType
+   | TextureIntensityType
+   | TextureDepthType
 
 marshalTexLevelParameter :: TexLevelParameter -> GLenum
 marshalTexLevelParameter x = case x of
@@ -69,6 +79,13 @@
    TextureCompressedImageSize -> GL_TEXTURE_COMPRESSED_IMAGE_SIZE
    TextureCompressed -> GL_TEXTURE_COMPRESSED
    TextureSharedSize -> GL_TEXTURE_SHARED_SIZE
+   TextureRedType -> GL_TEXTURE_RED_TYPE_ARB
+   TextureGreenType -> GL_TEXTURE_GREEN_TYPE_ARB
+   TextureBlueType -> GL_TEXTURE_BLUE_TYPE_ARB
+   TextureAlphaType -> GL_TEXTURE_ALPHA_TYPE_ARB
+   TextureLuminanceType -> GL_TEXTURE_LUMINANCE_TYPE_ARB
+   TextureIntensityType -> GL_TEXTURE_INTENSITY_TYPE_ARB
+   TextureDepthType -> GL_TEXTURE_DEPTH_TYPE_ARB
 
 --------------------------------------------------------------------------------
 
@@ -151,6 +168,27 @@
 textureProxyOK t level =
    makeGettableStateVar $
       getTexLevelParameteri unmarshalGLboolean (marshalParameterizedTextureTargetProxy t) level TextureWidth
+
+textureRGBATypes :: QueryableTextureTarget t =>  TextureQuery t (Color4 (Maybe DataRepresentation))
+textureRGBATypes t level =
+   makeGettableStateVar $
+      liftM4 Color4
+             (getDataRepr t level TextureRedType  )
+             (getDataRepr t level TextureGreenType)
+             (getDataRepr t level TextureBlueType )
+             (getDataRepr t level TextureAlphaType)
+
+getDataRepr :: QueryableTextureTarget t => t -> Level -> TexLevelParameter -> IO (Maybe DataRepresentation)
+getDataRepr = getTexLevelParameteriNoProxy (unmarshalDataRepresentation . fromIntegral)
+
+textureIntensityType :: QueryableTextureTarget t => TextureQuery t (Maybe DataRepresentation)
+textureIntensityType t level = makeGettableStateVar $ getDataRepr t level TextureIntensityType
+
+textureLuminanceType :: QueryableTextureTarget t =>  TextureQuery t (Maybe DataRepresentation)
+textureLuminanceType t level = makeGettableStateVar $ getDataRepr t level TextureLuminanceType
+
+textureDepthType :: QueryableTextureTarget t =>  TextureQuery t (Maybe DataRepresentation)
+textureDepthType t level = makeGettableStateVar $ getDataRepr t level TextureDepthType
 
 getTexLevelParameteriNoProxy :: QueryableTextureTarget t => (GLint -> a) -> t -> Level -> TexLevelParameter -> IO a
 getTexLevelParameteriNoProxy f = getTexLevelParameteri f . marshalQueryableTextureTarget
