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)#ifndef GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_H_ 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_H_ 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <stdint.h> 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <limits> 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/gles2_utils_export.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Does a multiply and checks for overflow. If the multiply did not overflow 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// returns true. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Multiplies 2 32 bit unsigned numbers checking for overflow. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If there was no overflow returns true. 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)inline bool SafeMultiplyUint32(uint32_t a, uint32_t b, uint32_t* dst) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (b == 0) { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *dst = 0; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t v = a * b; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v / b != a) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *dst = 0; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *dst = v; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Does an add checking for overflow. If there was no overflow returns true. 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)inline bool SafeAddUint32(uint32_t a, uint32_t b, uint32_t* dst) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (a + b < a) { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *dst = 0; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *dst = a + b; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Does an add checking for overflow. If there was no overflow returns true. 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)inline bool SafeAddInt32(int32_t a, int32_t b, int32_t* dst) { 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int64_t sum64 = static_cast<int64_t>(a) + b; 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int32_t sum32 = static_cast<int32_t>(sum64); 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool safe = sum64 == static_cast<int64_t>(sum32); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *dst = safe ? sum32 : 0; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return safe; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Return false if |value| is more than a 32 bit integer can represent. 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liutemplate<typename T> 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuinline bool FitInt32NonNegative(T value) { 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const int32_t max = std::numeric_limits<int32_t>::max(); 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return (std::numeric_limits<T>::max() <= max || 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu value <= static_cast<T>(max)); 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Utilties for GLES2 support. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GLES2_UTILS_EXPORT GLES2Util { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int kNumFaces = 6; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bits returned by GetChannelsForFormat 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum ChannelBits { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kRed = 0x1, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kGreen = 0x2, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlue = 0x4, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAlpha = 0x8, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kDepth = 0x10000, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kStencil = 0x20000, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kRGB = kRed | kGreen | kBlue, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kRGBA = kRGB | kAlpha 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct EnumToString { 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t value; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* name; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2Util() 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : num_compressed_texture_formats_(0), 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_shader_binary_formats_(0) { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_compressed_texture_formats() const { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return num_compressed_texture_formats_; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_num_compressed_texture_formats(int num_compressed_texture_formats) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_compressed_texture_formats_ = num_compressed_texture_formats; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_shader_binary_formats() const { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return num_shader_binary_formats_; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_num_shader_binary_formats(int num_shader_binary_formats) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_shader_binary_formats_ = num_shader_binary_formats; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the number of values a particular id will return when a glGet 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // function is called. If 0 is returned the id is invalid. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GLGetNumValuesReturned(int id) const; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Computes the size of a single group of elements from a format and type pair 117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static uint32_t ComputeImageGroupSize(int format, int type); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Computes the size of an image row including alignment padding 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool ComputeImagePaddedRowSize( 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int width, int format, int type, int unpack_alignment, 122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t* padded_row_size); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Computes the size of image data for TexImage2D and TexSubImage2D. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Optionally the unpadded and padded row sizes can be returned. If height < 2 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then the padded_row_size will be the same as the unpadded_row_size since 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // padding is not necessary. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool ComputeImageDataSizes( 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int width, int height, int format, int type, int unpack_alignment, 130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t* size, uint32_t* unpadded_row_size, uint32_t* padded_row_size); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static size_t RenderbufferBytesPerPixel(int format); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static uint32_t GetGLDataTypeSizeForUniforms(int type); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static size_t GetGLTypeSizeForTexturesAndBuffers(uint32_t type); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static uint32_t GLErrorToErrorBit(uint32_t gl_error); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static uint32_t GLErrorBitToGLError(uint32_t error_bit); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static uint32_t IndexToGLFaceTarget(int index); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static size_t GLTargetToFaceIndex(uint32_t target); 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static uint32_t GetPreferredGLReadPixelsFormat(uint32_t internal_format); 147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static uint32_t GetPreferredGLReadPixelsType( 149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32_t internal_format, uint32_t texture_type); 150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a bitmask for the channels the given format supports. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See ChannelBits. 153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static uint32_t GetChannelsForFormat(int format); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a bitmask for the channels the given attachment type needs. 156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static uint32_t GetChannelsNeededForAttachmentType( 157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int type, uint32_t max_color_attachments); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Return true if value is neither a power of two nor zero. 160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static bool IsNPOT(uint32_t value) { 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (value & (value - 1)) != 0; 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Return true if value is a power of two or zero. 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static bool IsPOT(uint32_t value) { 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (value & (value - 1)) == 0; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static std::string GetStringEnum(uint32_t value); 170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static std::string GetStringBool(uint32_t value); 171010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static std::string GetStringError(uint32_t value); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses a uniform name. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // array_pos: the position of the last '[' character in name. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // element_index: the index of the array element specifed in the name. 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // getting_array: True if name refers to array. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns true of parsing was successful. Returing true does NOT mean 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it's a valid uniform name. On the otherhand, returning false does mean 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it's an invalid uniform name. 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool ParseUniformName( 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t* array_pos, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* element_index, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* getting_array); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #include "../common/gles2_cmd_utils_autogen.h" 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string GetQualifiedEnumString( 190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const EnumToString* table, size_t count, uint32_t value); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static const EnumToString* const enum_to_string_table_; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const size_t enum_to_string_table_len_; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_compressed_texture_formats_; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_shader_binary_formats_; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)struct GLES2_UTILS_EXPORT ContextCreationAttribHelper { 2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ContextCreationAttribHelper(); 2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void Serialize(std::vector<int32_t>* attribs) const; 203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool Parse(const std::vector<int32_t>& attribs); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // -1 if invalid or unspecified. 2066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int32_t alpha_size; 2076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int32_t blue_size; 2086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int32_t green_size; 2096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int32_t red_size; 2106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int32_t depth_size; 2116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int32_t stencil_size; 2126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int32_t samples; 2136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int32_t sample_buffers; 2146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool buffer_preserved; 2156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool bind_generates_resource; 2166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool fail_if_major_perf_caveat; 2176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool lose_context_when_out_of_memory; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gles2 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gpu 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_H_ 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225