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

Side by Side Diff: gpu/command_buffer/service/indexed_buffer_binding_host.cc

Issue 2165873002: Validate UniformBlocks being backed by sufficient data (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix a bug Created 4 years, 5 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) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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 #include "gpu/command_buffer/service/indexed_buffer_binding_host.h" 5 #include "gpu/command_buffer/service/indexed_buffer_binding_host.h"
6 6
7 #include "gpu/command_buffer/service/buffer_manager.h" 7 #include "gpu/command_buffer/service/buffer_manager.h"
8 8
9 namespace gpu { 9 namespace gpu {
10 namespace gles2 { 10 namespace gles2 {
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 Buffer* IndexedBufferBindingHost::GetBufferBinding(GLuint index) const { 188 Buffer* IndexedBufferBindingHost::GetBufferBinding(GLuint index) const {
189 DCHECK_LT(index, buffer_bindings_.size()); 189 DCHECK_LT(index, buffer_bindings_.size());
190 return buffer_bindings_[index].buffer.get(); 190 return buffer_bindings_[index].buffer.get();
191 } 191 }
192 192
193 GLsizeiptr IndexedBufferBindingHost::GetBufferSize(GLuint index) const { 193 GLsizeiptr IndexedBufferBindingHost::GetBufferSize(GLuint index) const {
194 DCHECK_LT(index, buffer_bindings_.size()); 194 DCHECK_LT(index, buffer_bindings_.size());
195 return buffer_bindings_[index].size; 195 return buffer_bindings_[index].size;
196 } 196 }
197 197
198 GLsizeiptr IndexedBufferBindingHost::GetEffectiveBufferSize(
199 GLuint index) const {
200 DCHECK_LT(index, buffer_bindings_.size());
201 const IndexedBufferBinding& binding = buffer_bindings_[index];
202 if (!binding.buffer.get())
203 return 0;
204 GLsizeiptr full_buffer_size = binding.buffer->size();
205 switch (binding.type) {
206 case kBindBufferBase:
207 return full_buffer_size;
208 case kBindBufferRange:
209 if (binding.offset + binding.size > full_buffer_size)
210 return full_buffer_size - binding.offset;
211 return binding.size;
212 case kBindBufferNone:
213 return 0;
214 }
215 return buffer_bindings_[index].size;
216 }
217
198 GLintptr IndexedBufferBindingHost::GetBufferStart(GLuint index) const { 218 GLintptr IndexedBufferBindingHost::GetBufferStart(GLuint index) const {
199 DCHECK_LT(index, buffer_bindings_.size()); 219 DCHECK_LT(index, buffer_bindings_.size());
200 return buffer_bindings_[index].offset; 220 return buffer_bindings_[index].offset;
201 } 221 }
202 222
203 void IndexedBufferBindingHost::RestoreBindings( 223 void IndexedBufferBindingHost::RestoreBindings(
204 IndexedBufferBindingHost* prev) { 224 IndexedBufferBindingHost* prev) {
205 size_t limit = max_non_null_binding_index_plus_one_; 225 size_t limit = max_non_null_binding_index_plus_one_;
206 if (prev && prev->max_non_null_binding_index_plus_one_ > limit) { 226 if (prev && prev->max_non_null_binding_index_plus_one_ > limit) {
207 limit = prev->max_non_null_binding_index_plus_one_; 227 limit = prev->max_non_null_binding_index_plus_one_;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 max_non_null_binding_index_plus_one_ = ii; 259 max_non_null_binding_index_plus_one_ = ii;
240 break; 260 break;
241 } 261 }
242 } 262 }
243 } 263 }
244 } 264 }
245 } 265 }
246 266
247 } // namespace gles2 267 } // namespace gles2
248 } // namespace gpu 268 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/indexed_buffer_binding_host.h ('k') | gpu/command_buffer/service/program_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698