blob: 7ec7346b169b93ac1c3232e8def92f478f688417 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "vk_image.h"
#include <gtest/gtest.h>
#include "vk_app_state.h"
class VkImageTest : public ::testing::Test {
protected:
void
SetUp() override
{
const vk_app_state_config_t config = { .device_config = {
.required_queues = VK_QUEUE_GRAPHICS_BIT,
} };
ASSERT_TRUE(vk_app_state_init(&app_, &config));
}
void
TearDown() override
{
vk_app_state_destroy(&app_);
}
VkDevice
device() const
{
return app_.d;
}
const VkAllocationCallbacks *
allocator() const
{
return app_.ac;
}
VkPhysicalDevice
physicalDevice() const
{
return app_.pd;
}
vk_queue_families_t
getQueueFamilies() const
{
return vk_app_state_get_queue_families(&app_);
}
private:
vk_app_state_t app_;
};
TEST_F(VkImageTest, AllocDeviceLocal)
{
vk_image_t image = {};
const VkFormat kImageFormat = VK_FORMAT_R8G8B8A8_UNORM;
const VkExtent2D kImageExtent = { 100, 100 };
const VkImageUsageFlags kUsageFlags =
VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT |
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
vk_image_alloc_device_local(&image,
kImageFormat,
kImageExtent,
kUsageFlags,
physicalDevice(),
device(),
allocator());
const VkDeviceSize kMinimumImageSize = kImageExtent.width * kImageExtent.height * 4;
ASSERT_GE(image.size, kMinimumImageSize);
ASSERT_TRUE(image.image);
ASSERT_TRUE(image.memory);
ASSERT_TRUE(image.image_view);
vk_image_free(&image);
ASSERT_FALSE(image.image_view);
ASSERT_FALSE(image.memory);
ASSERT_FALSE(image.image);
}
TEST_F(VkImageTest, AllocGeneric)
{
vk_image_t image = {};
const VkFormat kImageFormat = VK_FORMAT_B8G8R8A8_UNORM;
const VkExtent2D kImageExtent = { 100, 100 };
const VkImageUsageFlags kUsageFlags =
VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT |
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
VkMemoryPropertyFlags kMemoryFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
vk_queue_families_t queue_families = getQueueFamilies();
vk_image_alloc_generic(&image,
kImageFormat,
kImageExtent,
VK_IMAGE_TILING_OPTIMAL,
kUsageFlags,
VK_IMAGE_LAYOUT_UNDEFINED,
kMemoryFlags,
queue_families.count,
queue_families.indices,
physicalDevice(),
device(),
allocator());
const VkDeviceSize kMinimumImageSize = kImageExtent.width * kImageExtent.height * 4;
ASSERT_GE(image.size, kMinimumImageSize);
ASSERT_TRUE(image.image);
ASSERT_TRUE(image.memory);
ASSERT_TRUE(image.image_view);
vk_image_free(&image);
ASSERT_FALSE(image.image_view);
ASSERT_FALSE(image.memory);
ASSERT_FALSE(image.image);
}