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