Added support for renderbuffer formats used by the CTS.

TRAC #22890 Signed-off-by: Geoff Lang Signed-off-by: Shannon Woods Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2158 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent e3fe5dad
...@@ -1172,6 +1172,10 @@ void Context::setRenderbufferStorage(GLsizei width, GLsizei height, GLenum inter ...@@ -1172,6 +1172,10 @@ void Context::setRenderbufferStorage(GLsizei width, GLsizei height, GLenum inter
case GL_RGB565: case GL_RGB565:
case GL_RGB8_OES: case GL_RGB8_OES:
case GL_RGBA8_OES: case GL_RGBA8_OES:
case GL_SRGB8_ALPHA8:
case GL_RGB10_A2:
case GL_RG8:
case GL_R8:
renderbuffer = new gl::Colorbuffer(mRenderer,width, height, internalformat, samples); renderbuffer = new gl::Colorbuffer(mRenderer,width, height, internalformat, samples);
break; break;
case GL_STENCIL_INDEX8: case GL_STENCIL_INDEX8:
...@@ -1181,6 +1185,7 @@ void Context::setRenderbufferStorage(GLsizei width, GLsizei height, GLenum inter ...@@ -1181,6 +1185,7 @@ void Context::setRenderbufferStorage(GLsizei width, GLsizei height, GLenum inter
renderbuffer = new gl::DepthStencilbuffer(mRenderer, width, height, samples); renderbuffer = new gl::DepthStencilbuffer(mRenderer, width, height, samples);
break; break;
default: default:
UNIMPLEMENTED(); // TODO: Remaining ES3 formats
UNREACHABLE(); return; UNREACHABLE(); return;
} }
......
#include "precompiled.h" #include "precompiled.h"
// //
// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved. // Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
...@@ -5032,11 +5032,21 @@ void __stdcall glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samp ...@@ -5032,11 +5032,21 @@ void __stdcall glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samp
case GL_RGBA8_OES: case GL_RGBA8_OES:
case GL_STENCIL_INDEX8: case GL_STENCIL_INDEX8:
case GL_DEPTH24_STENCIL8_OES: case GL_DEPTH24_STENCIL8_OES:
context->setRenderbufferStorage(width, height, internalformat, samples); break;
case GL_SRGB8_ALPHA8:
case GL_RGB10_A2:
case GL_RG8:
case GL_R8:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
break; break;
default: default:
return gl::error(GL_INVALID_ENUM); return gl::error(GL_INVALID_ENUM);
} }
context->setRenderbufferStorage(width, height, internalformat, samples);
} }
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
......
...@@ -3136,6 +3136,7 @@ static inline void readPixelColor(const unsigned char *data, DXGI_FORMAT format, ...@@ -3136,6 +3136,7 @@ static inline void readPixelColor(const unsigned char *data, DXGI_FORMAT format,
switch (format) switch (format)
{ {
case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM:
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
{ {
unsigned int rgba = *reinterpret_cast<const unsigned int*>(data + 4 * x + y * inputPitch); unsigned int rgba = *reinterpret_cast<const unsigned int*>(data + 4 * x + y * inputPitch);
outColor->red = (rgba & 0x000000FF) * (1.0f / 0x000000FF); outColor->red = (rgba & 0x000000FF) * (1.0f / 0x000000FF);
...@@ -3229,6 +3230,16 @@ static inline void readPixelColor(const unsigned char *data, DXGI_FORMAT format, ...@@ -3229,6 +3230,16 @@ static inline void readPixelColor(const unsigned char *data, DXGI_FORMAT format,
} }
break; break;
case DXGI_FORMAT_R10G10B10A2_UNORM:
{
unsigned int rgba = *reinterpret_cast<const unsigned int*>(data + 4 * x + y * inputPitch);
outColor->red = (rgba & 0x000003FF) * (1.0f / 0x000003FF);
outColor->green = (rgba & 0x000FFC00) * (1.0f / 0x000FFC00);
outColor->blue = (rgba & 0x3FF00000) * (1.0f / 0x3FF00000);
outColor->alpha = (rgba & 0xC0000000) * (1.0f / 0xC0000000);
}
break;
default: default:
ERR("ReadPixelColor not implemented for DXGI format %u.", format); ERR("ReadPixelColor not implemented for DXGI format %u.", format);
UNIMPLEMENTED(); UNIMPLEMENTED();
......
#include "precompiled.h" #include "precompiled.h"
// //
// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. // Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
...@@ -282,9 +282,13 @@ GLenum ConvertTextureInternalFormat(DXGI_FORMAT format) ...@@ -282,9 +282,13 @@ GLenum ConvertTextureInternalFormat(DXGI_FORMAT format)
case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM:
return GL_BGRA8_EXT; return GL_BGRA8_EXT;
case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_UNORM:
return GL_R8_EXT; return GL_R8;
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
return GL_SRGB8_ALPHA8;
case DXGI_FORMAT_R10G10B10A2_UNORM:
return GL_RGB10_A2;
case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_UNORM:
return GL_RG8_EXT; return GL_RG8;
case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_R16_FLOAT:
return GL_R16F_EXT; return GL_R16F_EXT;
case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_FLOAT:
...@@ -296,6 +300,7 @@ GLenum ConvertTextureInternalFormat(DXGI_FORMAT format) ...@@ -296,6 +300,7 @@ GLenum ConvertTextureInternalFormat(DXGI_FORMAT format)
case DXGI_FORMAT_UNKNOWN: case DXGI_FORMAT_UNKNOWN:
return GL_NONE; return GL_NONE;
default: default:
UNIMPLEMENTED(); // TODO: Remaining ES3 formats
UNREACHABLE(); UNREACHABLE();
} }
...@@ -319,12 +324,21 @@ DXGI_FORMAT ConvertRenderbufferFormat(GLenum format) ...@@ -319,12 +324,21 @@ DXGI_FORMAT ConvertRenderbufferFormat(GLenum format)
return DXGI_FORMAT_R8G8B8A8_UNORM; return DXGI_FORMAT_R8G8B8A8_UNORM;
case GL_BGRA8_EXT: case GL_BGRA8_EXT:
return DXGI_FORMAT_B8G8R8A8_UNORM; return DXGI_FORMAT_B8G8R8A8_UNORM;
case GL_SRGB8_ALPHA8:
return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
case GL_RGB10_A2:
return DXGI_FORMAT_R10G10B10A2_UNORM;
case GL_RG8:
return DXGI_FORMAT_R8G8_UNORM;
case GL_R8:
return DXGI_FORMAT_R8_UNORM;
case GL_DEPTH_COMPONENT16: case GL_DEPTH_COMPONENT16:
return DXGI_FORMAT_D16_UNORM; return DXGI_FORMAT_D16_UNORM;
case GL_STENCIL_INDEX8: case GL_STENCIL_INDEX8:
case GL_DEPTH24_STENCIL8_OES: case GL_DEPTH24_STENCIL8_OES:
return DXGI_FORMAT_D24_UNORM_S8_UINT; return DXGI_FORMAT_D24_UNORM_S8_UINT;
default: default:
UNIMPLEMENTED(); // TODO: Remaining ES3 formats
UNREACHABLE(); UNREACHABLE();
} }
......
...@@ -372,9 +372,15 @@ int ComputePixelSize(GLint internalformat) ...@@ -372,9 +372,15 @@ int ComputePixelSize(GLint internalformat)
case GL_RGBA32F_EXT: return sizeof(float) * 4; case GL_RGBA32F_EXT: return sizeof(float) * 4;
case GL_RGBA16F_EXT: return sizeof(unsigned short) * 4; case GL_RGBA16F_EXT: return sizeof(unsigned short) * 4;
case GL_BGRA8_EXT: return sizeof(unsigned char) * 4; case GL_BGRA8_EXT: return sizeof(unsigned char) * 4;
case GL_SRGB8_ALPHA8: return sizeof(unsigned char) * 4;
case GL_RGB10_A2: return sizeof(unsigned char) * 4;
case GL_RG8: return sizeof(unsigned char) * 2;
case GL_R8: return sizeof(unsigned char);
case GL_BGRA4_ANGLEX: return sizeof(unsigned short); case GL_BGRA4_ANGLEX: return sizeof(unsigned short);
case GL_BGR5_A1_ANGLEX: return sizeof(unsigned short); case GL_BGR5_A1_ANGLEX: return sizeof(unsigned short);
default: UNREACHABLE(); default:
UNIMPLEMENTED(); // TODO: Remaining ES3 formats
UNREACHABLE();
} }
return 0; return 0;
...@@ -556,15 +562,19 @@ bool IsColorRenderable(GLenum internalformat) ...@@ -556,15 +562,19 @@ bool IsColorRenderable(GLenum internalformat)
case GL_RGB565: case GL_RGB565:
case GL_RGB8_OES: case GL_RGB8_OES:
case GL_RGBA8_OES: case GL_RGBA8_OES:
case GL_BGRA8_EXT:
case GL_SRGB8_ALPHA8:
case GL_RGB10_A2:
case GL_RG8:
case GL_R8:
return true; return true;
case GL_DEPTH_COMPONENT16: case GL_DEPTH_COMPONENT16:
case GL_STENCIL_INDEX8: case GL_STENCIL_INDEX8:
case GL_DEPTH24_STENCIL8_OES: case GL_DEPTH24_STENCIL8_OES:
return false; return false;
case GL_BGRA8_EXT:
return true;
default: default:
UNIMPLEMENTED(); UNIMPLEMENTED(); // TODO: Remaining ES3 formats
UNREACHABLE();
} }
return false; return false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment