blob: 3dd1634d3b1c2aec9575c076b370c63eff1a2ec6 [file] [log] [blame]
//
// Copyright 2023 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// VulkanSharedFenceTest:
// Various tests related for rx::vk::SharedFence class.
//
#include "test_utils/ANGLETest.h"
#include "libANGLE/Display.h"
#include "libANGLE/renderer/vulkan/CommandProcessor.h"
#include "libANGLE/renderer/vulkan/ContextVk.h"
using namespace angle;
namespace
{
class VulkanSharedFenceTest : public ANGLETest<>
{
protected:
gl::Context *hackContext() const
{
egl::Display *display = static_cast<egl::Display *>(getEGLWindow()->getDisplay());
gl::ContextID contextID = {
static_cast<GLuint>(reinterpret_cast<uintptr_t>(getEGLWindow()->getContext()))};
return display->getContext(contextID);
}
rx::ContextVk *hackANGLE() const
{
// Hack the angle!
return rx::GetImplAs<rx::ContextVk>(hackContext());
}
};
// Test init/release/init sequence.
TEST_P(VulkanSharedFenceTest, InitReleaseInit)
{
ASSERT_TRUE(IsVulkan());
rx::ContextVk *contextVk = hackANGLE();
VkDevice device = contextVk->getDevice();
rx::vk::FenceRecycler recycler;
{
rx::vk::SharedFence fence;
VkResult result = fence.init(device, &recycler);
ASSERT_EQ(result, VK_SUCCESS);
fence.release();
result = fence.init(device, &recycler);
ASSERT_EQ(result, VK_SUCCESS);
}
recycler.destroy(contextVk);
}
// Test init/destroy/init sequence.
TEST_P(VulkanSharedFenceTest, InitDestroyInit)
{
ASSERT_TRUE(IsVulkan());
rx::ContextVk *contextVk = hackANGLE();
VkDevice device = contextVk->getDevice();
rx::vk::FenceRecycler recycler;
{
rx::vk::SharedFence fence;
VkResult result = fence.init(device, &recycler);
ASSERT_EQ(result, VK_SUCCESS);
fence.destroy(device);
result = fence.init(device, &recycler);
ASSERT_EQ(result, VK_SUCCESS);
}
recycler.destroy(contextVk);
}
ANGLE_INSTANTIATE_TEST(VulkanSharedFenceTest, ES2_VULKAN());
} // namespace