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

Unified Diff: gpu/command_buffer/service/indexed_buffer_binding_host.h

Issue 1922633002: Implement TransformFeedbackManager in GPU command buffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/indexed_buffer_binding_host.h
diff --git a/gpu/command_buffer/service/indexed_buffer_binding_host.h b/gpu/command_buffer/service/indexed_buffer_binding_host.h
new file mode 100644
index 0000000000000000000000000000000000000000..ef96ddff96dffcc4343534972d8b17c671127f6d
--- /dev/null
+++ b/gpu/command_buffer/service/indexed_buffer_binding_host.h
@@ -0,0 +1,95 @@
+// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GPU_COMMAND_BUFFER_SERVICE_INDEXED_BUFFER_BINDING_HOST_H_
+#define GPU_COMMAND_BUFFER_SERVICE_INDEXED_BUFFER_BINDING_HOST_H_
+
+#include <vector>
+
+#include "base/memory/ref_counted.h"
+#include "gpu/command_buffer/service/gl_utils.h"
+#include "gpu/gpu_export.h"
+
+namespace gpu {
+namespace gles2 {
+
+class Buffer;
+
+// This is a base class for indexed buffer bindings tracking.
+// TransformFeedback and Program should inherit from this base class,
+// for tracking indexed TRANSFORM_FEEDBACK_BUFFER / UNIFORM_BUFFER bindings.
+class GPU_EXPORT IndexedBufferBindingHost :
+ public base::RefCounted<IndexedBufferBindingHost> {
+ public:
+ // |needs_emulation| is set to true on Desktop GL 4.1 or lower.
+ IndexedBufferBindingHost(uint32_t max_bindings, bool needs_emulation);
+
+ // The following two functions do state update and call the underlying GL
+ // function. All validations have been done already and the GL function is
+ // guaranteed to succeed.
+ void DoBindBufferBase(GLenum target, GLuint index, Buffer* buffer);
+ void DoBindBufferRange(
+ GLenum target, GLuint index, Buffer* buffer, GLintptr offset,
+ GLsizeiptr size);
+
+ // This is called on the active host when glBufferData is called and buffer
+ // size might change.
+ void OnBufferData(GLenum target, Buffer* buffer);
+
+ // This is called when the host become active.
+ void OnBindHost(GLenum target);
+
+ void RemoveBoundBuffer(Buffer* buffer);
+
+ Buffer* GetBufferBinding(GLuint index) const;
+ GLsizeiptr GetBufferSize(GLuint index) const;
+ GLintptr GetBufferStart(GLuint index) const;
+
+ protected:
+ friend class base::RefCounted<IndexedBufferBindingHost>;
+
+ virtual ~IndexedBufferBindingHost();
+
+ private:
+ enum IndexedBufferBindingType {
+ kBindBufferBase,
+ kBindBufferRange,
+ kBindBufferNone
+ };
+
+ struct IndexedBufferBinding {
+ IndexedBufferBindingType type;
+ scoped_refptr<Buffer> buffer;
+
+ // The following fields are only used if |type| is kBindBufferRange.
+ GLintptr offset;
+ GLsizeiptr size;
+ // The full buffer size at the last successful glBindBufferRange call.
+ GLsizeiptr effective_full_buffer_size;
+
+ IndexedBufferBinding();
+ IndexedBufferBinding(const IndexedBufferBinding& other);
+ ~IndexedBufferBinding();
+
+ void SetBindBufferBase(Buffer* _buffer);
+ void SetBindBufferRange(
+ Buffer* _buffer, GLintptr _offset, GLsizeiptr _size);
+ void Reset();
+ };
+
+ // This is called on Desktop GL lower than 4.2, where the range
+ // (offset + size) can't go beyond the buffer's size.
+ static void DoAdjustedBindBufferRange(
+ GLenum target, GLuint index, GLuint service_id, GLintptr offset,
+ GLsizeiptr size, GLsizeiptr full_buffer_size);
+
+ std::vector<IndexedBufferBinding> buffer_bindings_;
+
+ bool needs_emulation_;
+};
+
+} // namespace gles2
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_SERVICE_INDEXED_BUFFER_BINDING_HOST_H_

Powered by Google App Engine
This is Rietveld 408576698