Commit ca623f3f by Geoff Lang

Add a B8G8R8X8 type for mipmaping, reading and writing D3D9 BGR textures.

Fixes WebGL D3D9 conformance failures in: context-attributes-alpha-depth-stencil-antialias copy-tex-image-2d-formats.html texture-attachment-formats.html BUG=angle:550 Change-Id: I09d42c5e6cf7d880841207627fd20698ed188a6a Reviewed-on: https://chromium-review.googlesource.com/191935Tested-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent 99384047
...@@ -200,7 +200,7 @@ static D3D9FormatInfoMap BuildD3D9FormatInfoMap() ...@@ -200,7 +200,7 @@ static D3D9FormatInfoMap BuildD3D9FormatInfoMap()
map.insert(D3D9FormatInfoPair(D3DFMT_A4R4G4B4, D3DFormatInfo( 16, 1, 1, GL_BGRA4_ANGLEX, GenerateMip<B4G4R4A4>, ReadColor<B4G4R4A4, GLfloat> ))); map.insert(D3D9FormatInfoPair(D3DFMT_A4R4G4B4, D3DFormatInfo( 16, 1, 1, GL_BGRA4_ANGLEX, GenerateMip<B4G4R4A4>, ReadColor<B4G4R4A4, GLfloat> )));
map.insert(D3D9FormatInfoPair(D3DFMT_A1R5G5B5, D3DFormatInfo( 16, 1, 1, GL_BGR5_A1_ANGLEX, GenerateMip<B5G5R5A1>, ReadColor<B5G5R5A1, GLfloat> ))); map.insert(D3D9FormatInfoPair(D3DFMT_A1R5G5B5, D3DFormatInfo( 16, 1, 1, GL_BGR5_A1_ANGLEX, GenerateMip<B5G5R5A1>, ReadColor<B5G5R5A1, GLfloat> )));
map.insert(D3D9FormatInfoPair(D3DFMT_R5G6B5, D3DFormatInfo( 16, 1, 1, GL_RGB565, GenerateMip<R5G6B5>, ReadColor<R5G6B5, GLfloat> ))); map.insert(D3D9FormatInfoPair(D3DFMT_R5G6B5, D3DFormatInfo( 16, 1, 1, GL_RGB565, GenerateMip<R5G6B5>, ReadColor<R5G6B5, GLfloat> )));
map.insert(D3D9FormatInfoPair(D3DFMT_X8R8G8B8, D3DFormatInfo( 32, 1, 1, GL_BGRA8_EXT, GenerateMip<B8G8R8A8>, ReadColor<B8G8R8A8, GLfloat> ))); map.insert(D3D9FormatInfoPair(D3DFMT_X8R8G8B8, D3DFormatInfo( 32, 1, 1, GL_BGRA8_EXT, GenerateMip<B8G8R8X8>, ReadColor<B8G8R8X8, GLfloat> )));
map.insert(D3D9FormatInfoPair(D3DFMT_A8R8G8B8, D3DFormatInfo( 32, 1, 1, GL_BGRA8_EXT, GenerateMip<B8G8R8A8>, ReadColor<B8G8R8A8, GLfloat> ))); map.insert(D3D9FormatInfoPair(D3DFMT_A8R8G8B8, D3DFormatInfo( 32, 1, 1, GL_BGRA8_EXT, GenerateMip<B8G8R8A8>, ReadColor<B8G8R8A8, GLfloat> )));
map.insert(D3D9FormatInfoPair(D3DFMT_R16F, D3DFormatInfo( 16, 1, 1, GL_R16F_EXT, GenerateMip<R16F>, ReadColor<R16F, GLfloat> ))); map.insert(D3D9FormatInfoPair(D3DFMT_R16F, D3DFormatInfo( 16, 1, 1, GL_R16F_EXT, GenerateMip<R16F>, ReadColor<R16F, GLfloat> )));
map.insert(D3D9FormatInfoPair(D3DFMT_G16R16F, D3DFormatInfo( 32, 1, 1, GL_RG16F_EXT, GenerateMip<R16G16F>, ReadColor<R16G16F, GLfloat> ))); map.insert(D3D9FormatInfoPair(D3DFMT_G16R16F, D3DFormatInfo( 32, 1, 1, GL_RG16F_EXT, GenerateMip<R16G16F>, ReadColor<R16G16F, GLfloat> )));
......
...@@ -443,6 +443,52 @@ struct B8G8R8A8 ...@@ -443,6 +443,52 @@ struct B8G8R8A8
} }
}; };
struct B8G8R8X8
{
unsigned char B;
unsigned char G;
unsigned char R;
unsigned char X;
static void readColor(gl::ColorF *dst, const B8G8R8X8 *src)
{
dst->red = gl::normalizedToFloat(src->R);
dst->green = gl::normalizedToFloat(src->G);
dst->blue = gl::normalizedToFloat(src->B);
dst->alpha = 1.0f;
}
static void readColor(gl::ColorUI *dst, const B8G8R8X8 *src)
{
dst->red = src->R;
dst->green = src->G;
dst->blue = src->B;
dst->alpha = 1;
}
static void writeColor(B8G8R8X8 *dst, const gl::ColorF *src)
{
dst->R = gl::floatToNormalized<unsigned char>(src->red);
dst->G = gl::floatToNormalized<unsigned char>(src->green);
dst->B = gl::floatToNormalized<unsigned char>(src->blue);
dst->X = 255;
}
static void writeColor(B8G8R8X8 *dst, const gl::ColorUI *src)
{
dst->R = static_cast<unsigned char>(src->red);
dst->G = static_cast<unsigned char>(src->green);
dst->B = static_cast<unsigned char>(src->blue);
dst->X = 255;
}
static void average(B8G8R8X8 *dst, const B8G8R8X8 *src1, const B8G8R8X8 *src2)
{
*(unsigned int*)dst = (((*(unsigned int*)src1 ^ *(unsigned int*)src2) & 0xFEFEFEFE) >> 1) + (*(unsigned int*)src1 & *(unsigned int*)src2);
dst->X = 255;
}
};
struct B5G5R5A1 struct B5G5R5A1
{ {
unsigned short BGRA; unsigned short BGRA;
......
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