diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index 6ba78a0b47..faa67c5c9c 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -77,6 +77,9 @@ #if !PPSSPP_PLATFORM(UWP) #include "gfx/gl_common.h" #endif +#if !PPSSPP_PLATFORM(UWP) +#include "gfx/gl_common.h" +#endif #ifndef MOBILE_DEVICE AVIDump avi; diff --git a/UWP/App.cpp b/UWP/App.cpp new file mode 100644 index 0000000000..d6cdeab602 --- /dev/null +++ b/UWP/App.cpp @@ -0,0 +1,178 @@ +#include "pch.h" +#include "App.h" + +#include + +using namespace UWP; + +using namespace concurrency; +using namespace Windows::ApplicationModel; +using namespace Windows::ApplicationModel::Core; +using namespace Windows::ApplicationModel::Activation; +using namespace Windows::UI::Core; +using namespace Windows::UI::Input; +using namespace Windows::System; +using namespace Windows::Foundation; +using namespace Windows::Graphics::Display; + +// The main function is only used to initialize our IFrameworkView class. +[Platform::MTAThread] +int main(Platform::Array^) { + auto direct3DApplicationSource = ref new Direct3DApplicationSource(); + CoreApplication::Run(direct3DApplicationSource); + return 0; +} + +IFrameworkView^ Direct3DApplicationSource::CreateView() { + return ref new App(); +} + +App::App() : + m_windowClosed(false), + m_windowVisible(true) +{ +} + +// The first method called when the IFrameworkView is being created. +void App::Initialize(CoreApplicationView^ applicationView) { + // Register event handlers for app lifecycle. This example includes Activated, so that we + // can make the CoreWindow active and start rendering on the window. + applicationView->Activated += + ref new TypedEventHandler(this, &App::OnActivated); + + CoreApplication::Suspending += + ref new EventHandler(this, &App::OnSuspending); + + CoreApplication::Resuming += + ref new EventHandler(this, &App::OnResuming); + + // At this point we have access to the device. + // We can create the device-dependent resources. + m_deviceResources = std::make_shared(); +} + +// Called when the CoreWindow object is created (or re-created). +void App::SetWindow(CoreWindow^ window) { + window->SizeChanged += + ref new TypedEventHandler(this, &App::OnWindowSizeChanged); + + window->VisibilityChanged += + ref new TypedEventHandler(this, &App::OnVisibilityChanged); + + window->Closed += + ref new TypedEventHandler(this, &App::OnWindowClosed); + + DisplayInformation^ currentDisplayInformation = DisplayInformation::GetForCurrentView(); + + currentDisplayInformation->DpiChanged += + ref new TypedEventHandler(this, &App::OnDpiChanged); + + currentDisplayInformation->OrientationChanged += + ref new TypedEventHandler(this, &App::OnOrientationChanged); + + DisplayInformation::DisplayContentsInvalidated += + ref new TypedEventHandler(this, &App::OnDisplayContentsInvalidated); + + window->KeyDown += ref new TypedEventHandler(this, &App::OnKeyDown); + + m_deviceResources->SetWindow(window); +} + +// Initializes scene resources, or loads a previously saved app state. +void App::Load(Platform::String^ entryPoint) { + if (m_main == nullptr) { + m_main = std::unique_ptr(new PPSSPP_UWPMain(m_deviceResources)); + } +} + +// This method is called after the window becomes active. +void App::Run() { + while (!m_windowClosed) { + if (m_windowVisible) { + CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent); + m_main->Update(); + if (m_main->Render()) { + m_deviceResources->Present(); + } + } else { + CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending); + } + } +} + +// Required for IFrameworkView. +// Terminate events do not cause Uninitialize to be called. It will be called if your IFrameworkView +// class is torn down while the app is in the foreground. +void App::Uninitialize() { +} + +// Application lifecycle event handlers. + +void App::OnActivated(CoreApplicationView^ applicationView, IActivatedEventArgs^ args) { + // Run() won't start until the CoreWindow is activated. + CoreWindow::GetForCurrentThread()->Activate(); +} + +void App::OnSuspending(Platform::Object^ sender, SuspendingEventArgs^ args) { + // Save app state asynchronously after requesting a deferral. Holding a deferral + // indicates that the application is busy performing suspending operations. Be + // aware that a deferral may not be held indefinitely. After about five seconds, + // the app will be forced to exit. + SuspendingDeferral^ deferral = args->SuspendingOperation->GetDeferral(); + + create_task([this, deferral]() { + m_deviceResources->Trim(); + + // Insert your code here. + + deferral->Complete(); + }); +} + +void App::OnResuming(Platform::Object^ sender, Platform::Object^ args) { + // Restore any data or state that was unloaded on suspend. By default, data + // and state are persisted when resuming from suspend. Note that this event + // does not occur if the app was previously terminated. + + // Insert your code here. +} + +// Window event handlers. + +void App::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEventArgs^ args) +{ + m_deviceResources->SetLogicalSize(Size(sender->Bounds.Width, sender->Bounds.Height)); + m_main->CreateWindowSizeDependentResources(); +} + +void App::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args) { + m_windowVisible = args->Visible; +} + +void App::OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args) { + m_windowClosed = true; +} + +void App::OnKeyDown(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::WindowSizeChangedEventArgs^ args) { + +} + +// DisplayInformation event handlers. + +void App::OnDpiChanged(DisplayInformation^ sender, Object^ args) { + // Note: The value for LogicalDpi retrieved here may not match the effective DPI of the app + // if it is being scaled for high resolution devices. Once the DPI is set on DeviceResources, + // you should always retrieve it using the GetDpi method. + // See DeviceResources.cpp for more details. + m_deviceResources->SetDpi(sender->LogicalDpi); + m_main->CreateWindowSizeDependentResources(); +} + +void App::OnOrientationChanged(DisplayInformation^ sender, Object^ args) { + m_deviceResources->SetCurrentOrientation(sender->CurrentOrientation); + m_main->CreateWindowSizeDependentResources(); +} + +void App::OnDisplayContentsInvalidated(DisplayInformation^ sender, Object^ args) { + m_deviceResources->ValidateDevice(); +} \ No newline at end of file diff --git a/UWP/App.h b/UWP/App.h new file mode 100644 index 0000000000..9c8a311be5 --- /dev/null +++ b/UWP/App.h @@ -0,0 +1,53 @@ +#pragma once + +#include "pch.h" +#include "Common/DeviceResources.h" +#include "PPSSPP_UWPMain.h" + +namespace UWP +{ + // Main entry point for our app. Connects the app with the Windows shell and handles application lifecycle events. + ref class App sealed : public Windows::ApplicationModel::Core::IFrameworkView + { + public: + App(); + + // IFrameworkView Methods. + virtual void Initialize(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView); + virtual void SetWindow(Windows::UI::Core::CoreWindow^ window); + virtual void Load(Platform::String^ entryPoint); + virtual void Run(); + virtual void Uninitialize(); + + protected: + // Application lifecycle event handlers. + void OnActivated(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView, Windows::ApplicationModel::Activation::IActivatedEventArgs^ args); + void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ args); + void OnResuming(Platform::Object^ sender, Platform::Object^ args); + + // Window event handlers. + void OnWindowSizeChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::WindowSizeChangedEventArgs^ args); + void OnVisibilityChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::VisibilityChangedEventArgs^ args); + void OnWindowClosed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::CoreWindowEventArgs^ args); + + // DisplayInformation event handlers. + void OnDpiChanged(Windows::Graphics::Display::DisplayInformation^ sender, Platform::Object^ args); + void OnOrientationChanged(Windows::Graphics::Display::DisplayInformation^ sender, Platform::Object^ args); + void OnDisplayContentsInvalidated(Windows::Graphics::Display::DisplayInformation^ sender, Platform::Object^ args); + + // Input + void OnKeyDown(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::WindowSizeChangedEventArgs^ args); + + private: + std::shared_ptr m_deviceResources; + std::unique_ptr m_main; + bool m_windowClosed; + bool m_windowVisible; + }; +} + +ref class Direct3DApplicationSource sealed : Windows::ApplicationModel::Core::IFrameworkViewSource +{ +public: + virtual Windows::ApplicationModel::Core::IFrameworkView^ CreateView(); +}; diff --git a/UWP/Assets/LockScreenLogo.scale-200.png b/UWP/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000..735f57adb5 Binary files /dev/null and b/UWP/Assets/LockScreenLogo.scale-200.png differ diff --git a/UWP/Assets/SplashScreen.scale-200.png b/UWP/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000..023e7f1fed Binary files /dev/null and b/UWP/Assets/SplashScreen.scale-200.png differ diff --git a/UWP/Assets/Square150x150Logo.scale-200.png b/UWP/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000..af49fec1a5 Binary files /dev/null and b/UWP/Assets/Square150x150Logo.scale-200.png differ diff --git a/UWP/Assets/Square44x44Logo.scale-200.png b/UWP/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000..ce342a2ec8 Binary files /dev/null and b/UWP/Assets/Square44x44Logo.scale-200.png differ diff --git a/UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000000..f6c02ce97e Binary files /dev/null and b/UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ diff --git a/UWP/Assets/StoreLogo.png b/UWP/Assets/StoreLogo.png new file mode 100644 index 0000000000..7385b56c0e Binary files /dev/null and b/UWP/Assets/StoreLogo.png differ diff --git a/UWP/Assets/Wide310x150Logo.scale-200.png b/UWP/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000000..288995b397 Binary files /dev/null and b/UWP/Assets/Wide310x150Logo.scale-200.png differ diff --git a/UWP/Common/DeviceResources.cpp b/UWP/Common/DeviceResources.cpp new file mode 100644 index 0000000000..dc8e75c152 --- /dev/null +++ b/UWP/Common/DeviceResources.cpp @@ -0,0 +1,703 @@ +#include "pch.h" +#include +#include "DeviceResources.h" +#include "DirectXHelper.h" + +using namespace D2D1; +using namespace DirectX; +using namespace Microsoft::WRL; +using namespace Windows::Foundation; +using namespace Windows::Graphics::Display; +using namespace Windows::UI::Core; +using namespace Windows::UI::Xaml::Controls; +using namespace Platform; + +namespace DisplayMetrics +{ + // High resolution displays can require a lot of GPU and battery power to render. + // High resolution phones, for example, may suffer from poor battery life if + // games attempt to render at 60 frames per second at full fidelity. + // The decision to render at full fidelity across all platforms and form factors + // should be deliberate. + static const bool SupportHighResolutions = false; + + // The default thresholds that define a "high resolution" display. If the thresholds + // are exceeded and SupportHighResolutions is false, the dimensions will be scaled + // by 50%. + static const float DpiThreshold = 192.0f; // 200% of standard desktop display. + static const float WidthThreshold = 1920.0f; // 1080p width. + static const float HeightThreshold = 1080.0f; // 1080p height. +}; + +// Constants used to calculate screen rotations +namespace ScreenRotation +{ + // 0-degree Z-rotation + static const XMFLOAT4X4 Rotation0( + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + ); + + // 90-degree Z-rotation + static const XMFLOAT4X4 Rotation90( + 0.0f, 1.0f, 0.0f, 0.0f, + -1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + ); + + // 180-degree Z-rotation + static const XMFLOAT4X4 Rotation180( + -1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, -1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + ); + + // 270-degree Z-rotation + static const XMFLOAT4X4 Rotation270( + 0.0f, -1.0f, 0.0f, 0.0f, + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + ); +}; + +// Constructor for DeviceResources. +DX::DeviceResources::DeviceResources() : + m_screenViewport(), + m_d3dFeatureLevel(D3D_FEATURE_LEVEL_9_1), + m_d3dRenderTargetSize(), + m_outputSize(), + m_logicalSize(), + m_nativeOrientation(DisplayOrientations::None), + m_currentOrientation(DisplayOrientations::None), + m_dpi(-1.0f), + m_effectiveDpi(-1.0f), + m_deviceNotify(nullptr) +{ + CreateDeviceIndependentResources(); + CreateDeviceResources(); +} + +// Configures resources that don't depend on the Direct3D device. +void DX::DeviceResources::CreateDeviceIndependentResources() +{ + // Initialize Direct2D resources. + D2D1_FACTORY_OPTIONS options; + ZeroMemory(&options, sizeof(D2D1_FACTORY_OPTIONS)); + +#if defined(_DEBUG) + // If the project is in a debug build, enable Direct2D debugging via SDK Layers. + options.debugLevel = D2D1_DEBUG_LEVEL_INFORMATION; +#endif + + // Initialize the Direct2D Factory. + DX::ThrowIfFailed( + D2D1CreateFactory( + D2D1_FACTORY_TYPE_SINGLE_THREADED, + __uuidof(ID2D1Factory3), + &options, + &m_d2dFactory + ) + ); + + // Initialize the DirectWrite Factory. + DX::ThrowIfFailed( + DWriteCreateFactory( + DWRITE_FACTORY_TYPE_SHARED, + __uuidof(IDWriteFactory3), + &m_dwriteFactory + ) + ); + + // Initialize the Windows Imaging Component (WIC) Factory. + DX::ThrowIfFailed( + CoCreateInstance( + CLSID_WICImagingFactory2, + nullptr, + CLSCTX_INPROC_SERVER, + IID_PPV_ARGS(&m_wicFactory) + ) + ); +} + +// Configures the Direct3D device, and stores handles to it and the device context. +void DX::DeviceResources::CreateDeviceResources() +{ + // This flag adds support for surfaces with a different color channel ordering + // than the API default. It is required for compatibility with Direct2D. + UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT; + +#if defined(_DEBUG) + if (DX::SdkLayersAvailable()) + { + // If the project is in a debug build, enable debugging via SDK Layers with this flag. + creationFlags |= D3D11_CREATE_DEVICE_DEBUG; + } +#endif + + // This array defines the set of DirectX hardware feature levels this app will support. + // Note the ordering should be preserved. + // Don't forget to declare your application's minimum required feature level in its + // description. All applications are assumed to support 9.1 unless otherwise stated. + D3D_FEATURE_LEVEL featureLevels[] = + { + D3D_FEATURE_LEVEL_12_1, + D3D_FEATURE_LEVEL_12_0, + D3D_FEATURE_LEVEL_11_1, + D3D_FEATURE_LEVEL_11_0, + D3D_FEATURE_LEVEL_10_1, + D3D_FEATURE_LEVEL_10_0, + D3D_FEATURE_LEVEL_9_3, + D3D_FEATURE_LEVEL_9_2, + D3D_FEATURE_LEVEL_9_1 + }; + + // Create the Direct3D 11 API device object and a corresponding context. + ComPtr device; + ComPtr context; + + HRESULT hr = D3D11CreateDevice( + nullptr, // Specify nullptr to use the default adapter. + D3D_DRIVER_TYPE_HARDWARE, // Create a device using the hardware graphics driver. + 0, // Should be 0 unless the driver is D3D_DRIVER_TYPE_SOFTWARE. + creationFlags, // Set debug and Direct2D compatibility flags. + featureLevels, // List of feature levels this app can support. + ARRAYSIZE(featureLevels), // Size of the list above. + D3D11_SDK_VERSION, // Always set this to D3D11_SDK_VERSION for Windows Store apps. + &device, // Returns the Direct3D device created. + &m_d3dFeatureLevel, // Returns feature level of device created. + &context // Returns the device immediate context. + ); + + if (FAILED(hr)) + { + // If the initialization fails, fall back to the WARP device. + // For more information on WARP, see: + // http://go.microsoft.com/fwlink/?LinkId=286690 + DX::ThrowIfFailed( + D3D11CreateDevice( + nullptr, + D3D_DRIVER_TYPE_WARP, // Create a WARP device instead of a hardware device. + 0, + creationFlags, + featureLevels, + ARRAYSIZE(featureLevels), + D3D11_SDK_VERSION, + &device, + &m_d3dFeatureLevel, + &context + ) + ); + } + + // Store pointers to the Direct3D 11.3 API device and immediate context. + DX::ThrowIfFailed( + device.As(&m_d3dDevice) + ); + + DX::ThrowIfFailed( + context.As(&m_d3dContext) + ); + + // Create the Direct2D device object and a corresponding context. + ComPtr dxgiDevice; + DX::ThrowIfFailed( + m_d3dDevice.As(&dxgiDevice) + ); + + DX::ThrowIfFailed( + m_d2dFactory->CreateDevice(dxgiDevice.Get(), &m_d2dDevice) + ); + + DX::ThrowIfFailed( + m_d2dDevice->CreateDeviceContext( + D2D1_DEVICE_CONTEXT_OPTIONS_NONE, + &m_d2dContext + ) + ); +} + +// These resources need to be recreated every time the window size is changed. +void DX::DeviceResources::CreateWindowSizeDependentResources() +{ + // Clear the previous window size specific context. + ID3D11RenderTargetView* nullViews[] = {nullptr}; + m_d3dContext->OMSetRenderTargets(ARRAYSIZE(nullViews), nullViews, nullptr); + m_d3dRenderTargetView = nullptr; + m_d2dContext->SetTarget(nullptr); + m_d2dTargetBitmap = nullptr; + m_d3dDepthStencilView = nullptr; + m_d3dContext->Flush1(D3D11_CONTEXT_TYPE_ALL, nullptr); + + UpdateRenderTargetSize(); + + // The width and height of the swap chain must be based on the window's + // natively-oriented width and height. If the window is not in the native + // orientation, the dimensions must be reversed. + DXGI_MODE_ROTATION displayRotation = ComputeDisplayRotation(); + + bool swapDimensions = displayRotation == DXGI_MODE_ROTATION_ROTATE90 || displayRotation == DXGI_MODE_ROTATION_ROTATE270; + m_d3dRenderTargetSize.Width = swapDimensions ? m_outputSize.Height : m_outputSize.Width; + m_d3dRenderTargetSize.Height = swapDimensions ? m_outputSize.Width : m_outputSize.Height; + + if (m_swapChain != nullptr) + { + // If the swap chain already exists, resize it. + HRESULT hr = m_swapChain->ResizeBuffers( + 2, // Double-buffered swap chain. + lround(m_d3dRenderTargetSize.Width), + lround(m_d3dRenderTargetSize.Height), + DXGI_FORMAT_B8G8R8A8_UNORM, + 0 + ); + + if (hr == DXGI_ERROR_DEVICE_REMOVED || hr == DXGI_ERROR_DEVICE_RESET) + { + // If the device was removed for any reason, a new device and swap chain will need to be created. + HandleDeviceLost(); + + // Everything is set up now. Do not continue execution of this method. HandleDeviceLost will reenter this method + // and correctly set up the new device. + return; + } + else + { + DX::ThrowIfFailed(hr); + } + } + else + { + // Otherwise, create a new one using the same adapter as the existing Direct3D device. + DXGI_SCALING scaling = DisplayMetrics::SupportHighResolutions ? DXGI_SCALING_NONE : DXGI_SCALING_STRETCH; + DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {0}; + + swapChainDesc.Width = lround(m_d3dRenderTargetSize.Width); // Match the size of the window. + swapChainDesc.Height = lround(m_d3dRenderTargetSize.Height); + swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; // This is the most common swap chain format. + swapChainDesc.Stereo = false; + swapChainDesc.SampleDesc.Count = 1; // Don't use multi-sampling. + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapChainDesc.BufferCount = 2; // Use double-buffering to minimize latency. + swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; // All Windows Store apps must use this SwapEffect. + swapChainDesc.Flags = 0; + swapChainDesc.Scaling = scaling; + swapChainDesc.AlphaMode = DXGI_ALPHA_MODE_IGNORE; + + // This sequence obtains the DXGI factory that was used to create the Direct3D device above. + ComPtr dxgiDevice; + DX::ThrowIfFailed( + m_d3dDevice.As(&dxgiDevice) + ); + + ComPtr dxgiAdapter; + DX::ThrowIfFailed( + dxgiDevice->GetAdapter(&dxgiAdapter) + ); + + ComPtr dxgiFactory; + DX::ThrowIfFailed( + dxgiAdapter->GetParent(IID_PPV_ARGS(&dxgiFactory)) + ); + + ComPtr swapChain; + DX::ThrowIfFailed( + dxgiFactory->CreateSwapChainForCoreWindow( + m_d3dDevice.Get(), + reinterpret_cast(m_window.Get()), + &swapChainDesc, + nullptr, + &swapChain + ) + ); + DX::ThrowIfFailed( + swapChain.As(&m_swapChain) + ); + + // Ensure that DXGI does not queue more than one frame at a time. This both reduces latency and + // ensures that the application will only render after each VSync, minimizing power consumption. + DX::ThrowIfFailed( + dxgiDevice->SetMaximumFrameLatency(1) + ); + } + + // Set the proper orientation for the swap chain, and generate 2D and + // 3D matrix transformations for rendering to the rotated swap chain. + // Note the rotation angle for the 2D and 3D transforms are different. + // This is due to the difference in coordinate spaces. Additionally, + // the 3D matrix is specified explicitly to avoid rounding errors. + + switch (displayRotation) + { + case DXGI_MODE_ROTATION_IDENTITY: + m_orientationTransform2D = Matrix3x2F::Identity(); + m_orientationTransform3D = ScreenRotation::Rotation0; + break; + + case DXGI_MODE_ROTATION_ROTATE90: + m_orientationTransform2D = + Matrix3x2F::Rotation(90.0f) * + Matrix3x2F::Translation(m_logicalSize.Height, 0.0f); + m_orientationTransform3D = ScreenRotation::Rotation270; + break; + + case DXGI_MODE_ROTATION_ROTATE180: + m_orientationTransform2D = + Matrix3x2F::Rotation(180.0f) * + Matrix3x2F::Translation(m_logicalSize.Width, m_logicalSize.Height); + m_orientationTransform3D = ScreenRotation::Rotation180; + break; + + case DXGI_MODE_ROTATION_ROTATE270: + m_orientationTransform2D = + Matrix3x2F::Rotation(270.0f) * + Matrix3x2F::Translation(0.0f, m_logicalSize.Width); + m_orientationTransform3D = ScreenRotation::Rotation90; + break; + + default: + throw ref new FailureException(); + } + + DX::ThrowIfFailed( + m_swapChain->SetRotation(displayRotation) + ); + + // Create a render target view of the swap chain back buffer. + ComPtr backBuffer; + DX::ThrowIfFailed( + m_swapChain->GetBuffer(0, IID_PPV_ARGS(&backBuffer)) + ); + + DX::ThrowIfFailed( + m_d3dDevice->CreateRenderTargetView1( + backBuffer.Get(), + nullptr, + &m_d3dRenderTargetView + ) + ); + + // Create a depth stencil view for use with 3D rendering if needed. + CD3D11_TEXTURE2D_DESC1 depthStencilDesc( + DXGI_FORMAT_D24_UNORM_S8_UINT, + lround(m_d3dRenderTargetSize.Width), + lround(m_d3dRenderTargetSize.Height), + 1, // This depth stencil view has only one texture. + 1, // Use a single mipmap level. + D3D11_BIND_DEPTH_STENCIL + ); + + ComPtr depthStencil; + DX::ThrowIfFailed( + m_d3dDevice->CreateTexture2D1( + &depthStencilDesc, + nullptr, + &depthStencil + ) + ); + + CD3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc(D3D11_DSV_DIMENSION_TEXTURE2D); + DX::ThrowIfFailed( + m_d3dDevice->CreateDepthStencilView( + depthStencil.Get(), + &depthStencilViewDesc, + &m_d3dDepthStencilView + ) + ); + + // Set the 3D rendering viewport to target the entire window. + m_screenViewport = CD3D11_VIEWPORT( + 0.0f, + 0.0f, + m_d3dRenderTargetSize.Width, + m_d3dRenderTargetSize.Height + ); + + m_d3dContext->RSSetViewports(1, &m_screenViewport); + + // Create a Direct2D target bitmap associated with the + // swap chain back buffer and set it as the current target. + D2D1_BITMAP_PROPERTIES1 bitmapProperties = + D2D1::BitmapProperties1( + D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW, + D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED), + m_dpi, + m_dpi + ); + + ComPtr dxgiBackBuffer; + DX::ThrowIfFailed( + m_swapChain->GetBuffer(0, IID_PPV_ARGS(&dxgiBackBuffer)) + ); + + DX::ThrowIfFailed( + m_d2dContext->CreateBitmapFromDxgiSurface( + dxgiBackBuffer.Get(), + &bitmapProperties, + &m_d2dTargetBitmap + ) + ); + + m_d2dContext->SetTarget(m_d2dTargetBitmap.Get()); + m_d2dContext->SetDpi(m_effectiveDpi, m_effectiveDpi); + + // Grayscale text anti-aliasing is recommended for all Windows Store apps. + m_d2dContext->SetTextAntialiasMode(D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE); +} + +// Determine the dimensions of the render target and whether it will be scaled down. +void DX::DeviceResources::UpdateRenderTargetSize() +{ + m_effectiveDpi = m_dpi; + + // To improve battery life on high resolution devices, render to a smaller render target + // and allow the GPU to scale the output when it is presented. + if (!DisplayMetrics::SupportHighResolutions && m_dpi > DisplayMetrics::DpiThreshold) + { + float width = DX::ConvertDipsToPixels(m_logicalSize.Width, m_dpi); + float height = DX::ConvertDipsToPixels(m_logicalSize.Height, m_dpi); + + // When the device is in portrait orientation, height > width. Compare the + // larger dimension against the width threshold and the smaller dimension + // against the height threshold. + if (std::max(width, height) > DisplayMetrics::WidthThreshold && std::min(width, height) > DisplayMetrics::HeightThreshold) + { + // To scale the app we change the effective DPI. Logical size does not change. + m_effectiveDpi /= 2.0f; + } + } + + // Calculate the necessary render target size in pixels. + m_outputSize.Width = DX::ConvertDipsToPixels(m_logicalSize.Width, m_effectiveDpi); + m_outputSize.Height = DX::ConvertDipsToPixels(m_logicalSize.Height, m_effectiveDpi); + + // Prevent zero size DirectX content from being created. + m_outputSize.Width = std::max(m_outputSize.Width, 1.0f); + m_outputSize.Height = std::max(m_outputSize.Height, 1.0f); +} + +// This method is called when the CoreWindow is created (or re-created). +void DX::DeviceResources::SetWindow(CoreWindow^ window) +{ + DisplayInformation^ currentDisplayInformation = DisplayInformation::GetForCurrentView(); + + m_window = window; + m_logicalSize = Windows::Foundation::Size(window->Bounds.Width, window->Bounds.Height); + m_nativeOrientation = currentDisplayInformation->NativeOrientation; + m_currentOrientation = currentDisplayInformation->CurrentOrientation; + m_dpi = currentDisplayInformation->LogicalDpi; + m_d2dContext->SetDpi(m_dpi, m_dpi); + + CreateWindowSizeDependentResources(); +} + +// This method is called in the event handler for the SizeChanged event. +void DX::DeviceResources::SetLogicalSize(Windows::Foundation::Size logicalSize) +{ + if (m_logicalSize != logicalSize) + { + m_logicalSize = logicalSize; + CreateWindowSizeDependentResources(); + } +} + +// This method is called in the event handler for the DpiChanged event. +void DX::DeviceResources::SetDpi(float dpi) +{ + if (dpi != m_dpi) + { + m_dpi = dpi; + + // When the display DPI changes, the logical size of the window (measured in Dips) also changes and needs to be updated. + m_logicalSize = Windows::Foundation::Size(m_window->Bounds.Width, m_window->Bounds.Height); + + m_d2dContext->SetDpi(m_dpi, m_dpi); + CreateWindowSizeDependentResources(); + } +} + +// This method is called in the event handler for the OrientationChanged event. +void DX::DeviceResources::SetCurrentOrientation(DisplayOrientations currentOrientation) +{ + if (m_currentOrientation != currentOrientation) + { + m_currentOrientation = currentOrientation; + CreateWindowSizeDependentResources(); + } +} + +// This method is called in the event handler for the DisplayContentsInvalidated event. +void DX::DeviceResources::ValidateDevice() +{ + // The D3D Device is no longer valid if the default adapter changed since the device + // was created or if the device has been removed. + + // First, get the information for the default adapter from when the device was created. + + ComPtr dxgiDevice; + DX::ThrowIfFailed(m_d3dDevice.As(&dxgiDevice)); + + ComPtr deviceAdapter; + DX::ThrowIfFailed(dxgiDevice->GetAdapter(&deviceAdapter)); + + ComPtr deviceFactory; + DX::ThrowIfFailed(deviceAdapter->GetParent(IID_PPV_ARGS(&deviceFactory))); + + ComPtr previousDefaultAdapter; + DX::ThrowIfFailed(deviceFactory->EnumAdapters1(0, &previousDefaultAdapter)); + + DXGI_ADAPTER_DESC1 previousDesc; + DX::ThrowIfFailed(previousDefaultAdapter->GetDesc1(&previousDesc)); + + // Next, get the information for the current default adapter. + + ComPtr currentFactory; + DX::ThrowIfFailed(CreateDXGIFactory1(IID_PPV_ARGS(¤tFactory))); + + ComPtr currentDefaultAdapter; + DX::ThrowIfFailed(currentFactory->EnumAdapters1(0, ¤tDefaultAdapter)); + + DXGI_ADAPTER_DESC1 currentDesc; + DX::ThrowIfFailed(currentDefaultAdapter->GetDesc1(¤tDesc)); + + // If the adapter LUIDs don't match, or if the device reports that it has been removed, + // a new D3D device must be created. + + if (previousDesc.AdapterLuid.LowPart != currentDesc.AdapterLuid.LowPart || + previousDesc.AdapterLuid.HighPart != currentDesc.AdapterLuid.HighPart || + FAILED(m_d3dDevice->GetDeviceRemovedReason())) + { + // Release references to resources related to the old device. + dxgiDevice = nullptr; + deviceAdapter = nullptr; + deviceFactory = nullptr; + previousDefaultAdapter = nullptr; + + // Create a new device and swap chain. + HandleDeviceLost(); + } +} + +// Recreate all device resources and set them back to the current state. +void DX::DeviceResources::HandleDeviceLost() +{ + m_swapChain = nullptr; + + if (m_deviceNotify != nullptr) + { + m_deviceNotify->OnDeviceLost(); + } + + CreateDeviceResources(); + m_d2dContext->SetDpi(m_dpi, m_dpi); + CreateWindowSizeDependentResources(); + + if (m_deviceNotify != nullptr) + { + m_deviceNotify->OnDeviceRestored(); + } +} + +// Register our DeviceNotify to be informed on device lost and creation. +void DX::DeviceResources::RegisterDeviceNotify(DX::IDeviceNotify* deviceNotify) +{ + m_deviceNotify = deviceNotify; +} + +// Call this method when the app suspends. It provides a hint to the driver that the app +// is entering an idle state and that temporary buffers can be reclaimed for use by other apps. +void DX::DeviceResources::Trim() +{ + ComPtr dxgiDevice; + m_d3dDevice.As(&dxgiDevice); + + dxgiDevice->Trim(); +} + +// Present the contents of the swap chain to the screen. +void DX::DeviceResources::Present() +{ + // The first argument instructs DXGI to block until VSync, putting the application + // to sleep until the next VSync. This ensures we don't waste any cycles rendering + // frames that will never be displayed to the screen. + DXGI_PRESENT_PARAMETERS parameters = { 0 }; + HRESULT hr = m_swapChain->Present1(1, 0, ¶meters); + + // Discard the contents of the render target. + // This is a valid operation only when the existing contents will be entirely + // overwritten. If dirty or scroll rects are used, this call should be removed. + m_d3dContext->DiscardView1(m_d3dRenderTargetView.Get(), nullptr, 0); + + // Discard the contents of the depth stencil. + m_d3dContext->DiscardView1(m_d3dDepthStencilView.Get(), nullptr, 0); + + // If the device was removed either by a disconnection or a driver upgrade, we + // must recreate all device resources. + if (hr == DXGI_ERROR_DEVICE_REMOVED || hr == DXGI_ERROR_DEVICE_RESET) + { + HandleDeviceLost(); + } + else + { + DX::ThrowIfFailed(hr); + } +} + +// This method determines the rotation between the display device's native orientation and the +// current display orientation. +DXGI_MODE_ROTATION DX::DeviceResources::ComputeDisplayRotation() +{ + DXGI_MODE_ROTATION rotation = DXGI_MODE_ROTATION_UNSPECIFIED; + + // Note: NativeOrientation can only be Landscape or Portrait even though + // the DisplayOrientations enum has other values. + switch (m_nativeOrientation) + { + case DisplayOrientations::Landscape: + switch (m_currentOrientation) + { + case DisplayOrientations::Landscape: + rotation = DXGI_MODE_ROTATION_IDENTITY; + break; + + case DisplayOrientations::Portrait: + rotation = DXGI_MODE_ROTATION_ROTATE270; + break; + + case DisplayOrientations::LandscapeFlipped: + rotation = DXGI_MODE_ROTATION_ROTATE180; + break; + + case DisplayOrientations::PortraitFlipped: + rotation = DXGI_MODE_ROTATION_ROTATE90; + break; + } + break; + + case DisplayOrientations::Portrait: + switch (m_currentOrientation) + { + case DisplayOrientations::Landscape: + rotation = DXGI_MODE_ROTATION_ROTATE90; + break; + + case DisplayOrientations::Portrait: + rotation = DXGI_MODE_ROTATION_IDENTITY; + break; + + case DisplayOrientations::LandscapeFlipped: + rotation = DXGI_MODE_ROTATION_ROTATE270; + break; + + case DisplayOrientations::PortraitFlipped: + rotation = DXGI_MODE_ROTATION_ROTATE180; + break; + } + break; + } + return rotation; +} \ No newline at end of file diff --git a/UWP/Common/DeviceResources.h b/UWP/Common/DeviceResources.h new file mode 100644 index 0000000000..27edaafa67 --- /dev/null +++ b/UWP/Common/DeviceResources.h @@ -0,0 +1,102 @@ +#pragma once + +namespace DX +{ + // Provides an interface for an application that owns DeviceResources to be notified of the device being lost or created. + interface IDeviceNotify + { + virtual void OnDeviceLost() = 0; + virtual void OnDeviceRestored() = 0; + }; + + // Controls all the DirectX device resources. + class DeviceResources + { + public: + DeviceResources(); + void SetWindow(Windows::UI::Core::CoreWindow^ window); + void SetLogicalSize(Windows::Foundation::Size logicalSize); + void SetCurrentOrientation(Windows::Graphics::Display::DisplayOrientations currentOrientation); + void SetDpi(float dpi); + void ValidateDevice(); + void HandleDeviceLost(); + void RegisterDeviceNotify(IDeviceNotify* deviceNotify); + void Trim(); + void Present(); + + // The size of the render target, in pixels. + Windows::Foundation::Size GetOutputSize() const { return m_outputSize; } + + // The size of the render target, in dips. + Windows::Foundation::Size GetLogicalSize() const { return m_logicalSize; } + float GetDpi() const { return m_effectiveDpi; } + + // D3D Accessors. + ID3D11Device3* GetD3DDevice() const { return m_d3dDevice.Get(); } + ID3D11DeviceContext3* GetD3DDeviceContext() const { return m_d3dContext.Get(); } + IDXGISwapChain3* GetSwapChain() const { return m_swapChain.Get(); } + D3D_FEATURE_LEVEL GetDeviceFeatureLevel() const { return m_d3dFeatureLevel; } + ID3D11RenderTargetView1* GetBackBufferRenderTargetView() const { return m_d3dRenderTargetView.Get(); } + ID3D11DepthStencilView* GetDepthStencilView() const { return m_d3dDepthStencilView.Get(); } + D3D11_VIEWPORT GetScreenViewport() const { return m_screenViewport; } + DirectX::XMFLOAT4X4 GetOrientationTransform3D() const { return m_orientationTransform3D; } + + // D2D Accessors. + ID2D1Factory3* GetD2DFactory() const { return m_d2dFactory.Get(); } + ID2D1Device2* GetD2DDevice() const { return m_d2dDevice.Get(); } + ID2D1DeviceContext2* GetD2DDeviceContext() const { return m_d2dContext.Get(); } + ID2D1Bitmap1* GetD2DTargetBitmap() const { return m_d2dTargetBitmap.Get(); } + IDWriteFactory3* GetDWriteFactory() const { return m_dwriteFactory.Get(); } + IWICImagingFactory2* GetWicImagingFactory() const { return m_wicFactory.Get(); } + D2D1::Matrix3x2F GetOrientationTransform2D() const { return m_orientationTransform2D; } + + private: + void CreateDeviceIndependentResources(); + void CreateDeviceResources(); + void CreateWindowSizeDependentResources(); + void UpdateRenderTargetSize(); + DXGI_MODE_ROTATION ComputeDisplayRotation(); + + // Direct3D objects. + Microsoft::WRL::ComPtr m_d3dDevice; + Microsoft::WRL::ComPtr m_d3dContext; + Microsoft::WRL::ComPtr m_swapChain; + + // Direct3D rendering objects. Required for 3D. + Microsoft::WRL::ComPtr m_d3dRenderTargetView; + Microsoft::WRL::ComPtr m_d3dDepthStencilView; + D3D11_VIEWPORT m_screenViewport; + + // Direct2D drawing components. + Microsoft::WRL::ComPtr m_d2dFactory; + Microsoft::WRL::ComPtr m_d2dDevice; + Microsoft::WRL::ComPtr m_d2dContext; + Microsoft::WRL::ComPtr m_d2dTargetBitmap; + + // DirectWrite drawing components. + Microsoft::WRL::ComPtr m_dwriteFactory; + Microsoft::WRL::ComPtr m_wicFactory; + + // Cached reference to the Window. + Platform::Agile m_window; + + // Cached device properties. + D3D_FEATURE_LEVEL m_d3dFeatureLevel; + Windows::Foundation::Size m_d3dRenderTargetSize; + Windows::Foundation::Size m_outputSize; + Windows::Foundation::Size m_logicalSize; + Windows::Graphics::Display::DisplayOrientations m_nativeOrientation; + Windows::Graphics::Display::DisplayOrientations m_currentOrientation; + float m_dpi; + + // This is the DPI that will be reported back to the app. It takes into account whether the app supports high resolution screens or not. + float m_effectiveDpi; + + // Transforms used for display orientation. + D2D1::Matrix3x2F m_orientationTransform2D; + DirectX::XMFLOAT4X4 m_orientationTransform3D; + + // The IDeviceNotify can be held directly as it owns the DeviceResources. + IDeviceNotify* m_deviceNotify; + }; +} \ No newline at end of file diff --git a/UWP/Common/DirectXHelper.h b/UWP/Common/DirectXHelper.h new file mode 100644 index 0000000000..1137361a9a --- /dev/null +++ b/UWP/Common/DirectXHelper.h @@ -0,0 +1,63 @@ +#pragma once + +#include // For create_task + +namespace DX +{ + inline void ThrowIfFailed(HRESULT hr) + { + if (FAILED(hr)) + { + // Set a breakpoint on this line to catch Win32 API errors. + throw Platform::Exception::CreateException(hr); + } + } + + // Function that reads from a binary file asynchronously. + inline Concurrency::task> ReadDataAsync(const std::wstring& filename) + { + using namespace Windows::Storage; + using namespace Concurrency; + + auto folder = Windows::ApplicationModel::Package::Current->InstalledLocation; + + return create_task(folder->GetFileAsync(Platform::StringReference(filename.c_str()))).then([] (StorageFile^ file) + { + return FileIO::ReadBufferAsync(file); + }).then([] (Streams::IBuffer^ fileBuffer) -> std::vector + { + std::vector returnBuffer; + returnBuffer.resize(fileBuffer->Length); + Streams::DataReader::FromBuffer(fileBuffer)->ReadBytes(Platform::ArrayReference(returnBuffer.data(), fileBuffer->Length)); + return returnBuffer; + }); + } + + // Converts a length in device-independent pixels (DIPs) to a length in physical pixels. + inline float ConvertDipsToPixels(float dips, float dpi) + { + static const float dipsPerInch = 96.0f; + return floorf(dips * dpi / dipsPerInch + 0.5f); // Round to nearest integer. + } + +#if defined(_DEBUG) + // Check for SDK Layer support. + inline bool SdkLayersAvailable() + { + HRESULT hr = D3D11CreateDevice( + nullptr, + D3D_DRIVER_TYPE_NULL, // There is no need to create a real hardware device. + 0, + D3D11_CREATE_DEVICE_DEBUG, // Check for the SDK layers. + nullptr, // Any feature level will do. + 0, + D3D11_SDK_VERSION, // Always set this to D3D11_SDK_VERSION for Windows Store apps. + nullptr, // No need to keep the D3D device reference. + nullptr, // No need to know the feature level. + nullptr // No need to keep the D3D device context reference. + ); + + return SUCCEEDED(hr); + } +#endif +} diff --git a/UWP/CommonUWP/CommonUWP.cpp b/UWP/CommonUWP/CommonUWP.cpp new file mode 100644 index 0000000000..af3e506d90 --- /dev/null +++ b/UWP/CommonUWP/CommonUWP.cpp @@ -0,0 +1,2 @@ +#include "pch.h" +#include "CommonUWP.h" diff --git a/UWP/CommonUWP/CommonUWP.h b/UWP/CommonUWP/CommonUWP.h new file mode 100644 index 0000000000..73b4b86650 --- /dev/null +++ b/UWP/CommonUWP/CommonUWP.h @@ -0,0 +1 @@ +#pragma once diff --git a/UWP/CommonUWP/CommonUWP.vcxproj b/UWP/CommonUWP/CommonUWP.vcxproj new file mode 100644 index 0000000000..8f3f555ee0 --- /dev/null +++ b/UWP/CommonUWP/CommonUWP.vcxproj @@ -0,0 +1,299 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + {acb316ca-3ecb-48e5-be0a-91e72d5b0f12} + StaticLibrary + CommonUWP + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + Use + false + true + pch.h + ../..;../../ext/native;../../ext/snappy;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + ../..;../../ext/native;../../ext/snappy;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native;../../ext/snappy;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + ../..;../../ext/native;../../ext/snappy;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native;../../ext/snappy;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + ../..;../../ext/native;../../ext/snappy;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/UWP/CommonUWP/CommonUWP.vcxproj.filters b/UWP/CommonUWP/CommonUWP.vcxproj.filters new file mode 100644 index 0000000000..17063ce549 --- /dev/null +++ b/UWP/CommonUWP/CommonUWP.vcxproj.filters @@ -0,0 +1,104 @@ + + + + + {da855697-f7aa-49bf-b969-7a90c5b4d259} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Crypto + + + Crypto + + + Crypto + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Crypto + + + Crypto + + + Crypto + + + \ No newline at end of file diff --git a/UWP/CommonUWP/pch.cpp b/UWP/CommonUWP/pch.cpp new file mode 100644 index 0000000000..bcb5590be1 --- /dev/null +++ b/UWP/CommonUWP/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/UWP/CommonUWP/pch.h b/UWP/CommonUWP/pch.h new file mode 100644 index 0000000000..529bbb17fe --- /dev/null +++ b/UWP/CommonUWP/pch.h @@ -0,0 +1,9 @@ +#pragma once + +#include "targetver.h" + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#include diff --git a/UWP/CommonUWP/targetver.h b/UWP/CommonUWP/targetver.h new file mode 100644 index 0000000000..a66ecb00f1 --- /dev/null +++ b/UWP/CommonUWP/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/UWP/CoreUWP/CoreUWP.vcxproj b/UWP/CoreUWP/CoreUWP.vcxproj new file mode 100644 index 0000000000..a52732c0d9 --- /dev/null +++ b/UWP/CoreUWP/CoreUWP.vcxproj @@ -0,0 +1,670 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + {40b76674-02de-40ef-889b-fad1489685e7} + StaticLibrary + CoreUWP + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + Use + false + true + pch.h + ../../ffmpeg/WindowsInclude;../..;../../ext/native;../../ext/snappy;../../Common;../../ext/zlib;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../../ffmpeg/WindowsInclude;../..;../../ext/native;../../ext/snappy;../../Common;../../ext/zlib;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../../ffmpeg/WindowsInclude;../..;../../ext/native;../../ext/snappy;../../Common;../../ext/zlib;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../../ffmpeg/WindowsInclude;../..;../../ext/native;../../ext/snappy;../../Common;../../ext/zlib;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../../ffmpeg/WindowsInclude;../..;../../ext/native;../../ext/snappy;../../Common;../../ext/zlib;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../../ffmpeg/WindowsInclude;../..;../../ext/native;../../ext/snappy;../../Common;../../ext/zlib;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + Create + Create + Create + Create + Create + Create + + + + + {acb316ca-3ecb-48e5-be0a-91e72d5b0f12} + + + + + + \ No newline at end of file diff --git a/UWP/CoreUWP/CoreUWP.vcxproj.filters b/UWP/CoreUWP/CoreUWP.vcxproj.filters new file mode 100644 index 0000000000..2b20fc1219 --- /dev/null +++ b/UWP/CoreUWP/CoreUWP.vcxproj.filters @@ -0,0 +1,1150 @@ + + + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms + + + {651b350c-cb4d-400e-8d18-cfb8413313d2} + + + {c9faaeb5-ada3-41ba-9bf1-35b13e3ea059} + + + {22a6ef3c-13be-49b5-9a37-713635124525} + + + {2aa716ba-a602-4f30-9ec7-4bfa7e2d29ab} + + + {12e7c4a9-e8f1-4284-97b1-d1e7a01f4bfc} + + + {b054550e-6280-41b2-b867-eca77fe86c9e} + + + {caa89656-e677-43e0-814c-554b091ff8c9} + + + {c99f4b4f-10f9-4900-90e3-917c54f25ab6} + + + {00435c7b-988e-474d-bd79-1895615f9e23} + + + {4b683e84-143b-4cec-8f44-c22796941580} + + + {a26a4cc8-fee2-4bd7-bf5f-a64a09b12fe4} + + + {d2f0d6db-6d9f-4b51-b669-5235b62e3f9c} + + + {6610d0d5-9522-491a-a281-785bde03c192} + + + {9c5247a4-2f82-44a1-90b8-333123913ef5} + + + {3c09fd8a-787b-4ade-8c7a-0e648e0ceb02} + + + {a1e8e961-d324-459f-918c-3387bf987e1a} + + + {dc076a61-7770-46c5-ab43-98cff13a12d1} + + + {5505b40e-3f96-4e3f-aca3-cd6bd7c7ab73} + + + {e0604f48-5522-43e8-ba22-6d08bc2ccacd} + + + {9c6552c2-9858-41da-a920-31ea5628d417} + + + + + + + + + + + + + + + + + + + + + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\JitCommon + + + MIPS\JitCommon + + + MIPS\JitCommon + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + FileSystems + + + FileSystems + + + FileSystems + + + FileSystems + + + FileSystems + + + FileSystems + + + FileSystems + + + HW + + + HW + + + HW + + + HW + + + HW + + + HW + + + HW + + + HW + + + Util + + + Util + + + Util + + + Util + + + Util + + + Util + + + Util + + + ELF + + + ELF + + + ELF + + + ELF + + + FileLoaders + + + FileLoaders + + + FileLoaders + + + FileLoaders + + + FileLoaders + + + FileLoaders + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + Font + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Debugger + + + Debugger + + + Debugger + + + Ext\SFMT + + + Ext\snappy + + + Ext\snappy + + + Ext\udis86 + + + Ext\udis86 + + + Ext\udis86 + + + Ext\udis86 + + + Ext\udis86 + + + Ext\udis86 + + + Ext\xbrz + + + Ext\disarm + + + Ext + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + + + + + + + + + + + + + + + + + + + + + + + + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\ARM + + + MIPS\JitCommon + + + MIPS\JitCommon + + + MIPS\JitCommon + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + MIPS\x86 + + + FileSystems + + + FileSystems + + + FileSystems + + + FileSystems + + + FileSystems + + + FileSystems + + + HW + + + HW + + + HW + + + HW + + + HW + + + HW + + + HW + + + HW + + + HW + + + Util + + + Util + + + Util + + + Util + + + Util + + + Util + + + Util + + + ELF + + + ELF + + + ELF + + + ELF + + + ELF + + + FileLoaders + + + FileLoaders + + + FileLoaders + + + FileLoaders + + + FileLoaders + + + FileLoaders + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + HLE + + + Font + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + MIPS + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Dialog + + + Debugger + + + Debugger + + + Debugger + + + Debugger + + + Ext\SFMT + + + Ext\SFMT + + + Ext\SFMT + + + Ext\SFMT + + + Ext\snappy + + + Ext\snappy + + + Ext\snappy + + + Ext\snappy + + + Ext\snappy + + + Ext\snappy + + + Ext\udis86 + + + Ext\udis86 + + + Ext\udis86 + + + Ext\udis86 + + + Ext\udis86 + + + Ext\udis86 + + + Ext\udis86 + + + Ext\xbrz + + + Ext\xbrz + + + Ext\disarm + + + Ext + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + MIPS\IR + + + + \ No newline at end of file diff --git a/UWP/CoreUWP/pch.cpp b/UWP/CoreUWP/pch.cpp new file mode 100644 index 0000000000..bcb5590be1 --- /dev/null +++ b/UWP/CoreUWP/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/UWP/CoreUWP/pch.h b/UWP/CoreUWP/pch.h new file mode 100644 index 0000000000..529bbb17fe --- /dev/null +++ b/UWP/CoreUWP/pch.h @@ -0,0 +1,9 @@ +#pragma once + +#include "targetver.h" + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#include diff --git a/UWP/CoreUWP/targetver.h b/UWP/CoreUWP/targetver.h new file mode 100644 index 0000000000..a66ecb00f1 --- /dev/null +++ b/UWP/CoreUWP/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/UWP/GPU_UWP/GPU_UWP.vcxproj b/UWP/GPU_UWP/GPU_UWP.vcxproj new file mode 100644 index 0000000000..28da0faa55 --- /dev/null +++ b/UWP/GPU_UWP/GPU_UWP.vcxproj @@ -0,0 +1,335 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + {5d271429-c288-4534-98af-94475d940058} + StaticLibrary + GPU_UWP + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + Use + false + true + pch.h + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + {acb316ca-3ecb-48e5-be0a-91e72d5b0f12} + + + {40b76674-02de-40ef-889b-fad1489685e7} + + + {d326891e-ece4-4b94-b5e7-8aa0a8e8ecbc} + + + {2b2d16bd-1d37-46af-a3f8-552900951b26} + + + + + + \ No newline at end of file diff --git a/UWP/GPU_UWP/GPU_UWP.vcxproj.filters b/UWP/GPU_UWP/GPU_UWP.vcxproj.filters new file mode 100644 index 0000000000..4ede6509b6 --- /dev/null +++ b/UWP/GPU_UWP/GPU_UWP.vcxproj.filters @@ -0,0 +1,291 @@ + + + + + {73b2cfa4-f51e-48f5-a9fd-2c4df203a4f0} + + + {7634891c-a60e-48d4-abdb-d8fe347dfef5} + + + {508714cf-18c6-4a82-b92d-1527d9a100f0} + + + {15dc3187-4c49-46a7-8027-6ff23564cc22} + + + {b5c82a80-e146-4133-b199-a07a427f04cc} + + + + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D9 + + + D3D9 + + + + + + + + Software + + + Software + + + Software + + + Software + + + Software + + + Debugger + + + Debugger + + + Common + + + + + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D11 + + + D3D9 + + + D3D9 + + + + + + + + + + Software + + + Software + + + Software + + + Software + + + Software + + + Debugger + + + Debugger + + + \ No newline at end of file diff --git a/UWP/GPU_UWP/pch.cpp b/UWP/GPU_UWP/pch.cpp new file mode 100644 index 0000000000..bcb5590be1 --- /dev/null +++ b/UWP/GPU_UWP/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/UWP/GPU_UWP/pch.h b/UWP/GPU_UWP/pch.h new file mode 100644 index 0000000000..529bbb17fe --- /dev/null +++ b/UWP/GPU_UWP/pch.h @@ -0,0 +1,9 @@ +#pragma once + +#include "targetver.h" + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#include diff --git a/UWP/GPU_UWP/targetver.h b/UWP/GPU_UWP/targetver.h new file mode 100644 index 0000000000..a66ecb00f1 --- /dev/null +++ b/UWP/GPU_UWP/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/UWP/NativeUWP/NativeUWP.vcxproj b/UWP/NativeUWP/NativeUWP.vcxproj new file mode 100644 index 0000000000..2eb6eaa87a --- /dev/null +++ b/UWP/NativeUWP/NativeUWP.vcxproj @@ -0,0 +1,994 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + {935028af-b850-4ad7-a00e-7ba84fb97d05} + StaticLibrary + NativeUWP + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + Use + false + true + pch.h + ../..;../../ext/native/ext;../..;../../ext/native;../../ext/zlib;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native/ext;../..;../../ext/native;../../ext/zlib;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native/ext;../..;../../ext/native;../../ext/zlib;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native/ext;../..;../../ext/native;../../ext/zlib;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native/ext;../..;../../ext/native;../../ext/zlib;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + ../..;../../ext/native/ext;../..;../../ext/native;../../ext/zlib;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + + + + + + + + + + + + + + + + + + + + + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + + + + + + + + + + + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + + + + + + + + + + + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + {ddf90203-0aae-4f38-b589-2e9637658ce6} + + + + + + \ No newline at end of file diff --git a/UWP/NativeUWP/NativeUWP.vcxproj.filters b/UWP/NativeUWP/NativeUWP.vcxproj.filters new file mode 100644 index 0000000000..236f9f313b --- /dev/null +++ b/UWP/NativeUWP/NativeUWP.vcxproj.filters @@ -0,0 +1,741 @@ + + + + + {903dae00-880d-4c12-bd10-29fca750376f} + + + {98343696-3517-451a-9b47-94d462263e3e} + + + {63177c91-8ebd-4e87-ad4e-e6b8b52879c8} + + + {58d2f6cf-2448-4095-8479-9fe5d765b573} + + + {8a254b8c-46f2-4ff1-bc53-deea7e614276} + + + {244992ec-8dcf-49f4-b63c-cae6ac437c58} + + + {6f098c49-cf71-466b-9b1e-c4287681ab26} + + + {9d02a269-6cdd-4726-ab58-34c012e37d37} + + + {8292cb5c-02c9-46a4-a8d5-ea5e8f362688} + + + {d8c0dd74-7ad2-440a-a3e0-5dbf3435a2fc} + + + {a522f449-7873-4af7-908e-7cc91eb8bfc0} + + + {2be24387-0b6a-4253-97fa-b8b6f75a8a4c} + + + {7fdd3320-a8e0-42ed-b08b-2d86ba2ff414} + + + {1a486fc4-bac0-4b33-9139-262272690c74} + + + {f3b2701a-3ddc-4604-a867-2ee9a0600dab} + + + {34445680-c1be-4aec-a716-1e118ef48906} + + + {96ac6deb-ad00-4ee4-9f0d-515d78d1886b} + + + {3ffe0470-9652-4d89-a3d1-7eb989d266ab} + + + {4d23e7d3-0b9b-4dbe-95df-6ab250782a66} + + + + + + base + + + base + + + base + + + base + + + base + + + base + + + base + + + thin3d + + + thin3d + + + thread + + + thread + + + thread + + + thread + + + util + + + util + + + util + + + util + + + gfx + + + gfx + + + file + + + file + + + file + + + file + + + file + + + file + + + file + + + input + + + input + + + ui + + + ui + + + ui + + + ui + + + ui + + + ui + + + ui + + + math + + + math + + + math + + + math + + + math + + + math + + + math + + + math + + + math + + + math + + + net + + + net + + + net + + + net + + + net + + + net + + + i18n + + + ext\vjson + + + ext\vjson + + + ext\vjson + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\jpge + + + ext\jpge + + + gfx + + + image + + + image + + + ext\cityhash + + + gfx + + + data + + + gfx + + + + + + + base + + + base + + + base + + + base + + + base + + + base + + + base + + + base + + + base + + + base + + + base + + + base + + + base + + + base + + + thin3d + + + thin3d + + + thread + + + thread + + + thread + + + thread + + + thread + + + util + + + util + + + util + + + util + + + util + + + util + + + util + + + util + + + gfx + + + gfx + + + file + + + file + + + file + + + file + + + file + + + file + + + file + + + file + + + input + + + input + + + input + + + ui + + + ui + + + ui + + + ui + + + ui + + + ui + + + ui + + + math + + + math + + + math + + + math + + + math + + + math + + + math + + + math + + + math + + + math + + + math + + + math + + + net + + + net + + + net + + + net + + + net + + + net + + + i18n + + + ext\vjson + + + ext\vjson + + + ext\libzip + + + ext\libzip + + + ext\libzip + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\libpng17 + + + ext\jpge + + + ext\jpge + + + gfx + + + image + + + image + + + ext\cityhash + + + ext\cityhash + + + gfx + + + data + + + data + + + gfx + + + \ No newline at end of file diff --git a/UWP/NativeUWP/pch.cpp b/UWP/NativeUWP/pch.cpp new file mode 100644 index 0000000000..bcb5590be1 --- /dev/null +++ b/UWP/NativeUWP/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/UWP/NativeUWP/pch.h b/UWP/NativeUWP/pch.h new file mode 100644 index 0000000000..529bbb17fe --- /dev/null +++ b/UWP/NativeUWP/pch.h @@ -0,0 +1,9 @@ +#pragma once + +#include "targetver.h" + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#include diff --git a/UWP/NativeUWP/targetver.h b/UWP/NativeUWP/targetver.h new file mode 100644 index 0000000000..a66ecb00f1 --- /dev/null +++ b/UWP/NativeUWP/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/UWP/PPSSPP_UWPMain.cpp b/UWP/PPSSPP_UWPMain.cpp new file mode 100644 index 0000000000..e1b251955c --- /dev/null +++ b/UWP/PPSSPP_UWPMain.cpp @@ -0,0 +1,225 @@ +#include "pch.h" +#include "PPSSPP_UWPMain.h" + +#include + +#include "Common/FileUtil.h" +#include "Common/Log.h" +#include "Common/LogManager.h" +#include "Core/System.h" +#include "base/NativeApp.h" +#include "input/input_state.h" +#include "file/vfs.h" +#include "file/zip_read.h" +#include "file/file_util.h" +#include "base/display.h" +#include "util/text/utf8.h" +#include "Common/DirectXHelper.h" +#include "XAudioSoundStream.h" + +using namespace UWP; +using namespace Windows::Foundation; +using namespace Windows::System::Threading; +using namespace Concurrency; + +// TODO: Use Microsoft::WRL::ComPtr<> for D3D11 objects? + +// Loads and initializes application assets when the application is loaded. +PPSSPP_UWPMain::PPSSPP_UWPMain(const std::shared_ptr& deviceResources) : + m_deviceResources(deviceResources) +{ + // Register to be notified if the Device is lost or recreated + m_deviceResources->RegisterDeviceNotify(this); + + // TODO: Change the timer settings if you want something other than the default variable timestep mode. + // e.g. for 60 FPS fixed timestep update logic, call: + /* + m_timer.SetFixedTimeStep(true); + m_timer.SetTargetElapsedSeconds(1.0 / 60); + */ + + m_graphicsContext.reset(new UWPGraphicsContext(deviceResources)); + + const std::string &exePath = File::GetExeDirectory(); + VFSRegister("", new DirectoryAssetReader((exePath + "/Content/").c_str())); + VFSRegister("", new DirectoryAssetReader(exePath.c_str())); + + wchar_t lcCountry[256]; + + std::string langRegion; + if (0 != GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_SNAME, lcCountry, 256)) { + langRegion = ConvertWStringToUTF8(lcCountry); + for (size_t i = 0; i < langRegion.size(); i++) { + if (langRegion[i] == '-') + langRegion[i] = '_'; + } + } else { + langRegion = "en_US"; + } + + + char configFilename[MAX_PATH] = { 0 }; + char controlsConfigFilename[MAX_PATH] = { 0 }; + + // On Win32 it makes more sense to initialize the system directories here + // because the next place it was called was in the EmuThread, and it's too late by then. + InitSysDirectories(); + + // Load config up here, because those changes below would be overwritten + // if it's not loaded here first. + g_Config.AddSearchPath(""); + g_Config.AddSearchPath(GetSysDirectory(DIRECTORY_SYSTEM)); + g_Config.SetDefaultPath(GetSysDirectory(DIRECTORY_SYSTEM)); + g_Config.Load(configFilename, controlsConfigFilename); + + bool debugLogLevel = false; + + g_Config.iGPUBackend = GPU_BACKEND_DIRECT3D11; + +#ifdef _DEBUG + g_Config.bEnableLogging = true; +#endif + + LogManager::Init(); + + if (debugLogLevel) + LogManager::GetInstance()->SetAllLogLevels(LogTypes::LDEBUG); + + const char *argv[2] = { "fake", nullptr }; + + NativeInit(1, argv, "", "", "", false); + + NativeInitGraphics(m_graphicsContext.get()); +} + +PPSSPP_UWPMain::~PPSSPP_UWPMain() { + NativeShutdownGraphics(); + NativeShutdown(); + + // Deregister device notification + m_deviceResources->RegisterDeviceNotify(nullptr); +} + +// Updates application state when the window size changes (e.g. device orientation change) +void PPSSPP_UWPMain::CreateWindowSizeDependentResources() { + // TODO: Replace this with the size-dependent initialization of your app's content. + NativeResized(); +} + +// Updates the application state once per frame. +void PPSSPP_UWPMain::Update() { + InputState input{}; + NativeUpdate(input); +} + +// Renders the current frame according to the current application state. +// Returns true if the frame was rendered and is ready to be displayed. +bool PPSSPP_UWPMain::Render() { + auto context = m_deviceResources->GetD3DDeviceContext(); + + // Reset the viewport to target the whole screen. + auto viewport = m_deviceResources->GetScreenViewport(); + + pixel_xres = viewport.Width; + pixel_yres = viewport.Height; + + g_dpi = m_deviceResources->GetDpi(); + g_dpi_scale = 96.0f / g_dpi; + + pixel_in_dps = 1.0f / g_dpi_scale; + + dp_xres = pixel_xres * g_dpi_scale; + dp_yres = pixel_yres * g_dpi_scale; + + /* + context->RSSetViewports(1, &viewport); + + // Reset render targets to the screen. + ID3D11RenderTargetView *const targets[1] = { m_deviceResources->GetBackBufferRenderTargetView() }; + context->OMSetRenderTargets(1, targets, m_deviceResources->GetDepthStencilView()); + + // Clear the back buffer and depth stencil view. + context->ClearRenderTargetView(m_deviceResources->GetBackBufferRenderTargetView(), DirectX::Colors::CornflowerBlue); + context->ClearDepthStencilView(m_deviceResources->GetDepthStencilView(), D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0); + */ + NativeRender(m_graphicsContext.get()); + return true; +} + +// Notifies renderers that device resources need to be released. +void PPSSPP_UWPMain::OnDeviceLost() { + +} + +// Notifies renderers that device resources may now be recreated. +void PPSSPP_UWPMain::OnDeviceRestored() +{ + CreateWindowSizeDependentResources(); +} + +UWPGraphicsContext::UWPGraphicsContext(std::shared_ptr resources) { + ctx_ = Draw::T3DCreateD3D11Context(resources->GetD3DDevice(), resources->GetD3DDeviceContext(), resources->GetD3DDevice(), resources->GetD3DDeviceContext(), 0); +} + +void UWPGraphicsContext::Shutdown() { + delete ctx_; +} + +void UWPGraphicsContext::SwapInterval(int interval) { + +} + +std::string System_GetProperty(SystemProperty prop) { + static bool hasCheckedGPUDriverVersion = false; + switch (prop) { + case SYSPROP_NAME: + return "Windows 10"; + case SYSPROP_LANGREGION: + return "en_US"; // TODO UWP + case SYSPROP_CLIPBOARD_TEXT: + return ""; + case SYSPROP_GPUDRIVER_VERSION: + return ""; + default: + return ""; + } +} + +int System_GetPropertyInt(SystemProperty prop) { + switch (prop) { + case SYSPROP_AUDIO_SAMPLE_RATE: + return 48000; //winAudioBackend ? winAudioBackend->GetSampleRate() : -1; + case SYSPROP_DISPLAY_REFRESH_RATE: + return 60000; + case SYSPROP_DEVICE_TYPE: + return DEVICE_TYPE_DESKTOP; + default: + return -1; + } +} + +void System_SendMessage(const char *command, const char *parameter) { + // TODO UWP +} + +void LaunchBrowser(const char *url) { + // TODO UWP +} + +void Vibrate(int length_ms) { + // Ignore on PC +} + +void System_AskForPermission(SystemPermission permission) {} + +PermissionStatus System_GetPermissionStatus(SystemPermission permission) { + return PERMISSION_STATUS_GRANTED; +} + +bool System_InputBoxGetString(const char *title, const char *defaultValue, char *outValue, size_t outLength) { + return false; +} + +bool System_InputBoxGetWString(const wchar_t *title, const std::wstring &defaultvalue, std::wstring &outvalue) { + return false; +} diff --git a/UWP/PPSSPP_UWPMain.h b/UWP/PPSSPP_UWPMain.h new file mode 100644 index 0000000000..56eb4839fd --- /dev/null +++ b/UWP/PPSSPP_UWPMain.h @@ -0,0 +1,48 @@ +#pragma once + +#include "thin3d/thin3d.h" + +#include "Common/GraphicsContext.h" +#include "Common/DeviceResources.h" + +// Renders Direct2D and 3D content on the screen. +namespace UWP { + +class UWPGraphicsContext : public GraphicsContext { +public: + UWPGraphicsContext(std::shared_ptr resources); + + void Shutdown() override; + void SwapInterval(int interval) override; + void SwapBuffers() override {} + void Resize() override {} + Draw::DrawContext * GetDrawContext() override { + return ctx_; + } + +private: + Draw::DrawContext *ctx_; + std::shared_ptr resources_; +}; + +class PPSSPP_UWPMain : public DX::IDeviceNotify +{ +public: + PPSSPP_UWPMain(const std::shared_ptr& deviceResources); + ~PPSSPP_UWPMain(); + void CreateWindowSizeDependentResources(); + void Update(); + bool Render(); + + // IDeviceNotify + virtual void OnDeviceLost(); + virtual void OnDeviceRestored(); + +private: + // Cached pointer to device resources. + std::shared_ptr m_deviceResources; + + std::unique_ptr m_graphicsContext; +}; + +} \ No newline at end of file diff --git a/UWP/Package.appxmanifest b/UWP/Package.appxmanifest new file mode 100644 index 0000000000..359e07c205 --- /dev/null +++ b/UWP/Package.appxmanifest @@ -0,0 +1,34 @@ + + + + + + PPSSPP - PSP emulator + Henrik Rydgård + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UWP/SPIRVCross_UWP/SPIRVCross_UWP.vcxproj b/UWP/SPIRVCross_UWP/SPIRVCross_UWP.vcxproj new file mode 100644 index 0000000000..29cd464490 --- /dev/null +++ b/UWP/SPIRVCross_UWP/SPIRVCross_UWP.vcxproj @@ -0,0 +1,225 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + {2b2d16bd-1d37-46af-a3f8-552900951b26} + StaticLibrary + SPIRVCross_UWP + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + Use + false + true + pch.h + + + Console + false + false + + + + + Use + false + true + pch.h + + + Console + false + false + + + + + Use + false + true + pch.h + + + Console + false + false + + + + + Use + false + true + pch.h + + + Console + false + false + + + + + Use + false + true + pch.h + + + Console + false + false + + + + + Use + false + true + pch.h + + + Console + false + false + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/UWP/SPIRVCross_UWP/SPIRVCross_UWP.vcxproj.filters b/UWP/SPIRVCross_UWP/SPIRVCross_UWP.vcxproj.filters new file mode 100644 index 0000000000..cedc522ec9 --- /dev/null +++ b/UWP/SPIRVCross_UWP/SPIRVCross_UWP.vcxproj.filters @@ -0,0 +1,28 @@ + + + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UWP/SPIRVCross_UWP/pch.cpp b/UWP/SPIRVCross_UWP/pch.cpp new file mode 100644 index 0000000000..bcb5590be1 --- /dev/null +++ b/UWP/SPIRVCross_UWP/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/UWP/SPIRVCross_UWP/pch.h b/UWP/SPIRVCross_UWP/pch.h new file mode 100644 index 0000000000..529bbb17fe --- /dev/null +++ b/UWP/SPIRVCross_UWP/pch.h @@ -0,0 +1,9 @@ +#pragma once + +#include "targetver.h" + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#include diff --git a/UWP/SPIRVCross_UWP/targetver.h b/UWP/SPIRVCross_UWP/targetver.h new file mode 100644 index 0000000000..a66ecb00f1 --- /dev/null +++ b/UWP/SPIRVCross_UWP/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/UWP/UI_UWP/UI_UWP.vcxproj b/UWP/UI_UWP/UI_UWP.vcxproj new file mode 100644 index 0000000000..73278e7de4 --- /dev/null +++ b/UWP/UI_UWP/UI_UWP.vcxproj @@ -0,0 +1,283 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + {5fac15bd-7397-4512-99d5-66cdc03af5b7} + StaticLibrary + UI_UWP + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + Use + false + true + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + pch.h + + + Console + false + false + + + + + Use + false + true + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + pch.h + + + Console + false + false + + + + + Use + false + true + NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + pch.h + + + Console + false + false + + + + + Use + false + true + NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + pch.h + + + Console + false + false + + + + + Use + false + true + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + pch.h + + + Console + false + false + + + + + Use + false + true + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + ../..;../../ext/native;../../Common;../../ext/native/ext;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + pch.h + + + Console + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/UWP/UI_UWP/UI_UWP.vcxproj.filters b/UWP/UI_UWP/UI_UWP.vcxproj.filters new file mode 100644 index 0000000000..2dda8c4b86 --- /dev/null +++ b/UWP/UI_UWP/UI_UWP.vcxproj.filters @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UWP/UI_UWP/pch.cpp b/UWP/UI_UWP/pch.cpp new file mode 100644 index 0000000000..bcb5590be1 --- /dev/null +++ b/UWP/UI_UWP/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/UWP/UI_UWP/pch.h b/UWP/UI_UWP/pch.h new file mode 100644 index 0000000000..529bbb17fe --- /dev/null +++ b/UWP/UI_UWP/pch.h @@ -0,0 +1,9 @@ +#pragma once + +#include "targetver.h" + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#include diff --git a/UWP/UI_UWP/targetver.h b/UWP/UI_UWP/targetver.h new file mode 100644 index 0000000000..a66ecb00f1 --- /dev/null +++ b/UWP/UI_UWP/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/UWP/UWP.vcxproj b/UWP/UWP.vcxproj new file mode 100644 index 0000000000..75ba1eb380 --- /dev/null +++ b/UWP/UWP.vcxproj @@ -0,0 +1,272 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + Debug + ARM + + + Release + ARM + + + + {0d070030-beb5-4f48-99a0-b1777297a468} + DirectXApp + UWP + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + PPSSPP_UWP + + + + Application + true + v140 + + + Application + true + v140 + + + Application + true + v140 + + + Application + false + true + v140 + true + + + Application + false + true + v140 + true + + + Application + false + true + v140 + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + UWP_TemporaryKey.pfx + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; kernel32.lib;%(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm; $(VCInstallDir)\lib\arm + + + pch.h + $(IntDir)pch.pch + ..;../ext/native;../ext/snappy;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + _DEBUG;%(PreprocessorDefinitions) + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; kernel32.lib;%(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm; $(VCInstallDir)\lib\arm + + + pch.h + $(IntDir)pch.pch + ..;../ext/native;../ext/snappy;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + NDEBUG;%(PreprocessorDefinitions) + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; kernel32.lib;%(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store; $(VCInstallDir)\lib + + + pch.h + $(IntDir)pch.pch + ..;../ext/native;../ext/snappy;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + _DEBUG;%(PreprocessorDefinitions) + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; kernel32.lib;%(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store; $(VCInstallDir)\lib + + + pch.h + $(IntDir)pch.pch + ..;../ext/native;../ext/snappy;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + NDEBUG;%(PreprocessorDefinitions) + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; kernel32.lib;%(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\amd64; $(VCInstallDir)\lib\amd64 + + + pch.h + $(IntDir)pch.pch + ..;../ext/native;../ext/snappy;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + _DEBUG;%(PreprocessorDefinitions) + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; kernel32.lib;%(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\amd64; $(VCInstallDir)\lib\amd64 + + + pch.h + $(IntDir)pch.pch + ..;../ext/native;../ext/snappy;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + NDEBUG;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + + + + Create + Create + Create + Create + Create + Create + + + + + + Designer + + + + + + {acb316ca-3ecb-48e5-be0a-91e72d5b0f12} + + + {40b76674-02de-40ef-889b-fad1489685e7} + + + {d326891e-ece4-4b94-b5e7-8aa0a8e8ecbc} + + + {5d271429-c288-4534-98af-94475d940058} + + + {2f911c05-b341-4291-8bf5-09edecbdd5f5} + + + {935028af-b850-4ad7-a00e-7ba84fb97d05} + + + {2b2d16bd-1d37-46af-a3f8-552900951b26} + + + {5fac15bd-7397-4512-99d5-66cdc03af5b7} + + + {ddf90203-0aae-4f38-b589-2e9637658ce6} + + + + + + + + + \ No newline at end of file diff --git a/UWP/UWP.vcxproj.filters b/UWP/UWP.vcxproj.filters new file mode 100644 index 0000000000..fa3d9f07e8 --- /dev/null +++ b/UWP/UWP.vcxproj.filters @@ -0,0 +1,64 @@ + + + + + 0d070030-beb5-4f48-99a0-b1777297a468 + + + a5564d79-b131-4b27-9f5f-d80671731d94 + bmp;fbx;gif;jpg;jpeg;tga;tiff;tif;png + + + Common + + + Common + + + Common + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + + + + + + + + + + + + + + + + + Assets + + + + + + + + + \ No newline at end of file diff --git a/UWP/UWP_TemporaryKey.pfx b/UWP/UWP_TemporaryKey.pfx new file mode 100644 index 0000000000..cdcf39f7d0 Binary files /dev/null and b/UWP/UWP_TemporaryKey.pfx differ diff --git a/UWP/XAudioSoundStream.cpp b/UWP/XAudioSoundStream.cpp new file mode 100644 index 0000000000..f0670235d8 --- /dev/null +++ b/UWP/XAudioSoundStream.cpp @@ -0,0 +1,187 @@ +#include "pch.h" +#include + +#include "XAudioSoundStream.h" +#include + +#define BUFSIZE 0x80000U + +class XAudioBackend : public WindowsAudioBackend { +public: + XAudioBackend(); + ~XAudioBackend() override; + + bool Init(HWND window, StreamCallback callback, int sampleRate ) override; // If fails, can safely delete the object + void Update() override; + int GetSampleRate() override { return sampleRate_; } + +private: + inline int ModBufferSize( int x ) { return ( x + BUFSIZE ) % BUFSIZE; } + bool RunSound(); + bool CreateBuffer(); + bool WriteDataToBuffer( char* soundData, DWORD soundBytes ); + void PollLoop(); + + StreamCallback callback_; + + IXAudio2* xaudioDevice; + IXAudio2MasteringVoice* xaudioMaster; + IXAudio2SourceVoice* xaudioVoice; + + int sampleRate_; + + char realtimeBuffer_[ BUFSIZE ]; + unsigned cursor_; + + HANDLE thread_; + HANDLE exitEvent_; + + bool exit = false; +}; + +// TODO: Get rid of this +static XAudioBackend *g_dsound; + +inline int RoundDown128( int x ) { + return x & ( ~127 ); +} + +bool XAudioBackend::CreateBuffer() { + if FAILED( xaudioDevice->CreateMasteringVoice( &xaudioMaster, 2, sampleRate_, 0, 0, NULL ) ) + return false; + + WAVEFORMATEX waveFormat; + waveFormat.cbSize = sizeof( waveFormat ); + waveFormat.nAvgBytesPerSec = sampleRate_ * 4; + waveFormat.nBlockAlign = 4; + waveFormat.nChannels = 2; + waveFormat.nSamplesPerSec = sampleRate_; + waveFormat.wBitsPerSample = 16; + waveFormat.wFormatTag = WAVE_FORMAT_PCM; + + if FAILED( xaudioDevice->CreateSourceVoice( &xaudioVoice, &waveFormat, 0, XAUDIO2_DEFAULT_FREQ_RATIO, nullptr, nullptr, nullptr ) ) + return false; + + return true; +} + +bool XAudioBackend::RunSound() { + if FAILED( XAudio2Create( &xaudioDevice, 0, XAUDIO2_DEFAULT_PROCESSOR ) ) { + xaudioDevice = NULL; + return false; + } + + XAUDIO2_DEBUG_CONFIGURATION dbgCfg; + ZeroMemory( &dbgCfg, sizeof( dbgCfg ) ); + dbgCfg.TraceMask = XAUDIO2_LOG_WARNINGS | XAUDIO2_LOG_DETAIL; + //dbgCfg.BreakMask = XAUDIO2_LOG_ERRORS; + xaudioDevice->SetDebugConfiguration( &dbgCfg ); + + if ( !CreateBuffer() ) { + xaudioDevice->Release(); + xaudioDevice = NULL; + return false; + } + + cursor_ = 0; + + if FAILED( xaudioVoice->Start( 0, XAUDIO2_COMMIT_NOW ) ) { + xaudioDevice->Release(); + xaudioDevice = NULL; + return false; + } + + thread_ = (HANDLE)_beginthreadex( 0, 0, []( void* param ) + { + XAudioBackend *backend = (XAudioBackend *)param; + backend->PollLoop(); + return 0U; + }, ( void * )this, 0, 0 ); + SetThreadPriority( thread_, THREAD_PRIORITY_ABOVE_NORMAL ); + + return true; +} + +XAudioBackend::XAudioBackend() : xaudioDevice( nullptr ) { + exitEvent_ = CreateEvent( nullptr, true, true, L"" ); +} + +XAudioBackend::~XAudioBackend() { + if ( !xaudioDevice ) + return; + + if ( !xaudioVoice ) + return; + + exit = true; + WaitForSingleObject( exitEvent_, INFINITE ); + CloseHandle( exitEvent_ ); + + xaudioDevice->Release(); +} + +bool XAudioBackend::Init(HWND window, StreamCallback _callback, int sampleRate ) { + callback_ = _callback; + sampleRate_ = sampleRate; + return RunSound(); +} + +void XAudioBackend::Update() { +} + +bool XAudioBackend::WriteDataToBuffer( char* soundData, DWORD soundBytes ) { + XAUDIO2_BUFFER xaudioBuffer; + ZeroMemory( &xaudioBuffer, sizeof( xaudioBuffer ) ); + xaudioBuffer.pAudioData = (const BYTE*)soundData; + xaudioBuffer.AudioBytes = soundBytes; + + if FAILED( xaudioVoice->SubmitSourceBuffer( &xaudioBuffer, NULL ) ) + return false; + + return true; +} + +void XAudioBackend::PollLoop() +{ + ResetEvent( exitEvent_ ); + + while ( !exit ) + { + XAUDIO2_VOICE_STATE state; + xaudioVoice->GetState( &state ); + + if ( state.BuffersQueued < 1 ) + { + int a = 0; + a++; + } + + unsigned bytesRequired = ( sampleRate_ * 4 ) / 100; + + while ( bytesRequired ) + { + unsigned bytesLeftInBuffer = BUFSIZE - cursor_; + unsigned readCount = std::min( bytesRequired, bytesLeftInBuffer ); + + int numBytesRendered = 4 * ( *callback_ )( (short*)&realtimeBuffer_[ cursor_ ], readCount / 4, 16, sampleRate_, 2 ); + + WriteDataToBuffer( &realtimeBuffer_[ cursor_ ], numBytesRendered ); + cursor_ += numBytesRendered; + if ( cursor_ >= BUFSIZE ) + { + cursor_ = 0; + bytesLeftInBuffer = BUFSIZE; + } + + bytesRequired -= numBytesRendered; + } + + Sleep( 2 ); + } + + SetEvent( exitEvent_ ); +} + +WindowsAudioBackend *CreateAudioBackend( AudioBackendType type ) { + return new XAudioBackend(); +} \ No newline at end of file diff --git a/UWP/XAudioSoundStream.h b/UWP/XAudioSoundStream.h new file mode 100644 index 0000000000..35b26f0abf --- /dev/null +++ b/UWP/XAudioSoundStream.h @@ -0,0 +1,8 @@ +#pragma once + +#include "Common/CommonWindows.h" +#include "Core/Config.h" +#include "Windows/DSoundStream.h" + +// Factory +WindowsAudioBackend *CreateAudioBackend(AudioBackendType type); diff --git a/UWP/glslang_UWP/glslang_UWP.vcxproj b/UWP/glslang_UWP/glslang_UWP.vcxproj new file mode 100644 index 0000000000..46a7c81149 --- /dev/null +++ b/UWP/glslang_UWP/glslang_UWP.vcxproj @@ -0,0 +1,317 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + {d326891e-ece4-4b94-b5e7-8aa0a8e8ecbc} + StaticLibrary + glslang_UWP + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + Use + false + true + pch.h + _CRT_SECURE_NO_WARNINGS;NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + _CRT_SECURE_NO_WARNINGS;NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + _CRT_SECURE_NO_WARNINGS;NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + _CRT_SECURE_NO_WARNINGS;NOMINMAX;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + _CRT_SECURE_NO_WARNINGS;NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + Use + false + true + pch.h + _CRT_SECURE_NO_WARNINGS;NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/UWP/glslang_UWP/glslang_UWP.vcxproj.filters b/UWP/glslang_UWP/glslang_UWP.vcxproj.filters new file mode 100644 index 0000000000..70bbd5a997 --- /dev/null +++ b/UWP/glslang_UWP/glslang_UWP.vcxproj.filters @@ -0,0 +1,333 @@ + + + + + {bc1f9d62-48dc-424b-aae9-238ea7e9797a} + + + {da2d19d2-ae8e-4073-8fdc-edbb89f56938} + + + {b6bf83f2-1717-4cc4-88db-27b4a11d839b} + + + {352266d8-ae41-428f-bf18-c5a2398e40f1} + + + {682c51df-54f0-4589-af43-7fd4ee2b94f2} + + + {cdd1b028-654a-444d-aa4a-8833277a6cc9} + + + {d3ab5902-2265-45b3-98b2-125c3ca2b3d1} + + + {d8291bf6-2377-4155-8649-42d850d0f925} + + + {0e44acc8-78b5-4d5b-88e3-4a68435e3aec} + + + + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent\Preprocessor + + + glslang\MachineIndependent\Preprocessor + + + glslang\MachineIndependent\Preprocessor + + + glslang\MachineIndependent\Preprocessor + + + glslang\MachineIndependent\Preprocessor + + + glslang\MachineIndependent\Preprocessor + + + glslang\MachineIndependent\Preprocessor + + + glslang\GenericCodegen + + + glslang\GenericCodegen + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + hlsl + + + hlsl + + + hlsl + + + hlsl + + + hlsl + + + hlsl + + + hlsl + + + glslang\OSDependent + + + OGLCompilersDLL + + + + + + + glslang\Include + + + glslang\Include + + + glslang\Include + + + glslang\Include + + + glslang\Include + + + glslang\Include + + + glslang\Include + + + glslang\Include + + + glslang\Include + + + glslang\Include + + + glslang\Include + + + glslang\Include + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent + + + glslang\MachineIndependent\Preprocessor + + + glslang\MachineIndependent\Preprocessor + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + SPIRV + + + hlsl + + + hlsl + + + hlsl + + + hlsl + + + hlsl + + + hlsl + + + hlsl + + + hlsl + + + OGLCompilersDLL + + + \ No newline at end of file diff --git a/UWP/glslang_UWP/pch.cpp b/UWP/glslang_UWP/pch.cpp new file mode 100644 index 0000000000..bcb5590be1 --- /dev/null +++ b/UWP/glslang_UWP/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/UWP/glslang_UWP/pch.h b/UWP/glslang_UWP/pch.h new file mode 100644 index 0000000000..be721813fc --- /dev/null +++ b/UWP/glslang_UWP/pch.h @@ -0,0 +1,4 @@ +#pragma once + +#include "targetver.h" + diff --git a/UWP/glslang_UWP/targetver.h b/UWP/glslang_UWP/targetver.h new file mode 100644 index 0000000000..a66ecb00f1 --- /dev/null +++ b/UWP/glslang_UWP/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/UWP/libkirk_UWP/libkirk_UWP.vcxproj b/UWP/libkirk_UWP/libkirk_UWP.vcxproj new file mode 100644 index 0000000000..d486702652 --- /dev/null +++ b/UWP/libkirk_UWP/libkirk_UWP.vcxproj @@ -0,0 +1,226 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + {2f911c05-b341-4291-8bf5-09edecbdd5f5} + StaticLibrary + libkirk_UWP + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + NotUsing + false + true + + + _UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + NotUsing + false + true + + + _UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + NotUsing + false + true + + + _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + NotUsing + false + true + + + _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + NotUsing + false + true + + + _UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + NotUsing + false + true + + + _UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UWP/libkirk_UWP/libkirk_UWP.vcxproj.filters b/UWP/libkirk_UWP/libkirk_UWP.vcxproj.filters new file mode 100644 index 0000000000..9c2472aed0 --- /dev/null +++ b/UWP/libkirk_UWP/libkirk_UWP.vcxproj.filters @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UWP/libkirk_UWP/pch.cpp b/UWP/libkirk_UWP/pch.cpp new file mode 100644 index 0000000000..bcb5590be1 --- /dev/null +++ b/UWP/libkirk_UWP/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/UWP/libkirk_UWP/pch.h b/UWP/libkirk_UWP/pch.h new file mode 100644 index 0000000000..529bbb17fe --- /dev/null +++ b/UWP/libkirk_UWP/pch.h @@ -0,0 +1,9 @@ +#pragma once + +#include "targetver.h" + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#include diff --git a/UWP/libkirk_UWP/targetver.h b/UWP/libkirk_UWP/targetver.h new file mode 100644 index 0000000000..a66ecb00f1 --- /dev/null +++ b/UWP/libkirk_UWP/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/UWP/pch.cpp b/UWP/pch.cpp new file mode 100644 index 0000000000..bcb5590be1 --- /dev/null +++ b/UWP/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/UWP/pch.h b/UWP/pch.h new file mode 100644 index 0000000000..95b1c658cf --- /dev/null +++ b/UWP/pch.h @@ -0,0 +1,17 @@ +#pragma once + +#define NOMINMAX + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include \ No newline at end of file diff --git a/UWP/zlib_UWP/targetver.h b/UWP/zlib_UWP/targetver.h new file mode 100644 index 0000000000..a66ecb00f1 --- /dev/null +++ b/UWP/zlib_UWP/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/UWP/zlib_UWP/zlib_UWP.vcxproj b/UWP/zlib_UWP/zlib_UWP.vcxproj new file mode 100644 index 0000000000..5232ff3a34 --- /dev/null +++ b/UWP/zlib_UWP/zlib_UWP.vcxproj @@ -0,0 +1,238 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + {ddf90203-0aae-4f38-b589-2e9637658ce6} + StaticLibrary + zlib_UWP + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + StaticLibrary + false + true + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + NotUsing + false + true + _CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + NotUsing + false + true + _CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + NotUsing + false + true + _CRT_SECURE_NO_WARNINGS;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + NotUsing + false + true + _CRT_SECURE_NO_WARNINGS;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + + + Console + false + false + + + + + NotUsing + false + true + _CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + NotUsing + false + true + _CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + Console + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {acb316ca-3ecb-48e5-be0a-91e72d5b0f12} + + + {40b76674-02de-40ef-889b-fad1489685e7} + + + + + + \ No newline at end of file diff --git a/UWP/zlib_UWP/zlib_UWP.vcxproj.filters b/UWP/zlib_UWP/zlib_UWP.vcxproj.filters new file mode 100644 index 0000000000..42a70a4313 --- /dev/null +++ b/UWP/zlib_UWP/zlib_UWP.vcxproj.filters @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Windows/PPSSPP.sln b/Windows/PPSSPP.sln index ed6f8d09d4..59fc299d0e 100644 --- a/Windows/PPSSPP.sln +++ b/Windows/PPSSPP.sln @@ -77,174 +77,451 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glslang", "..\ext\glslang.v EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SPIRV-Cross", "..\ext\SPIRV-Cross.vcxproj", "{4328A62C-F1E9-47ED-B816-A1A81DAF4363}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPSSPP_UWP", "..\UWP\UWP.vcxproj", "{0D070030-BEB5-4F48-99A0-B1777297A468}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UWP", "UWP", "{13ED48E6-7BC8-474F-8A8D-195B57921353}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonUWP", "..\UWP\CommonUWP\CommonUWP.vcxproj", "{ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CoreUWP", "..\UWP\CoreUWP\CoreUWP.vcxproj", "{40B76674-02DE-40EF-889B-FAD1489685E7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GPU_UWP", "..\UWP\GPU_UWP\GPU_UWP.vcxproj", "{5D271429-C288-4534-98AF-94475D940058}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NativeUWP", "..\UWP\NativeUWP\NativeUWP.vcxproj", "{935028AF-B850-4AD7-A00E-7BA84FB97D05}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UI_UWP", "..\UWP\UI_UWP\UI_UWP.vcxproj", "{5FAC15BD-7397-4512-99D5-66CDC03AF5B7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libkirk_UWP", "..\UWP\libkirk_UWP\libkirk_UWP.vcxproj", "{2F911C05-B341-4291-8BF5-09EDECBDD5F5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glslang_UWP", "..\UWP\glslang_UWP\glslang_UWP.vcxproj", "{D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib_UWP", "..\UWP\zlib_UWP\zlib_UWP.vcxproj", "{DDF90203-0AAE-4F38-B589-2E9637658CE6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SPIRVCross_UWP", "..\UWP\SPIRVCross_UWP\SPIRVCross_UWP.vcxproj", "{2B2D16BD-1D37-46AF-A3F8-552900951B26}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Release|ARM = Release|ARM Release|Win32 = Release|Win32 Release|x64 = Release|x64 + Tests|ARM = Tests|ARM Tests|Win32 = Tests|Win32 Tests|x64 = Tests|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Debug|ARM.ActiveCfg = Debug|Win32 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Debug|Win32.ActiveCfg = Debug|Win32 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Debug|Win32.Build.0 = Debug|Win32 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Debug|x64.ActiveCfg = Debug|x64 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Debug|x64.Build.0 = Debug|x64 + {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Release|ARM.ActiveCfg = Release|Win32 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Release|Win32.ActiveCfg = Release|Win32 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Release|Win32.Build.0 = Release|Win32 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Release|x64.ActiveCfg = Release|x64 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Release|x64.Build.0 = Release|x64 + {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Tests|ARM.ActiveCfg = Release|x64 + {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Tests|ARM.Build.0 = Release|x64 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Tests|Win32.ActiveCfg = Release|Win32 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Tests|Win32.Build.0 = Release|Win32 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Tests|x64.ActiveCfg = Release|x64 {567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}.Tests|x64.Build.0 = Release|x64 + {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Debug|ARM.ActiveCfg = Debug|Win32 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Debug|Win32.ActiveCfg = Debug|Win32 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Debug|Win32.Build.0 = Debug|Win32 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Debug|x64.ActiveCfg = Debug|x64 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Debug|x64.Build.0 = Debug|x64 + {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Release|ARM.ActiveCfg = Release|Win32 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Release|Win32.ActiveCfg = Release|Win32 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Release|Win32.Build.0 = Release|Win32 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Release|x64.ActiveCfg = Release|x64 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Release|x64.Build.0 = Release|x64 + {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Tests|ARM.ActiveCfg = Release|x64 + {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Tests|ARM.Build.0 = Release|x64 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Tests|Win32.ActiveCfg = Release|Win32 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Tests|Win32.Build.0 = Release|Win32 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Tests|x64.ActiveCfg = Release|x64 {3FCDBAE2-5103-4350-9A8E-848CE9C73195}.Tests|x64.Build.0 = Release|x64 + {F761046E-6C38-4428-A5F1-38391A37BB34}.Debug|ARM.ActiveCfg = Debug|Win32 {F761046E-6C38-4428-A5F1-38391A37BB34}.Debug|Win32.ActiveCfg = Debug|Win32 {F761046E-6C38-4428-A5F1-38391A37BB34}.Debug|Win32.Build.0 = Debug|Win32 {F761046E-6C38-4428-A5F1-38391A37BB34}.Debug|x64.ActiveCfg = Debug|x64 {F761046E-6C38-4428-A5F1-38391A37BB34}.Debug|x64.Build.0 = Debug|x64 + {F761046E-6C38-4428-A5F1-38391A37BB34}.Release|ARM.ActiveCfg = Release|Win32 {F761046E-6C38-4428-A5F1-38391A37BB34}.Release|Win32.ActiveCfg = Release|Win32 {F761046E-6C38-4428-A5F1-38391A37BB34}.Release|Win32.Build.0 = Release|Win32 {F761046E-6C38-4428-A5F1-38391A37BB34}.Release|x64.ActiveCfg = Release|x64 {F761046E-6C38-4428-A5F1-38391A37BB34}.Release|x64.Build.0 = Release|x64 + {F761046E-6C38-4428-A5F1-38391A37BB34}.Tests|ARM.ActiveCfg = Release|x64 + {F761046E-6C38-4428-A5F1-38391A37BB34}.Tests|ARM.Build.0 = Release|x64 {F761046E-6C38-4428-A5F1-38391A37BB34}.Tests|Win32.ActiveCfg = Release|Win32 {F761046E-6C38-4428-A5F1-38391A37BB34}.Tests|Win32.Build.0 = Release|Win32 {F761046E-6C38-4428-A5F1-38391A37BB34}.Tests|x64.ActiveCfg = Release|x64 {F761046E-6C38-4428-A5F1-38391A37BB34}.Tests|x64.Build.0 = Release|x64 + {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Debug|ARM.ActiveCfg = Debug|Win32 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Debug|Win32.ActiveCfg = Debug|Win32 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Debug|Win32.Build.0 = Debug|Win32 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Debug|x64.ActiveCfg = Debug|x64 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Debug|x64.Build.0 = Debug|x64 + {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Release|ARM.ActiveCfg = Release|Win32 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Release|Win32.ActiveCfg = Release|Win32 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Release|Win32.Build.0 = Release|Win32 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Release|x64.ActiveCfg = Release|x64 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Release|x64.Build.0 = Release|x64 + {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Tests|ARM.ActiveCfg = Release|x64 + {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Tests|ARM.Build.0 = Release|x64 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Tests|Win32.ActiveCfg = Release|Win32 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Tests|Win32.Build.0 = Release|Win32 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Tests|x64.ActiveCfg = Release|x64 {457F45D2-556F-47BC-A31D-AFF0D15BEAED}.Tests|x64.Build.0 = Release|x64 + {533F1D30-D04D-47CC-AD71-20F658907E36}.Debug|ARM.ActiveCfg = Debug|Win32 {533F1D30-D04D-47CC-AD71-20F658907E36}.Debug|Win32.ActiveCfg = Debug|Win32 {533F1D30-D04D-47CC-AD71-20F658907E36}.Debug|Win32.Build.0 = Debug|Win32 {533F1D30-D04D-47CC-AD71-20F658907E36}.Debug|x64.ActiveCfg = Debug|x64 {533F1D30-D04D-47CC-AD71-20F658907E36}.Debug|x64.Build.0 = Debug|x64 + {533F1D30-D04D-47CC-AD71-20F658907E36}.Release|ARM.ActiveCfg = Release|Win32 {533F1D30-D04D-47CC-AD71-20F658907E36}.Release|Win32.ActiveCfg = Release|Win32 {533F1D30-D04D-47CC-AD71-20F658907E36}.Release|Win32.Build.0 = Release|Win32 {533F1D30-D04D-47CC-AD71-20F658907E36}.Release|x64.ActiveCfg = Release|x64 {533F1D30-D04D-47CC-AD71-20F658907E36}.Release|x64.Build.0 = Release|x64 + {533F1D30-D04D-47CC-AD71-20F658907E36}.Tests|ARM.ActiveCfg = Release|x64 + {533F1D30-D04D-47CC-AD71-20F658907E36}.Tests|ARM.Build.0 = Release|x64 {533F1D30-D04D-47CC-AD71-20F658907E36}.Tests|Win32.ActiveCfg = Release|Win32 {533F1D30-D04D-47CC-AD71-20F658907E36}.Tests|Win32.Build.0 = Release|Win32 {533F1D30-D04D-47CC-AD71-20F658907E36}.Tests|x64.ActiveCfg = Release|x64 {533F1D30-D04D-47CC-AD71-20F658907E36}.Tests|x64.Build.0 = Release|x64 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Debug|ARM.ActiveCfg = Debug|Win32 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Debug|Win32.ActiveCfg = Debug|Win32 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Debug|Win32.Build.0 = Debug|Win32 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Debug|x64.ActiveCfg = Debug|x64 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Debug|x64.Build.0 = Debug|x64 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Release|ARM.ActiveCfg = Release|Win32 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Release|Win32.ActiveCfg = Release|Win32 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Release|Win32.Build.0 = Release|Win32 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Release|x64.ActiveCfg = Release|x64 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Release|x64.Build.0 = Release|x64 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Tests|ARM.ActiveCfg = Release|x64 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Tests|ARM.Build.0 = Release|x64 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Tests|Win32.ActiveCfg = Release|Win32 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Tests|Win32.Build.0 = Release|Win32 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Tests|x64.ActiveCfg = Release|x64 {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Tests|x64.Build.0 = Release|x64 + {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Debug|ARM.ActiveCfg = Debug|Win32 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Debug|Win32.ActiveCfg = Debug|Win32 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Debug|Win32.Build.0 = Debug|Win32 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Debug|x64.ActiveCfg = Debug|x64 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Debug|x64.Build.0 = Debug|x64 + {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Release|ARM.ActiveCfg = Release|Win32 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Release|Win32.ActiveCfg = Release|Win32 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Release|Win32.Build.0 = Release|Win32 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Release|x64.ActiveCfg = Release|x64 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Release|x64.Build.0 = Release|x64 + {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Tests|ARM.ActiveCfg = Release|x64 + {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Tests|ARM.Build.0 = Release|x64 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Tests|Win32.ActiveCfg = Release|Win32 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Tests|Win32.Build.0 = Release|Win32 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Tests|x64.ActiveCfg = Release|x64 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Tests|x64.Build.0 = Release|x64 + {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Debug|ARM.ActiveCfg = Debug|Win32 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Debug|Win32.ActiveCfg = Debug|Win32 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Debug|Win32.Build.0 = Debug|Win32 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Debug|x64.ActiveCfg = Debug|x64 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Debug|x64.Build.0 = Debug|x64 + {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Release|ARM.ActiveCfg = Release|Win32 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Release|Win32.ActiveCfg = Release|Win32 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Release|Win32.Build.0 = Release|Win32 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Release|x64.ActiveCfg = Release|x64 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Release|x64.Build.0 = Release|x64 + {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Tests|ARM.ActiveCfg = Release|x64 + {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Tests|ARM.Build.0 = Release|x64 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Tests|Win32.ActiveCfg = Release|Win32 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Tests|Win32.Build.0 = Release|Win32 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Tests|x64.ActiveCfg = Release|x64 {3BAAE095-E0AB-4B0E-B5DF-CE39C8AE31DE}.Tests|x64.Build.0 = Release|x64 + {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Debug|ARM.ActiveCfg = Debug|Win32 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Debug|Win32.ActiveCfg = Debug|Win32 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Debug|Win32.Build.0 = Debug|Win32 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Debug|x64.ActiveCfg = Debug|x64 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Debug|x64.Build.0 = Debug|x64 + {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Release|ARM.ActiveCfg = Release|Win32 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Release|Win32.ActiveCfg = Release|Win32 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Release|Win32.Build.0 = Release|Win32 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Release|x64.ActiveCfg = Release|x64 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Release|x64.Build.0 = Release|x64 + {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Tests|ARM.ActiveCfg = Release|x64 + {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Tests|ARM.Build.0 = Release|x64 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Tests|Win32.ActiveCfg = Release|Win32 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Tests|Win32.Build.0 = Release|Win32 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Tests|x64.ActiveCfg = Release|x64 {37CBC214-7CE7-4655-B619-F7CEE16E3313}.Tests|x64.Build.0 = Release|x64 + {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Debug|ARM.ActiveCfg = Debug|Win32 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Debug|Win32.ActiveCfg = Debug|Win32 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Debug|Win32.Build.0 = Debug|Win32 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Debug|x64.ActiveCfg = Debug|x64 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Debug|x64.Build.0 = Debug|x64 + {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Release|ARM.ActiveCfg = Release|Win32 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Release|Win32.ActiveCfg = Release|Win32 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Release|Win32.Build.0 = Release|Win32 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Release|x64.ActiveCfg = Release|x64 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Release|x64.Build.0 = Release|x64 + {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Tests|ARM.ActiveCfg = Release|x64 + {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Tests|ARM.Build.0 = Release|x64 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Tests|Win32.ActiveCfg = Release|Win32 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Tests|Win32.Build.0 = Release|Win32 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Tests|x64.ActiveCfg = Release|x64 {004B8D11-2BE3-4BD9-AB40-2BE04CF2096F}.Tests|x64.Build.0 = Release|x64 + {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Debug|ARM.ActiveCfg = Debug|Win32 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Debug|Win32.ActiveCfg = Debug|Win32 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Debug|Win32.Build.0 = Debug|Win32 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Debug|x64.ActiveCfg = Debug|x64 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Debug|x64.Build.0 = Debug|x64 + {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Release|ARM.ActiveCfg = Release|Win32 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Release|Win32.ActiveCfg = Release|Win32 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Release|Win32.Build.0 = Release|Win32 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Release|x64.ActiveCfg = Release|x64 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Release|x64.Build.0 = Release|x64 + {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Tests|ARM.ActiveCfg = Tests|Win32 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Tests|Win32.ActiveCfg = Tests|Win32 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Tests|Win32.Build.0 = Tests|Win32 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Tests|x64.ActiveCfg = Tests|x64 {129E5E2B-39C1-4D84-96FE-DFD22DBB4A25}.Tests|x64.Build.0 = Tests|x64 + {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Debug|ARM.ActiveCfg = Debug|Win32 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Debug|Win32.ActiveCfg = Debug|Win32 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Debug|Win32.Build.0 = Debug|Win32 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Debug|x64.ActiveCfg = Debug|x64 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Debug|x64.Build.0 = Debug|x64 + {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Release|ARM.ActiveCfg = Release|Win32 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Release|Win32.ActiveCfg = Release|Win32 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Release|Win32.Build.0 = Release|Win32 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Release|x64.ActiveCfg = Release|x64 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Release|x64.Build.0 = Release|x64 + {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Tests|ARM.ActiveCfg = Release|x64 + {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Tests|ARM.Build.0 = Release|x64 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Tests|Win32.ActiveCfg = Release|Win32 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Tests|Win32.Build.0 = Release|Win32 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Tests|x64.ActiveCfg = Release|x64 {EDFA2E87-8AC1-4853-95D4-D7594FF81947}.Tests|x64.Build.0 = Release|x64 + {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Debug|ARM.ActiveCfg = Debug|Win32 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Debug|Win32.ActiveCfg = Debug|Win32 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Debug|Win32.Build.0 = Debug|Win32 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Debug|x64.ActiveCfg = Debug|x64 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Debug|x64.Build.0 = Debug|x64 + {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Release|ARM.ActiveCfg = Release|Win32 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Release|Win32.ActiveCfg = Release|Win32 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Release|Win32.Build.0 = Release|Win32 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Release|x64.ActiveCfg = Release|x64 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Release|x64.Build.0 = Release|x64 + {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Tests|ARM.ActiveCfg = Release|x64 + {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Tests|ARM.Build.0 = Release|x64 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Tests|Win32.ActiveCfg = Release|Win32 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Tests|Win32.Build.0 = Release|Win32 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Tests|x64.ActiveCfg = Release|x64 {4328A62C-F1E9-47ED-B816-A1A81DAF4363}.Tests|x64.Build.0 = Release|x64 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Debug|ARM.ActiveCfg = Debug|ARM + {0D070030-BEB5-4F48-99A0-B1777297A468}.Debug|ARM.Build.0 = Debug|ARM + {0D070030-BEB5-4F48-99A0-B1777297A468}.Debug|ARM.Deploy.0 = Debug|ARM + {0D070030-BEB5-4F48-99A0-B1777297A468}.Debug|Win32.ActiveCfg = Debug|Win32 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Debug|Win32.Build.0 = Debug|Win32 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Debug|Win32.Deploy.0 = Debug|Win32 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Debug|x64.ActiveCfg = Debug|x64 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Debug|x64.Build.0 = Debug|x64 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Debug|x64.Deploy.0 = Debug|x64 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Release|ARM.ActiveCfg = Release|ARM + {0D070030-BEB5-4F48-99A0-B1777297A468}.Release|ARM.Build.0 = Release|ARM + {0D070030-BEB5-4F48-99A0-B1777297A468}.Release|ARM.Deploy.0 = Release|ARM + {0D070030-BEB5-4F48-99A0-B1777297A468}.Release|Win32.ActiveCfg = Release|Win32 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Release|Win32.Build.0 = Release|Win32 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Release|Win32.Deploy.0 = Release|Win32 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Release|x64.ActiveCfg = Release|x64 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Release|x64.Build.0 = Release|x64 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Release|x64.Deploy.0 = Release|x64 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Tests|ARM.ActiveCfg = Release|ARM + {0D070030-BEB5-4F48-99A0-B1777297A468}.Tests|ARM.Build.0 = Release|ARM + {0D070030-BEB5-4F48-99A0-B1777297A468}.Tests|ARM.Deploy.0 = Release|ARM + {0D070030-BEB5-4F48-99A0-B1777297A468}.Tests|Win32.ActiveCfg = Release|Win32 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Tests|Win32.Build.0 = Release|Win32 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Tests|Win32.Deploy.0 = Release|Win32 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Tests|x64.ActiveCfg = Release|x64 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Tests|x64.Build.0 = Release|x64 + {0D070030-BEB5-4F48-99A0-B1777297A468}.Tests|x64.Deploy.0 = Release|x64 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Debug|ARM.ActiveCfg = Debug|ARM + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Debug|ARM.Build.0 = Debug|ARM + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Debug|Win32.ActiveCfg = Debug|Win32 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Debug|Win32.Build.0 = Debug|Win32 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Debug|x64.ActiveCfg = Debug|x64 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Debug|x64.Build.0 = Debug|x64 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Release|ARM.ActiveCfg = Release|ARM + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Release|ARM.Build.0 = Release|ARM + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Release|Win32.ActiveCfg = Release|Win32 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Release|Win32.Build.0 = Release|Win32 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Release|x64.ActiveCfg = Release|x64 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Release|x64.Build.0 = Release|x64 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Tests|ARM.ActiveCfg = Release|ARM + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Tests|ARM.Build.0 = Release|ARM + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Tests|Win32.ActiveCfg = Release|Win32 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Tests|Win32.Build.0 = Release|Win32 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Tests|x64.ActiveCfg = Release|x64 + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12}.Tests|x64.Build.0 = Release|x64 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Debug|ARM.ActiveCfg = Debug|ARM + {40B76674-02DE-40EF-889B-FAD1489685E7}.Debug|ARM.Build.0 = Debug|ARM + {40B76674-02DE-40EF-889B-FAD1489685E7}.Debug|Win32.ActiveCfg = Debug|Win32 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Debug|Win32.Build.0 = Debug|Win32 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Debug|x64.ActiveCfg = Debug|x64 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Debug|x64.Build.0 = Debug|x64 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Release|ARM.ActiveCfg = Release|ARM + {40B76674-02DE-40EF-889B-FAD1489685E7}.Release|ARM.Build.0 = Release|ARM + {40B76674-02DE-40EF-889B-FAD1489685E7}.Release|Win32.ActiveCfg = Release|Win32 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Release|Win32.Build.0 = Release|Win32 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Release|x64.ActiveCfg = Release|x64 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Release|x64.Build.0 = Release|x64 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Tests|ARM.ActiveCfg = Release|ARM + {40B76674-02DE-40EF-889B-FAD1489685E7}.Tests|ARM.Build.0 = Release|ARM + {40B76674-02DE-40EF-889B-FAD1489685E7}.Tests|Win32.ActiveCfg = Release|Win32 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Tests|Win32.Build.0 = Release|Win32 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Tests|x64.ActiveCfg = Release|x64 + {40B76674-02DE-40EF-889B-FAD1489685E7}.Tests|x64.Build.0 = Release|x64 + {5D271429-C288-4534-98AF-94475D940058}.Debug|ARM.ActiveCfg = Debug|ARM + {5D271429-C288-4534-98AF-94475D940058}.Debug|ARM.Build.0 = Debug|ARM + {5D271429-C288-4534-98AF-94475D940058}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D271429-C288-4534-98AF-94475D940058}.Debug|Win32.Build.0 = Debug|Win32 + {5D271429-C288-4534-98AF-94475D940058}.Debug|x64.ActiveCfg = Debug|x64 + {5D271429-C288-4534-98AF-94475D940058}.Debug|x64.Build.0 = Debug|x64 + {5D271429-C288-4534-98AF-94475D940058}.Release|ARM.ActiveCfg = Release|ARM + {5D271429-C288-4534-98AF-94475D940058}.Release|ARM.Build.0 = Release|ARM + {5D271429-C288-4534-98AF-94475D940058}.Release|Win32.ActiveCfg = Release|Win32 + {5D271429-C288-4534-98AF-94475D940058}.Release|Win32.Build.0 = Release|Win32 + {5D271429-C288-4534-98AF-94475D940058}.Release|x64.ActiveCfg = Release|x64 + {5D271429-C288-4534-98AF-94475D940058}.Release|x64.Build.0 = Release|x64 + {5D271429-C288-4534-98AF-94475D940058}.Tests|ARM.ActiveCfg = Release|ARM + {5D271429-C288-4534-98AF-94475D940058}.Tests|ARM.Build.0 = Release|ARM + {5D271429-C288-4534-98AF-94475D940058}.Tests|Win32.ActiveCfg = Release|Win32 + {5D271429-C288-4534-98AF-94475D940058}.Tests|Win32.Build.0 = Release|Win32 + {5D271429-C288-4534-98AF-94475D940058}.Tests|x64.ActiveCfg = Release|x64 + {5D271429-C288-4534-98AF-94475D940058}.Tests|x64.Build.0 = Release|x64 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Debug|ARM.ActiveCfg = Debug|ARM + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Debug|ARM.Build.0 = Debug|ARM + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Debug|Win32.ActiveCfg = Debug|Win32 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Debug|Win32.Build.0 = Debug|Win32 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Debug|x64.ActiveCfg = Debug|x64 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Debug|x64.Build.0 = Debug|x64 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Release|ARM.ActiveCfg = Release|ARM + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Release|ARM.Build.0 = Release|ARM + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Release|Win32.ActiveCfg = Release|Win32 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Release|Win32.Build.0 = Release|Win32 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Release|x64.ActiveCfg = Release|x64 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Release|x64.Build.0 = Release|x64 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Tests|ARM.ActiveCfg = Release|ARM + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Tests|ARM.Build.0 = Release|ARM + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Tests|Win32.ActiveCfg = Release|Win32 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Tests|Win32.Build.0 = Release|Win32 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Tests|x64.ActiveCfg = Release|x64 + {935028AF-B850-4AD7-A00E-7BA84FB97D05}.Tests|x64.Build.0 = Release|x64 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Debug|ARM.ActiveCfg = Debug|ARM + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Debug|ARM.Build.0 = Debug|ARM + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Debug|Win32.ActiveCfg = Debug|Win32 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Debug|Win32.Build.0 = Debug|Win32 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Debug|x64.ActiveCfg = Debug|x64 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Debug|x64.Build.0 = Debug|x64 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Release|ARM.ActiveCfg = Release|ARM + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Release|ARM.Build.0 = Release|ARM + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Release|Win32.ActiveCfg = Release|Win32 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Release|Win32.Build.0 = Release|Win32 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Release|x64.ActiveCfg = Release|x64 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Release|x64.Build.0 = Release|x64 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Tests|ARM.ActiveCfg = Release|ARM + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Tests|ARM.Build.0 = Release|ARM + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Tests|Win32.ActiveCfg = Release|Win32 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Tests|Win32.Build.0 = Release|Win32 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Tests|x64.ActiveCfg = Release|x64 + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7}.Tests|x64.Build.0 = Release|x64 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Debug|ARM.ActiveCfg = Debug|ARM + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Debug|ARM.Build.0 = Debug|ARM + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Debug|Win32.ActiveCfg = Debug|Win32 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Debug|Win32.Build.0 = Debug|Win32 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Debug|x64.ActiveCfg = Debug|x64 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Debug|x64.Build.0 = Debug|x64 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Release|ARM.ActiveCfg = Release|ARM + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Release|ARM.Build.0 = Release|ARM + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Release|Win32.ActiveCfg = Release|Win32 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Release|Win32.Build.0 = Release|Win32 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Release|x64.ActiveCfg = Release|x64 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Release|x64.Build.0 = Release|x64 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Tests|ARM.ActiveCfg = Release|ARM + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Tests|ARM.Build.0 = Release|ARM + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Tests|Win32.ActiveCfg = Release|Win32 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Tests|Win32.Build.0 = Release|Win32 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Tests|x64.ActiveCfg = Release|x64 + {2F911C05-B341-4291-8BF5-09EDECBDD5F5}.Tests|x64.Build.0 = Release|x64 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Debug|ARM.ActiveCfg = Debug|ARM + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Debug|ARM.Build.0 = Debug|ARM + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Debug|Win32.ActiveCfg = Debug|Win32 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Debug|Win32.Build.0 = Debug|Win32 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Debug|x64.ActiveCfg = Debug|x64 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Debug|x64.Build.0 = Debug|x64 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Release|ARM.ActiveCfg = Release|ARM + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Release|ARM.Build.0 = Release|ARM + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Release|Win32.ActiveCfg = Release|Win32 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Release|Win32.Build.0 = Release|Win32 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Release|x64.ActiveCfg = Release|x64 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Release|x64.Build.0 = Release|x64 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Tests|ARM.ActiveCfg = Release|ARM + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Tests|ARM.Build.0 = Release|ARM + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Tests|Win32.ActiveCfg = Release|Win32 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Tests|Win32.Build.0 = Release|Win32 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Tests|x64.ActiveCfg = Release|x64 + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC}.Tests|x64.Build.0 = Release|x64 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Debug|ARM.ActiveCfg = Debug|ARM + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Debug|ARM.Build.0 = Debug|ARM + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Debug|Win32.ActiveCfg = Debug|Win32 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Debug|Win32.Build.0 = Debug|Win32 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Debug|x64.ActiveCfg = Debug|x64 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Debug|x64.Build.0 = Debug|x64 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Release|ARM.ActiveCfg = Release|ARM + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Release|ARM.Build.0 = Release|ARM + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Release|Win32.ActiveCfg = Release|Win32 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Release|Win32.Build.0 = Release|Win32 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Release|x64.ActiveCfg = Release|x64 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Release|x64.Build.0 = Release|x64 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Tests|ARM.ActiveCfg = Release|ARM + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Tests|ARM.Build.0 = Release|ARM + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Tests|Win32.ActiveCfg = Release|Win32 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Tests|Win32.Build.0 = Release|Win32 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Tests|x64.ActiveCfg = Release|x64 + {DDF90203-0AAE-4F38-B589-2E9637658CE6}.Tests|x64.Build.0 = Release|x64 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Debug|ARM.ActiveCfg = Debug|ARM + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Debug|ARM.Build.0 = Debug|ARM + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Debug|Win32.ActiveCfg = Debug|Win32 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Debug|Win32.Build.0 = Debug|Win32 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Debug|x64.ActiveCfg = Debug|x64 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Debug|x64.Build.0 = Debug|x64 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Release|ARM.ActiveCfg = Release|ARM + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Release|ARM.Build.0 = Release|ARM + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Release|Win32.ActiveCfg = Release|Win32 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Release|Win32.Build.0 = Release|Win32 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Release|x64.ActiveCfg = Release|x64 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Release|x64.Build.0 = Release|x64 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Tests|ARM.ActiveCfg = Release|ARM + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Tests|ARM.Build.0 = Release|ARM + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Tests|Win32.ActiveCfg = Release|Win32 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Tests|Win32.Build.0 = Release|Win32 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Tests|x64.ActiveCfg = Release|x64 + {2B2D16BD-1D37-46AF-A3F8-552900951B26}.Tests|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {0D070030-BEB5-4F48-99A0-B1777297A468} = {13ED48E6-7BC8-474F-8A8D-195B57921353} + {ACB316CA-3ECB-48E5-BE0A-91E72D5B0F12} = {13ED48E6-7BC8-474F-8A8D-195B57921353} + {40B76674-02DE-40EF-889B-FAD1489685E7} = {13ED48E6-7BC8-474F-8A8D-195B57921353} + {5D271429-C288-4534-98AF-94475D940058} = {13ED48E6-7BC8-474F-8A8D-195B57921353} + {935028AF-B850-4AD7-A00E-7BA84FB97D05} = {13ED48E6-7BC8-474F-8A8D-195B57921353} + {5FAC15BD-7397-4512-99D5-66CDC03AF5B7} = {13ED48E6-7BC8-474F-8A8D-195B57921353} + {2F911C05-B341-4291-8BF5-09EDECBDD5F5} = {13ED48E6-7BC8-474F-8A8D-195B57921353} + {D326891E-ECE4-4B94-B5E7-8AA0A8E8ECBC} = {13ED48E6-7BC8-474F-8A8D-195B57921353} + {DDF90203-0AAE-4F38-B589-2E9637658CE6} = {13ED48E6-7BC8-474F-8A8D-195B57921353} + {2B2D16BD-1D37-46AF-A3F8-552900951B26} = {13ED48E6-7BC8-474F-8A8D-195B57921353} + EndGlobalSection EndGlobal