context_group.h revision 58537e28ecd584eab876aee8be7156509866d23a
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GPU_COMMAND_BUFFER_SERVICE_CONTEXT_GROUP_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GPU_COMMAND_BUFFER_SERVICE_CONTEXT_GROUP_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/linked_ptr.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_format.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/feature_info.h"
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_validation.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/gpu_export.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IdAllocatorInterface;
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass StreamTextureManager;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TransferBufferManagerInterface;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProgramCache;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BufferManager;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GLES2Decoder;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FramebufferManager;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageManager;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MailboxManager;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderbufferManager;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProgramManager;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ShaderManager;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TextureManager;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MemoryTracker;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct DisallowedFeatures;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A Context Group helps manage multiple GLES2Decoders that share
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// resources.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContextGroup(
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MailboxManager* mailbox_manager,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ImageManager* image_manager,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MemoryTracker* memory_tracker,
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      StreamTextureManager* stream_texture_manager,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool bind_generates_resource);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This should only be called by GLES2Decoder. This must be paired with a
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // call to destroy if it succeeds.
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool Initialize(
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GLES2Decoder* decoder,
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      const DisallowedFeatures& disallowed_features);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Destroys all the resources when called for the last context in the group.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // It should only be called by GLES2Decoder.
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Destroy(GLES2Decoder* decoder, bool have_context);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MailboxManager* mailbox_manager() const {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return mailbox_manager_.get();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ImageManager* image_manager() const {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return image_manager_.get();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MemoryTracker* memory_tracker() const {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return memory_tracker_.get();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  StreamTextureManager* stream_texture_manager() const {
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return stream_texture_manager_;
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool bind_generates_resource() {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return bind_generates_resource_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_vertex_attribs() const {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_vertex_attribs_;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_texture_units() const {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_texture_units_;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_texture_image_units() const {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_texture_image_units_;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_vertex_texture_image_units() const {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_vertex_texture_image_units_;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_fragment_uniform_vectors() const {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_fragment_uniform_vectors_;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_varying_vectors() const {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_varying_vectors_;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_vertex_uniform_vectors() const {
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_vertex_uniform_vectors_;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  uint32 max_color_attachments() const {
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return max_color_attachments_;
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  uint32 max_draw_buffers() const {
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return max_draw_buffers_;
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FeatureInfo* feature_info() {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return feature_info_.get();
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BufferManager* buffer_manager() const {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return buffer_manager_.get();
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FramebufferManager* framebuffer_manager() const {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return framebuffer_manager_.get();
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderbufferManager* renderbuffer_manager() const {
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return renderbuffer_manager_.get();
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TextureManager* texture_manager() const {
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return texture_manager_.get();
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProgramManager* program_manager() const {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return program_manager_.get();
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool has_program_cache() const {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return program_cache_ != NULL;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_program_cache(ProgramCache* program_cache) {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    program_cache_ = program_cache;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ShaderManager* shader_manager() const {
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return shader_manager_.get();
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TransferBufferManagerInterface* transfer_buffer_manager() const {
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return transfer_buffer_manager_.get();
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IdAllocatorInterface* GetIdAllocator(unsigned namespace_id);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 GetMemRepresented() const;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Loses all the context associated with this group.
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void LoseContexts(GLenum reset_status);
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // EXT_draw_buffer related states for backbuffer.
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GLenum draw_buffer() const {
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_buffer_;
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_draw_buffer(GLenum buf) {
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    draw_buffer_ = buf;
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class base::RefCounted<ContextGroup>;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ContextGroup();
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool CheckGLFeature(GLint min_required, GLint* v);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool CheckGLFeatureU(GLint min_required, uint32* v);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool QueryGLFeature(GLenum pname, GLint min_required, GLint* v);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool QueryGLFeatureU(GLenum pname, GLint min_required, uint32* v);
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool HaveContexts();
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<MailboxManager> mailbox_manager_;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<ImageManager> image_manager_;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<MemoryTracker> memory_tracker_;
187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  StreamTextureManager* stream_texture_manager_;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool enforce_gl_minimums_;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool bind_generates_resource_;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_vertex_attribs_;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_texture_units_;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_texture_image_units_;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_vertex_texture_image_units_;
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_fragment_uniform_vectors_;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_varying_vectors_;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 max_vertex_uniform_vectors_;
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  uint32 max_color_attachments_;
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  uint32 max_draw_buffers_;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProgramCache* program_cache_;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<BufferManager> buffer_manager_;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<FramebufferManager> framebuffer_manager_;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<RenderbufferManager> renderbuffer_manager_;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TextureManager> texture_manager_;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ProgramManager> program_manager_;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ShaderManager> shader_manager_;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  linked_ptr<IdAllocatorInterface>
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      id_namespaces_[id_namespaces::kNumIdNamespaces];
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<FeatureInfo> feature_info_;
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<base::WeakPtr<gles2::GLES2Decoder> > decoders_;
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GLenum draw_buffer_;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ContextGroup);
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gles2
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gpu
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // GPU_COMMAND_BUFFER_SERVICE_CONTEXT_GROUP_H_
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235