diff --git a/src/common/version.h b/src/common/version.h
index 69f6c07..399cdc6 100644
--- a/src/common/version.h
+++ b/src/common/version.h
@@ -1,7 +1,7 @@
 #define MAJOR_VERSION 1
 #define MINOR_VERSION 0
 #define BUILD_VERSION 0
-#define BUILD_REVISION 927
+#define BUILD_REVISION 928
 
 #define STRINGIFY(x) #x
 #define MACRO_STRINGIFY(x) STRINGIFY(x)
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 7404b2a..1d4aa2a 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -1996,10 +1996,10 @@
     GLenum format = gl::ExtractFormat(internalformat);
     GLenum type = gl::ExtractType(internalformat);
     D3DFORMAT d3dfmt = ConvertTextureFormatType(format, type);
-    const bool renderable = (mUsage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
+    const bool renderTarget = IsTextureFormatRenderable(d3dfmt) && (mUsage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
 
     delete mTexStorage;
-    mTexStorage = new TextureStorage2D(levels, d3dfmt, width, height, renderable);
+    mTexStorage = new TextureStorage2D(levels, d3dfmt, width, height, renderTarget);
     mImmutable = true;
 
     for (int level = 0; level < levels; level++)
@@ -2154,10 +2154,10 @@
     GLsizei height = mImageArray[0].getHeight();
     GLint levels = creationLevels(width, height);
     D3DFORMAT format = mImageArray[0].getD3DFormat();
-    const bool renderable = (mUsage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
+    const bool renderTarget = IsTextureFormatRenderable(format) && (mUsage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
 
     delete mTexStorage;
-    mTexStorage = new TextureStorage2D(levels, format, width, height, renderable);
+    mTexStorage = new TextureStorage2D(levels, format, width, height, renderTarget);
     
     if (mTexStorage->isManaged())
     {
@@ -2631,10 +2631,10 @@
     GLsizei size = mImageArray[0][0].getWidth();
     GLint levels = creationLevels(size, 0);
     D3DFORMAT format = mImageArray[0][0].getD3DFormat();
-    const bool renderable = (mUsage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
+    const bool renderTarget = IsTextureFormatRenderable(format) && (mUsage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
 
     delete mTexStorage;
-    mTexStorage = new TextureStorageCubeMap(levels, format, size, renderable);
+    mTexStorage = new TextureStorageCubeMap(levels, format, size, renderTarget);
 
     if (mTexStorage->isManaged())
     {
@@ -2868,10 +2868,10 @@
     GLenum format = gl::ExtractFormat(internalformat);
     GLenum type = gl::ExtractType(internalformat);
     D3DFORMAT d3dfmt = ConvertTextureFormatType(format, type);
-    const bool renderable = (mUsage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
+    const bool renderTarget = IsTextureFormatRenderable(d3dfmt) && (mUsage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
 
     delete mTexStorage;
-    mTexStorage = new TextureStorageCubeMap(levels, d3dfmt, size, renderable);
+    mTexStorage = new TextureStorageCubeMap(levels, d3dfmt, size, renderTarget);
     mImmutable = true;
 
     for (int level = 0; level < levels; level++)
