| Index: gpu/command_buffer/common/gles2_cmd_utils.cc
|
| diff --git a/gpu/command_buffer/common/gles2_cmd_utils.cc b/gpu/command_buffer/common/gles2_cmd_utils.cc
|
| index 3a43215e3e5910d528dce4e27fcacfcc13a19f9c..5f75c7eae4618da49a6ebd89940fe2c687f1d73c 100644
|
| --- a/gpu/command_buffer/common/gles2_cmd_utils.cc
|
| +++ b/gpu/command_buffer/common/gles2_cmd_utils.cc
|
| @@ -1189,6 +1189,361 @@ uint32_t GLES2Util::GetChannelsForFormat(int format) {
|
| }
|
| }
|
|
|
| +bool GLES2Util::IsSizedColorFormat(uint32_t internal_format) {
|
| + switch (internal_format) {
|
| + case GL_ALPHA16F_EXT:
|
| + case GL_ALPHA32F_EXT:
|
| + case GL_RGB8:
|
| + case GL_RGB565:
|
| + case GL_RGB16F:
|
| + case GL_RGB32F:
|
| + case GL_SRGB8:
|
| + case GL_RGB8_SNORM:
|
| + case GL_R11F_G11F_B10F:
|
| + case GL_RGB9_E5:
|
| + case GL_RGB8UI:
|
| + case GL_RGB8I:
|
| + case GL_RGB16UI:
|
| + case GL_RGB16I:
|
| + case GL_RGB32UI:
|
| + case GL_RGB32I:
|
| + case GL_BGRA8_EXT:
|
| + case GL_RGBA16F:
|
| + case GL_RGBA32F:
|
| + case GL_RGBA8_OES:
|
| + case GL_RGBA4:
|
| + case GL_RGB5_A1:
|
| + case GL_SRGB8_ALPHA8:
|
| + case GL_RGBA8_SNORM:
|
| + case GL_RGB10_A2:
|
| + case GL_RGBA8UI:
|
| + case GL_RGBA8I:
|
| + case GL_RGB10_A2UI:
|
| + case GL_RGBA16UI:
|
| + case GL_RGBA16I:
|
| + case GL_RGBA32UI:
|
| + case GL_RGBA32I:
|
| + case GL_R8:
|
| + case GL_R8_SNORM:
|
| + case GL_R16F:
|
| + case GL_R32F:
|
| + case GL_R8UI:
|
| + case GL_R8I:
|
| + case GL_R16UI:
|
| + case GL_R16I:
|
| + case GL_R32UI:
|
| + case GL_R32I:
|
| + case GL_RG8:
|
| + case GL_RG8_SNORM:
|
| + case GL_RG16F:
|
| + case GL_RG32F:
|
| + case GL_RG8UI:
|
| + case GL_RG8I:
|
| + case GL_RG16UI:
|
| + case GL_RG16I:
|
| + case GL_RG32UI:
|
| + case GL_RG32I:
|
| + return true;
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
| +
|
| +void GLES2Util::GetColorFormatComponentSizes(
|
| + uint32_t internal_format, uint32_t type, int* r, int* g, int* b, int* a) {
|
| + DCHECK(r && g && b && a);
|
| + *r = 0;
|
| + *g = 0;
|
| + *b = 0;
|
| + *a = 0;
|
| +
|
| + // Unsized formats.
|
| + switch (internal_format) {
|
| + case GL_RGB:
|
| + switch (type) {
|
| + case GL_UNSIGNED_BYTE:
|
| + internal_format = GL_RGB8;
|
| + break;
|
| + case GL_UNSIGNED_SHORT_5_6_5:
|
| + internal_format = GL_RGB565;
|
| + break;
|
| + case GL_HALF_FLOAT_OES:
|
| + internal_format = GL_RGB16F;
|
| + break;
|
| + case GL_FLOAT:
|
| + internal_format = GL_RGB32F;
|
| + return;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + break;
|
| + case GL_RGBA:
|
| + switch (type) {
|
| + case GL_UNSIGNED_BYTE:
|
| + internal_format = GL_RGBA8;
|
| + break;
|
| + case GL_UNSIGNED_SHORT_4_4_4_4:
|
| + internal_format = GL_RGBA4;
|
| + break;
|
| + case GL_UNSIGNED_SHORT_5_5_5_1:
|
| + internal_format = GL_RGB5_A1;
|
| + break;
|
| + case GL_HALF_FLOAT_OES:
|
| + internal_format = GL_RGBA16F;
|
| + break;
|
| + case GL_FLOAT:
|
| + internal_format = GL_RGBA32F;
|
| + return;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + break;
|
| + case GL_ALPHA:
|
| + switch (type) {
|
| + case GL_UNSIGNED_BYTE:
|
| + *a = 8;
|
| + return;
|
| + case GL_HALF_FLOAT_OES:
|
| + *a = 16;
|
| + return;
|
| + case GL_FLOAT:
|
| + *a = 32;
|
| + return;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + break;
|
| + case GL_LUMINANCE:
|
| + switch (type) {
|
| + case GL_UNSIGNED_BYTE:
|
| + // It can be RGBA8, RGB8, RG8, or R8.
|
| + // Here we only require R8, which is good enough for validation.
|
| + // Same for other types.
|
| + internal_format = GL_R8;
|
| + break;
|
| + case GL_HALF_FLOAT_OES:
|
| + internal_format = GL_R16F;
|
| + break;
|
| + case GL_FLOAT:
|
| + internal_format = GL_R32F;
|
| + return;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + break;
|
| + case GL_LUMINANCE_ALPHA:
|
| + switch (type) {
|
| + case GL_UNSIGNED_BYTE:
|
| + internal_format = GL_RGBA8;
|
| + break;
|
| + case GL_HALF_FLOAT_OES:
|
| + internal_format = GL_RGBA16F;
|
| + break;
|
| + case GL_FLOAT:
|
| + internal_format = GL_RGBA32F;
|
| + return;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + break;
|
| + case GL_RED:
|
| + switch (type) {
|
| + case GL_UNSIGNED_BYTE:
|
| + internal_format = GL_R8;
|
| + break;
|
| + case GL_HALF_FLOAT_OES:
|
| + internal_format = GL_R16F;
|
| + break;
|
| + case GL_FLOAT:
|
| + internal_format = GL_R32F;
|
| + return;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + break;
|
| + case GL_RG:
|
| + switch (type) {
|
| + case GL_UNSIGNED_BYTE:
|
| + internal_format = GL_RG8;
|
| + break;
|
| + case GL_HALF_FLOAT_OES:
|
| + internal_format = GL_RG16F;
|
| + break;
|
| + case GL_FLOAT:
|
| + internal_format = GL_RG32F;
|
| + return;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + break;
|
| + case GL_SRGB_EXT:
|
| + switch (type) {
|
| + case GL_UNSIGNED_BYTE:
|
| + internal_format = GL_SRGB8;
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + break;
|
| + case GL_SRGB_ALPHA_EXT:
|
| + switch (type) {
|
| + case GL_UNSIGNED_BYTE:
|
| + internal_format = GL_SRGB8_ALPHA8;
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + break;
|
| + case GL_BGRA_EXT:
|
| + switch (type) {
|
| + case GL_UNSIGNED_BYTE:
|
| + internal_format = GL_BGRA8_EXT;
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| +
|
| + // Sized formats.
|
| + switch (internal_format) {
|
| + case GL_RGB8_OES:
|
| + case GL_SRGB8:
|
| + case GL_RGB8_SNORM:
|
| + case GL_RGB8UI:
|
| + case GL_RGB8I:
|
| + *r = 8;
|
| + *g = 8;
|
| + *b = 8;
|
| + break;
|
| + case GL_RGB565:
|
| + *r = 5;
|
| + *g = 6;
|
| + *b = 5;
|
| + break;
|
| + case GL_RGB16F:
|
| + case GL_RGB16UI:
|
| + case GL_RGB16I:
|
| + *r = 16;
|
| + *g = 16;
|
| + *b = 16;
|
| + break;
|
| + case GL_RGB32F:
|
| + case GL_RGB32UI:
|
| + case GL_RGB32I:
|
| + *r = 32;
|
| + *g = 32;
|
| + *b = 32;
|
| + break;
|
| + case GL_R11F_G11F_B10F:
|
| + *r = 11;
|
| + *g = 11;
|
| + *b = 10;
|
| + break;
|
| + case GL_RGB9_E5:
|
| + *r = 9;
|
| + *g = 9;
|
| + *b = 9;
|
| + break;
|
| + case GL_BGRA8_EXT:
|
| + case GL_RGBA8:
|
| + case GL_SRGB8_ALPHA8:
|
| + case GL_RGBA8_SNORM:
|
| + case GL_RGBA8UI:
|
| + case GL_RGBA8I:
|
| + *r = 8;
|
| + *g = 8;
|
| + *b = 8;
|
| + *a = 8;
|
| + break;
|
| + case GL_RGBA16F_EXT:
|
| + case GL_RGBA16UI:
|
| + case GL_RGBA16I:
|
| + *r = 16;
|
| + *g = 16;
|
| + *b = 16;
|
| + *a = 16;
|
| + break;
|
| + case GL_RGBA32F_EXT:
|
| + case GL_RGBA32UI:
|
| + case GL_RGBA32I:
|
| + *r = 32;
|
| + *g = 32;
|
| + *b = 32;
|
| + *a = 32;
|
| + break;
|
| + case GL_RGBA4:
|
| + *r = 4;
|
| + *g = 4;
|
| + *b = 4;
|
| + *a = 4;
|
| + break;
|
| + case GL_RGB5_A1:
|
| + *r = 5;
|
| + *g = 5;
|
| + *b = 5;
|
| + *a = 1;
|
| + break;
|
| + case GL_RGB10_A2:
|
| + case GL_RGB10_A2UI:
|
| + *r = 10;
|
| + *g = 10;
|
| + *b = 10;
|
| + *a = 2;
|
| + break;
|
| + case GL_R8:
|
| + case GL_R8_SNORM:
|
| + case GL_R8UI:
|
| + case GL_R8I:
|
| + *r = 8;
|
| + break;
|
| + case GL_R16F:
|
| + case GL_R16UI:
|
| + case GL_R16I:
|
| + *r = 16;
|
| + break;
|
| + case GL_R32F:
|
| + case GL_R32UI:
|
| + case GL_R32I:
|
| + *r = 32;
|
| + break;
|
| + case GL_RG8:
|
| + case GL_RG8_SNORM:
|
| + case GL_RG8UI:
|
| + case GL_RG8I:
|
| + *r = 8;
|
| + *g = 8;
|
| + break;
|
| + case GL_RG16F:
|
| + case GL_RG16UI:
|
| + case GL_RG16I:
|
| + *r = 16;
|
| + *g = 16;
|
| + break;
|
| + case GL_RG32F:
|
| + case GL_RG32UI:
|
| + case GL_RG32I:
|
| + *r = 32;
|
| + *g = 32;
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| +}
|
| +
|
| uint32_t GLES2Util::GetChannelsNeededForAttachmentType(
|
| int type,
|
| uint32_t max_color_attachments) {
|
|
|