Commit 8b624c6d by Shahbaz Youssefi Committed by Commit Bot

Use constexpr initializer list for bitsets

Allows setting/resetting multiple bits to be coalesced into one operation. Bug: angleproject:5528 Change-Id: Ibf2dff8c81441a75c268d95066d23da1b2a3c810 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2678885 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent cf8c71de
...@@ -290,6 +290,14 @@ egl::ContextPriority GetContextPriority(const gl::State &state) ...@@ -290,6 +290,14 @@ egl::ContextPriority GetContextPriority(const gl::State &state)
} }
} // anonymous namespace } // anonymous namespace
// Not necessary once upgraded to C++17.
constexpr ContextVk::DirtyBits ContextVk::kIndexAndVertexDirtyBits;
constexpr ContextVk::DirtyBits ContextVk::kPipelineDescAndBindingDirtyBits;
constexpr ContextVk::DirtyBits ContextVk::kTexturesAndDescSetDirtyBits;
constexpr ContextVk::DirtyBits ContextVk::kResourcesAndDescSetDirtyBits;
constexpr ContextVk::DirtyBits ContextVk::kXfbBuffersAndDescSetDirtyBits;
constexpr ContextVk::DirtyBits ContextVk::kDriverUniformsAndBindingDirtyBits;
ANGLE_INLINE void ContextVk::flushDescriptorSetUpdates() ANGLE_INLINE void ContextVk::flushDescriptorSetUpdates()
{ {
if (mWriteDescriptorSets.empty()) if (mWriteDescriptorSets.empty())
...@@ -408,24 +416,18 @@ ContextVk::ContextVk(const gl::State &state, gl::ErrorSet *errorSet, RendererVk ...@@ -408,24 +416,18 @@ ContextVk::ContextVk(const gl::State &state, gl::ErrorSet *errorSet, RendererVk
// Note that currently these dirty bits are set every time a new render pass command buffer is // Note that currently these dirty bits are set every time a new render pass command buffer is
// begun. However, using ANGLE's SecondaryCommandBuffer, the Vulkan command buffer (which is // begun. However, using ANGLE's SecondaryCommandBuffer, the Vulkan command buffer (which is
// the primary command buffer) is not ended, so technically we don't need to rebind these. // the primary command buffer) is not ended, so technically we don't need to rebind these.
mNewGraphicsCommandBufferDirtyBits.set(DIRTY_BIT_RENDER_PASS); mNewGraphicsCommandBufferDirtyBits = DirtyBits{
mNewGraphicsCommandBufferDirtyBits.set(DIRTY_BIT_PIPELINE_BINDING); DIRTY_BIT_RENDER_PASS, DIRTY_BIT_PIPELINE_BINDING, DIRTY_BIT_TEXTURES,
mNewGraphicsCommandBufferDirtyBits.set(DIRTY_BIT_TEXTURES); DIRTY_BIT_VERTEX_BUFFERS, DIRTY_BIT_INDEX_BUFFER, DIRTY_BIT_SHADER_RESOURCES,
mNewGraphicsCommandBufferDirtyBits.set(DIRTY_BIT_VERTEX_BUFFERS); DIRTY_BIT_DESCRIPTOR_SETS, DIRTY_BIT_DRIVER_UNIFORMS_BINDING};
mNewGraphicsCommandBufferDirtyBits.set(DIRTY_BIT_INDEX_BUFFER);
mNewGraphicsCommandBufferDirtyBits.set(DIRTY_BIT_SHADER_RESOURCES);
mNewGraphicsCommandBufferDirtyBits.set(DIRTY_BIT_DESCRIPTOR_SETS);
mNewGraphicsCommandBufferDirtyBits.set(DIRTY_BIT_DRIVER_UNIFORMS_BINDING);
if (getFeatures().supportsTransformFeedbackExtension.enabled) if (getFeatures().supportsTransformFeedbackExtension.enabled)
{ {
mNewGraphicsCommandBufferDirtyBits.set(DIRTY_BIT_TRANSFORM_FEEDBACK_BUFFERS); mNewGraphicsCommandBufferDirtyBits.set(DIRTY_BIT_TRANSFORM_FEEDBACK_BUFFERS);
} }
mNewComputeCommandBufferDirtyBits.set(DIRTY_BIT_PIPELINE_BINDING); mNewComputeCommandBufferDirtyBits =
mNewComputeCommandBufferDirtyBits.set(DIRTY_BIT_TEXTURES); DirtyBits{DIRTY_BIT_PIPELINE_BINDING, DIRTY_BIT_TEXTURES, DIRTY_BIT_SHADER_RESOURCES,
mNewComputeCommandBufferDirtyBits.set(DIRTY_BIT_SHADER_RESOURCES); DIRTY_BIT_DESCRIPTOR_SETS, DIRTY_BIT_DRIVER_UNIFORMS_BINDING};
mNewComputeCommandBufferDirtyBits.set(DIRTY_BIT_DESCRIPTOR_SETS);
mNewComputeCommandBufferDirtyBits.set(DIRTY_BIT_DRIVER_UNIFORMS_BINDING);
mGraphicsDirtyBitHandlers[DIRTY_BIT_EVENT_LOG] = &ContextVk::handleDirtyGraphicsEventLog; mGraphicsDirtyBitHandlers[DIRTY_BIT_EVENT_LOG] = &ContextVk::handleDirtyGraphicsEventLog;
mGraphicsDirtyBitHandlers[DIRTY_BIT_DEFAULT_ATTRIBS] = mGraphicsDirtyBitHandlers[DIRTY_BIT_DEFAULT_ATTRIBS] =
...@@ -3483,10 +3485,8 @@ angle::Result ContextVk::invalidateCurrentTextures(const gl::Context *context) ...@@ -3483,10 +3485,8 @@ angle::Result ContextVk::invalidateCurrentTextures(const gl::Context *context)
if (executable->hasTextures()) if (executable->hasTextures())
{ {
mGraphicsDirtyBits.set(DIRTY_BIT_TEXTURES); mGraphicsDirtyBits |= kTexturesAndDescSetDirtyBits;
mGraphicsDirtyBits.set(DIRTY_BIT_DESCRIPTOR_SETS); mComputeDirtyBits |= kTexturesAndDescSetDirtyBits;
mComputeDirtyBits.set(DIRTY_BIT_TEXTURES);
mComputeDirtyBits.set(DIRTY_BIT_DESCRIPTOR_SETS);
ANGLE_TRY(updateActiveTextures(context)); ANGLE_TRY(updateActiveTextures(context));
} }
...@@ -3502,25 +3502,20 @@ void ContextVk::invalidateCurrentShaderResources() ...@@ -3502,25 +3502,20 @@ void ContextVk::invalidateCurrentShaderResources()
if (executable->hasUniformBuffers() || executable->hasStorageBuffers() || if (executable->hasUniformBuffers() || executable->hasStorageBuffers() ||
executable->hasAtomicCounterBuffers() || executable->hasImages()) executable->hasAtomicCounterBuffers() || executable->hasImages())
{ {
mGraphicsDirtyBits.set(DIRTY_BIT_SHADER_RESOURCES); mGraphicsDirtyBits |= kResourcesAndDescSetDirtyBits;
mGraphicsDirtyBits.set(DIRTY_BIT_DESCRIPTOR_SETS); mComputeDirtyBits |= kResourcesAndDescSetDirtyBits;
mComputeDirtyBits.set(DIRTY_BIT_SHADER_RESOURCES);
mComputeDirtyBits.set(DIRTY_BIT_DESCRIPTOR_SETS);
} }
} }
void ContextVk::invalidateGraphicsDriverUniforms() void ContextVk::invalidateGraphicsDriverUniforms()
{ {
mGraphicsDirtyBits.set(DIRTY_BIT_DRIVER_UNIFORMS); mGraphicsDirtyBits |= kDriverUniformsAndBindingDirtyBits;
mGraphicsDirtyBits.set(DIRTY_BIT_DRIVER_UNIFORMS_BINDING);
} }
void ContextVk::invalidateDriverUniforms() void ContextVk::invalidateDriverUniforms()
{ {
mGraphicsDirtyBits.set(DIRTY_BIT_DRIVER_UNIFORMS); mGraphicsDirtyBits |= kDriverUniformsAndBindingDirtyBits;
mGraphicsDirtyBits.set(DIRTY_BIT_DRIVER_UNIFORMS_BINDING); mComputeDirtyBits |= kDriverUniformsAndBindingDirtyBits;
mComputeDirtyBits.set(DIRTY_BIT_DRIVER_UNIFORMS);
mComputeDirtyBits.set(DIRTY_BIT_DRIVER_UNIFORMS_BINDING);
} }
void ContextVk::onFramebufferChange(FramebufferVk *framebufferVk) void ContextVk::onFramebufferChange(FramebufferVk *framebufferVk)
...@@ -3563,8 +3558,7 @@ void ContextVk::invalidateCurrentTransformFeedbackBuffers() ...@@ -3563,8 +3558,7 @@ void ContextVk::invalidateCurrentTransformFeedbackBuffers()
} }
else if (getFeatures().emulateTransformFeedback.enabled) else if (getFeatures().emulateTransformFeedback.enabled)
{ {
mGraphicsDirtyBits.set(DIRTY_BIT_TRANSFORM_FEEDBACK_BUFFERS); mGraphicsDirtyBits |= kXfbBuffersAndDescSetDirtyBits;
mGraphicsDirtyBits.set(DIRTY_BIT_DESCRIPTOR_SETS);
} }
} }
...@@ -3572,8 +3566,8 @@ void ContextVk::onTransformFeedbackStateChanged() ...@@ -3572,8 +3566,8 @@ void ContextVk::onTransformFeedbackStateChanged()
{ {
if (getFeatures().supportsTransformFeedbackExtension.enabled) if (getFeatures().supportsTransformFeedbackExtension.enabled)
{ {
mGraphicsDirtyBits.set(DIRTY_BIT_TRANSFORM_FEEDBACK_STATE); mGraphicsDirtyBits |=
mGraphicsDirtyBits.set(DIRTY_BIT_TRANSFORM_FEEDBACK_BUFFERS); DirtyBits{DIRTY_BIT_TRANSFORM_FEEDBACK_STATE, DIRTY_BIT_TRANSFORM_FEEDBACK_BUFFERS};
} }
else if (getFeatures().emulateTransformFeedback.enabled) else if (getFeatures().emulateTransformFeedback.enabled)
{ {
...@@ -3840,8 +3834,7 @@ void ContextVk::writeAtomicCounterBufferDriverUniformOffsets(uint32_t *offsetsOu ...@@ -3840,8 +3834,7 @@ void ContextVk::writeAtomicCounterBufferDriverUniformOffsets(uint32_t *offsetsOu
void ContextVk::pauseTransformFeedbackIfStartedAndRebindBuffersOnResume() void ContextVk::pauseTransformFeedbackIfStartedAndRebindBuffersOnResume()
{ {
DirtyBits rebindTransformFeedbackOnResume; DirtyBits rebindTransformFeedbackOnResume{DIRTY_BIT_TRANSFORM_FEEDBACK_STATE};
rebindTransformFeedbackOnResume.set(DIRTY_BIT_TRANSFORM_FEEDBACK_STATE);
pauseTransformFeedbackIfStarted(rebindTransformFeedbackOnResume); pauseTransformFeedbackIfStarted(rebindTransformFeedbackOnResume);
} }
......
...@@ -301,8 +301,7 @@ class ContextVk : public ContextImpl, public vk::Context, public MultisampleText ...@@ -301,8 +301,7 @@ class ContextVk : public ContextImpl, public vk::Context, public MultisampleText
ANGLE_INLINE void invalidateVertexAndIndexBuffers() ANGLE_INLINE void invalidateVertexAndIndexBuffers()
{ {
mGraphicsDirtyBits.set(DIRTY_BIT_VERTEX_BUFFERS); mGraphicsDirtyBits |= kIndexAndVertexDirtyBits;
mGraphicsDirtyBits.set(DIRTY_BIT_INDEX_BUFFER);
} }
angle::Result onVertexBufferChange(const vk::BufferHelper *vertexBuffer); angle::Result onVertexBufferChange(const vk::BufferHelper *vertexBuffer);
...@@ -760,14 +759,13 @@ class ContextVk : public ContextImpl, public vk::Context, public MultisampleText ...@@ -760,14 +759,13 @@ class ContextVk : public ContextImpl, public vk::Context, public MultisampleText
ANGLE_INLINE void invalidateCurrentGraphicsPipeline() ANGLE_INLINE void invalidateCurrentGraphicsPipeline()
{ {
// Note: DIRTY_BIT_PIPELINE_BIND will be automatically set if pipeline bind is necessary. // Note: DIRTY_BIT_PIPELINE_BINDING will be automatically set if pipeline bind is necessary.
mGraphicsDirtyBits.set(DIRTY_BIT_PIPELINE_DESC); mGraphicsDirtyBits.set(DIRTY_BIT_PIPELINE_DESC);
} }
ANGLE_INLINE void invalidateCurrentComputePipeline() ANGLE_INLINE void invalidateCurrentComputePipeline()
{ {
mComputeDirtyBits.set(DIRTY_BIT_PIPELINE_DESC); mComputeDirtyBits |= kPipelineDescAndBindingDirtyBits;
mComputeDirtyBits.set(DIRTY_BIT_PIPELINE_BINDING);
mCurrentComputePipeline = nullptr; mCurrentComputePipeline = nullptr;
} }
...@@ -915,6 +913,18 @@ class ContextVk : public ContextImpl, public vk::Context, public MultisampleText ...@@ -915,6 +913,18 @@ class ContextVk : public ContextImpl, public vk::Context, public MultisampleText
DirtyBits mIndexedDirtyBitsMask; DirtyBits mIndexedDirtyBitsMask;
DirtyBits mNewGraphicsCommandBufferDirtyBits; DirtyBits mNewGraphicsCommandBufferDirtyBits;
DirtyBits mNewComputeCommandBufferDirtyBits; DirtyBits mNewComputeCommandBufferDirtyBits;
static constexpr DirtyBits kIndexAndVertexDirtyBits{DIRTY_BIT_VERTEX_BUFFERS,
DIRTY_BIT_INDEX_BUFFER};
static constexpr DirtyBits kPipelineDescAndBindingDirtyBits{DIRTY_BIT_PIPELINE_DESC,
DIRTY_BIT_PIPELINE_BINDING};
static constexpr DirtyBits kTexturesAndDescSetDirtyBits{DIRTY_BIT_TEXTURES,
DIRTY_BIT_DESCRIPTOR_SETS};
static constexpr DirtyBits kResourcesAndDescSetDirtyBits{DIRTY_BIT_SHADER_RESOURCES,
DIRTY_BIT_DESCRIPTOR_SETS};
static constexpr DirtyBits kXfbBuffersAndDescSetDirtyBits{DIRTY_BIT_TRANSFORM_FEEDBACK_BUFFERS,
DIRTY_BIT_DESCRIPTOR_SETS};
static constexpr DirtyBits kDriverUniformsAndBindingDirtyBits{
DIRTY_BIT_DRIVER_UNIFORMS, DIRTY_BIT_DRIVER_UNIFORMS_BINDING};
// Cached back-end objects. // Cached back-end objects.
VertexArrayVk *mVertexArray; VertexArrayVk *mVertexArray;
......
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