15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is here so other GLES2 related files can have a common set of 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// includes where appropriate. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <GLES2/gl2.h> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <GLES2/gl2ext.h> 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <GLES2/gl2extchromium.h> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_format.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_utils.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gl_error_bit { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum GLErrorBit { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kNoError = 0, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kInvalidEnum = (1 << 0), 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kInvalidValue = (1 << 1), 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kInvalidOperation = (1 << 2), 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kOutOfMemory = (1 << 3), 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kInvalidFrameBufferOperation = (1 << 4) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GLES2Util::GLGetNumValuesReturned(int id) const { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (id) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // -- glGetBooleanv, glGetFloatv, glGetIntergerv 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ACTIVE_TEXTURE: 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ALIASED_LINE_WIDTH_RANGE: 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 2; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ALIASED_POINT_SIZE_RANGE: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 2; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ALPHA_BITS: 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ARRAY_BUFFER_BINDING: 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BLEND: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BLEND_COLOR: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 4; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BLEND_DST_ALPHA: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BLEND_DST_RGB: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BLEND_EQUATION_ALPHA: 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BLEND_EQUATION_RGB: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BLEND_SRC_ALPHA: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BLEND_SRC_RGB: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BLUE_BITS: 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_COLOR_CLEAR_VALUE: 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 4; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_COLOR_WRITEMASK: 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 4; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_COMPRESSED_TEXTURE_FORMATS: 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return num_compressed_texture_formats_; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_CULL_FACE: 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_CULL_FACE_MODE: 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_CURRENT_PROGRAM: 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_BITS: 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_CLEAR_VALUE: 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_FUNC: 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_RANGE: 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 2; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_TEST: 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_WRITEMASK: 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DITHER: 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ELEMENT_ARRAY_BUFFER_BINDING: 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FRAMEBUFFER_BINDING: 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FRONT_FACE: 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_GENERATE_MIPMAP_HINT: 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_GREEN_BITS: 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_IMPLEMENTATION_COLOR_READ_FORMAT: 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_IMPLEMENTATION_COLOR_READ_TYPE: 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_LINE_WIDTH: 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_CUBE_MAP_TEXTURE_SIZE: 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_FRAGMENT_UNIFORM_VECTORS: 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_RENDERBUFFER_SIZE: 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_TEXTURE_IMAGE_UNITS: 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_TEXTURE_SIZE: 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_VARYING_VECTORS: 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_VERTEX_ATTRIBS: 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_VERTEX_UNIFORM_VECTORS: 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_VIEWPORT_DIMS: 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 2; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_NUM_COMPRESSED_TEXTURE_FORMATS: 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_NUM_SHADER_BINARY_FORMATS: 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_PACK_ALIGNMENT: 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_PACK_REVERSE_ROW_ORDER_ANGLE: 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_POLYGON_OFFSET_FACTOR: 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_POLYGON_OFFSET_FILL: 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_POLYGON_OFFSET_UNITS: 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RED_BITS: 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RENDERBUFFER_BINDING: 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SAMPLE_BUFFERS: 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SAMPLE_COVERAGE_INVERT: 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SAMPLE_COVERAGE_VALUE: 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SAMPLES: 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SCISSOR_BOX: 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 4; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SCISSOR_TEST: 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SHADER_BINARY_FORMATS: 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return num_shader_binary_formats_; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SHADER_COMPILER: 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_BACK_FAIL: 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_BACK_FUNC: 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_BACK_PASS_DEPTH_FAIL: 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_BACK_PASS_DEPTH_PASS: 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_BACK_REF: 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_BACK_VALUE_MASK: 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_BACK_WRITEMASK: 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_BITS: 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_CLEAR_VALUE: 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_FAIL: 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_FUNC: 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_PASS_DEPTH_FAIL: 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_PASS_DEPTH_PASS: 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_REF: 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_TEST: 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_VALUE_MASK: 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_WRITEMASK: 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SUBPIXEL_BITS: 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_TEXTURE_BINDING_2D: 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_TEXTURE_BINDING_CUBE_MAP: 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_TEXTURE_BINDING_EXTERNAL_OES: 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_TEXTURE_BINDING_RECTANGLE_ARB: 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case GL_TEXTURE_IMMUTABLE_FORMAT_EXT: 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 1; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNPACK_ALIGNMENT: 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_VIEWPORT: 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 4; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // -- glGetBooleanv, glGetFloatv, glGetIntergerv with 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GL_CHROMIUM_framebuffer_multisample 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_SAMPLES_EXT: 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // -- glGetBufferParameteriv 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BUFFER_SIZE: 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BUFFER_USAGE: 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // -- glGetFramebufferAttachmentParameteriv 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // -- glGetFramebufferAttachmentParameteriv with 2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // GL_EXT_multisampled_render_to_texture 2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT: 2347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return 1; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // -- glGetProgramiv 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DELETE_STATUS: 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_LINK_STATUS: 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_VALIDATE_STATUS: 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_INFO_LOG_LENGTH: 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ATTACHED_SHADERS: 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ACTIVE_ATTRIBUTES: 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ACTIVE_UNIFORMS: 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ACTIVE_UNIFORM_MAX_LENGTH: 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // -- glGetRenderbufferAttachmentParameteriv 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RENDERBUFFER_WIDTH: 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RENDERBUFFER_HEIGHT: 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RENDERBUFFER_INTERNAL_FORMAT: 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RENDERBUFFER_RED_SIZE: 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RENDERBUFFER_GREEN_SIZE: 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RENDERBUFFER_BLUE_SIZE: 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RENDERBUFFER_ALPHA_SIZE: 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RENDERBUFFER_DEPTH_SIZE: 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RENDERBUFFER_STENCIL_SIZE: 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // -- glGetRenderbufferAttachmentParameteriv with 2777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // GL_EXT_multisampled_render_to_texture 2787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch case GL_RENDERBUFFER_SAMPLES_EXT: 2797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return 1; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // -- glGetShaderiv 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SHADER_TYPE: 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Already defined under glGetFramebufferAttachemntParameteriv. 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // case GL_DELETE_STATUS: 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return 1; 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_COMPILE_STATUS: 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Already defined under glGetFramebufferAttachemntParameteriv. 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // case GL_INFO_LOG_LENGTH: 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return 1; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SHADER_SOURCE_LENGTH: 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE: 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // -- glGetTexParameterfv, glGetTexParameteriv 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_TEXTURE_MAG_FILTER: 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_TEXTURE_MIN_FILTER: 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_TEXTURE_WRAP_S: 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_TEXTURE_WRAP_T: 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_TEXTURE_MAX_ANISOTROPY_EXT: 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // -- glGetVertexAttribfv, glGetVertexAttribiv 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_VERTEX_ATTRIB_ARRAY_ENABLED: 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_VERTEX_ATTRIB_ARRAY_SIZE: 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_VERTEX_ATTRIB_ARRAY_STRIDE: 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_VERTEX_ATTRIB_ARRAY_TYPE: 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_CURRENT_VERTEX_ATTRIB: 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 4; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // -- glHint with GL_OES_standard_derivatives 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES: 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bad enum 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Return the number of elements per group of a specified format. 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ElementsPerGroup(int format, int type) { 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_SHORT_5_6_5: 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_SHORT_4_4_4_4: 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_SHORT_5_5_5_1: 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_INT_24_8_OES: 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (format) { 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGB: 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 3; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_LUMINANCE_ALPHA: 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 2; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGBA: 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BGRA_EXT: 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 4; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ALPHA: 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_LUMINANCE: 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_COMPONENT: 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_COMPONENT24_OES: 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_COMPONENT32_OES: 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_COMPONENT16: 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH24_STENCIL8_OES: 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_STENCIL_OES: 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Return the number of bytes per element, based on the element type. 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int BytesPerElement(int type) { 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FLOAT: 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_INT_24_8_OES: 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_INT: 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 4; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_HALF_FLOAT_OES: 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_SHORT: 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SHORT: 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_SHORT_5_6_5: 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_SHORT_4_4_4_4: 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_SHORT_5_5_5_1: 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 2; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_BYTE: 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BYTE: 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // anonymous namespace 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 GLES2Util::ComputeImageGroupSize(int format, int type) { 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return BytesPerElement(type) * ElementsPerGroup(format, type); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2Util::ComputeImagePaddedRowSize( 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int width, int format, int type, int unpack_alignment, 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32* padded_row_size) { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 bytes_per_group = ComputeImageGroupSize(format, type); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 unpadded_row_size; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(width, bytes_per_group, &unpadded_row_size)) { 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 temp; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeAddUint32(unpadded_row_size, unpack_alignment - 1, &temp)) { 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *padded_row_size = (temp / unpack_alignment) * unpack_alignment; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the amount of data glTexImage2D or glTexSubImage2D will access. 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2Util::ComputeImageDataSizes( 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int width, int height, int format, int type, int unpack_alignment, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32* size, uint32* ret_unpadded_row_size, uint32* ret_padded_row_size) { 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 bytes_per_group = ComputeImageGroupSize(format, type); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 row_size; 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(width, bytes_per_group, &row_size)) { 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (height > 1) { 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 temp; 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeAddUint32(row_size, unpack_alignment - 1, &temp)) { 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 padded_row_size = (temp / unpack_alignment) * unpack_alignment; 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 size_of_all_but_last_row; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32((height - 1), padded_row_size, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &size_of_all_but_last_row)) { 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeAddUint32(size_of_all_but_last_row, row_size, size)) { 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret_padded_row_size) { 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *ret_padded_row_size = padded_row_size; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SafeMultiplyUint32(height, row_size, size)) { 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret_padded_row_size) { 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *ret_padded_row_size = row_size; 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret_unpadded_row_size) { 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *ret_unpadded_row_size = row_size; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t GLES2Util::RenderbufferBytesPerPixel(int format) { 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (format) { 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_INDEX8: 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGBA4: 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGB565: 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGB5_A1: 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_COMPONENT16: 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 2; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGB: 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGBA: 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH24_STENCIL8_OES: 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGB8_OES: 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGBA8_OES: 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_COMPONENT24_OES: 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 4; 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 GLES2Util::GetGLDataTypeSizeForUniforms(int type) { 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FLOAT: 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLfloat); // NOLINT 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FLOAT_VEC2: 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLfloat) * 2; // NOLINT 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FLOAT_VEC3: 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLfloat) * 3; // NOLINT 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FLOAT_VEC4: 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLfloat) * 4; // NOLINT 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_INT: 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint); // NOLINT 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_INT_VEC2: 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint) * 2; // NOLINT 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_INT_VEC3: 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint) * 3; // NOLINT 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_INT_VEC4: 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint) * 4; // NOLINT 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BOOL: 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint); // NOLINT 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BOOL_VEC2: 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint) * 2; // NOLINT 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BOOL_VEC3: 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint) * 3; // NOLINT 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BOOL_VEC4: 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint) * 4; // NOLINT 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FLOAT_MAT2: 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLfloat) * 2 * 2; // NOLINT 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FLOAT_MAT3: 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLfloat) * 3 * 3; // NOLINT 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FLOAT_MAT4: 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLfloat) * 4 * 4; // NOLINT 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SAMPLER_2D: 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint); // NOLINT 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SAMPLER_2D_RECT_ARB: 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint); // NOLINT 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SAMPLER_CUBE: 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint); // NOLINT 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SAMPLER_EXTERNAL_OES: 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint); // NOLINT 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t GLES2Util::GetGLTypeSizeForTexturesAndBuffers(uint32 type) { 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BYTE: 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLbyte); // NOLINT 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_BYTE: 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLubyte); // NOLINT 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_SHORT: 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLshort); // NOLINT 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_SHORT: 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLushort); // NOLINT 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_INT: 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLint); // NOLINT 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_UNSIGNED_INT: 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLuint); // NOLINT 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FLOAT: 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLfloat); // NOLINT 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_FIXED: 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(GLfixed); // NOLINT 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 GLES2Util::GLErrorToErrorBit(uint32 error) { 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (error) { 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_INVALID_ENUM: 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gl_error_bit::kInvalidEnum; 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_INVALID_VALUE: 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gl_error_bit::kInvalidValue; 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_INVALID_OPERATION: 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gl_error_bit::kInvalidOperation; 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_OUT_OF_MEMORY: 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gl_error_bit::kOutOfMemory; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_INVALID_FRAMEBUFFER_OPERATION: 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gl_error_bit::kInvalidFrameBufferOperation; 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NOTREACHED(); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gl_error_bit::kNoError; 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 GLES2Util::GLErrorBitToGLError(uint32 error_bit) { 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (error_bit) { 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case gl_error_bit::kInvalidEnum: 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GL_INVALID_ENUM; 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case gl_error_bit::kInvalidValue: 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GL_INVALID_VALUE; 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case gl_error_bit::kInvalidOperation: 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GL_INVALID_OPERATION; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case gl_error_bit::kOutOfMemory: 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GL_OUT_OF_MEMORY; 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case gl_error_bit::kInvalidFrameBufferOperation: 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GL_INVALID_FRAMEBUFFER_OPERATION; 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 576f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NOTREACHED(); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GL_NO_ERROR; 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 GLES2Util::IndexToGLFaceTarget(int index) { 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static uint32 faces[] = { 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_TEXTURE_CUBE_MAP_POSITIVE_X, 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return faces[index]; 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 593a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)uint32 GLES2Util::GetPreferredGLReadPixelsFormat(uint32 internal_format) { 594a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) switch (internal_format) { 595a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_RGB16F_EXT: 596a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_RGB32F_EXT: 597a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return GL_RGB; 598a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_RGBA16F_EXT: 599a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_RGBA32F_EXT: 600a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return GL_RGBA; 601a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) default: 602a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return GL_RGBA; 603a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 604a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 605a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 606a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)uint32 GLES2Util::GetPreferredGLReadPixelsType( 607a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32 internal_format, uint32 texture_type) { 608a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) switch (internal_format) { 609a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_RGBA32F_EXT: 610a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_RGB32F_EXT: 611a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return GL_FLOAT; 612a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_RGBA16F_EXT: 613a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_RGB16F_EXT: 614a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return GL_HALF_FLOAT_OES; 615a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_RGBA: 616a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_RGB: 617a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Unsized internal format, check the type 618a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) switch (texture_type) { 619a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_FLOAT: 620a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case GL_HALF_FLOAT_OES: 621a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return GL_FLOAT; 622a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) default: 623a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return GL_UNSIGNED_BYTE; 624a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 625a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) default: 626a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return GL_UNSIGNED_BYTE; 627a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 628a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 629a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 GLES2Util::GetChannelsForFormat(int format) { 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (format) { 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ALPHA: 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ALPHA16F_EXT: 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_ALPHA32F_EXT: 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kAlpha; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_LUMINANCE: 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kRGB; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_LUMINANCE_ALPHA: 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kRGBA; 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGB: 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGB8_OES: 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGB565: 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGB16F_EXT: 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGB32F_EXT: 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kRGB; 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BGRA_EXT: 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_BGRA8_EXT: 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGBA16F_EXT: 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGBA32F_EXT: 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGBA: 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGBA8_OES: 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGBA4: 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_RGB5_A1: 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kRGBA; 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_COMPONENT32_OES: 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_COMPONENT24_OES: 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_COMPONENT16: 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_COMPONENT: 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kDepth; 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_INDEX8: 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kStencil; 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_STENCIL_OES: 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH24_STENCIL8_OES: 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kDepth | kStencil; 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0x0000; 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint32 GLES2Util::GetChannelsNeededForAttachmentType( 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int type, uint32 max_color_attachments) { 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_DEPTH_ATTACHMENT: 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kDepth; 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GL_STENCIL_ATTACHMENT: 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kStencil; 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type >= GL_COLOR_ATTACHMENT0 && 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type < static_cast<int>( 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_COLOR_ATTACHMENT0 + max_color_attachments)) { 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kRGBA; 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0x0000; 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GLES2Util::GetStringEnum(uint32 value) { 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const EnumToString* entry = enum_to_string_table_; 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const EnumToString* end = entry + enum_to_string_table_len_; 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (;entry < end; ++entry) { 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value == entry->value) { 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return entry->name; 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char buffer[20]; 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sprintf(buffer, (value < 0x10000) ? "0x%04x" : "0x%08x", value); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return buffer; 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GLES2Util::GetStringError(uint32 value) { 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static EnumToString string_table[] = { 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { GL_NONE, "GL_NONE" }, 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GLES2Util::GetQualifiedEnumString( 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string_table, arraysize(string_table), value); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GLES2Util::GetStringBool(uint32 value) { 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return value ? "GL_TRUE" : "GL_FALSE"; 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GLES2Util::GetQualifiedEnumString( 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const EnumToString* table, size_t count, uint32 value) { 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (const EnumToString* end = table + count; table < end; ++table) { 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (table->value == value) { 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return table->name; 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetStringEnum(value); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2Util::ParseUniformName( 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name, 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t* array_pos, 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* element_index, 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* getting_array) { 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool getting_array_location = false; 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t open_pos = std::string::npos; 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index = 0; 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (name[name.size() - 1] == ']') { 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (name.size() < 3) { 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) open_pos = name.find_last_of('['); 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (open_pos == std::string::npos || 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) open_pos >= name.size() - 2) { 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t last = name.size() - 1; 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t pos = open_pos + 1; pos < last; ++pos) { 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int8 digit = name[pos] - '0'; 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (digit < 0 || digit > 9) { 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) index = index * 10 + digit; 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getting_array_location = true; 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *getting_array = getting_array_location; 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *element_index = index; 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *array_pos = open_pos; 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace { 7563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 7573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// From <EGL/egl.h>. 7583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kAlphaSize = 0x3021; // EGL_ALPHA_SIZE 7593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kBlueSize = 0x3022; // EGL_BLUE_SIZE 7603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kGreenSize = 0x3023; // EGL_GREEN_SIZE 7613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kRedSize = 0x3024; // EGL_RED_SIZE 7623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kDepthSize = 0x3025; // EGL_DEPTH_SIZE 7633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kStencilSize = 0x3026; // EGL_STENCIL_SIZE 7643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kSamples = 0x3031; // EGL_SAMPLES 7653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kSampleBuffers = 0x3032; // EGL_SAMPLE_BUFFERS 7663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kNone = 0x3038; // EGL_NONE 7673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kSwapBehavior = 0x3093; // EGL_SWAP_BEHAVIOR 7683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kBufferPreserved = 0x3094; // EGL_BUFFER_PRESERVED 7693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kBufferDestroyed = 0x3095; // EGL_BUFFER_DESTROYED 7703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 7713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Chromium only. 7723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kShareResources = 0x10000; 7733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const int32 kBindGeneratesResource = 0x10001; 774f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const int32 kFailIfMajorPerfCaveat = 0x10002; 7753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 7763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} // namespace 7773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 7783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)ContextCreationAttribHelper::ContextCreationAttribHelper() 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : alpha_size_(-1), 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blue_size_(-1), 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) green_size_(-1), 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) red_size_(-1), 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) depth_size_(-1), 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stencil_size_(-1), 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) samples_(-1), 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sample_buffers_(-1), 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer_preserved_(true), 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) share_resources_(false), 789f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bind_generates_resource_(true), 790f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fail_if_major_perf_caveat_(false) { 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void ContextCreationAttribHelper::Serialize(std::vector<int32>* attribs) { 7943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (alpha_size_ != -1) { 7953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kAlphaSize); 7963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(alpha_size_); 7973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 7983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (blue_size_ != -1) { 7993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kBlueSize); 8003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(blue_size_); 8013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 8023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (green_size_ != -1) { 8033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kGreenSize); 8043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(green_size_); 8053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 8063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (red_size_ != -1) { 8073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kRedSize); 8083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(red_size_); 8093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 8103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (depth_size_ != -1) { 8113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kDepthSize); 8123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(depth_size_); 8133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 8143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (stencil_size_ != -1) { 8153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kStencilSize); 8163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(stencil_size_); 8173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 8183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (samples_ != -1) { 8193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kSamples); 8203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(samples_); 8213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 8223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (sample_buffers_ != -1) { 8233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kSampleBuffers); 8243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(sample_buffers_); 8253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 8263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kSwapBehavior); 8273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(buffer_preserved_ ? kBufferPreserved : kBufferDestroyed); 8283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kShareResources); 8293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(share_resources_ ? 1 : 0); 8303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kBindGeneratesResource); 8313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(bind_generates_resource_ ? 1 : 0); 832f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) attribs->push_back(kFailIfMajorPerfCaveat); 833f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) attribs->push_back(fail_if_major_perf_caveat_ ? 1 : 0); 8343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) attribs->push_back(kNone); 8353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool ContextCreationAttribHelper::Parse(const std::vector<int32>& attribs) { 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < attribs.size(); i += 2) { 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int32 attrib = attribs[i]; 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i + 1 >= attribs.size()) { 8413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (attrib == kNone) { 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DLOG(ERROR) << "Missing value after context creation attribute: " 846f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) << attrib; 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int32 value = attribs[i+1]; 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (attrib) { 8523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kAlphaSize: 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alpha_size_ = value; 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kBlueSize: 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blue_size_ = value; 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kGreenSize: 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) green_size_ = value; 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kRedSize: 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) red_size_ = value; 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kDepthSize: 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) depth_size_ = value; 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kStencilSize: 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stencil_size_ = value; 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kSamples: 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) samples_ = value; 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kSampleBuffers: 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sample_buffers_ = value; 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kSwapBehavior: 8773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) buffer_preserved_ = value == kBufferPreserved; 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kShareResources: 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) share_resources_ = value != 0; 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kBindGeneratesResource: 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bind_generates_resource_ = value != 0; 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 885f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case kFailIfMajorPerfCaveat: 886f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fail_if_major_perf_caveat_ = value != 0; 887f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) break; 8883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case kNone: 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Terminate list, even if more attributes. 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 892f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DLOG(ERROR) << "Invalid context creation attribute: " << attrib; 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 90090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h" 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gles2 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gpu 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905