diff options
Diffstat (limited to 'chromium/third_party/angle/src/libANGLE/TransformFeedback.cpp')
-rw-r--r-- | chromium/third_party/angle/src/libANGLE/TransformFeedback.cpp | 120 |
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() |