Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Unified Diff: gpu/command_buffer/common/gles2_cmd_utils.cc

Issue 2029803002: Improve CopyTex{Sub}Image2D format validation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: with fix Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..08ce9c385d915bdb8622366b1c2e5dde7e0139ac 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils.cc
+++ b/gpu/command_buffer/common/gles2_cmd_utils.cc
@@ -1189,6 +1189,251 @@ 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:
Corentin Wallez 2016/06/02 21:29:40 All the default cases could be UNREACHABLE()
Zhenyao Mo 2016/06/03 18:29:48 Good idea. Done.
+ break;
+ }
+ break;
+ case GL_SRGB_EXT:
+ switch (type) {
+ case GL_UNSIGNED_BYTE:
+ internal_format = GL_SRGB8;
+ break;
+ default:
+ break;
+ }
+ break;
+ case GL_BGRA_EXT:
+ switch (type) {
+ case GL_UNSIGNED_BYTE:
+ internal_format = GL_BGRA8_EXT;
+ break;
+ default:
+ break;
+ }
+ break;
+ case GL_RGBA:
+ switch (type) {
+ case GL_UNSIGNED_BYTE:
+ internal_format = GL_RGBA8;
+ break;
+ default:
+ break;
+ }
+ break;
+ case GL_SRGB_ALPHA_EXT:
+ switch (type) {
+ case GL_UNSIGNED_BYTE:
+ internal_format = GL_SRGB8_ALPHA8;
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ 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:
+ break;
+ }
+}
+
uint32_t GLES2Util::GetChannelsNeededForAttachmentType(
int type,
uint32_t max_color_attachments) {

Powered by Google App Engine
This is Rietveld 408576698