Fix floating-point color buffer support.
- Implemented GL_EXT_color_buffer_float.
- Removed duplicate glRenderbufferStorageMultisample implementation.
- Refactored internalformat validation.
- Removed GL_R11F_G11F_B10F as renderable format. OpenGL ES 3.0 only supports
this as a texture format.
Change-Id: I83ce8225c1b310006f5ce983349ea8cb8b2f7c29
Reviewed-on: https://swiftshader-review.googlesource.com/9048
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/OpenGL/libGLESv2/utilities.cpp b/src/OpenGL/libGLESv2/utilities.cpp
index 8452dae..d45702c 100644
--- a/src/OpenGL/libGLESv2/utilities.cpp
+++ b/src/OpenGL/libGLESv2/utilities.cpp
@@ -1038,12 +1038,13 @@
return true;
}
- bool IsColorRenderable(GLenum internalformat, GLint clientVersion)
+ bool IsColorRenderable(GLenum internalformat, GLint clientVersion, bool isTexture)
{
switch(internalformat)
{
case GL_RGB:
case GL_RGBA:
+ return isTexture;
case GL_RGBA4:
case GL_RGB5_A1:
case GL_RGB565:
@@ -1053,6 +1054,10 @@
case GL_RG16F:
case GL_RGB16F:
case GL_RGBA16F:
+ case GL_R32F:
+ case GL_RG32F:
+ case GL_RGB32F:
+ case GL_RGBA32F:
case GL_BGRA8_EXT:
return true;
case GL_R8:
@@ -1078,11 +1083,6 @@
case GL_RGBA16I:
case GL_RGBA32I:
case GL_RGBA32UI:
- case GL_R11F_G11F_B10F:
- case GL_R32F:
- case GL_RG32F:
- case GL_RGB32F:
- case GL_RGBA32F:
return clientVersion >= 3;
case GL_DEPTH_COMPONENT24:
case GL_DEPTH_COMPONENT32_OES:
@@ -1099,17 +1099,18 @@
return false;
}
- bool IsDepthRenderable(GLenum internalformat)
+ bool IsDepthRenderable(GLenum internalformat, GLint clientVersion)
{
switch(internalformat)
{
case GL_DEPTH_COMPONENT24:
- case GL_DEPTH_COMPONENT32_OES:
- case GL_DEPTH_COMPONENT32F:
- case GL_DEPTH32F_STENCIL8:
case GL_DEPTH_COMPONENT16:
- case GL_DEPTH24_STENCIL8_OES:
+ case GL_DEPTH24_STENCIL8_OES: // GL_OES_packed_depth_stencil
+ case GL_DEPTH_COMPONENT32_OES: // GL_OES_depth32
return true;
+ case GL_DEPTH32F_STENCIL8:
+ case GL_DEPTH_COMPONENT32F:
+ return clientVersion >= 3;
case GL_STENCIL_INDEX8:
case GL_R8:
case GL_R8UI:
@@ -1158,14 +1159,15 @@
return false;
}
- bool IsStencilRenderable(GLenum internalformat)
+ bool IsStencilRenderable(GLenum internalformat, GLint clientVersion)
{
switch(internalformat)
{
- case GL_DEPTH32F_STENCIL8:
case GL_STENCIL_INDEX8:
case GL_DEPTH24_STENCIL8_OES:
return true;
+ case GL_DEPTH32F_STENCIL8:
+ return clientVersion >= 3;
case GL_R8:
case GL_R8UI:
case GL_R8I: