#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(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(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(srv)->GetImageView(), VK_NULL_HANDLE); srv->Shutdown(); delete srv; texture->Shutdown(); delete texture; } TEST_F(VulkanGraphicsFixture, CreateSamplerProducesValidNativeSampler) { SamplerDesc desc = {}; desc.filter = static_cast(FilterMode::Linear); desc.addressU = static_cast(TextureAddressMode::Clamp); desc.addressV = static_cast(TextureAddressMode::Clamp); desc.addressW = static_cast(TextureAddressMode::Clamp); desc.comparisonFunc = static_cast(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(sampler)->GetSampler(), VK_NULL_HANDLE); sampler->Shutdown(); delete sampler; } } // namespace #endif