mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-05 06:03:34 +00:00
Add necessary cflags and cflags_cc for winrt compilation. Add 'dawn_is_winuwp'. Set 'dawn_enable_vulkan' and 'dawn_supports_glfw_for_windowing' when compiling for UWP. Link d3d12, d3d11 and dxgi stub libs when compiling for UWP. Use LoadPackagedLibrary instead of LoadLibraryA in DynamicLib when compiling for UWP. Swapchain related changes will be in another commit. Bug: dawn:766 Change-Id: I1210798a21cc175bab77281403d262d4bfb02d99 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/48480 Commit-Queue: 陈俊嘉 <cjj19970505@live.cn> Reviewed-by: Rafael Cintron <rafael.cintron@microsoft.com>
107 lines
2.7 KiB
C++
107 lines
2.7 KiB
C++
// Copyright 2017 The Dawn Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "common/DynamicLib.h"
|
|
|
|
#include "common/Platform.h"
|
|
|
|
#if DAWN_PLATFORM_WINDOWS
|
|
# include "common/windows_with_undefs.h"
|
|
# if DAWN_PLATFORM_WINUWP
|
|
# include "common/WindowsUtils.h"
|
|
# endif
|
|
#elif DAWN_PLATFORM_POSIX
|
|
# include <dlfcn.h>
|
|
#else
|
|
# error "Unsupported platform for DynamicLib"
|
|
#endif
|
|
|
|
DynamicLib::~DynamicLib() {
|
|
Close();
|
|
}
|
|
|
|
DynamicLib::DynamicLib(DynamicLib&& other) {
|
|
std::swap(mHandle, other.mHandle);
|
|
}
|
|
|
|
DynamicLib& DynamicLib::operator=(DynamicLib&& other) {
|
|
std::swap(mHandle, other.mHandle);
|
|
return *this;
|
|
}
|
|
|
|
bool DynamicLib::Valid() const {
|
|
return mHandle != nullptr;
|
|
}
|
|
|
|
bool DynamicLib::Open(const std::string& filename, std::string* error) {
|
|
#if DAWN_PLATFORM_WINDOWS
|
|
# if DAWN_PLATFORM_WINUWP
|
|
mHandle = LoadPackagedLibrary(UTF8ToWStr(filename.c_str()).c_str(), 0);
|
|
# else
|
|
mHandle = LoadLibraryA(filename.c_str());
|
|
# endif
|
|
if (mHandle == nullptr && error != nullptr) {
|
|
*error = "Windows Error: " + std::to_string(GetLastError());
|
|
}
|
|
#elif DAWN_PLATFORM_POSIX
|
|
mHandle = dlopen(filename.c_str(), RTLD_NOW);
|
|
|
|
if (mHandle == nullptr && error != nullptr) {
|
|
*error = dlerror();
|
|
}
|
|
#else
|
|
# error "Unsupported platform for DynamicLib"
|
|
#endif
|
|
|
|
return mHandle != nullptr;
|
|
}
|
|
|
|
void DynamicLib::Close() {
|
|
if (mHandle == nullptr) {
|
|
return;
|
|
}
|
|
|
|
#if DAWN_PLATFORM_WINDOWS
|
|
FreeLibrary(static_cast<HMODULE>(mHandle));
|
|
#elif DAWN_PLATFORM_POSIX
|
|
dlclose(mHandle);
|
|
#else
|
|
# error "Unsupported platform for DynamicLib"
|
|
#endif
|
|
|
|
mHandle = nullptr;
|
|
}
|
|
|
|
void* DynamicLib::GetProc(const std::string& procName, std::string* error) const {
|
|
void* proc = nullptr;
|
|
|
|
#if DAWN_PLATFORM_WINDOWS
|
|
proc = reinterpret_cast<void*>(GetProcAddress(static_cast<HMODULE>(mHandle), procName.c_str()));
|
|
|
|
if (proc == nullptr && error != nullptr) {
|
|
*error = "Windows Error: " + std::to_string(GetLastError());
|
|
}
|
|
#elif DAWN_PLATFORM_POSIX
|
|
proc = reinterpret_cast<void*>(dlsym(mHandle, procName.c_str()));
|
|
|
|
if (proc == nullptr && error != nullptr) {
|
|
*error = dlerror();
|
|
}
|
|
#else
|
|
# error "Unsupported platform for DynamicLib"
|
|
#endif
|
|
|
|
return proc;
|
|
}
|