summaryrefslogtreecommitdiff
path: root/chromium/third_party/angle/src/libANGLE/TransformFeedback.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/angle/src/libANGLE/TransformFeedback.cpp')
-rw-r--r--chromium/third_party/angle/src/libANGLE/TransformFeedback.cpp120
1 files changed, 70 insertions, 50 deletions
diff --git a/chromium/third_party/angle/src/libANGLE/TransformFeedback.cpp b/chromium/third_party/angle/src/libANGLE/TransformFeedback.cpp
index 22341547446..293c91b3132 100644
--- a/chromium/third_party/angle/src/libANGLE/TransformFeedback.cpp
+++ b/chromium/third_party/angle/src/libANGLE/TransformFeedback.cpp
@@ -16,31 +16,51 @@
namespace gl
{
-TransformFeedback::TransformFeedback(rx::GLImplFactory *implFactory, GLuint id, const Caps &caps)
- : RefCountObject(id),
- mImplementation(implFactory->createTransformFeedback()),
- mLabel(),
+TransformFeedbackState::TransformFeedbackState(size_t maxIndexedBuffers)
+ : mLabel(),
mActive(false),
mPrimitiveMode(GL_NONE),
mPaused(false),
mProgram(nullptr),
mGenericBuffer(),
- mIndexedBuffers(caps.maxTransformFeedbackSeparateAttributes)
+ mIndexedBuffers(maxIndexedBuffers)
+{
+}
+
+const BindingPointer<Buffer> &TransformFeedbackState::getGenericBuffer() const
+{
+ return mGenericBuffer;
+}
+
+const OffsetBindingPointer<Buffer> &TransformFeedbackState::getIndexedBuffer(size_t idx) const
+{
+ return mIndexedBuffers[idx];
+}
+
+const std::vector<OffsetBindingPointer<Buffer>> &TransformFeedbackState::getIndexedBuffers() const
+{
+ return mIndexedBuffers;
+}
+
+TransformFeedback::TransformFeedback(rx::GLImplFactory *implFactory, GLuint id, const Caps &caps)
+ : RefCountObject(id),
+ mState(caps.maxTransformFeedbackSeparateAttributes),
+ mImplementation(implFactory->createTransformFeedback(mState))
{
ASSERT(mImplementation != nullptr);
}
TransformFeedback::~TransformFeedback()
{
- if (mProgram)
+ if (mState.mProgram)
{
- mProgram->release();
- mProgram = nullptr;
+ mState.mProgram->release();
+ mState.mProgram = nullptr;
}
- mGenericBuffer.set(nullptr);
- for (size_t i = 0; i < mIndexedBuffers.size(); i++)
+ mState.mGenericBuffer.set(nullptr);
+ for (size_t i = 0; i < mState.mIndexedBuffers.size(); i++)
{
- mIndexedBuffers[i].set(nullptr);
+ mState.mIndexedBuffers[i].set(nullptr);
}
SafeDelete(mImplementation);
@@ -48,129 +68,129 @@ TransformFeedback::~TransformFeedback()
void TransformFeedback::setLabel(const std::string &label)
{
- mLabel = label;
+ mState.mLabel = label;
}
const std::string &TransformFeedback::getLabel() const
{
- return mLabel;
+ return mState.mLabel;
}
void TransformFeedback::begin(GLenum primitiveMode, Program *program)
{
- mActive = true;
- mPrimitiveMode = primitiveMode;
- mPaused = false;
+ mState.mActive = true;
+ mState.mPrimitiveMode = primitiveMode;
+ mState.mPaused = false;
mImplementation->begin(primitiveMode);
bindProgram(program);
}
void TransformFeedback::end()
{
- mActive = false;
- mPrimitiveMode = GL_NONE;
- mPaused = false;
+ mState.mActive = false;
+ mState.mPrimitiveMode = GL_NONE;
+ mState.mPaused = false;
mImplementation->end();
- if (mProgram)
+ if (mState.mProgram)
{
- mProgram->release();
- mProgram = nullptr;
+ mState.mProgram->release();
+ mState.mProgram = nullptr;
}
}
void TransformFeedback::pause()
{
- mPaused = true;
+ mState.mPaused = true;
mImplementation->pause();
}
void TransformFeedback::resume()
{
- mPaused = false;
+ mState.mPaused = false;
mImplementation->resume();
}
bool TransformFeedback::isActive() const
{
- return mActive;
+ return mState.mActive;
}
bool TransformFeedback::isPaused() const
{
- return mPaused;
+ return mState.mPaused;
}
GLenum TransformFeedback::getPrimitiveMode() const
{
- return mPrimitiveMode;
+ return mState.mPrimitiveMode;
}
void TransformFeedback::bindProgram(Program *program)
{
- if (mProgram != program)
+ if (mState.mProgram != program)
{
- if (mProgram != nullptr)
+ if (mState.mProgram != nullptr)
{
- mProgram->release();
+ mState.mProgram->release();
}
- mProgram = program;
- if (mProgram != nullptr)
+ mState.mProgram = program;
+ if (mState.mProgram != nullptr)
{
- mProgram->addRef();
+ mState.mProgram->addRef();
}
}
}
bool TransformFeedback::hasBoundProgram(GLuint program) const
{
- return mProgram != nullptr && mProgram->id() == program;
+ return mState.mProgram != nullptr && mState.mProgram->id() == program;
}
void TransformFeedback::bindGenericBuffer(Buffer *buffer)
{
- mGenericBuffer.set(buffer);
- mImplementation->bindGenericBuffer(mGenericBuffer);
+ mState.mGenericBuffer.set(buffer);
+ mImplementation->bindGenericBuffer(mState.mGenericBuffer);
}
void TransformFeedback::detachBuffer(GLuint bufferName)
{
- for (size_t index = 0; index < mIndexedBuffers.size(); index++)
+ for (size_t index = 0; index < mState.mIndexedBuffers.size(); index++)
{
- if (mIndexedBuffers[index].id() == bufferName)
+ if (mState.mIndexedBuffers[index].id() == bufferName)
{
- mIndexedBuffers[index].set(nullptr);
- mImplementation->bindIndexedBuffer(index, mIndexedBuffers[index]);
+ mState.mIndexedBuffers[index].set(nullptr);
+ mImplementation->bindIndexedBuffer(index, mState.mIndexedBuffers[index]);
}
}
- if (mGenericBuffer.id() == bufferName)
+ if (mState.mGenericBuffer.id() == bufferName)
{
- mGenericBuffer.set(nullptr);
- mImplementation->bindGenericBuffer(mGenericBuffer);
+ mState.mGenericBuffer.set(nullptr);
+ mImplementation->bindGenericBuffer(mState.mGenericBuffer);
}
}
const BindingPointer<Buffer> &TransformFeedback::getGenericBuffer() const
{
- return mGenericBuffer;
+ return mState.mGenericBuffer;
}
void TransformFeedback::bindIndexedBuffer(size_t index, Buffer *buffer, size_t offset, size_t size)
{
- ASSERT(index < mIndexedBuffers.size());
- mIndexedBuffers[index].set(buffer, offset, size);
- mImplementation->bindIndexedBuffer(index, mIndexedBuffers[index]);
+ ASSERT(index < mState.mIndexedBuffers.size());
+ mState.mIndexedBuffers[index].set(buffer, offset, size);
+ mImplementation->bindIndexedBuffer(index, mState.mIndexedBuffers[index]);
}
const OffsetBindingPointer<Buffer> &TransformFeedback::getIndexedBuffer(size_t index) const
{
- ASSERT(index < mIndexedBuffers.size());
- return mIndexedBuffers[index];
+ ASSERT(index < mState.mIndexedBuffers.size());
+ return mState.mIndexedBuffers[index];
}
size_t TransformFeedback::getIndexedBufferCount() const
{
- return mIndexedBuffers.size();
+ return mState.mIndexedBuffers.size();
}
rx::TransformFeedbackImpl *TransformFeedback::getImplementation()