blob: c5db90da3c7e1f944dd2fb6d10077cb2c5f723cd [file] [log] [blame]
// Copyright 2018 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 "garnet/lib/ui/gfx/tests/vk_session_test.h"
#include "garnet/lib/ui/gfx/util/vulkan_utils.h"
namespace scenic_impl {
namespace gfx {
namespace test {
std::unique_ptr<SessionForTest> VkSessionTest::CreateSession() {
SessionContext session_context = CreateBarebonesSessionContext();
// Initialize Vulkan.
escher::VulkanInstance::Params instance_params(
{{}, {VK_EXT_DEBUG_REPORT_EXTENSION_NAME}, false});
instance_params.layer_names.insert("VK_LAYER_LUNARG_standard_validation");
auto vulkan_instance =
escher::VulkanInstance::New(std::move(instance_params));
auto vulkan_device = escher::VulkanDeviceQueues::New(
vulkan_instance,
{{VK_KHR_EXTERNAL_SEMAPHORE_FUCHSIA_EXTENSION_NAME}, vk::SurfaceKHR()});
escher_ = std::make_unique<escher::Escher>(vulkan_device);
release_fence_signaller_ = std::make_unique<escher::ReleaseFenceSignaller>(
escher_->command_buffer_sequencer());
image_factory_ = std::make_unique<escher::ImageFactoryAdapter>(
escher_->gpu_allocator(), escher_->resource_recycler());
session_context.vk_device = escher_->vk_device();
session_context.escher = escher_.get();
session_context.imported_memory_type_index = GetImportedMemoryTypeIndex(
escher_->vk_physical_device(), escher_->vk_device());
session_context.escher_resource_recycler = escher_->resource_recycler();
session_context.escher_image_factory = image_factory_.get();
session_context.release_fence_signaller = release_fence_signaller_.get();
return std::make_unique<SessionForTest>(1, std::move(session_context), this,
error_reporter());
}
} // namespace test
} // namespace gfx
} // namespace scenic_impl