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