| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file is here so other GLES2 related files can have a common set of | 5 // This file is here so other GLES2 related files can have a common set of |
| 6 // includes where appropriate. | 6 // includes where appropriate. |
| 7 | 7 |
| 8 #include <sstream> | 8 #include <sstream> |
| 9 #include <GLES2/gl2.h> | 9 #include <GLES2/gl2.h> |
| 10 #include <GLES2/gl2ext.h> | 10 #include <GLES2/gl2ext.h> |
| 11 #include <GLES2/gl2extchromium.h> | 11 #include <GLES2/gl2extchromium.h> |
| 12 #include <GLES3/gl3.h> |
| 12 | 13 |
| 14 #include "base/numerics/safe_math.h" |
| 13 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 15 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
| 14 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 16 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| 15 | 17 |
| 16 namespace gpu { | 18 namespace gpu { |
| 17 namespace gles2 { | 19 namespace gles2 { |
| 18 | 20 |
| 19 namespace gl_error_bit { | 21 namespace gl_error_bit { |
| 20 enum GLErrorBit { | 22 enum GLErrorBit { |
| 21 kNoError = 0, | 23 kNoError = 0, |
| 22 kInvalidEnum = (1 << 0), | 24 kInvalidEnum = (1 << 0), |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 return 1; | 355 return 1; |
| 354 default: | 356 default: |
| 355 break; | 357 break; |
| 356 } | 358 } |
| 357 | 359 |
| 358 switch (format) { | 360 switch (format) { |
| 359 case GL_RGB: | 361 case GL_RGB: |
| 360 case GL_SRGB_EXT: | 362 case GL_SRGB_EXT: |
| 361 return 3; | 363 return 3; |
| 362 case GL_LUMINANCE_ALPHA: | 364 case GL_LUMINANCE_ALPHA: |
| 365 case GL_RG_EXT: |
| 363 return 2; | 366 return 2; |
| 364 case GL_RGBA: | 367 case GL_RGBA: |
| 365 case GL_BGRA_EXT: | 368 case GL_BGRA_EXT: |
| 366 case GL_SRGB_ALPHA_EXT: | 369 case GL_SRGB_ALPHA_EXT: |
| 367 return 4; | 370 return 4; |
| 368 case GL_ALPHA: | 371 case GL_ALPHA: |
| 369 case GL_LUMINANCE: | 372 case GL_LUMINANCE: |
| 370 case GL_DEPTH_COMPONENT: | 373 case GL_DEPTH_COMPONENT: |
| 371 case GL_DEPTH_COMPONENT24_OES: | 374 case GL_DEPTH_COMPONENT24_OES: |
| 372 case GL_DEPTH_COMPONENT32_OES: | 375 case GL_DEPTH_COMPONENT32_OES: |
| 373 case GL_DEPTH_COMPONENT16: | 376 case GL_DEPTH_COMPONENT16: |
| 374 case GL_DEPTH24_STENCIL8_OES: | 377 case GL_DEPTH24_STENCIL8_OES: |
| 375 case GL_DEPTH_STENCIL_OES: | 378 case GL_DEPTH_STENCIL_OES: |
| 379 case GL_RED_EXT: |
| 376 return 1; | 380 return 1; |
| 377 default: | 381 default: |
| 378 return 0; | 382 return 0; |
| 379 } | 383 } |
| 380 } | 384 } |
| 381 | 385 |
| 382 // Return the number of bytes per element, based on the element type. | 386 // Return the number of bytes per element, based on the element type. |
| 383 int BytesPerElement(int type) { | 387 int BytesPerElement(int type) { |
| 384 switch (type) { | 388 switch (type) { |
| 385 case GL_FLOAT: | 389 case GL_FLOAT: |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 697 case GL_DEPTH_COMPONENT32_OES: | 701 case GL_DEPTH_COMPONENT32_OES: |
| 698 case GL_DEPTH_COMPONENT24_OES: | 702 case GL_DEPTH_COMPONENT24_OES: |
| 699 case GL_DEPTH_COMPONENT16: | 703 case GL_DEPTH_COMPONENT16: |
| 700 case GL_DEPTH_COMPONENT: | 704 case GL_DEPTH_COMPONENT: |
| 701 return kDepth; | 705 return kDepth; |
| 702 case GL_STENCIL_INDEX8: | 706 case GL_STENCIL_INDEX8: |
| 703 return kStencil; | 707 return kStencil; |
| 704 case GL_DEPTH_STENCIL_OES: | 708 case GL_DEPTH_STENCIL_OES: |
| 705 case GL_DEPTH24_STENCIL8_OES: | 709 case GL_DEPTH24_STENCIL8_OES: |
| 706 return kDepth | kStencil; | 710 return kDepth | kStencil; |
| 711 case GL_RED_EXT: |
| 712 return kRed; |
| 713 case GL_RG_EXT: |
| 714 return kRed | kGreen; |
| 707 default: | 715 default: |
| 708 return 0x0000; | 716 return 0x0000; |
| 709 } | 717 } |
| 710 } | 718 } |
| 711 | 719 |
| 712 uint32 GLES2Util::GetChannelsNeededForAttachmentType( | 720 uint32 GLES2Util::GetChannelsNeededForAttachmentType( |
| 713 int type, uint32 max_color_attachments) { | 721 int type, uint32 max_color_attachments) { |
| 714 switch (type) { | 722 switch (type) { |
| 715 case GL_DEPTH_ATTACHMENT: | 723 case GL_DEPTH_ATTACHMENT: |
| 716 return kDepth; | 724 return kDepth; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 763 return GetStringEnum(value); | 771 return GetStringEnum(value); |
| 764 } | 772 } |
| 765 | 773 |
| 766 bool GLES2Util::ParseUniformName( | 774 bool GLES2Util::ParseUniformName( |
| 767 const std::string& name, | 775 const std::string& name, |
| 768 size_t* array_pos, | 776 size_t* array_pos, |
| 769 int* element_index, | 777 int* element_index, |
| 770 bool* getting_array) { | 778 bool* getting_array) { |
| 771 bool getting_array_location = false; | 779 bool getting_array_location = false; |
| 772 size_t open_pos = std::string::npos; | 780 size_t open_pos = std::string::npos; |
| 773 int index = 0; | 781 base::CheckedNumeric<int> index = 0; |
| 774 if (name[name.size() - 1] == ']') { | 782 if (name[name.size() - 1] == ']') { |
| 775 if (name.size() < 3) { | 783 if (name.size() < 3) { |
| 776 return false; | 784 return false; |
| 777 } | 785 } |
| 778 open_pos = name.find_last_of('['); | 786 open_pos = name.find_last_of('['); |
| 779 if (open_pos == std::string::npos || | 787 if (open_pos == std::string::npos || |
| 780 open_pos >= name.size() - 2) { | 788 open_pos >= name.size() - 2) { |
| 781 return false; | 789 return false; |
| 782 } | 790 } |
| 783 size_t last = name.size() - 1; | 791 size_t last = name.size() - 1; |
| 784 for (size_t pos = open_pos + 1; pos < last; ++pos) { | 792 for (size_t pos = open_pos + 1; pos < last; ++pos) { |
| 785 int8 digit = name[pos] - '0'; | 793 int8 digit = name[pos] - '0'; |
| 786 if (digit < 0 || digit > 9) { | 794 if (digit < 0 || digit > 9) { |
| 787 return false; | 795 return false; |
| 788 } | 796 } |
| 789 index = index * 10 + digit; | 797 index = index * 10 + digit; |
| 790 } | 798 } |
| 799 if (!index.IsValid()) { |
| 800 return false; |
| 801 } |
| 791 getting_array_location = true; | 802 getting_array_location = true; |
| 792 } | 803 } |
| 793 *getting_array = getting_array_location; | 804 *getting_array = getting_array_location; |
| 794 *element_index = index; | 805 *element_index = index.ValueOrDie(); |
| 795 *array_pos = open_pos; | 806 *array_pos = open_pos; |
| 796 return true; | 807 return true; |
| 797 } | 808 } |
| 798 | 809 |
| 799 namespace { | 810 namespace { |
| 800 | 811 |
| 801 // WebGraphicsContext3DCommandBufferImpl configuration attributes. Those in | 812 // WebGraphicsContext3DCommandBufferImpl configuration attributes. Those in |
| 802 // the 16-bit range are the same as used by EGL. Those outside the 16-bit range | 813 // the 16-bit range are the same as used by EGL. Those outside the 16-bit range |
| 803 // are unique to Chromium. Attributes are matched using a closest fit algorithm. | 814 // are unique to Chromium. Attributes are matched using a closest fit algorithm. |
| 804 | 815 |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 } | 953 } |
| 943 | 954 |
| 944 return true; | 955 return true; |
| 945 } | 956 } |
| 946 | 957 |
| 947 #include "gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h" | 958 #include "gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h" |
| 948 | 959 |
| 949 } // namespace gles2 | 960 } // namespace gles2 |
| 950 } // namespace gpu | 961 } // namespace gpu |
| 951 | 962 |
| OLD | NEW |