Files
XCEngine/tests/RHI/Vulkan/unit/test_views.cpp

87 lines
2.9 KiB
C++
Raw Normal View History

2026-03-28 00:13:02 +08:00
#if defined(XCENGINE_SUPPORT_VULKAN)
#include "fixtures/VulkanTestFixture.h"
#include "XCEngine/RHI/RHIResourceView.h"
#include "XCEngine/RHI/RHISampler.h"
#include "XCEngine/RHI/Vulkan/VulkanResourceView.h"
#include "XCEngine/RHI/Vulkan/VulkanSampler.h"
using namespace XCEngine::RHI;
namespace {
TEST_F(VulkanGraphicsFixture, CreateRenderTargetViewProducesValidNativeImageView) {
RHITexture* texture = m_device->CreateTexture(CreateColorTextureDesc(8, 8));
ASSERT_NE(texture, nullptr);
RHIResourceView* rtv = m_device->CreateRenderTargetView(texture, {});
ASSERT_NE(rtv, nullptr);
EXPECT_TRUE(rtv->IsValid());
EXPECT_EQ(rtv->GetViewType(), ResourceViewType::RenderTarget);
EXPECT_NE(rtv->GetNativeHandle(), nullptr);
EXPECT_NE(static_cast<VulkanResourceView*>(rtv)->GetImageView(), VK_NULL_HANDLE);
rtv->Shutdown();
delete rtv;
texture->Shutdown();
delete texture;
}
TEST_F(VulkanGraphicsFixture, CreateDepthStencilViewProducesValidNativeImageView) {
RHITexture* texture = m_device->CreateTexture(CreateDepthTextureDesc(8, 8));
ASSERT_NE(texture, nullptr);
RHIResourceView* dsv = m_device->CreateDepthStencilView(texture, {});
ASSERT_NE(dsv, nullptr);
EXPECT_TRUE(dsv->IsValid());
EXPECT_EQ(dsv->GetViewType(), ResourceViewType::DepthStencil);
EXPECT_NE(dsv->GetNativeHandle(), nullptr);
EXPECT_NE(static_cast<VulkanResourceView*>(dsv)->GetImageView(), VK_NULL_HANDLE);
dsv->Shutdown();
delete dsv;
texture->Shutdown();
delete texture;
}
TEST_F(VulkanGraphicsFixture, CreateShaderResourceViewProducesValidNativeImageView) {
RHITexture* texture = m_device->CreateTexture(CreateColorTextureDesc(8, 8));
ASSERT_NE(texture, nullptr);
RHIResourceView* srv = m_device->CreateShaderResourceView(texture, {});
ASSERT_NE(srv, nullptr);
EXPECT_TRUE(srv->IsValid());
EXPECT_EQ(srv->GetViewType(), ResourceViewType::ShaderResource);
EXPECT_NE(srv->GetNativeHandle(), nullptr);
EXPECT_NE(static_cast<VulkanResourceView*>(srv)->GetImageView(), VK_NULL_HANDLE);
srv->Shutdown();
delete srv;
texture->Shutdown();
delete texture;
}
TEST_F(VulkanGraphicsFixture, CreateSamplerProducesValidNativeSampler) {
SamplerDesc desc = {};
desc.filter = static_cast<uint32_t>(FilterMode::Linear);
desc.addressU = static_cast<uint32_t>(TextureAddressMode::Clamp);
desc.addressV = static_cast<uint32_t>(TextureAddressMode::Clamp);
desc.addressW = static_cast<uint32_t>(TextureAddressMode::Clamp);
desc.comparisonFunc = static_cast<uint32_t>(ComparisonFunc::Always);
desc.maxAnisotropy = 1;
desc.minLod = 0.0f;
desc.maxLod = 1000.0f;
RHISampler* sampler = m_device->CreateSampler(desc);
ASSERT_NE(sampler, nullptr);
EXPECT_NE(sampler->GetNativeHandle(), nullptr);
EXPECT_NE(static_cast<VulkanSampler*>(sampler)->GetSampler(), VK_NULL_HANDLE);
sampler->Shutdown();
delete sampler;
}
} // namespace
#endif