blob: fa295746a494a3993026ead45ad6937674a20ec5 [file] [log] [blame]
// Copyright 2016 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 "tcuFunctionLibrary.hpp"
#include "tcuPlatform.hpp"
#include "vkPlatform.hpp"
class FuchsiaVkLibrary : public vk::Library {
public:
FuchsiaVkLibrary()
: library_("libvulkan.so"), driver_(library_) {}
const vk::PlatformInterface& getPlatformInterface() const {
return driver_;
}
const tcu::FunctionLibrary& getFunctionLibrary (void) const
{
return library_;
}
private:
const tcu::DynamicFunctionLibrary library_;
const vk::PlatformDriver driver_;
};
class FuchsiaVkPlatform : public vk::Platform {
public:
vk::Library* createLibrary() const { return new FuchsiaVkLibrary(); }
void describePlatform (std::ostream& dst) const
{
dst << "OS: Fuchsia\n";
const char* cpu = "Unknown";
#if defined(__x86_64__)
cpu = "x86_64";
#elif defined(__aarch64__)
cpu = "aarch64";
#endif
dst << "CPU: " << cpu << "\n";
}
void getMemoryLimits(vk::PlatformMemoryLimits& limits) const {
// Copied from tcuX11VulkanPlatform.cpp
limits.totalSystemMemory = 256 * 1024 * 1024;
limits.totalDeviceLocalMemory = 0; // unified memory
limits.deviceMemoryAllocationGranularity = 64 * 1024;
limits.devicePageSize = 4096;
limits.devicePageTableEntrySize = 8;
limits.devicePageTableHierarchyLevels = 3;
}
};
class FuchsiaPlatform : public tcu::Platform {
public:
~FuchsiaPlatform() {}
const vk::Platform& getVulkanPlatform() const { return vk_platform_; }
private:
FuchsiaVkPlatform vk_platform_;
};
tcu::Platform* createPlatform() {
return new FuchsiaPlatform();
}