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

Side by Side Diff: gpu/command_buffer/common/gles2_cmd_utils.h

Issue 1028333002: Chromium -> Mojo roll. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file is here so other GLES2 related files can have a common set of 5 // This file is here so other GLES2 related files can have a common set of
6 // includes where appropriate. 6 // includes where appropriate.
7 7
8 #ifndef GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_H_ 8 #ifndef GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_H_
9 #define GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_H_ 9 #define GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_H_
10 10
11 #include <stdint.h> 11 #include <stdint.h>
12 12
13 #include <limits> 13 #include <limits>
14 #include <string> 14 #include <string>
15 #include <vector> 15 #include <vector>
16 16
17 #include "base/numerics/safe_math.h"
17 #include "gpu/command_buffer/common/gles2_utils_export.h" 18 #include "gpu/command_buffer/common/gles2_utils_export.h"
18 19
19 namespace gpu { 20 namespace gpu {
20 namespace gles2 { 21 namespace gles2 {
21 22
22 // Does a multiply and checks for overflow. If the multiply did not overflow 23 // Does a multiply and checks for overflow. If the multiply did not overflow
23 // returns true. 24 // returns true.
24 25
25 // Multiplies 2 32 bit unsigned numbers checking for overflow. 26 // Multiplies 2 32 bit unsigned numbers checking for overflow.
26 // If there was no overflow returns true. 27 // If there was no overflow returns true.
27 inline bool SafeMultiplyUint32(uint32_t a, uint32_t b, uint32_t* dst) { 28 inline bool SafeMultiplyUint32(uint32_t a, uint32_t b, uint32_t* dst) {
28 if (b == 0) { 29 DCHECK(dst);
29 *dst = 0; 30 base::CheckedNumeric<uint32_t> checked = a;
30 return true; 31 checked *= b;
31 } 32 *dst = checked.ValueOrDefault(0);
32 uint32_t v = a * b; 33 return checked.IsValid();
33 if (v / b != a) {
34 *dst = 0;
35 return false;
36 }
37 *dst = v;
38 return true;
39 } 34 }
40 35
41 // Does an add checking for overflow. If there was no overflow returns true. 36 // Does an add checking for overflow. If there was no overflow returns true.
42 inline bool SafeAddUint32(uint32_t a, uint32_t b, uint32_t* dst) { 37 inline bool SafeAddUint32(uint32_t a, uint32_t b, uint32_t* dst) {
43 if (a + b < a) { 38 DCHECK(dst);
44 *dst = 0; 39 base::CheckedNumeric<uint32_t> checked = a;
45 return false; 40 checked += b;
46 } 41 *dst = checked.ValueOrDefault(0);
47 *dst = a + b; 42 return checked.IsValid();
48 return true;
49 } 43 }
50 44
51 // Does an add checking for overflow. If there was no overflow returns true. 45 // Does an add checking for overflow. If there was no overflow returns true.
52 inline bool SafeAddInt32(int32_t a, int32_t b, int32_t* dst) { 46 inline bool SafeAddInt32(int32_t a, int32_t b, int32_t* dst) {
53 int64_t sum64 = static_cast<int64_t>(a) + b; 47 DCHECK(dst);
54 int32_t sum32 = static_cast<int32_t>(sum64); 48 base::CheckedNumeric<int32_t> checked = a;
55 bool safe = sum64 == static_cast<int64_t>(sum32); 49 checked += b;
56 *dst = safe ? sum32 : 0; 50 *dst = checked.ValueOrDefault(0);
57 return safe; 51 return checked.IsValid();
58 }
59
60 // Return false if |value| is more than a 32 bit integer can represent.
61 template<typename T>
62 inline bool FitInt32NonNegative(T value) {
63 const int32_t max = std::numeric_limits<int32_t>::max();
64 return (std::numeric_limits<T>::max() <= max ||
65 value <= static_cast<T>(max));
66 } 52 }
67 53
68 // Utilties for GLES2 support. 54 // Utilties for GLES2 support.
69 class GLES2_UTILS_EXPORT GLES2Util { 55 class GLES2_UTILS_EXPORT GLES2Util {
70 public: 56 public:
71 static const int kNumFaces = 6; 57 static const int kNumFaces = 6;
72 58
73 // Bits returned by GetChannelsForFormat 59 // Bits returned by GetChannelsForFormat
74 enum ChannelBits { 60 enum ChannelBits {
75 kRed = 0x1, 61 kRed = 0x1,
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 bool fail_if_major_perf_caveat; 212 bool fail_if_major_perf_caveat;
227 bool lose_context_when_out_of_memory; 213 bool lose_context_when_out_of_memory;
228 bool es3_context_required; 214 bool es3_context_required;
229 }; 215 };
230 216
231 } // namespace gles2 217 } // namespace gles2
232 } // namespace gpu 218 } // namespace gpu
233 219
234 #endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_H_ 220 #endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_H_
235 221
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/gles2_implementation.cc ('k') | gpu/command_buffer/common/gles2_cmd_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698