Commit 26ae42cf by Jamie Madill Committed by Commit Bot

Vulkan: Clean up handleDirtyTexturesImpl.

Adds a new bitset helper and changes a check to an ASSERT. Refactoring change only. Bug: angleproject:4959 Change-Id: I0de9f1b707c87cfb6fed8a110654783059e55c99 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2345025 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Reviewed-by: 's avatarCharlie Lao <cclao@google.com>
parent dceaabb1
......@@ -139,6 +139,8 @@ class BitSetT final
constexpr static BitSetT Zero() { return BitSetT(); }
ParamT first() const;
private:
// Produces a mask of ones up to the "x"th bit.
constexpr static BitsT Mask(std::size_t x)
......@@ -451,6 +453,13 @@ BitSetT<N, BitsT, ParamT> &BitSetT<N, BitsT, ParamT>::flip(ParamT pos)
}
template <size_t N, typename BitsT, typename ParamT>
ParamT BitSetT<N, BitsT, ParamT>::first() const
{
ASSERT(!none());
return static_cast<ParamT>(gl::ScanForward(mBits));
}
template <size_t N, typename BitsT, typename ParamT>
BitSetT<N, BitsT, ParamT>::Iterator::Iterator(const BitSetT &bits) : mBitsCopy(bits), mCurrentBit(0)
{
if (bits.any())
......
......@@ -82,12 +82,14 @@ TYPED_TEST(BitSetTest, Basic)
EXPECT_TRUE(mBits.any());
EXPECT_FALSE(mBits.none());
EXPECT_EQ(mBits.count(), mBits.size() / 2);
EXPECT_EQ(mBits.first(), 1u);
mBits.set();
EXPECT_TRUE(mBits.all());
EXPECT_TRUE(mBits.any());
EXPECT_FALSE(mBits.none());
EXPECT_EQ(mBits.count(), mBits.size());
EXPECT_EQ(mBits.first(), 0u);
mBits.reset();
EXPECT_FALSE(mBits.all());
......
......@@ -1369,27 +1369,20 @@ ANGLE_INLINE angle::Result ContextVk::handleDirtyTexturesImpl(
}
else
{
gl::ShaderBitSet shaderBits =
gl::ShaderBitSet remainingShaderBits =
executable->getSamplerShaderBitsForTextureUnitIndex(textureUnit);
if (shaderBits.any())
ASSERT(remainingShaderBits.any());
gl::ShaderType firstShader = remainingShaderBits.first();
remainingShaderBits.reset(firstShader);
// If we have multiple shader accessing it, we barrier against all shader stage read
// given that we only support vertex/frag shaders
if (remainingShaderBits.any())
{
gl::ShaderType shader =
static_cast<gl::ShaderType>(gl::ScanForward(shaderBits.bits()));
shaderBits.reset(shader);
// If we have multiple shader accessing it, we barrier against all shader stage read
// given that we only support vertex/frag shaders
if (shaderBits.any())
{
textureLayout = vk::ImageLayout::AllGraphicsShadersReadOnly;
}
else
{
textureLayout = kShaderReadOnlyImageLayouts[shader];
}
textureLayout = vk::ImageLayout::AllGraphicsShadersReadOnly;
}
else
{
textureLayout = vk::ImageLayout::AllGraphicsShadersReadOnly;
textureLayout = kShaderReadOnlyImageLayouts[firstShader];
}
}
// Ensure the image is in read-only layout
......
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