Fix implementation format for default renderbuffer.
The spec defines that the initial state for a newly bound renderbuffer
has a format of RGBA4. However, when querying the number of red/green/
blue/alpha/depth/stencil bits, we should report the actual number of
bits allocated (0), and not assert.
Bug chromium:765912
Bug b/25351344
Change-Id: Icc3eb59e76bcbd6f0f2f16a2a75ace706ae17251
Reviewed-on: https://swiftshader-review.googlesource.com/12148
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/libGLESv2/Renderbuffer.cpp b/src/OpenGL/libGLESv2/Renderbuffer.cpp
index 9b92698..4c4e448 100644
--- a/src/OpenGL/libGLESv2/Renderbuffer.cpp
+++ b/src/OpenGL/libGLESv2/Renderbuffer.cpp
@@ -423,7 +423,7 @@
mWidth = 0;
mHeight = 0;
format = GL_RGBA4;
- internalFormat = sw::FORMAT_A8B8G8R8;
+ internalFormat = sw::FORMAT_NULL;
mSamples = 0;
}
diff --git a/src/OpenGL/libGLESv2/utilities.cpp b/src/OpenGL/libGLESv2/utilities.cpp
index 4f95002..8282975 100644
--- a/src/OpenGL/libGLESv2/utilities.cpp
+++ b/src/OpenGL/libGLESv2/utilities.cpp
@@ -1588,6 +1588,8 @@
{
switch(stencilFormat)
{
+ case sw::FORMAT_NULL:
+ return 0;
case sw::FORMAT_D24FS8:
case sw::FORMAT_D24S8:
case sw::FORMAT_D32FS8_TEXTURE:
@@ -1616,6 +1618,8 @@
{
switch(colorFormat)
{
+ case sw::FORMAT_NULL:
+ return 0;
case sw::FORMAT_A16B16G16R16F:
case sw::FORMAT_A16B16G16R16I:
case sw::FORMAT_A16B16G16R16UI:
@@ -1652,6 +1656,8 @@
{
switch(colorFormat)
{
+ case sw::FORMAT_NULL:
+ return 0;
case sw::FORMAT_R16F:
case sw::FORMAT_G16R16F:
case sw::FORMAT_B16G16R16F:
@@ -1716,6 +1722,8 @@
{
switch(colorFormat)
{
+ case sw::FORMAT_NULL:
+ return 0;
case sw::FORMAT_G16R16F:
case sw::FORMAT_B16G16R16F:
case sw::FORMAT_A16B16G16R16F:
@@ -1771,6 +1779,8 @@
{
switch(colorFormat)
{
+ case sw::FORMAT_NULL:
+ return 0;
case sw::FORMAT_B16G16R16F:
case sw::FORMAT_A16B16G16R16F:
case sw::FORMAT_X16B16G16R16I:
@@ -1815,6 +1825,7 @@
{
switch(depthFormat)
{
+ case sw::FORMAT_NULL: return 0;
// case sw::FORMAT_D16_LOCKABLE: return 16;
case sw::FORMAT_D32: return 32;
// case sw::FORMAT_D15S1: return 15;