Index: gpu/command_buffer/service/vertex_attrib_manager.cc |
=================================================================== |
--- gpu/command_buffer/service/vertex_attrib_manager.cc (revision 186458) |
+++ gpu/command_buffer/service/vertex_attrib_manager.cc (working copy) |
@@ -9,17 +9,13 @@ |
#include "base/command_line.h" |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
-#include "base/string_number_conversions.h" |
#include "build/build_config.h" |
#define GLES2_GPU_SERVICE 1 |
#include "gpu/command_buffer/common/gles2_cmd_format.h" |
#include "gpu/command_buffer/common/gles2_cmd_utils.h" |
#include "gpu/command_buffer/service/buffer_manager.h" |
-#include "gpu/command_buffer/service/feature_info.h" |
#include "gpu/command_buffer/service/gl_utils.h" |
-#include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
#include "gpu/command_buffer/service/gpu_switches.h" |
-#include "gpu/command_buffer/service/program_manager.h" |
#include "gpu/command_buffer/service/vertex_array_manager.h" |
namespace gpu { |
@@ -35,7 +31,6 @@ |
gl_stride_(0), |
real_stride_(16), |
divisor_(0), |
- is_client_side_array_(false), |
list_(NULL) { |
} |
@@ -159,114 +154,5 @@ |
} |
} |
-bool VertexAttribManager::ValidateBindings( |
- const char* function_name, |
- GLES2Decoder* decoder, |
- FeatureInfo* feature_info, |
- Program* current_program, |
- GLuint max_vertex_accessed, |
- GLsizei primcount) { |
- // true if any enabled, used divisor is zero |
- bool divisor0 = false; |
- const GLuint kInitialBufferId = 0xFFFFFFFFU; |
- GLuint current_buffer_id = kInitialBufferId; |
- bool use_client_side_arrays_for_stream_buffers = feature_info->workarounds( |
- ).use_client_side_arrays_for_stream_buffers; |
- // Validate all attribs currently enabled. If they are used by the current |
- // program then check that they have enough elements to handle the draw call. |
- // If they are not used by the current program check that they have a buffer |
- // assigned. |
- for (VertexAttribInfoList::iterator it = enabled_vertex_attribs_.begin(); |
- it != enabled_vertex_attribs_.end(); ++it) { |
- VertexAttrib* attrib = *it; |
- const Program::VertexAttrib* attrib_info = |
- current_program->GetAttribInfoByLocation(attrib->index()); |
- if (attrib_info) { |
- divisor0 |= (attrib->divisor() == 0); |
- GLuint count = attrib->MaxVertexAccessed(primcount, max_vertex_accessed); |
- // This attrib is used in the current program. |
- if (!attrib->CanAccess(count)) { |
- decoder->SetGLError( |
- GL_INVALID_OPERATION, function_name, |
- (std::string( |
- "attempt to access out of range vertices in attribute ") + |
- base::IntToString(attrib->index())).c_str()); |
- return false; |
- } |
- if (use_client_side_arrays_for_stream_buffers) { |
- Buffer* buffer = attrib->buffer(); |
- glEnableVertexAttribArray(attrib->index()); |
- if (buffer->IsClientSideArray()) { |
- if (current_buffer_id != 0) { |
- current_buffer_id = 0; |
- glBindBuffer(GL_ARRAY_BUFFER, 0); |
- } |
- attrib->set_is_client_side_array(true); |
- const void* ptr = buffer->GetRange(attrib->offset(), 0); |
- DCHECK(ptr); |
- glVertexAttribPointer( |
- attrib->index(), |
- attrib->size(), |
- attrib->type(), |
- attrib->normalized(), |
- attrib->gl_stride(), |
- ptr); |
- } else if (attrib->is_client_side_array()) { |
- attrib->set_is_client_side_array(false); |
- GLuint new_buffer_id = buffer->service_id(); |
- if (new_buffer_id != current_buffer_id) { |
- current_buffer_id = new_buffer_id; |
- glBindBuffer(GL_ARRAY_BUFFER, current_buffer_id); |
- } |
- const void* ptr = reinterpret_cast<const void*>(attrib->offset()); |
- glVertexAttribPointer( |
- attrib->index(), |
- attrib->size(), |
- attrib->type(), |
- attrib->normalized(), |
- attrib->gl_stride(), |
- ptr); |
- } |
- } |
- } else { |
- // This attrib is not used in the current program. |
- if (!attrib->buffer()) { |
- decoder->SetGLError( |
- GL_INVALID_OPERATION, function_name, |
- (std::string( |
- "attempt to render with no buffer attached to " |
- "enabled attribute ") + |
- base::IntToString(attrib->index())).c_str()); |
- return false; |
- } else if (use_client_side_arrays_for_stream_buffers) { |
- Buffer* buffer = attrib->buffer(); |
- // Disable client side arrays for unused attributes else we'll |
- // read bad memory |
- if (buffer->IsClientSideArray()) { |
- // Don't disable attrib 0 since it's special. |
- if (attrib->index() > 0) { |
- glDisableVertexAttribArray(attrib->index()); |
- } |
- } |
- } |
- } |
- } |
- |
- if (primcount && !divisor0) { |
- decoder->SetGLError( |
- GL_INVALID_OPERATION, function_name, |
- "attempt instanced render with all attributes having " |
- "non-zero divisors"); |
- return false; |
- } |
- |
- if (current_buffer_id != kInitialBufferId) { |
- // Restore the buffer binding. |
- decoder->RestoreBufferBindings(); |
- } |
- |
- return true; |
-} |
- |
} // namespace gles2 |
} // namespace gpu |