Chromium Code Reviews| 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..6f356e35be621217b4c8698f93bc0ee2fc2a4567 100644 |
| --- a/gpu/command_buffer/common/gles2_cmd_utils.cc |
| +++ b/gpu/command_buffer/common/gles2_cmd_utils.cc |
| @@ -1189,6 +1189,285 @@ 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); |
| + 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; |
| + 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_BGRA_EXT: |
| + switch (type) { |
| + case GL_UNSIGNED_BYTE: |
| + internal_format = GL_BGRA8_EXT; |
| + break; |
| + 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; |
| + 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_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. |
| + internal_format = GL_R8; |
| + break; |
| + default: |
| + NOTREACHED(); |
| + break; |
| + } |
| + break; |
| + case GL_LUMINANCE_ALPHA: |
| + switch (type) { |
| + case GL_UNSIGNED_BYTE: |
| + internal_format = GL_RGBA8; |
| + break; |
| + default: |
| + NOTREACHED(); |
| + break; |
| + } |
| + break; |
| + default: |
|
piman
2016/06/03 21:26:04
I think anything valid in FormatTypeValidator::kSu
Zhenyao Mo
2016/06/03 21:31:27
This is ES3 only, so all these extensions have bee
piman
2016/06/03 21:40:57
AFAICT, even if we enable ES3, we still enable e.g
|
| + break; |
| + } |
| + |
| + *r = 0; |
| + *g = 0; |
| + *b = 0; |
| + *a = 0; |
| + 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) { |