| OLD | NEW |
| 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 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 6 | 6 |
| 7 #include <limits.h> | 7 #include <limits.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 #include <stdio.h> | 10 #include <stdio.h> |
| (...skipping 8265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8276 | 8276 |
| 8277 if (count == 0 || primcount == 0) { | 8277 if (count == 0 || primcount == 0) { |
| 8278 return error::kNoError; | 8278 return error::kNoError; |
| 8279 } | 8279 } |
| 8280 | 8280 |
| 8281 GLuint max_vertex_accessed; | 8281 GLuint max_vertex_accessed; |
| 8282 Buffer* element_array_buffer = | 8282 Buffer* element_array_buffer = |
| 8283 state_.vertex_attrib_manager->element_array_buffer(); | 8283 state_.vertex_attrib_manager->element_array_buffer(); |
| 8284 | 8284 |
| 8285 if (!element_array_buffer->GetMaxValueForRange( | 8285 if (!element_array_buffer->GetMaxValueForRange( |
| 8286 offset, count, type, | 8286 offset, count, type, &max_vertex_accessed)) { |
| 8287 state_.enable_flags.primitive_restart_fixed_index, | |
| 8288 &max_vertex_accessed)) { | |
| 8289 LOCAL_SET_GL_ERROR( | 8287 LOCAL_SET_GL_ERROR( |
| 8290 GL_INVALID_OPERATION, function_name, "range out of bounds for buffer"); | 8288 GL_INVALID_OPERATION, function_name, "range out of bounds for buffer"); |
| 8291 return error::kNoError; | 8289 return error::kNoError; |
| 8292 } | 8290 } |
| 8293 | 8291 |
| 8294 if (IsDrawValid(function_name, max_vertex_accessed, instanced, primcount)) { | 8292 if (IsDrawValid(function_name, max_vertex_accessed, instanced, primcount)) { |
| 8295 if (!ClearUnclearedTextures()) { | 8293 if (!ClearUnclearedTextures()) { |
| 8296 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "out of memory"); | 8294 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "out of memory"); |
| 8297 return error::kNoError; | 8295 return error::kNoError; |
| 8298 } | 8296 } |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8375 | 8373 |
| 8376 GLuint GLES2DecoderImpl::DoGetMaxValueInBufferCHROMIUM( | 8374 GLuint GLES2DecoderImpl::DoGetMaxValueInBufferCHROMIUM( |
| 8377 GLuint buffer_id, GLsizei count, GLenum type, GLuint offset) { | 8375 GLuint buffer_id, GLsizei count, GLenum type, GLuint offset) { |
| 8378 GLuint max_vertex_accessed = 0; | 8376 GLuint max_vertex_accessed = 0; |
| 8379 Buffer* buffer = GetBuffer(buffer_id); | 8377 Buffer* buffer = GetBuffer(buffer_id); |
| 8380 if (!buffer) { | 8378 if (!buffer) { |
| 8381 // TODO(gman): Should this be a GL error or a command buffer error? | 8379 // TODO(gman): Should this be a GL error or a command buffer error? |
| 8382 LOCAL_SET_GL_ERROR( | 8380 LOCAL_SET_GL_ERROR( |
| 8383 GL_INVALID_VALUE, "GetMaxValueInBufferCHROMIUM", "unknown buffer"); | 8381 GL_INVALID_VALUE, "GetMaxValueInBufferCHROMIUM", "unknown buffer"); |
| 8384 } else { | 8382 } else { |
| 8385 // The max value is used here to emulate client-side vertex | |
| 8386 // arrays, by uploading enough vertices into buffer objects to | |
| 8387 // cover the DrawElements call. Baking the primitive restart bit | |
| 8388 // into this result isn't strictly correct in all cases; the | |
| 8389 // client side code should pass down the bit and decide how to use | |
| 8390 // the result. However, the only caller makes the draw call | |
| 8391 // immediately afterward, so the state won't change between this | |
| 8392 // query and the draw call. | |
| 8393 if (!buffer->GetMaxValueForRange( | 8383 if (!buffer->GetMaxValueForRange( |
| 8394 offset, count, type, | 8384 offset, count, type, &max_vertex_accessed)) { |
| 8395 state_.enable_flags.primitive_restart_fixed_index, | |
| 8396 &max_vertex_accessed)) { | |
| 8397 // TODO(gman): Should this be a GL error or a command buffer error? | 8385 // TODO(gman): Should this be a GL error or a command buffer error? |
| 8398 LOCAL_SET_GL_ERROR( | 8386 LOCAL_SET_GL_ERROR( |
| 8399 GL_INVALID_OPERATION, | 8387 GL_INVALID_OPERATION, |
| 8400 "GetMaxValueInBufferCHROMIUM", "range out of bounds for buffer"); | 8388 "GetMaxValueInBufferCHROMIUM", "range out of bounds for buffer"); |
| 8401 } | 8389 } |
| 8402 } | 8390 } |
| 8403 return max_vertex_accessed; | 8391 return max_vertex_accessed; |
| 8404 } | 8392 } |
| 8405 | 8393 |
| 8406 void GLES2DecoderImpl::DoShaderSource( | 8394 void GLES2DecoderImpl::DoShaderSource( |
| (...skipping 7853 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16260 } | 16248 } |
| 16261 | 16249 |
| 16262 // Include the auto-generated part of this file. We split this because it means | 16250 // Include the auto-generated part of this file. We split this because it means |
| 16263 // we can easily edit the non-auto generated parts right here in this file | 16251 // we can easily edit the non-auto generated parts right here in this file |
| 16264 // instead of having to edit some template or the code generator. | 16252 // instead of having to edit some template or the code generator. |
| 16265 #include "base/macros.h" | 16253 #include "base/macros.h" |
| 16266 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 16254 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
| 16267 | 16255 |
| 16268 } // namespace gles2 | 16256 } // namespace gles2 |
| 16269 } // namespace gpu | 16257 } // namespace gpu |
| OLD | NEW |