Move VertexAttribManager to another file.

Just trying to slowly pair down gles2_cmd_decoder.cc

TEST=unit tests
BUG=none

[email protected]

Review URL: http://codereview.chromium.org/7331023

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92029 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 9c344e1..674cc63 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -36,6 +36,7 @@
 #include "gpu/command_buffer/service/shader_translator.h"
 #include "gpu/command_buffer/service/surface_manager.h"
 #include "gpu/command_buffer/service/texture_manager.h"
+#include "gpu/command_buffer/service/vertex_attrib_manager.h"
 #include "gpu/GLES2/gles2_command_buffer.h"
 #include "ui/gfx/gl/gl_context.h"
 #include "ui/gfx/gl/gl_implementation.h"
@@ -441,264 +442,6 @@
 GLES2Decoder::~GLES2Decoder() {
 }
 
-class VertexAttribManager {
- public:
-  // Info about Vertex Attributes. This is used to track what the user currently
-  // has bound on each Vertex Attribute so that checking can be done at
-  // glDrawXXX time.
-  class VertexAttribInfo {
-   public:
-    typedef std::list<VertexAttribInfo*> VertexAttribInfoList;
-    struct Vec4 {
-      float v[4];
-    };
-
-    VertexAttribInfo()
-        : index_(0),
-          enabled_(false),
-          size_(4),
-          type_(GL_FLOAT),
-          offset_(0),
-          normalized_(GL_FALSE),
-          gl_stride_(0),
-          real_stride_(16),
-          list_(NULL) {
-      value_.v[0] = 0.0f;
-      value_.v[1] = 0.0f;
-      value_.v[2] = 0.0f;
-      value_.v[3] = 1.0f;
-    }
-
-    // Returns true if this VertexAttrib can access index.
-    bool CanAccess(GLuint index) const;
-
-    BufferManager::BufferInfo* buffer() const {
-      return buffer_;
-    }
-
-    GLsizei offset() const {
-      return offset_;
-    }
-
-    GLuint index() const {
-      return index_;
-    }
-
-    GLint size() const {
-      return size_;
-    }
-
-    GLenum type() const {
-      return type_;
-    }
-
-    GLboolean normalized() const {
-      return normalized_;
-    }
-
-    GLsizei gl_stride() const {
-      return gl_stride_;
-    }
-
-    bool enabled() const {
-      return enabled_;
-    }
-
-    void set_value(const Vec4& value) {
-      value_ = value;
-    }
-
-    const Vec4& value() const {
-      return value_;
-    }
-
-   private:
-    friend class VertexAttribManager;
-
-    void set_enabled(bool enabled) {
-      enabled_ = enabled;
-    }
-
-    void set_index(GLuint index) {
-      index_ = index;
-    }
-
-    void SetList(VertexAttribInfoList* new_list) {
-      DCHECK(new_list);
-
-      if (list_) {
-        list_->erase(it_);
-      }
-
-      it_ = new_list->insert(new_list->end(), this);
-      list_ = new_list;
-    }
-
-    void SetInfo(
-        BufferManager::BufferInfo* buffer,
-        GLint size,
-        GLenum type,
-        GLboolean normalized,
-        GLsizei gl_stride,
-        GLsizei real_stride,
-        GLsizei offset) {
-      DCHECK_GT(real_stride, 0);
-      buffer_ = buffer;
-      size_ = size;
-      type_ = type;
-      normalized_ = normalized;
-      gl_stride_ = gl_stride;
-      real_stride_ = real_stride;
-      offset_ = offset;
-    }
-
-    // The index of this attrib.
-    GLuint index_;
-
-    // Whether or not this attribute is enabled.
-    bool enabled_;
-
-    // number of components (1, 2, 3, 4)
-    GLint size_;
-
-    // GL_BYTE, GL_FLOAT, etc. See glVertexAttribPointer.
-    GLenum type_;
-
-    // The offset into the buffer.
-    GLsizei offset_;
-
-    GLboolean normalized_;
-
-    // The stride passed to glVertexAttribPointer.
-    GLsizei gl_stride_;
-
-    // The stride that will be used to access the buffer. This is the actual
-    // stide, NOT the GL bogus stride. In other words there is never a stride
-    // of 0.
-    GLsizei real_stride_;
-
-    // The current value of the attrib.
-    Vec4 value_;
-
-    // The buffer bound to this attribute.
-    BufferManager::BufferInfo::Ref buffer_;
-
-    // List this info is on.
-    VertexAttribInfoList* list_;
-
-    // Iterator for list this info is on. Enabled/Disabled
-    VertexAttribInfoList::iterator it_;
-  };
-
-  typedef std::list<VertexAttribInfo*> VertexAttribInfoList;
-
-  VertexAttribManager()
-      : max_vertex_attribs_(0),
-        num_fixed_attribs_(0) {
-  }
-
-  void Initialize(uint32 num_vertex_attribs);
-
-  bool Enable(GLuint index, bool enable);
-
-  bool HaveFixedAttribs() const {
-    return num_fixed_attribs_ != 0;
-  }
-
-  const VertexAttribInfoList& GetEnabledVertexAttribInfos() const {
-    return enabled_vertex_attribs_;
-  }
-
-  VertexAttribInfo* GetVertexAttribInfo(GLuint index) {
-    if (index < max_vertex_attribs_) {
-      return &vertex_attrib_infos_[index];
-    }
-    return NULL;
-  }
-
-  void SetAttribInfo(
-      GLuint index,
-      BufferManager::BufferInfo* buffer,
-      GLint size,
-      GLenum type,
-      GLboolean normalized,
-      GLsizei gl_stride,
-      GLsizei real_stride,
-      GLsizei offset) {
-    VertexAttribInfo* info = GetVertexAttribInfo(index);
-    if (info) {
-      if (info->type() == GL_FIXED) {
-        --num_fixed_attribs_;
-      }
-      if (type == GL_FIXED) {
-        ++num_fixed_attribs_;
-      }
-      info->SetInfo(
-          buffer, size, type, normalized, gl_stride, real_stride, offset);
-    }
-  }
-
-
- private:
-  uint32 max_vertex_attribs_;
-
-  // number of attribs using type GL_FIXED.
-  int num_fixed_attribs_;
-
-  // Info for each vertex attribute saved so we can check at glDrawXXX time
-  // if it is safe to draw.
-  scoped_array<VertexAttribInfo> vertex_attrib_infos_;
-
-  // Lists for which vertex attribs are enabled, disabled.
-  VertexAttribInfoList enabled_vertex_attribs_;
-  VertexAttribInfoList disabled_vertex_attribs_;
-};
-
-bool VertexAttribManager::VertexAttribInfo::CanAccess(GLuint index) const {
-  if (!enabled_) {
-    return true;
-  }
-
-  if (!buffer_ || buffer_->IsDeleted()) {
-    return false;
-  }
-
-  // The number of elements that can be accessed.
-  GLsizeiptr buffer_size = buffer_->size();
-  if (offset_ > buffer_size || real_stride_ == 0) {
-    return false;
-  }
-
-  uint32 usable_size = buffer_size - offset_;
-  GLuint num_elements = usable_size / real_stride_ +
-      ((usable_size % real_stride_) >=
-       (GLES2Util::GetGLTypeSizeForTexturesAndBuffers(type_) * size_) ? 1 : 0);
-  return index < num_elements;
-}
-
-
-void VertexAttribManager::Initialize(uint32 max_vertex_attribs) {
-  max_vertex_attribs_ = max_vertex_attribs;
-  vertex_attrib_infos_.reset(
-      new VertexAttribInfo[max_vertex_attribs]);
-  for (uint32 vv = 0; vv < max_vertex_attribs; ++vv) {
-    vertex_attrib_infos_[vv].set_index(vv);
-    vertex_attrib_infos_[vv].SetList(&disabled_vertex_attribs_);
-  }
-}
-
-bool VertexAttribManager::Enable(GLuint index, bool enable) {
-  if (index >= max_vertex_attribs_) {
-    return false;
-  }
-  VertexAttribInfo& info = vertex_attrib_infos_[index];
-  if (info.enabled() != enable) {
-    info.set_enabled(enable);
-    info.SetList(enable ? &enabled_vertex_attribs_ : &disabled_vertex_attribs_);
-  }
-  return true;
-}
-
 // This class implements GLES2Decoder so we don't have to expose all the GLES2
 // cmd stuff to outside this class.
 class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,