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
case GL_RGB565:
case GL_RGB8_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);
break;
case GL_STENCIL_INDEX8:
......@@ -1181,6 +1185,7 @@ void Context::setRenderbufferStorage(GLsizei width, GLsizei height, GLenum inter
renderbuffer = new gl::DepthStencilbuffer(mRenderer, width, height, samples);
break;
default:
UNIMPLEMENTED(); // TODO: Remaining ES3 formats
UNREACHABLE(); return;
}
......
#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
// found in the LICENSE file.
//
......@@ -5032,11 +5032,21 @@ void __stdcall glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samp
case GL_RGBA8_OES:
case GL_STENCIL_INDEX8:
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;
default:
return gl::error(GL_INVALID_ENUM);
}
context->setRenderbufferStorage(width, height, internalformat, samples);
}
}
catch(std::bad_alloc&)
......
......@@ -3136,6 +3136,7 @@ static inline void readPixelColor(const unsigned char *data, DXGI_FORMAT format,
switch (format)
{
case DXGI_FORMAT_R8G8B8A8_UNORM:
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
{
unsigned int rgba = *reinterpret_cast<const unsigned int*>(data + 4 * x + y * inputPitch);
outColor->red = (rgba & 0x000000FF) * (1.0f / 0x000000FF);
......@@ -3229,6 +3230,16 @@ static inline void readPixelColor(const unsigned char *data, DXGI_FORMAT format,
}
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:
ERR("ReadPixelColor not implemented for DXGI format %u.", format);
UNIMPLEMENTED();
......
#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
// found in the LICENSE file.
//
......@@ -282,9 +282,13 @@ GLenum ConvertTextureInternalFormat(DXGI_FORMAT format)
case DXGI_FORMAT_B8G8R8A8_UNORM:
return GL_BGRA8_EXT;
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:
return GL_RG8_EXT;
return GL_RG8;
case DXGI_FORMAT_R16_FLOAT:
return GL_R16F_EXT;
case DXGI_FORMAT_R16G16_FLOAT:
......@@ -296,6 +300,7 @@ GLenum ConvertTextureInternalFormat(DXGI_FORMAT format)
case DXGI_FORMAT_UNKNOWN:
return GL_NONE;
default:
UNIMPLEMENTED(); // TODO: Remaining ES3 formats
UNREACHABLE();
}
......@@ -319,12 +324,21 @@ DXGI_FORMAT ConvertRenderbufferFormat(GLenum format)
return DXGI_FORMAT_R8G8B8A8_UNORM;
case GL_BGRA8_EXT:
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:
return DXGI_FORMAT_D16_UNORM;
case GL_STENCIL_INDEX8:
case GL_DEPTH24_STENCIL8_OES:
return DXGI_FORMAT_D24_UNORM_S8_UINT;
default:
UNIMPLEMENTED(); // TODO: Remaining ES3 formats
UNREACHABLE();
}
......
......@@ -372,9 +372,15 @@ int ComputePixelSize(GLint internalformat)
case GL_RGBA32F_EXT: return sizeof(float) * 4;
case GL_RGBA16F_EXT: return sizeof(unsigned short) * 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_BGR5_A1_ANGLEX: return sizeof(unsigned short);
default: UNREACHABLE();
default:
UNIMPLEMENTED(); // TODO: Remaining ES3 formats
UNREACHABLE();
}
return 0;
......@@ -556,15 +562,19 @@ bool IsColorRenderable(GLenum internalformat)
case GL_RGB565:
case GL_RGB8_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;
case GL_DEPTH_COMPONENT16:
case GL_STENCIL_INDEX8:
case GL_DEPTH24_STENCIL8_OES:
return false;
case GL_BGRA8_EXT:
return true;
default:
UNIMPLEMENTED();
UNIMPLEMENTED(); // TODO: Remaining ES3 formats
UNREACHABLE();
}
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