Commit 124f78c2 by Jamie Madill Committed by Commit Bot

Remove gl::Context parameter from Observer functions.

It was only used in exactly one instance in VertexArray. Instead we can cache a bool and avoid needing to pass it around. Will make signaling dirty easier in the Vulkan back-end. Bug: angleproject:3539 Change-Id: Ia570aec051a24a5280df49edc4345c54022b46ec Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1663838Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 81b6acfb
......@@ -94,7 +94,7 @@ angle::Result Buffer::bufferData(Context *context,
mState.mSize = size;
// Notify when storage changes.
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
return angle::Result::Continue;
}
......@@ -111,7 +111,7 @@ angle::Result Buffer::bufferSubData(const Context *context,
static_cast<unsigned int>(size));
// Notify when data changes.
onStateChange(context, angle::SubjectMessage::ContentsChanged);
onStateChange(angle::SubjectMessage::ContentsChanged);
return angle::Result::Continue;
}
......@@ -129,7 +129,7 @@ angle::Result Buffer::copyBufferSubData(const Context *context,
static_cast<unsigned int>(size));
// Notify when data changes.
onStateChange(context, angle::SubjectMessage::ContentsChanged);
onStateChange(angle::SubjectMessage::ContentsChanged);
return angle::Result::Continue;
}
......@@ -151,7 +151,7 @@ angle::Result Buffer::map(const Context *context, GLenum access)
mIndexRangeCache.clear();
// Notify when state changes.
onStateChange(context, angle::SubjectMessage::SubjectMapped);
onStateChange(angle::SubjectMessage::SubjectMapped);
return angle::Result::Continue;
}
......@@ -185,7 +185,7 @@ angle::Result Buffer::mapRange(const Context *context,
}
// Notify when state changes.
onStateChange(context, angle::SubjectMessage::SubjectMapped);
onStateChange(angle::SubjectMessage::SubjectMapped);
return angle::Result::Continue;
}
......@@ -205,25 +205,25 @@ angle::Result Buffer::unmap(const Context *context, GLboolean *result)
mState.mAccessFlags = 0;
// Notify when data changes.
onStateChange(context, angle::SubjectMessage::SubjectUnmapped);
onStateChange(angle::SubjectMessage::SubjectUnmapped);
return angle::Result::Continue;
}
void Buffer::onTransformFeedback(const Context *context)
void Buffer::onTransformFeedback()
{
mIndexRangeCache.clear();
// Notify when data changes.
onStateChange(context, angle::SubjectMessage::ContentsChanged);
onStateChange(angle::SubjectMessage::ContentsChanged);
}
void Buffer::onPixelPack(const Context *context)
void Buffer::onPixelPack()
{
mIndexRangeCache.clear();
// Notify when data changes.
onStateChange(context, angle::SubjectMessage::ContentsChanged);
onStateChange(angle::SubjectMessage::ContentsChanged);
}
angle::Result Buffer::getIndexRange(const gl::Context *context,
......@@ -266,7 +266,7 @@ void Buffer::onTFBindingChanged(const Context *context, bool bound, bool indexed
ASSERT(bound || mState.mTransformFeedbackIndexedBindingCount > 0);
mState.mTransformFeedbackIndexedBindingCount += bound ? 1 : -1;
onStateChange(context, angle::SubjectMessage::BindingChanged);
onStateChange(angle::SubjectMessage::BindingChanged);
}
else
{
......@@ -274,13 +274,11 @@ void Buffer::onTFBindingChanged(const Context *context, bool bound, bool indexed
}
}
void Buffer::onSubjectStateChange(const gl::Context *context,
angle::SubjectIndex index,
angle::SubjectMessage message)
void Buffer::onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message)
{
// Pass it along!
ASSERT(index == kImplementationSubjectIndex);
ASSERT(message == angle::SubjectMessage::SubjectChanged);
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
}
} // namespace gl
......@@ -99,8 +99,8 @@ class Buffer final : public RefCountObject,
angle::Result unmap(const Context *context, GLboolean *result);
// These are called when another operation changes Buffer data.
void onTransformFeedback(const Context *context);
void onPixelPack(const Context *context);
void onTransformFeedback();
void onPixelPack();
angle::Result getIndexRange(const gl::Context *context,
DrawElementsType type,
......@@ -139,9 +139,7 @@ class Buffer final : public RefCountObject,
void onNonTFBindingChanged(int incr) { mState.mBindingCount += incr; }
// angle::ObserverInterface implementation.
void onSubjectStateChange(const gl::Context *context,
angle::SubjectIndex index,
angle::SubjectMessage message) override;
void onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message) override;
private:
BufferState mState;
......
......@@ -2685,6 +2685,7 @@ VertexArray *Context::checkVertexArrayAllocation(GLuint vertexArrayHandle)
vertexArray =
new VertexArray(mImplementation.get(), vertexArrayHandle,
mState.mCaps.maxVertexAttributes, mState.mCaps.maxVertexAttribBindings);
vertexArray->setBufferAccessValidationEnabled(mBufferAccessValidationEnabled);
mVertexArrayMap.assign(vertexArrayHandle, vertexArray);
}
......@@ -3105,16 +3106,16 @@ void Context::requestExtension(const char *name)
// Invalidate all textures and framebuffer. Some extensions make new formats renderable or
// sampleable.
mState.mTextureManager->signalAllTexturesDirty(this);
mState.mTextureManager->signalAllTexturesDirty();
for (auto &zeroTexture : mZeroTextures)
{
if (zeroTexture.get() != nullptr)
{
zeroTexture->signalDirtyStorage(this, InitState::Initialized);
zeroTexture->signalDirtyStorage(InitState::Initialized);
}
}
mState.mFramebufferManager->invalidateFramebufferComplenessCache(this);
mState.mFramebufferManager->invalidateFramebufferComplenessCache();
}
size_t Context::getRequestableExtensionStringCount() const
......@@ -3477,9 +3478,14 @@ void Context::updateCaps()
// We need to validate buffer bounds if we are in a WebGL or robust access context and the
// back-end does not support robust buffer access behaviour.
if (!mSupportedExtensions.robustBufferAccessBehavior && (mState.isWebGL() || mRobustAccess))
mBufferAccessValidationEnabled =
(!mSupportedExtensions.robustBufferAccessBehavior && (mState.isWebGL() || mRobustAccess));
// Cache this in the VertexArrays. They need to check it in state change notifications.
for (auto vaoIter : mVertexArrayMap)
{
mBufferAccessValidationEnabled = true;
VertexArray *vao = vaoIter.second;
vao->setBufferAccessValidationEnabled(mBufferAccessValidationEnabled);
}
// Reinitialize state cache after extension changes.
......@@ -8165,9 +8171,7 @@ bool Context::isGLES1() const
return mState.getClientVersion() < Version(2, 0);
}
void Context::onSubjectStateChange(const Context *context,
angle::SubjectIndex index,
angle::SubjectMessage message)
void Context::onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message)
{
switch (index)
{
......
......@@ -499,9 +499,7 @@ class Context final : public egl::LabeledObject, angle::NonCopyable, public angl
const StateCache &getStateCache() const { return mStateCache; }
StateCache &getStateCache() { return mStateCache; }
void onSubjectStateChange(const Context *context,
angle::SubjectIndex index,
angle::SubjectMessage message) override;
void onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message) override;
void onSamplerUniformChange(size_t textureUnitIndex);
......
......@@ -953,13 +953,13 @@ bool Framebuffer::usingExtendedDrawBuffers() const
return false;
}
void Framebuffer::invalidateCompletenessCache(const Context *context)
void Framebuffer::invalidateCompletenessCache()
{
if (mState.mId != 0)
{
mCachedStatus.reset();
}
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
GLenum Framebuffer::checkStatusImpl(const Context *context)
......@@ -1507,7 +1507,7 @@ angle::Result Framebuffer::readPixels(const Context *context,
Buffer *unpackBuffer = context->getState().getTargetBuffer(BufferBinding::PixelUnpack);
if (unpackBuffer)
{
unpackBuffer->onPixelPack(context);
unpackBuffer->onPixelPack();
}
return angle::Result::Continue;
......@@ -1830,7 +1830,7 @@ void Framebuffer::updateAttachment(const Context *context,
mState.mResourceNeedsInit.set(dirtyBit, attachment->initState() == InitState::MayNeedInit);
onDirtyBinding->bind(resource);
invalidateCompletenessCache(context);
invalidateCompletenessCache();
}
void Framebuffer::resetAttachment(const Context *context, GLenum binding)
......@@ -1850,9 +1850,7 @@ angle::Result Framebuffer::syncState(const Context *context)
return angle::Result::Continue;
}
void Framebuffer::onSubjectStateChange(const Context *context,
angle::SubjectIndex index,
angle::SubjectMessage message)
void Framebuffer::onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message)
{
if (message != angle::SubjectMessage::SubjectChanged)
{
......@@ -1860,7 +1858,7 @@ void Framebuffer::onSubjectStateChange(const Context *context,
if (message == angle::SubjectMessage::ContentsChanged)
{
mDirtyBits.set(DIRTY_BIT_COLOR_BUFFER_CONTENTS_0 + index);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
return;
}
......@@ -1872,7 +1870,7 @@ void Framebuffer::onSubjectStateChange(const Context *context,
ASSERT(!mDirtyBitsGuard.valid() || mDirtyBitsGuard.value().test(index));
mDirtyBits.set(index);
invalidateCompletenessCache(context);
invalidateCompletenessCache();
FramebufferAttachment *attachment = getAttachmentFromSubjectIndex(index);
......@@ -2025,21 +2023,21 @@ void Framebuffer::setDefaultWidth(const Context *context, GLint defaultWidth)
{
mState.mDefaultWidth = defaultWidth;
mDirtyBits.set(DIRTY_BIT_DEFAULT_WIDTH);
invalidateCompletenessCache(context);
invalidateCompletenessCache();
}
void Framebuffer::setDefaultHeight(const Context *context, GLint defaultHeight)
{
mState.mDefaultHeight = defaultHeight;
mDirtyBits.set(DIRTY_BIT_DEFAULT_HEIGHT);
invalidateCompletenessCache(context);
invalidateCompletenessCache();
}
void Framebuffer::setDefaultSamples(const Context *context, GLint defaultSamples)
{
mState.mDefaultSamples = defaultSamples;
mDirtyBits.set(DIRTY_BIT_DEFAULT_SAMPLES);
invalidateCompletenessCache(context);
invalidateCompletenessCache();
}
void Framebuffer::setDefaultFixedSampleLocations(const Context *context,
......@@ -2047,7 +2045,7 @@ void Framebuffer::setDefaultFixedSampleLocations(const Context *context,
{
mState.mDefaultFixedSampleLocations = defaultFixedSampleLocations;
mDirtyBits.set(DIRTY_BIT_DEFAULT_FIXED_SAMPLE_LOCATIONS);
invalidateCompletenessCache(context);
invalidateCompletenessCache();
}
void Framebuffer::setDefaultLayers(GLint defaultLayers)
......
......@@ -238,7 +238,7 @@ class Framebuffer final : public angle::ObserverInterface,
void setDefaultFixedSampleLocations(const Context *context, bool defaultFixedSampleLocations);
void setDefaultLayers(GLint defaultLayers);
void invalidateCompletenessCache(const Context *context);
void invalidateCompletenessCache();
ANGLE_INLINE GLenum checkStatus(const Context *context)
{
......@@ -343,9 +343,7 @@ class Framebuffer final : public angle::ObserverInterface,
angle::Result syncState(const Context *context);
// Observer implementation
void onSubjectStateChange(const Context *context,
angle::SubjectIndex index,
angle::SubjectMessage message) override;
void onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message) override;
bool formsRenderingFeedbackLoopWith(const Context *context) const;
bool formsCopyingFeedbackLoopWith(GLuint copyTextureID,
......
......@@ -37,14 +37,14 @@ bool Subject::hasObservers() const
return !mObservers.empty();
}
void Subject::onStateChange(const gl::Context *context, SubjectMessage message) const
void Subject::onStateChange(SubjectMessage message) const
{
if (mObservers.empty())
return;
for (const ObserverBindingBase *binding : mObservers)
{
binding->getObserver()->onSubjectStateChange(context, binding->getSubjectIndex(), message);
binding->getObserver()->onSubjectStateChange(binding->getSubjectIndex(), message);
}
}
......@@ -89,9 +89,9 @@ void ObserverBinding::bind(Subject *subject)
}
}
void ObserverBinding::onStateChange(const gl::Context *context, SubjectMessage message) const
void ObserverBinding::onStateChange(SubjectMessage message) const
{
getObserver()->onSubjectStateChange(context, getSubjectIndex(), message);
getObserver()->onSubjectStateChange(getSubjectIndex(), message);
}
void ObserverBinding::onSubjectReset()
......
......@@ -16,11 +16,6 @@
#include "common/FastVector.h"
#include "common/angleutils.h"
namespace gl
{
class Context;
} // namespace gl
namespace angle
{
template <typename HaystackT, typename NeedleT>
......@@ -37,23 +32,23 @@ using SubjectIndex = size_t;
// Observer and Subject and handle different types of events.
enum class SubjectMessage
{
// Used by the VertexArray class to notify a binding count change might need to update the
// validation cache.
// Used by gl::VertexArray to notify gl::Context of a gl::Buffer binding count change. Triggers
// a validation cache update.
BindingChanged,
// Only the contents (pixels, bytes, etc) changed in this Subject. Rather than the storage for
// the subject.
// Only the contents (pixels, bytes, etc) changed in this Subject. Distinct from the object
// storage.
ContentsChanged,
// Used by Samplers, Textures and Framebuffers to indicate to the Observer (Context) that it
// will need to call syncState.
// Sent by gl::Sampler, gl::Texture, gl::Framebuffer and others to notifiy gl::Context. This
// flag indicates to call syncState before next use.
DirtyBitsFlagged,
// Generic state change message. Used in multiple places.
// Generic state change message. Used in multiple places for different purposes.
SubjectChanged,
// Special events passed from Buffers, through VertexArrays into the Context to indicate a bound
// Buffer is now mapped.
// Indicates a bound gl::Buffer is now mapped or unmapped. Passed from gl::Buffer, through
// gl::VertexArray, into gl::Context. Used to track validation.
SubjectMapped,
SubjectUnmapped,
};
......@@ -63,9 +58,7 @@ class ObserverInterface
{
public:
virtual ~ObserverInterface();
virtual void onSubjectStateChange(const gl::Context *context,
SubjectIndex index,
SubjectMessage message) = 0;
virtual void onSubjectStateChange(SubjectIndex index, SubjectMessage message) = 0;
};
class ObserverBindingBase
......@@ -93,7 +86,7 @@ class Subject : NonCopyable
Subject();
virtual ~Subject();
void onStateChange(const gl::Context *context, SubjectMessage message) const;
void onStateChange(SubjectMessage message) const;
bool hasObservers() const;
void resetObservers();
......@@ -129,7 +122,7 @@ class ObserverBinding final : public ObserverBindingBase
ANGLE_INLINE void reset() { bind(nullptr); }
void onStateChange(const gl::Context *context, SubjectMessage message) const;
void onStateChange(SubjectMessage message) const;
void onSubjectReset() override;
ANGLE_INLINE const Subject *getSubject() const { return mSubject; }
......
......@@ -18,9 +18,7 @@ namespace
struct ObserverClass : public ObserverInterface
{
void onSubjectStateChange(const gl::Context *context,
SubjectIndex index,
SubjectMessage message) override
void onSubjectStateChange(SubjectIndex index, SubjectMessage message) override
{
wasNotified = true;
}
......@@ -36,7 +34,7 @@ TEST(ObserverTest, BasicUsage)
binding.bind(&subject);
ASSERT_FALSE(observer.wasNotified);
subject.onStateChange(nullptr, SubjectMessage::SubjectChanged);
subject.onStateChange(SubjectMessage::SubjectChanged);
ASSERT_TRUE(observer.wasNotified);
}
......
......@@ -102,7 +102,7 @@ angle::Result Renderbuffer::setStorage(const Context *context,
mState.update(static_cast<GLsizei>(width), static_cast<GLsizei>(height), Format(internalformat),
0, InitState::MayNeedInit);
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
return angle::Result::Continue;
}
......@@ -119,7 +119,7 @@ angle::Result Renderbuffer::setStorageMultisample(const Context *context,
mState.update(static_cast<GLsizei>(width), static_cast<GLsizei>(height), Format(internalformat),
static_cast<GLsizei>(samples), InitState::MayNeedInit);
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
return angle::Result::Continue;
}
......@@ -133,7 +133,7 @@ angle::Result Renderbuffer::setStorageEGLImageTarget(const Context *context, egl
mState.update(static_cast<GLsizei>(image->getWidth()), static_cast<GLsizei>(image->getHeight()),
Format(image->getFormat()), 0, image->sourceInitState());
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
return angle::Result::Continue;
}
......
......@@ -237,7 +237,7 @@ GLuint TextureManager::createTexture()
return AllocateEmptyObject(&mHandleAllocator, &mObjectMap);
}
void TextureManager::signalAllTexturesDirty(const Context *context) const
void TextureManager::signalAllTexturesDirty() const
{
for (const auto &texture : mObjectMap)
{
......@@ -245,7 +245,7 @@ void TextureManager::signalAllTexturesDirty(const Context *context) const
{
// We don't know if the Texture needs init, but that's ok, since it will only force
// a re-check, and will not initialize the pixels if it's not needed.
texture.second->signalDirtyStorage(context, InitState::MayNeedInit);
texture.second->signalDirtyStorage(InitState::MayNeedInit);
}
}
}
......@@ -440,13 +440,13 @@ void FramebufferManager::setDefaultFramebuffer(Framebuffer *framebuffer)
mObjectMap.assign(0, framebuffer);
}
void FramebufferManager::invalidateFramebufferComplenessCache(const Context *context) const
void FramebufferManager::invalidateFramebufferComplenessCache() const
{
for (const auto &framebuffer : mObjectMap)
{
if (framebuffer.second)
{
framebuffer.second->invalidateCompletenessCache(context);
framebuffer.second->invalidateCompletenessCache();
}
}
}
......@@ -498,7 +498,7 @@ void MemoryObjectManager::reset(const Context *context)
GLuint MemoryObjectManager::createMemoryObject(rx::GLImplFactory *factory)
{
GLuint handle = mHandleAllocator.allocate();
GLuint handle = mHandleAllocator.allocate();
MemoryObject *memoryObject = new MemoryObject(factory, handle);
memoryObject->addRef();
mMemoryObjects.assign(handle, memoryObject);
......
......@@ -175,7 +175,7 @@ class TextureManager : public TypedResourceManager<Texture, HandleAllocator, Tex
return mObjectMap.query(handle);
}
void signalAllTexturesDirty(const Context *context) const;
void signalAllTexturesDirty() const;
ANGLE_INLINE Texture *checkTextureAllocation(rx::GLImplFactory *factory,
GLuint handle,
......@@ -269,7 +269,7 @@ class FramebufferManager
Framebuffer *getFramebuffer(GLuint handle) const;
void setDefaultFramebuffer(Framebuffer *framebuffer);
void invalidateFramebufferComplenessCache(const Context *context) const;
void invalidateFramebufferComplenessCache() const;
Framebuffer *checkFramebufferAllocation(rx::GLImplFactory *factory,
const Caps &caps,
......
......@@ -39,7 +39,7 @@ const std::string &Sampler::getLabel() const
void Sampler::setMinFilter(const Context *context, GLenum minFilter)
{
mState.setMinFilter(minFilter);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
GLenum Sampler::getMinFilter() const
......@@ -50,7 +50,7 @@ GLenum Sampler::getMinFilter() const
void Sampler::setMagFilter(const Context *context, GLenum magFilter)
{
mState.setMagFilter(magFilter);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
GLenum Sampler::getMagFilter() const
......@@ -61,7 +61,7 @@ GLenum Sampler::getMagFilter() const
void Sampler::setWrapS(const Context *context, GLenum wrapS)
{
mState.setWrapS(wrapS);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
GLenum Sampler::getWrapS() const
......@@ -72,7 +72,7 @@ GLenum Sampler::getWrapS() const
void Sampler::setWrapT(const Context *context, GLenum wrapT)
{
mState.setWrapT(wrapT);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
GLenum Sampler::getWrapT() const
......@@ -83,7 +83,7 @@ GLenum Sampler::getWrapT() const
void Sampler::setWrapR(const Context *context, GLenum wrapR)
{
mState.setWrapR(wrapR);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
GLenum Sampler::getWrapR() const
......@@ -94,7 +94,7 @@ GLenum Sampler::getWrapR() const
void Sampler::setMaxAnisotropy(const Context *context, float maxAnisotropy)
{
mState.setMaxAnisotropy(maxAnisotropy);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
float Sampler::getMaxAnisotropy() const
......@@ -105,7 +105,7 @@ float Sampler::getMaxAnisotropy() const
void Sampler::setMinLod(const Context *context, GLfloat minLod)
{
mState.setMinLod(minLod);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
GLfloat Sampler::getMinLod() const
......@@ -116,7 +116,7 @@ GLfloat Sampler::getMinLod() const
void Sampler::setMaxLod(const Context *context, GLfloat maxLod)
{
mState.setMaxLod(maxLod);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
GLfloat Sampler::getMaxLod() const
......@@ -127,7 +127,7 @@ GLfloat Sampler::getMaxLod() const
void Sampler::setCompareMode(const Context *context, GLenum compareMode)
{
mState.setCompareMode(compareMode);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
GLenum Sampler::getCompareMode() const
......@@ -138,7 +138,7 @@ GLenum Sampler::getCompareMode() const
void Sampler::setCompareFunc(const Context *context, GLenum compareFunc)
{
mState.setCompareFunc(compareFunc);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
GLenum Sampler::getCompareFunc() const
......@@ -149,7 +149,7 @@ GLenum Sampler::getCompareFunc() const
void Sampler::setSRGBDecode(const Context *context, GLenum sRGBDecode)
{
mState.setSRGBDecode(sRGBDecode);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
GLenum Sampler::getSRGBDecode() const
......@@ -160,7 +160,7 @@ GLenum Sampler::getSRGBDecode() const
void Sampler::setBorderColor(const Context *context, const ColorGeneric &color)
{
mState.setBorderColor(color);
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
const ColorGeneric &Sampler::getBorderColor() const
......
......@@ -131,12 +131,12 @@ Error Surface::destroyImpl(const Display *display)
return NoError();
}
void Surface::postSwap(const gl::Context *context)
void Surface::postSwap()
{
if (mRobustResourceInitialization && mSwapBehavior != EGL_BUFFER_PRESERVED)
{
mInitState = gl::InitState::MayNeedInit;
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
}
}
......@@ -234,14 +234,14 @@ Error Surface::swap(const gl::Context *context)
TRACE_EVENT0("gpu.angle", "egl::Surface::swap");
ANGLE_TRY(mImplementation->swap(context));
postSwap(context);
postSwap();
return NoError();
}
Error Surface::swapWithDamage(const gl::Context *context, EGLint *rects, EGLint n_rects)
{
ANGLE_TRY(mImplementation->swapWithDamage(context, rects, n_rects));
postSwap(context);
postSwap();
return NoError();
}
......
......@@ -227,7 +227,7 @@ class Surface : public LabeledObject, public gl::FramebufferAttachmentObject
private:
Error destroyImpl(const Display *display);
void postSwap(const gl::Context *context);
void postSwap();
Error releaseRef(const Display *display);
gl::InitState mInitState;
......
......@@ -660,7 +660,7 @@ Texture::~Texture()
void Texture::setLabel(const Context *context, const std::string &label)
{
mLabel = label;
signalDirtyState(context, DIRTY_BIT_LABEL);
signalDirtyState(DIRTY_BIT_LABEL);
}
const std::string &Texture::getLabel() const
......@@ -671,7 +671,7 @@ const std::string &Texture::getLabel() const
void Texture::setSwizzleRed(const Context *context, GLenum swizzleRed)
{
mState.mSwizzleState.swizzleRed = swizzleRed;
signalDirtyState(context, DIRTY_BIT_SWIZZLE_RED);
signalDirtyState(DIRTY_BIT_SWIZZLE_RED);
}
GLenum Texture::getSwizzleRed() const
......@@ -682,7 +682,7 @@ GLenum Texture::getSwizzleRed() const
void Texture::setSwizzleGreen(const Context *context, GLenum swizzleGreen)
{
mState.mSwizzleState.swizzleGreen = swizzleGreen;
signalDirtyState(context, DIRTY_BIT_SWIZZLE_GREEN);
signalDirtyState(DIRTY_BIT_SWIZZLE_GREEN);
}
GLenum Texture::getSwizzleGreen() const
......@@ -693,7 +693,7 @@ GLenum Texture::getSwizzleGreen() const
void Texture::setSwizzleBlue(const Context *context, GLenum swizzleBlue)
{
mState.mSwizzleState.swizzleBlue = swizzleBlue;
signalDirtyState(context, DIRTY_BIT_SWIZZLE_BLUE);
signalDirtyState(DIRTY_BIT_SWIZZLE_BLUE);
}
GLenum Texture::getSwizzleBlue() const
......@@ -704,7 +704,7 @@ GLenum Texture::getSwizzleBlue() const
void Texture::setSwizzleAlpha(const Context *context, GLenum swizzleAlpha)
{
mState.mSwizzleState.swizzleAlpha = swizzleAlpha;
signalDirtyState(context, DIRTY_BIT_SWIZZLE_ALPHA);
signalDirtyState(DIRTY_BIT_SWIZZLE_ALPHA);
}
GLenum Texture::getSwizzleAlpha() const
......@@ -715,7 +715,7 @@ GLenum Texture::getSwizzleAlpha() const
void Texture::setMinFilter(const Context *context, GLenum minFilter)
{
mState.mSamplerState.setMinFilter(minFilter);
signalDirtyState(context, DIRTY_BIT_MIN_FILTER);
signalDirtyState(DIRTY_BIT_MIN_FILTER);
}
GLenum Texture::getMinFilter() const
......@@ -726,7 +726,7 @@ GLenum Texture::getMinFilter() const
void Texture::setMagFilter(const Context *context, GLenum magFilter)
{
mState.mSamplerState.setMagFilter(magFilter);
signalDirtyState(context, DIRTY_BIT_MAG_FILTER);
signalDirtyState(DIRTY_BIT_MAG_FILTER);
}
GLenum Texture::getMagFilter() const
......@@ -737,7 +737,7 @@ GLenum Texture::getMagFilter() const
void Texture::setWrapS(const Context *context, GLenum wrapS)
{
mState.mSamplerState.setWrapS(wrapS);
signalDirtyState(context, DIRTY_BIT_WRAP_S);
signalDirtyState(DIRTY_BIT_WRAP_S);
}
GLenum Texture::getWrapS() const
......@@ -748,7 +748,7 @@ GLenum Texture::getWrapS() const
void Texture::setWrapT(const Context *context, GLenum wrapT)
{
mState.mSamplerState.setWrapT(wrapT);
signalDirtyState(context, DIRTY_BIT_WRAP_T);
signalDirtyState(DIRTY_BIT_WRAP_T);
}
GLenum Texture::getWrapT() const
......@@ -759,7 +759,7 @@ GLenum Texture::getWrapT() const
void Texture::setWrapR(const Context *context, GLenum wrapR)
{
mState.mSamplerState.setWrapR(wrapR);
signalDirtyState(context, DIRTY_BIT_WRAP_R);
signalDirtyState(DIRTY_BIT_WRAP_R);
}
GLenum Texture::getWrapR() const
......@@ -770,7 +770,7 @@ GLenum Texture::getWrapR() const
void Texture::setMaxAnisotropy(const Context *context, float maxAnisotropy)
{
mState.mSamplerState.setMaxAnisotropy(maxAnisotropy);
signalDirtyState(context, DIRTY_BIT_MAX_ANISOTROPY);
signalDirtyState(DIRTY_BIT_MAX_ANISOTROPY);
}
float Texture::getMaxAnisotropy() const
......@@ -781,7 +781,7 @@ float Texture::getMaxAnisotropy() const
void Texture::setMinLod(const Context *context, GLfloat minLod)
{
mState.mSamplerState.setMinLod(minLod);
signalDirtyState(context, DIRTY_BIT_MIN_LOD);
signalDirtyState(DIRTY_BIT_MIN_LOD);
}
GLfloat Texture::getMinLod() const
......@@ -792,7 +792,7 @@ GLfloat Texture::getMinLod() const
void Texture::setMaxLod(const Context *context, GLfloat maxLod)
{
mState.mSamplerState.setMaxLod(maxLod);
signalDirtyState(context, DIRTY_BIT_MAX_LOD);
signalDirtyState(DIRTY_BIT_MAX_LOD);
}
GLfloat Texture::getMaxLod() const
......@@ -803,7 +803,7 @@ GLfloat Texture::getMaxLod() const
void Texture::setCompareMode(const Context *context, GLenum compareMode)
{
mState.mSamplerState.setCompareMode(compareMode);
signalDirtyState(context, DIRTY_BIT_COMPARE_MODE);
signalDirtyState(DIRTY_BIT_COMPARE_MODE);
}
GLenum Texture::getCompareMode() const
......@@ -814,7 +814,7 @@ GLenum Texture::getCompareMode() const
void Texture::setCompareFunc(const Context *context, GLenum compareFunc)
{
mState.mSamplerState.setCompareFunc(compareFunc);
signalDirtyState(context, DIRTY_BIT_COMPARE_FUNC);
signalDirtyState(DIRTY_BIT_COMPARE_FUNC);
}
GLenum Texture::getCompareFunc() const
......@@ -825,7 +825,7 @@ GLenum Texture::getCompareFunc() const
void Texture::setSRGBDecode(const Context *context, GLenum sRGBDecode)
{
mState.mSamplerState.setSRGBDecode(sRGBDecode);
signalDirtyState(context, DIRTY_BIT_SRGB_DECODE);
signalDirtyState(DIRTY_BIT_SRGB_DECODE);
}
GLenum Texture::getSRGBDecode() const
......@@ -843,7 +843,7 @@ angle::Result Texture::setBaseLevel(const Context *context, GLuint baseLevel)
if (mState.setBaseLevel(baseLevel))
{
ANGLE_TRY(mTexture->setBaseLevel(context, mState.getEffectiveBaseLevel()));
signalDirtyState(context, DIRTY_BIT_BASE_LEVEL);
signalDirtyState(DIRTY_BIT_BASE_LEVEL);
}
return angle::Result::Continue;
......@@ -858,7 +858,7 @@ void Texture::setMaxLevel(const Context *context, GLuint maxLevel)
{
if (mState.setMaxLevel(maxLevel))
{
signalDirtyState(context, DIRTY_BIT_MAX_LEVEL);
signalDirtyState(DIRTY_BIT_MAX_LEVEL);
}
}
......@@ -872,7 +872,7 @@ void Texture::setDepthStencilTextureMode(const Context *context, GLenum mode)
if (mState.mDepthStencilTextureMode != mode)
{
mState.mDepthStencilTextureMode = mode;
signalDirtyState(context, DIRTY_BIT_DEPTH_STENCIL_TEXTURE_MODE);
signalDirtyState(DIRTY_BIT_DEPTH_STENCIL_TEXTURE_MODE);
}
}
......@@ -894,7 +894,7 @@ GLuint Texture::getImmutableLevels() const
void Texture::setUsage(const Context *context, GLenum usage)
{
mState.mUsage = usage;
signalDirtyState(context, DIRTY_BIT_USAGE);
signalDirtyState(DIRTY_BIT_USAGE);
}
GLenum Texture::getUsage() const
......@@ -990,20 +990,20 @@ GLint Texture::getLevelMemorySize(TextureTarget target, GLint level) const
return mState.getImageDesc(target, level).getMemorySize();
}
void Texture::signalDirtyStorage(const Context *context, InitState initState)
void Texture::signalDirtyStorage(InitState initState)
{
mState.mInitState = initState;
invalidateCompletenessCache();
mState.mCachedSamplerFormatValid = false;
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
}
void Texture::signalDirtyState(const Context *context, size_t dirtyBit)
void Texture::signalDirtyState(size_t dirtyBit)
{
mDirtyBits.set(dirtyBit);
invalidateCompletenessCache();
mState.mCachedSamplerFormatValid = false;
onStateChange(context, angle::SubjectMessage::DirtyBitsFlagged);
onStateChange(angle::SubjectMessage::DirtyBitsFlagged);
}
angle::Result Texture::setImage(Context *context,
......@@ -1032,7 +1032,7 @@ angle::Result Texture::setImage(Context *context,
ANGLE_TRY(handleMipmapGenerationHint(context, level));
signalDirtyStorage(context, initState);
signalDirtyStorage(initState);
return angle::Result::Continue;
}
......@@ -1058,7 +1058,7 @@ angle::Result Texture::setSubImage(Context *context,
ANGLE_TRY(handleMipmapGenerationHint(context, level));
onStateChange(context, angle::SubjectMessage::ContentsChanged);
onStateChange(angle::SubjectMessage::ContentsChanged);
return angle::Result::Continue;
}
......@@ -1085,7 +1085,7 @@ angle::Result Texture::setCompressedImage(Context *context,
InitState initState = DetermineInitState(context, pixels);
mState.setImageDesc(target, level, ImageDesc(size, Format(internalFormat), initState));
signalDirtyStorage(context, initState);
signalDirtyStorage(initState);
return angle::Result::Continue;
}
......@@ -1108,7 +1108,7 @@ angle::Result Texture::setCompressedSubImage(const Context *context,
ANGLE_TRY(mTexture->setCompressedSubImage(context, index, area, format, unpackState, imageSize,
pixels));
onStateChange(context, angle::SubjectMessage::ContentsChanged);
onStateChange(angle::SubjectMessage::ContentsChanged);
return angle::Result::Continue;
}
......@@ -1144,7 +1144,7 @@ angle::Result Texture::copyImage(Context *context,
ANGLE_TRY(handleMipmapGenerationHint(context, level));
// We need to initialize this texture only if the source attachment is not initialized.
signalDirtyStorage(context, InitState::Initialized);
signalDirtyStorage(InitState::Initialized);
return angle::Result::Continue;
}
......@@ -1164,7 +1164,7 @@ angle::Result Texture::copySubImage(Context *context,
ANGLE_TRY(mTexture->copySubImage(context, index, destOffset, sourceArea, source));
ANGLE_TRY(handleMipmapGenerationHint(context, index.getLevelIndex()));
onStateChange(context, angle::SubjectMessage::ContentsChanged);
onStateChange(angle::SubjectMessage::ContentsChanged);
return angle::Result::Continue;
}
......@@ -1203,7 +1203,7 @@ angle::Result Texture::copyTexture(Context *context,
target, level,
ImageDesc(sourceDesc.size, Format(internalFormatInfo), InitState::Initialized));
signalDirtyStorage(context, InitState::Initialized);
signalDirtyStorage(InitState::Initialized);
return angle::Result::Continue;
}
......@@ -1234,7 +1234,7 @@ angle::Result Texture::copySubTexture(const Context *context,
unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha,
source));
onStateChange(context, angle::SubjectMessage::ContentsChanged);
onStateChange(angle::SubjectMessage::ContentsChanged);
return angle::Result::Continue;
}
......@@ -1282,7 +1282,7 @@ angle::Result Texture::setStorage(Context *context,
mDirtyBits.set(DIRTY_BIT_BASE_LEVEL);
mDirtyBits.set(DIRTY_BIT_MAX_LEVEL);
signalDirtyStorage(context, InitState::MayNeedInit);
signalDirtyStorage(InitState::MayNeedInit);
return angle::Result::Continue;
}
......@@ -1309,7 +1309,7 @@ angle::Result Texture::setStorageMultisample(Context *context,
mState.setImageDescChainMultisample(size, Format(internalFormat), samples, fixedSampleLocations,
InitState::MayNeedInit);
signalDirtyStorage(context, InitState::MayNeedInit);
signalDirtyStorage(InitState::MayNeedInit);
return angle::Result::Continue;
}
......@@ -1344,7 +1344,7 @@ angle::Result Texture::setStorageExternalMemory(Context *context,
mDirtyBits.set(DIRTY_BIT_BASE_LEVEL);
mDirtyBits.set(DIRTY_BIT_MAX_LEVEL);
signalDirtyStorage(context, InitState::Initialized);
signalDirtyStorage(InitState::Initialized);
return angle::Result::Continue;
}
......@@ -1400,7 +1400,7 @@ angle::Result Texture::generateMipmap(Context *context)
mState.setImageDescChain(baseLevel, maxLevel, baseImageInfo.size, baseImageInfo.format,
InitState::Initialized);
signalDirtyStorage(context, InitState::Initialized);
signalDirtyStorage(InitState::Initialized);
return angle::Result::Continue;
}
......@@ -1422,7 +1422,7 @@ angle::Result Texture::bindTexImageFromSurface(Context *context, egl::Surface *s
Extents size(surface->getWidth(), surface->getHeight(), 1);
ImageDesc desc(size, surface->getBindTexImageFormat(), InitState::Initialized);
mState.setImageDesc(NonCubeTextureTypeToTarget(mState.mType), 0, desc);
signalDirtyStorage(context, InitState::Initialized);
signalDirtyStorage(InitState::Initialized);
return angle::Result::Continue;
}
......@@ -1435,7 +1435,7 @@ angle::Result Texture::releaseTexImageFromSurface(const Context *context)
// Erase the image info for level 0
ASSERT(mState.mType == TextureType::_2D || mState.mType == TextureType::Rectangle);
mState.clearImageDesc(NonCubeTextureTypeToTarget(mState.mType), 0);
signalDirtyStorage(context, InitState::Initialized);
signalDirtyStorage(InitState::Initialized);
return angle::Result::Continue;
}
......@@ -1466,7 +1466,7 @@ angle::Result Texture::acquireImageFromStream(const Context *context,
Extents size(desc.width, desc.height, 1);
mState.setImageDesc(NonCubeTextureTypeToTarget(mState.mType), 0,
ImageDesc(size, Format(desc.internalFormat), InitState::Initialized));
signalDirtyStorage(context, InitState::Initialized);
signalDirtyStorage(InitState::Initialized);
return angle::Result::Continue;
}
......@@ -1478,7 +1478,7 @@ angle::Result Texture::releaseImageFromStream(const Context *context)
// Set to incomplete
mState.clearImageDesc(NonCubeTextureTypeToTarget(mState.mType), 0);
signalDirtyStorage(context, InitState::Initialized);
signalDirtyStorage(InitState::Initialized);
return angle::Result::Continue;
}
......@@ -1524,7 +1524,7 @@ angle::Result Texture::setEGLImageTarget(Context *context,
mState.clearImageDescs();
mState.setImageDesc(NonCubeTextureTypeToTarget(type), 0,
ImageDesc(size, imageTarget->getFormat(), initState));
signalDirtyStorage(context, initState);
signalDirtyStorage(initState);
return angle::Result::Continue;
}
......@@ -1606,7 +1606,7 @@ bool Texture::getAttachmentFixedSampleLocations(const ImageIndex &imageIndex) co
void Texture::setBorderColor(const Context *context, const ColorGeneric &color)
{
mState.mSamplerState.setBorderColor(color);
signalDirtyState(context, DIRTY_BIT_BORDER_COLOR);
signalDirtyState(DIRTY_BIT_BORDER_COLOR);
}
const ColorGeneric &Texture::getBorderColor() const
......@@ -1716,7 +1716,7 @@ angle::Result Texture::ensureInitialized(const Context *context)
}
if (anyDirty)
{
signalDirtyStorage(context, InitState::Initialized);
signalDirtyStorage(InitState::Initialized);
}
mState.mInitState = InitState::Initialized;
......@@ -1804,12 +1804,10 @@ angle::Result Texture::handleMipmapGenerationHint(Context *context, int level)
return angle::Result::Continue;
}
void Texture::onSubjectStateChange(const gl::Context *context,
angle::SubjectIndex index,
angle::SubjectMessage message)
void Texture::onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message)
{
ASSERT(message == angle::SubjectMessage::SubjectChanged);
mDirtyBits.set(DIRTY_BIT_IMPLEMENTATION);
signalDirtyState(context, DIRTY_BIT_IMPLEMENTATION);
signalDirtyState(DIRTY_BIT_IMPLEMENTATION);
}
} // namespace gl
......@@ -408,7 +408,7 @@ class Texture final : public RefCountObject,
GLint getMemorySize() const;
GLint getLevelMemorySize(TextureTarget target, GLint level) const;
void signalDirtyStorage(const Context *context, InitState initState);
void signalDirtyStorage(InitState initState);
bool isSamplerComplete(const Context *context, const Sampler *optionalSampler);
......@@ -478,9 +478,7 @@ class Texture final : public RefCountObject,
bool hasAnyDirtyBit() const { return mDirtyBits.any(); }
// ObserverInterface implementation.
void onSubjectStateChange(const gl::Context *context,
angle::SubjectIndex index,
angle::SubjectMessage message) override;
void onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message) override;
private:
rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override;
......@@ -508,7 +506,7 @@ class Texture final : public RefCountObject,
angle::Result handleMipmapGenerationHint(Context *context, int level);
void signalDirtyState(const Context *context, size_t dirtyBit);
void signalDirtyState(size_t dirtyBit);
TextureState mState;
DirtyBits mDirtyBits;
......
......@@ -199,7 +199,7 @@ void TransformFeedback::onVerticesDrawn(const Context *context, GLsizei count, G
{
if (buffer.get() != nullptr)
{
buffer->onTransformFeedback(context);
buffer->onTransformFeedback();
}
}
}
......
......@@ -127,7 +127,8 @@ VertexArray::VertexArray(rx::GLImplFactory *factory,
size_t maxAttribBindings)
: mId(id),
mState(this, maxAttribs, maxAttribBindings),
mVertexArray(factory->createVertexArray(mState))
mVertexArray(factory->createVertexArray(mState)),
mBufferAccessValidationEnabled(false)
{
for (size_t attribIndex = 0; attribIndex < maxAttribBindings; ++attribIndex)
{
......@@ -248,10 +249,9 @@ ANGLE_INLINE void VertexArray::setDirtyBindingBit(size_t bindingIndex,
mDirtyBindingBits[bindingIndex].set(dirtyBindingBit);
}
ANGLE_INLINE void VertexArray::updateCachedBufferBindingSize(const Context *context,
VertexBinding *binding)
ANGLE_INLINE void VertexArray::updateCachedBufferBindingSize(VertexBinding *binding)
{
if (!context->isBufferAccessValidationEnabled())
if (!mBufferAccessValidationEnabled)
return;
for (size_t boundAttribute : binding->getBoundAttributesMask())
......@@ -317,7 +317,7 @@ void VertexArray::bindVertexBufferImpl(const Context *context,
binding->assignBuffer(boundBuffer);
binding->setOffset(offset);
binding->setStride(stride);
updateCachedBufferBindingSize(context, binding);
updateCachedBufferBindingSize(binding);
// Update client memory attribute pointers. Affects all bound attributes.
if (boundBuffer)
......@@ -552,22 +552,20 @@ VertexArray::DirtyBitType VertexArray::getDirtyBitFromIndex(bool contentsChanged
}
}
void VertexArray::onSubjectStateChange(const gl::Context *context,
angle::SubjectIndex index,
angle::SubjectMessage message)
void VertexArray::onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message)
{
switch (message)
{
case angle::SubjectMessage::ContentsChanged:
setDependentDirtyBit(context, true, index);
setDependentDirtyBit(true, index);
break;
case angle::SubjectMessage::SubjectChanged:
if (!IsElementArrayBufferSubjectIndex(index))
{
updateCachedBufferBindingSize(context, &mState.mVertexBindings[index]);
updateCachedBufferBindingSize(&mState.mVertexBindings[index]);
}
setDependentDirtyBit(context, false, index);
setDependentDirtyBit(false, index);
break;
case angle::SubjectMessage::BindingChanged:
......@@ -583,17 +581,17 @@ void VertexArray::onSubjectStateChange(const gl::Context *context,
{
updateCachedMappedArrayBuffersBinding(mState.mVertexBindings[index]);
}
onStateChange(context, angle::SubjectMessage::SubjectMapped);
onStateChange(angle::SubjectMessage::SubjectMapped);
break;
case angle::SubjectMessage::SubjectUnmapped:
setDependentDirtyBit(context, true, index);
setDependentDirtyBit(true, index);
if (!IsElementArrayBufferSubjectIndex(index))
{
updateCachedMappedArrayBuffersBinding(mState.mVertexBindings[index]);
}
onStateChange(context, angle::SubjectMessage::SubjectUnmapped);
onStateChange(angle::SubjectMessage::SubjectUnmapped);
break;
default:
......@@ -602,14 +600,12 @@ void VertexArray::onSubjectStateChange(const gl::Context *context,
}
}
void VertexArray::setDependentDirtyBit(const gl::Context *context,
bool contentsChanged,
angle::SubjectIndex index)
void VertexArray::setDependentDirtyBit(bool contentsChanged, angle::SubjectIndex index)
{
DirtyBitType dirtyBit = getDirtyBitFromIndex(contentsChanged, index);
ASSERT(!mDirtyBitsGuard.valid() || mDirtyBitsGuard.value().test(dirtyBit));
mDirtyBits.set(dirtyBit);
onStateChange(context, angle::SubjectMessage::ContentsChanged);
onStateChange(angle::SubjectMessage::ContentsChanged);
}
bool VertexArray::hasTransformFeedbackBindingConflict(const gl::Context *context) const
......
......@@ -196,9 +196,7 @@ class VertexArray final : public angle::ObserverInterface,
}
// Observer implementation
void onSubjectStateChange(const gl::Context *context,
angle::SubjectIndex index,
angle::SubjectMessage message) override;
void onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message) override;
// Dirty bits for VertexArrays use a heirarchical design. At the top level, each attribute
// has a single dirty bit. Then an array of MAX_ATTRIBS dirty bits each has a dirty bit for
......@@ -280,6 +278,11 @@ class VertexArray final : public angle::ObserverInterface,
return getIndexRangeImpl(context, type, indexCount, indices, indexRangeOut);
}
void setBufferAccessValidationEnabled(bool enabled)
{
mBufferAccessValidationEnabled = enabled;
}
private:
~VertexArray() override;
......@@ -290,12 +293,10 @@ class VertexArray final : public angle::ObserverInterface,
void setDirtyBindingBit(size_t bindingIndex, DirtyBindingBitType dirtyBindingBit);
DirtyBitType getDirtyBitFromIndex(bool contentsChanged, angle::SubjectIndex index) const;
void setDependentDirtyBit(const gl::Context *context,
bool contentsChanged,
angle::SubjectIndex index);
void setDependentDirtyBit(bool contentsChanged, angle::SubjectIndex index);
// These are used to optimize draw call validation.
void updateCachedBufferBindingSize(const Context *context, VertexBinding *binding);
void updateCachedBufferBindingSize(VertexBinding *binding);
void updateCachedTransformFeedbackBindingValidation(size_t bindingIndex, const Buffer *buffer);
void updateCachedMappedArrayBuffers(bool isMapped, const AttributesMask &boundAttributesMask);
void updateCachedMappedArrayBuffersBinding(const VertexBinding &binding);
......@@ -366,6 +367,7 @@ class VertexArray final : public angle::ObserverInterface,
};
mutable IndexRangeCache mIndexRangeCache;
bool mBufferAccessValidationEnabled;
};
} // namespace gl
......
......@@ -494,7 +494,7 @@ void SetSamplerParameterBase(Context *context,
break;
}
sampler->onStateChange(context, angle::SubjectMessage::ContentsChanged);
sampler->onStateChange(angle::SubjectMessage::ContentsChanged);
}
// Warning: you should ensure binding really matches attrib.bindingIndex before using this function.
......
......@@ -14,6 +14,11 @@
#include "libANGLE/ImageIndex.h"
#include "libANGLE/Observer.h"
namespace gl
{
class Context;
} // namespace gl
namespace rx
{
class FramebufferAttachmentRenderTarget;
......
......@@ -82,7 +82,7 @@ angle::Result EGLImageD3D::copyToLocalRendertarget(const gl::Context *context)
// Invalidate FBOs with this Image attached. Only currently applies to D3D11.
for (egl::ImageSibling *target : mState.targets)
{
target->onStateChange(context, angle::SubjectMessage::SubjectChanged);
target->onStateChange(angle::SubjectMessage::SubjectChanged);
}
return mRenderer->createRenderTargetCopy(context, curRenderTarget, &mRenderTarget);
......
......@@ -952,13 +952,13 @@ bool Buffer11::supportsDirectBinding() const
void Buffer11::initializeStaticData(const gl::Context *context)
{
BufferD3D::initializeStaticData(context);
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
}
void Buffer11::invalidateStaticData(const gl::Context *context)
{
BufferD3D::invalidateStaticData(context);
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
}
void Buffer11::onCopyStorage(BufferStorage *dest, BufferStorage *source)
......@@ -1151,7 +1151,7 @@ angle::Result Buffer11::NativeStorage::resize(const gl::Context *context,
// Notify that the storage has changed.
if (mOnStorageChanged)
{
mOnStorageChanged->onStateChange(context, angle::SubjectMessage::SubjectChanged);
mOnStorageChanged->onStateChange(angle::SubjectMessage::SubjectChanged);
}
return angle::Result::Continue;
......
......@@ -1307,7 +1307,7 @@ angle::Result TextureGL::setBaseLevel(const gl::Context *context, GLuint baseLev
mLocalDirtyBits.set(gl::Texture::DIRTY_BIT_BASE_LEVEL);
// Signal to the GL layer that the Impl has dirty bits.
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
stateManager->bindTexture(getType(), mTextureID);
functions->texParameteri(ToGLenum(getType()), GL_TEXTURE_BASE_LEVEL, baseLevel);
......@@ -1326,7 +1326,7 @@ void TextureGL::setMinFilter(const gl::Context *context, GLenum filter)
mLocalDirtyBits.set(gl::Texture::DIRTY_BIT_MIN_FILTER);
// Signal to the GL layer that the Impl has dirty bits.
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
stateManager->bindTexture(getType(), mTextureID);
functions->texParameteri(ToGLenum(getType()), GL_TEXTURE_MIN_FILTER, filter);
......@@ -1343,7 +1343,7 @@ void TextureGL::setMagFilter(const gl::Context *context, GLenum filter)
mLocalDirtyBits.set(gl::Texture::DIRTY_BIT_MAG_FILTER);
// Signal to the GL layer that the Impl has dirty bits.
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
stateManager->bindTexture(getType(), mTextureID);
functions->texParameteri(ToGLenum(getType()), GL_TEXTURE_MAG_FILTER, filter);
......@@ -1367,7 +1367,7 @@ void TextureGL::setSwizzle(const gl::Context *context, GLint swizzle[4])
mLocalDirtyBits.set(gl::Texture::DIRTY_BIT_SWIZZLE_ALPHA);
// Signal to the GL layer that the Impl has dirty bits.
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
stateManager->bindTexture(getType(), mTextureID);
functions->texParameteriv(ToGLenum(getType()), GL_TEXTURE_SWIZZLE_RGBA, swizzle);
......@@ -1509,7 +1509,7 @@ void TextureGL::setLevelInfo(const gl::Context *context,
if (updateWorkarounds)
{
mLocalDirtyBits |= GetLevelWorkaroundDirtyBits();
onStateChange(context, angle::SubjectMessage::SubjectChanged);
onStateChange(angle::SubjectMessage::SubjectChanged);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment