Commit 25e297e9 by Jamie Madill Committed by Commit Bot

D3D11: Alias dirty buffer channel bindings.

The types for this were a bit disorganized. Clean this up. BUG=angleproject:1635 Change-Id: I669d347697e0c7c5b06ed7165fa0997c375e876e Reviewed-on: https://chromium-review.googlesource.com/483315 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 29f148b0
......@@ -115,8 +115,9 @@ class FramebufferState final : angle::NonCopyable
bool mWebGLDepthStencilConsistent;
};
using OnAttachmentDirtyReceiver = angle::SignalReceiver<>;
using OnAttachmentDirtyBinding = angle::ChannelBinding<>;
using OnAttachmentDirtyChannel = angle::BroadcastChannel<>;
using OnAttachmentDirtyReceiver = angle::SignalReceiver<>;
class Framebuffer final : public LabeledObject, public OnAttachmentDirtyReceiver
{
......
......@@ -143,7 +143,7 @@ class Buffer11::NativeStorage : public Buffer11::BufferStorage
public:
NativeStorage(Renderer11 *renderer,
BufferUsage usage,
const angle::BroadcastChannel<> *onStorageChanged);
const OnBufferDataDirtyChannel *onStorageChanged);
~NativeStorage() override;
bool isMappable(GLbitfield access) const override;
......@@ -171,7 +171,7 @@ class Buffer11::NativeStorage : public Buffer11::BufferStorage
void clearSRVs();
ID3D11Buffer *mNativeStorage;
const angle::BroadcastChannel<> *mOnStorageChanged;
const OnBufferDataDirtyChannel *mOnStorageChanged;
std::map<DXGI_FORMAT, ID3D11ShaderResourceView *> mBufferResourceViews;
};
......@@ -902,12 +902,12 @@ void Buffer11::invalidateStaticData()
mStaticBroadcastChannel.signal();
}
angle::BroadcastChannel<> *Buffer11::getStaticBroadcastChannel()
OnBufferDataDirtyChannel *Buffer11::getStaticBroadcastChannel()
{
return &mStaticBroadcastChannel;
}
angle::BroadcastChannel<> *Buffer11::getDirectBroadcastChannel()
OnBufferDataDirtyChannel *Buffer11::getDirectBroadcastChannel()
{
return &mDirectBroadcastChannel;
}
......@@ -941,7 +941,7 @@ gl::Error Buffer11::BufferStorage::setData(const uint8_t *data, size_t offset, s
Buffer11::NativeStorage::NativeStorage(Renderer11 *renderer,
BufferUsage usage,
const angle::BroadcastChannel<> *onStorageChanged)
const OnBufferDataDirtyChannel *onStorageChanged)
: BufferStorage(renderer, usage), mNativeStorage(nullptr), mOnStorageChanged(onStorageChanged)
{
}
......
......@@ -14,7 +14,7 @@
#include "libANGLE/angletypes.h"
#include "libANGLE/renderer/d3d/BufferD3D.h"
#include "libANGLE/signal_utils.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
namespace gl
{
......@@ -103,8 +103,8 @@ class Buffer11 : public BufferD3D
// We use two set of dirty events. Static buffers are marked dirty whenever
// data changes, because they must be re-translated. Direct buffers only need to be
// updated when the underlying ID3D11Buffer pointer changes - hopefully far less often.
angle::BroadcastChannel<> *getStaticBroadcastChannel();
angle::BroadcastChannel<> *getDirectBroadcastChannel();
OnBufferDataDirtyChannel *getStaticBroadcastChannel();
OnBufferDataDirtyChannel *getDirectBroadcastChannel();
private:
class BufferStorage;
......@@ -162,8 +162,8 @@ class Buffer11 : public BufferD3D
size_t mConstantBufferStorageAdditionalSize;
unsigned int mMaxConstantBufferLruCount;
angle::BroadcastChannel<> mStaticBroadcastChannel;
angle::BroadcastChannel<> mDirectBroadcastChannel;
OnBufferDataDirtyChannel mStaticBroadcastChannel;
OnBufferDataDirtyChannel mDirectBroadcastChannel;
};
} // namespace rx
......
......@@ -54,7 +54,7 @@ gl::Error MarkAttachmentsDirty(const gl::FramebufferAttachment *attachment)
void UpdateCachedRenderTarget(const gl::FramebufferAttachment *attachment,
RenderTarget11 *&cachedRenderTarget,
gl::OnAttachmentDirtyBinding *channelBinding)
OnRenderTargetDirtyBinding *channelBinding)
{
RenderTarget11 *newRenderTarget = nullptr;
if (attachment)
......@@ -78,8 +78,7 @@ Framebuffer11::Framebuffer11(const gl::FramebufferState &data, Renderer11 *rende
{
ASSERT(mRenderer != nullptr);
mCachedColorRenderTargets.fill(nullptr);
for (uint32_t colorIndex = 0;
colorIndex < static_cast<uint32_t>(data.getColorAttachments().size()); ++colorIndex)
for (size_t colorIndex = 0; colorIndex < data.getColorAttachments().size(); ++colorIndex)
{
mColorRenderTargetsDirty.emplace_back(this, colorIndex);
}
......@@ -413,7 +412,7 @@ void Framebuffer11::syncState(ContextImpl *contextImpl, const gl::Framebuffer::D
FramebufferD3D::syncState(contextImpl, dirtyBits);
}
void Framebuffer11::signal(uint32_t channelID)
void Framebuffer11::signal(size_t channelID)
{
if (channelID == gl::IMPLEMENTATION_MAX_FRAMEBUFFER_ATTACHMENTS)
{
......
......@@ -17,7 +17,7 @@ namespace rx
{
class Renderer11;
class Framebuffer11 : public FramebufferD3D, public angle::SignalReceiver<>
class Framebuffer11 : public FramebufferD3D, public OnRenderTargetDirtyReceiver
{
public:
Framebuffer11(const gl::FramebufferState &data, Renderer11 *renderer);
......@@ -44,7 +44,7 @@ class Framebuffer11 : public FramebufferD3D, public angle::SignalReceiver<>
bool hasAnyInternalDirtyBit() const;
void syncInternalState(ContextImpl *contextImpl);
void signal(uint32_t channelID) override;
void signal(size_t channelID) override;
gl::Error getSamplePosition(size_t index, GLfloat *xy) const override;
......@@ -79,8 +79,8 @@ class Framebuffer11 : public FramebufferD3D, public angle::SignalReceiver<>
RenderTargetArray mCachedColorRenderTargets;
RenderTarget11 *mCachedDepthStencilRenderTarget;
std::vector<gl::OnAttachmentDirtyBinding> mColorRenderTargetsDirty;
gl::OnAttachmentDirtyBinding mDepthStencilRenderTargetDirty;
std::vector<OnRenderTargetDirtyBinding> mColorRenderTargetsDirty;
OnRenderTargetDirtyBinding mDepthStencilRenderTargetDirty;
gl::Framebuffer::DirtyBits mInternalDirtyBits;
};
......
......@@ -12,8 +12,8 @@
#include "libANGLE/renderer/d3d/RenderTargetD3D.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
#include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
#include "libANGLE/signal_utils.h"
namespace rx
{
......@@ -35,12 +35,12 @@ class RenderTarget11 : public RenderTargetD3D
virtual unsigned int getSubresourceIndex() const = 0;
void signalDirty() override;
angle::BroadcastChannel<> *getBroadcastChannel() { return &mBroadcastChannel; }
OnRenderTargetDirtyChannel *getBroadcastChannel() { return &mBroadcastChannel; }
const d3d11::Format &getFormatSet() const { return mFormatSet; }
protected:
angle::BroadcastChannel<> mBroadcastChannel;
OnRenderTargetDirtyChannel mBroadcastChannel;
const d3d11::Format &mFormatSet;
};
......
......@@ -25,7 +25,7 @@ VertexArray11::VertexArray11(const gl::VertexArrayState &data)
{
for (size_t attribIndex = 0; attribIndex < mCurrentBuffers.size(); ++attribIndex)
{
mOnBufferDataDirty.emplace_back(this, static_cast<uint32_t>(attribIndex));
mOnBufferDataDirty.emplace_back(this, attribIndex);
}
}
......@@ -112,7 +112,7 @@ void VertexArray11::updateVertexAttribStorage(size_t attribIndex)
{
// Note that for static callbacks, promotion to a static buffer from a dynamic buffer means
// we need to tag dynamic buffers with static callbacks.
BroadcastChannel<> *newChannel = nullptr;
OnBufferDataDirtyChannel *newChannel = nullptr;
if (newBuffer11 != nullptr)
{
switch (newStorageType)
......@@ -218,7 +218,7 @@ const std::vector<TranslatedAttribute> &VertexArray11::getTranslatedAttribs() co
return mTranslatedAttribs;
}
void VertexArray11::signal(uint32_t channelID)
void VertexArray11::signal(size_t channelID)
{
ASSERT(mAttributeStorageTypes[channelID] != VertexStorageType::CURRENT_VALUE);
......
......@@ -18,7 +18,7 @@ namespace rx
{
class Renderer11;
class VertexArray11 : public VertexArrayImpl, public angle::SignalReceiver<>
class VertexArray11 : public VertexArrayImpl, public OnBufferDataDirtyReceiver
{
public:
VertexArray11(const gl::VertexArrayState &data);
......@@ -37,7 +37,7 @@ class VertexArray11 : public VertexArrayImpl, public angle::SignalReceiver<>
const std::vector<TranslatedAttribute> &getTranslatedAttribs() const;
// SignalReceiver implementation
void signal(uint32_t channelID) override;
void signal(size_t channelID) override;
private:
void updateVertexAttribStorage(size_t attribIndex);
......@@ -58,7 +58,7 @@ class VertexArray11 : public VertexArrayImpl, public angle::SignalReceiver<>
// We need to keep a safe pointer to the Buffer so we can attach the correct dirty callbacks.
std::vector<BindingPointer<gl::Buffer>> mCurrentBuffers;
std::vector<gl::OnAttachmentDirtyBinding> mOnBufferDataDirty;
std::vector<OnBufferDataDirtyBinding> mOnBufferDataDirty;
};
} // namespace rx
......
......@@ -428,6 +428,16 @@ gl::ErrorOrResult<TextureHelper11> CreateStagingTexture(GLenum textureType,
bool UsePresentPathFast(const Renderer11 *renderer, const gl::FramebufferAttachment *colorbuffer);
// Used for state change notifications between buffers and vertex arrays.
using OnBufferDataDirtyBinding = angle::ChannelBinding<size_t>;
using OnBufferDataDirtyChannel = angle::BroadcastChannel<size_t>;
using OnBufferDataDirtyReceiver = angle::SignalReceiver<size_t>;
// Used for state change notifications between RenderTarget11 and Framebuffer11.
using OnRenderTargetDirtyBinding = angle::ChannelBinding<size_t>;
using OnRenderTargetDirtyChannel = angle::BroadcastChannel<size_t>;
using OnRenderTargetDirtyReceiver = angle::SignalReceiver<size_t>;
} // namespace rx
#endif // LIBANGLE_RENDERER_D3D_D3D11_RENDERER11_UTILS_H_
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