blob: 77287222464ce9fe3a2f113d0c59377533ea433e [file] [log] [blame]
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +00001//
daniel@transgaming.com8ca9c6e2012-01-27 15:38:54 +00002// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +00003// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
daniel@transgaming.com8fd34bd2011-02-18 02:52:14 +00007// VertexDataManager.h: Defines the VertexDataManager, a class that
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +00008// runs the Buffer translation process.
9
daniel@transgaming.com29787c32012-12-20 20:55:48 +000010#ifndef LIBGLESV2_RENDERER_VERTEXDATAMANAGER_H_
11#define LIBGLESV2_RENDERER_VERTEXDATAMANAGER_H_
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000012
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000013#include "libGLESv2/Constants.h"
Jamie Madill87939712013-07-02 11:57:01 -040014#include "libGLESv2/VertexAttribute.h"
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000015#include "common/angleutils.h"
16
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000017namespace gl
18{
Brandon Jones5bf98292014-06-06 17:19:38 -070019struct VertexAttribute;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000020class ProgramBinary;
Jamie Madill57a89722013-07-02 11:57:03 -040021struct VertexAttribCurrentValueData;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000022}
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000023
daniel@transgaming.com31240482012-11-28 21:06:41 +000024namespace rx
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000025{
Brandon Jonesd38f9262014-06-18 16:26:45 -070026class BufferD3D;
shannon.woods@transgaming.comd2811d62013-02-28 23:11:19 +000027class StreamingVertexBufferInterface;
28class VertexBuffer;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000029class Renderer;
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000030
daniel@transgaming.com83921382011-01-08 05:46:00 +000031struct TranslatedAttribute
32{
Shannon Woods20ba1542014-08-11 17:14:44 -040033 TranslatedAttribute() : active(false), attribute(NULL), currentValueType(GL_NONE),
34 offset(0), stride(0), vertexBuffer(NULL), storage(NULL),
35 serial(0), divisor(0) {};
daniel@transgaming.com83921382011-01-08 05:46:00 +000036 bool active;
37
daniel@transgaming.com4150d362012-12-20 21:07:43 +000038 const gl::VertexAttribute *attribute;
Jamie Madilla857c362013-07-02 11:57:02 -040039 GLenum currentValueType;
Geoff Langa36ead42013-08-02 11:54:08 -040040 unsigned int offset;
41 unsigned int stride; // 0 means not to advance the read pointer at all
daniel@transgaming.com83921382011-01-08 05:46:00 +000042
daniel@transgaming.com4150d362012-12-20 21:07:43 +000043 VertexBuffer *vertexBuffer;
Brandon Jonesd38f9262014-06-18 16:26:45 -070044 BufferD3D *storage;
jbauman@chromium.orgd8f3faa2011-09-02 01:10:47 +000045 unsigned int serial;
daniel@transgaming.com8ca9c6e2012-01-27 15:38:54 +000046 unsigned int divisor;
daniel@transgaming.com83921382011-01-08 05:46:00 +000047};
48
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000049class VertexDataManager
50{
51 public:
daniel@transgaming.com4150d362012-12-20 21:07:43 +000052 VertexDataManager(rx::Renderer *renderer);
daniel@transgaming.com83921382011-01-08 05:46:00 +000053 virtual ~VertexDataManager();
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000054
Geoff Langf7100b92014-09-08 16:17:08 -040055 gl::Error prepareVertexData(const gl::VertexAttribute attribs[], const gl::VertexAttribCurrentValueData currentValues[],
56 gl::ProgramBinary *programBinary, GLint start, GLsizei count, TranslatedAttribute *outAttribs, GLsizei instances);
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000057
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000058 private:
daniel@transgaming.com83921382011-01-08 05:46:00 +000059 DISALLOW_COPY_AND_ASSIGN(VertexDataManager);
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000060
Geoff Langf7100b92014-09-08 16:17:08 -040061 gl::Error reserveSpaceForAttrib(const gl::VertexAttribute &attrib,
62 const gl::VertexAttribCurrentValueData &currentValue,
63 GLsizei count,
64 GLsizei instances) const;
Jamie Madill6d113802014-08-25 15:47:52 -040065
66 void invalidateMatchingStaticData(const gl::VertexAttribute &attrib,
67 const gl::VertexAttribCurrentValueData &currentValue) const;
68
Geoff Langf7100b92014-09-08 16:17:08 -040069 gl::Error storeAttribute(const gl::VertexAttribute &attrib,
Jamie Madillf41522b2014-08-18 16:39:49 -040070 const gl::VertexAttribCurrentValueData &currentValue,
71 TranslatedAttribute *translated,
Geoff Langf7100b92014-09-08 16:17:08 -040072 GLint start,
73 GLsizei count,
74 GLsizei instances);
75
76 gl::Error storeCurrentValue(const gl::VertexAttribute &attrib,
77 const gl::VertexAttribCurrentValueData &currentValue,
78 TranslatedAttribute *translated,
79 gl::VertexAttribCurrentValueData *cachedValue,
80 size_t *cachedOffset,
81 StreamingVertexBufferInterface *buffer);
Jamie Madillf41522b2014-08-18 16:39:49 -040082
daniel@transgaming.com4150d362012-12-20 21:07:43 +000083 rx::Renderer *const mRenderer;
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000084
daniel@transgaming.come4e45062012-12-20 20:56:53 +000085 StreamingVertexBufferInterface *mStreamingBuffer;
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000086
Jamie Madilla857c362013-07-02 11:57:02 -040087 gl::VertexAttribCurrentValueData mCurrentValue[gl::MAX_VERTEX_ATTRIBS];
shannon.woods%transgaming.com@gtempaccount.com3026dc72013-04-13 03:37:27 +000088
daniel@transgaming.come4e45062012-12-20 20:56:53 +000089 StreamingVertexBufferInterface *mCurrentValueBuffer[gl::MAX_VERTEX_ATTRIBS];
daniel@transgaming.com31240482012-11-28 21:06:41 +000090 std::size_t mCurrentValueOffsets[gl::MAX_VERTEX_ATTRIBS];
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000091};
92
93}
94
daniel@transgaming.com29787c32012-12-20 20:55:48 +000095#endif // LIBGLESV2_RENDERER_VERTEXDATAMANAGER_H_