1e5c31af7Sopenharmony_ci/* 2e5c31af7Sopenharmony_ci * Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. 3e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License. 5e5c31af7Sopenharmony_ci * You may obtain a copy of the License at 6e5c31af7Sopenharmony_ci * 7e5c31af7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e5c31af7Sopenharmony_ci * 9e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and 13e5c31af7Sopenharmony_ci * limitations under the License. 14e5c31af7Sopenharmony_ci */ 15e5c31af7Sopenharmony_ci 16e5c31af7Sopenharmony_ci#include "tcuOhosPlatform.hpp" 17e5c31af7Sopenharmony_ci 18e5c31af7Sopenharmony_ci#include "deUniquePtr.hpp" 19e5c31af7Sopenharmony_ci#include "ohos_context_i.h" 20e5c31af7Sopenharmony_ci 21e5c31af7Sopenharmony_ci#include "egluGLContextFactory.hpp" 22e5c31af7Sopenharmony_ci#include "display/tcuOhosEglDisplayFactory.hpp" 23e5c31af7Sopenharmony_ci#include "context/tcuOhosEglContextFactory.hpp" 24e5c31af7Sopenharmony_ci 25e5c31af7Sopenharmony_ciusing de::MovePtr; 26e5c31af7Sopenharmony_ciusing de::UniquePtr; 27e5c31af7Sopenharmony_ci 28e5c31af7Sopenharmony_ciusing namespace tcu; 29e5c31af7Sopenharmony_ciusing namespace OHOS_ROSEN; 30e5c31af7Sopenharmony_ci 31e5c31af7Sopenharmony_ciOhosPlatform::OhosPlatform (void) 32e5c31af7Sopenharmony_ci{ 33e5c31af7Sopenharmony_ci printf("OhosPlatform construct!\n"); 34e5c31af7Sopenharmony_ci m_nativeDisplayFactoryRegistry.registerFactory(new OHOS_ROSEN::egl::OhosDisplayFactory()); 35e5c31af7Sopenharmony_ci m_contextFactoryRegistry.registerFactory(new OHOS_ROSEN::egl::OhosContextFactory()); 36e5c31af7Sopenharmony_ci} 37e5c31af7Sopenharmony_ci 38e5c31af7Sopenharmony_citcu::Platform* createOhosPlatform (void) 39e5c31af7Sopenharmony_ci{ 40e5c31af7Sopenharmony_ci return new tcu::OHOS_ROSEN::OhosPlatform(); 41e5c31af7Sopenharmony_ci} 42e5c31af7Sopenharmony_ci 43e5c31af7Sopenharmony_ci#include "tcuFunctionLibrary.hpp" 44e5c31af7Sopenharmony_ciclass VulkanLibrary : public vk::Library 45e5c31af7Sopenharmony_ci{ 46e5c31af7Sopenharmony_cipublic: 47e5c31af7Sopenharmony_ci VulkanLibrary (void) 48e5c31af7Sopenharmony_ci : m_library ("libvulkan.so") 49e5c31af7Sopenharmony_ci , m_driver (m_library) 50e5c31af7Sopenharmony_ci { 51e5c31af7Sopenharmony_ci } 52e5c31af7Sopenharmony_ci 53e5c31af7Sopenharmony_ci const vk::PlatformInterface& getPlatformInterface (void) const 54e5c31af7Sopenharmony_ci { 55e5c31af7Sopenharmony_ci return m_driver; 56e5c31af7Sopenharmony_ci } 57e5c31af7Sopenharmony_ci 58e5c31af7Sopenharmony_ci const tcu::FunctionLibrary& getFunctionLibrary (void) const 59e5c31af7Sopenharmony_ci { 60e5c31af7Sopenharmony_ci return m_library; 61e5c31af7Sopenharmony_ci } 62e5c31af7Sopenharmony_ci 63e5c31af7Sopenharmony_ciprivate: 64e5c31af7Sopenharmony_ci const tcu::DynamicFunctionLibrary m_library; 65e5c31af7Sopenharmony_ci const vk::PlatformDriver m_driver; 66e5c31af7Sopenharmony_ci}; 67e5c31af7Sopenharmony_ci 68e5c31af7Sopenharmony_ciclass VulkanWindowOhos : public vk::wsi::OhosWindowInterface 69e5c31af7Sopenharmony_ci{ 70e5c31af7Sopenharmony_cipublic: 71e5c31af7Sopenharmony_ci VulkanWindowOhos (uint64_t windowId) 72e5c31af7Sopenharmony_ci : vk::wsi::OhosWindowInterface (vk::pt::OhosNativeWindowPtr(OHOS::OhosContextI::GetInstance().GetNativeWindow(windowId))) 73e5c31af7Sopenharmony_ci , windowId_(windowId) 74e5c31af7Sopenharmony_ci { 75e5c31af7Sopenharmony_ci } 76e5c31af7Sopenharmony_ci 77e5c31af7Sopenharmony_ci void setVisible(bool visible) 78e5c31af7Sopenharmony_ci { 79e5c31af7Sopenharmony_ci DE_UNREF(visible); 80e5c31af7Sopenharmony_ci } 81e5c31af7Sopenharmony_ci 82e5c31af7Sopenharmony_ci void resize(const UVec2& newSize) 83e5c31af7Sopenharmony_ci { 84e5c31af7Sopenharmony_ci DE_UNREF(newSize); 85e5c31af7Sopenharmony_ci } 86e5c31af7Sopenharmony_ci 87e5c31af7Sopenharmony_ci ~VulkanWindowOhos (void) 88e5c31af7Sopenharmony_ci { 89e5c31af7Sopenharmony_ci OHOS::OhosContextI::GetInstance().DestoryWindow(windowId_); 90e5c31af7Sopenharmony_ci } 91e5c31af7Sopenharmony_ci 92e5c31af7Sopenharmony_ciprivate: 93e5c31af7Sopenharmony_ci uint64_t windowId_; 94e5c31af7Sopenharmony_ci}; 95e5c31af7Sopenharmony_ciclass VulkanDisplayOhos : public vk::wsi::Display 96e5c31af7Sopenharmony_ci{ 97e5c31af7Sopenharmony_cipublic: 98e5c31af7Sopenharmony_ci VulkanDisplayOhos () 99e5c31af7Sopenharmony_ci { 100e5c31af7Sopenharmony_ci } 101e5c31af7Sopenharmony_ci 102e5c31af7Sopenharmony_ci vk::wsi::Window* createWindow (const Maybe<UVec2>& initialSize) const 103e5c31af7Sopenharmony_ci { 104e5c31af7Sopenharmony_ci const deUint32 height = !initialSize ? (deUint32)300 : initialSize->y(); 105e5c31af7Sopenharmony_ci const deUint32 width = !initialSize ? (deUint32)400 : initialSize->x(); 106e5c31af7Sopenharmony_ci printf("%d,%d\n",width,height); 107e5c31af7Sopenharmony_ci uint64_t i = OHOS::OhosContextI::GetInstance().CreateWindow(0,0,width,height); 108e5c31af7Sopenharmony_ci return new VulkanWindowOhos(i);//cxunmz 109e5c31af7Sopenharmony_ci } 110e5c31af7Sopenharmony_ci 111e5c31af7Sopenharmony_ciprivate: 112e5c31af7Sopenharmony_ci}; 113e5c31af7Sopenharmony_ci 114e5c31af7Sopenharmony_civk::wsi::Display* OhosPlatform::createWsiDisplay(vk::wsi::Type wsiType) const 115e5c31af7Sopenharmony_ci{ 116e5c31af7Sopenharmony_ci if(wsiType == vk::wsi::TYPE_OHOS){ 117e5c31af7Sopenharmony_ci printf("ok\n"); 118e5c31af7Sopenharmony_ci return new VulkanDisplayOhos(); 119e5c31af7Sopenharmony_ci } 120e5c31af7Sopenharmony_ci return NULL; 121e5c31af7Sopenharmony_ci} 122e5c31af7Sopenharmony_ci 123e5c31af7Sopenharmony_civk::Library* OhosPlatform::createLibrary(LibraryType libraryType, const char* libraryPath) const 124e5c31af7Sopenharmony_ci{ 125e5c31af7Sopenharmony_ci DE_UNREF(libraryType); 126e5c31af7Sopenharmony_ci DE_UNREF(libraryPath); 127e5c31af7Sopenharmony_ci return new VulkanLibrary(); 128e5c31af7Sopenharmony_ci} 129e5c31af7Sopenharmony_ci 130e5c31af7Sopenharmony_cibool OhosPlatform::hasDisplay(vk::wsi::Type wsiType) const 131e5c31af7Sopenharmony_ci{ 132e5c31af7Sopenharmony_ci if (wsiType == vk::wsi::TYPE_OHOS) 133e5c31af7Sopenharmony_ci return true; 134e5c31af7Sopenharmony_ci 135e5c31af7Sopenharmony_ci return false; 136e5c31af7Sopenharmony_ci} 137e5c31af7Sopenharmony_ci 138e5c31af7Sopenharmony_ci#include <sys/utsname.h> 139e5c31af7Sopenharmony_ci#include "deMemory.h" 140e5c31af7Sopenharmony_civoid OhosPlatform::describePlatform(std::ostream& dst) const 141e5c31af7Sopenharmony_ci{ 142e5c31af7Sopenharmony_ci utsname sysInfo; 143e5c31af7Sopenharmony_ci deMemset(&sysInfo, 0, sizeof(sysInfo)); 144e5c31af7Sopenharmony_ci 145e5c31af7Sopenharmony_ci if (uname(&sysInfo) != 0) 146e5c31af7Sopenharmony_ci throw std::runtime_error("uname() failed"); 147e5c31af7Sopenharmony_ci 148e5c31af7Sopenharmony_ci dst << "OS: " << sysInfo.sysname << " " << sysInfo.release << " " << sysInfo.version << "\n"; 149e5c31af7Sopenharmony_ci dst << "CPU: " << sysInfo.machine << "\n"; 150e5c31af7Sopenharmony_ci} 151e5c31af7Sopenharmony_ci 152e5c31af7Sopenharmony_civoid OhosPlatform::getMemoryLimits(tcu::PlatformMemoryLimits& limits) const 153e5c31af7Sopenharmony_ci{ 154e5c31af7Sopenharmony_ci limits.totalSystemMemory = 256*1024*1024; 155e5c31af7Sopenharmony_ci limits.totalDeviceLocalMemory = 0;//128*1024*1024; 156e5c31af7Sopenharmony_ci limits.deviceMemoryAllocationGranularity = 64*1024; 157e5c31af7Sopenharmony_ci limits.devicePageSize = 4096; 158e5c31af7Sopenharmony_ci limits.devicePageTableEntrySize = 8; 159e5c31af7Sopenharmony_ci limits.devicePageTableHierarchyLevels = 3; 160e5c31af7Sopenharmony_ci}