From 3c5257055276b66a894b20a019536778d2a4b9f9 Mon Sep 17 00:00:00 2001 From: Henrik Rydgard Date: Fri, 24 Feb 2017 20:50:27 +0100 Subject: [PATCH] Add UWP projects and rough UWP entry point application based on the sample Delete sample load, hook things up. It now builds but doesn't run Reformat, add an event --- UI/EmuScreen.cpp | 3 + UWP/App.cpp | 178 +++ UWP/App.h | 53 + UWP/Assets/LockScreenLogo.scale-200.png | Bin 0 -> 1430 bytes UWP/Assets/SplashScreen.scale-200.png | Bin 0 -> 7700 bytes UWP/Assets/Square150x150Logo.scale-200.png | Bin 0 -> 2937 bytes UWP/Assets/Square44x44Logo.scale-200.png | Bin 0 -> 1647 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 1255 bytes UWP/Assets/StoreLogo.png | Bin 0 -> 1451 bytes UWP/Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 3204 bytes UWP/Common/DeviceResources.cpp | 703 ++++++++++ UWP/Common/DeviceResources.h | 102 ++ UWP/Common/DirectXHelper.h | 63 + UWP/CommonUWP/CommonUWP.cpp | 2 + UWP/CommonUWP/CommonUWP.h | 1 + UWP/CommonUWP/CommonUWP.vcxproj | 299 +++++ UWP/CommonUWP/CommonUWP.vcxproj.filters | 104 ++ UWP/CommonUWP/pch.cpp | 1 + UWP/CommonUWP/pch.h | 9 + UWP/CommonUWP/targetver.h | 8 + UWP/CoreUWP/CoreUWP.vcxproj | 670 ++++++++++ UWP/CoreUWP/CoreUWP.vcxproj.filters | 1150 +++++++++++++++++ UWP/CoreUWP/pch.cpp | 1 + UWP/CoreUWP/pch.h | 9 + UWP/CoreUWP/targetver.h | 8 + UWP/GPU_UWP/GPU_UWP.vcxproj | 335 +++++ UWP/GPU_UWP/GPU_UWP.vcxproj.filters | 291 +++++ UWP/GPU_UWP/pch.cpp | 1 + UWP/GPU_UWP/pch.h | 9 + UWP/GPU_UWP/targetver.h | 8 + UWP/NativeUWP/NativeUWP.vcxproj | 994 ++++++++++++++ UWP/NativeUWP/NativeUWP.vcxproj.filters | 741 +++++++++++ UWP/NativeUWP/pch.cpp | 1 + UWP/NativeUWP/pch.h | 9 + UWP/NativeUWP/targetver.h | 8 + UWP/PPSSPP_UWPMain.cpp | 225 ++++ UWP/PPSSPP_UWPMain.h | 48 + UWP/Package.appxmanifest | 34 + UWP/SPIRVCross_UWP/SPIRVCross_UWP.vcxproj | 225 ++++ .../SPIRVCross_UWP.vcxproj.filters | 28 + UWP/SPIRVCross_UWP/pch.cpp | 1 + UWP/SPIRVCross_UWP/pch.h | 9 + UWP/SPIRVCross_UWP/targetver.h | 8 + UWP/UI_UWP/UI_UWP.vcxproj | 283 ++++ UWP/UI_UWP/UI_UWP.vcxproj.filters | 68 + UWP/UI_UWP/pch.cpp | 1 + UWP/UI_UWP/pch.h | 9 + UWP/UI_UWP/targetver.h | 8 + UWP/UWP.vcxproj | 272 ++++ UWP/UWP.vcxproj.filters | 64 + UWP/UWP_TemporaryKey.pfx | Bin 0 -> 2452 bytes UWP/XAudioSoundStream.cpp | 187 +++ UWP/XAudioSoundStream.h | 8 + UWP/glslang_UWP/glslang_UWP.vcxproj | 317 +++++ UWP/glslang_UWP/glslang_UWP.vcxproj.filters | 333 +++++ UWP/glslang_UWP/pch.cpp | 1 + UWP/glslang_UWP/pch.h | 4 + UWP/glslang_UWP/targetver.h | 8 + UWP/libkirk_UWP/libkirk_UWP.vcxproj | 226 ++++ UWP/libkirk_UWP/libkirk_UWP.vcxproj.filters | 18 + UWP/libkirk_UWP/pch.cpp | 1 + UWP/libkirk_UWP/pch.h | 9 + UWP/libkirk_UWP/targetver.h | 8 + UWP/pch.cpp | 1 + UWP/pch.h | 17 + UWP/zlib_UWP/targetver.h | 8 + UWP/zlib_UWP/zlib_UWP.vcxproj | 238 ++++ UWP/zlib_UWP/zlib_UWP.vcxproj.filters | 34 + Windows/PPSSPP.sln | 277 ++++ 69 files changed, 8739 insertions(+) create mode 100644 UWP/App.cpp create mode 100644 UWP/App.h create mode 100644 UWP/Assets/LockScreenLogo.scale-200.png create mode 100644 UWP/Assets/SplashScreen.scale-200.png create mode 100644 UWP/Assets/Square150x150Logo.scale-200.png create mode 100644 UWP/Assets/Square44x44Logo.scale-200.png create mode 100644 UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 UWP/Assets/StoreLogo.png create mode 100644 UWP/Assets/Wide310x150Logo.scale-200.png create mode 100644 UWP/Common/DeviceResources.cpp create mode 100644 UWP/Common/DeviceResources.h create mode 100644 UWP/Common/DirectXHelper.h create mode 100644 UWP/CommonUWP/CommonUWP.cpp create mode 100644 UWP/CommonUWP/CommonUWP.h create mode 100644 UWP/CommonUWP/CommonUWP.vcxproj create mode 100644 UWP/CommonUWP/CommonUWP.vcxproj.filters create mode 100644 UWP/CommonUWP/pch.cpp create mode 100644 UWP/CommonUWP/pch.h create mode 100644 UWP/CommonUWP/targetver.h create mode 100644 UWP/CoreUWP/CoreUWP.vcxproj create mode 100644 UWP/CoreUWP/CoreUWP.vcxproj.filters create mode 100644 UWP/CoreUWP/pch.cpp create mode 100644 UWP/CoreUWP/pch.h create mode 100644 UWP/CoreUWP/targetver.h create mode 100644 UWP/GPU_UWP/GPU_UWP.vcxproj create mode 100644 UWP/GPU_UWP/GPU_UWP.vcxproj.filters create mode 100644 UWP/GPU_UWP/pch.cpp create mode 100644 UWP/GPU_UWP/pch.h create mode 100644 UWP/GPU_UWP/targetver.h create mode 100644 UWP/NativeUWP/NativeUWP.vcxproj create mode 100644 UWP/NativeUWP/NativeUWP.vcxproj.filters create mode 100644 UWP/NativeUWP/pch.cpp create mode 100644 UWP/NativeUWP/pch.h create mode 100644 UWP/NativeUWP/targetver.h create mode 100644 UWP/PPSSPP_UWPMain.cpp create mode 100644 UWP/PPSSPP_UWPMain.h create mode 100644 UWP/Package.appxmanifest create mode 100644 UWP/SPIRVCross_UWP/SPIRVCross_UWP.vcxproj create mode 100644 UWP/SPIRVCross_UWP/SPIRVCross_UWP.vcxproj.filters create mode 100644 UWP/SPIRVCross_UWP/pch.cpp create mode 100644 UWP/SPIRVCross_UWP/pch.h create mode 100644 UWP/SPIRVCross_UWP/targetver.h create mode 100644 UWP/UI_UWP/UI_UWP.vcxproj create mode 100644 UWP/UI_UWP/UI_UWP.vcxproj.filters create mode 100644 UWP/UI_UWP/pch.cpp create mode 100644 UWP/UI_UWP/pch.h create mode 100644 UWP/UI_UWP/targetver.h create mode 100644 UWP/UWP.vcxproj create mode 100644 UWP/UWP.vcxproj.filters create mode 100644 UWP/UWP_TemporaryKey.pfx create mode 100644 UWP/XAudioSoundStream.cpp create mode 100644 UWP/XAudioSoundStream.h create mode 100644 UWP/glslang_UWP/glslang_UWP.vcxproj create mode 100644 UWP/glslang_UWP/glslang_UWP.vcxproj.filters create mode 100644 UWP/glslang_UWP/pch.cpp create mode 100644 UWP/glslang_UWP/pch.h create mode 100644 UWP/glslang_UWP/targetver.h create mode 100644 UWP/libkirk_UWP/libkirk_UWP.vcxproj create mode 100644 UWP/libkirk_UWP/libkirk_UWP.vcxproj.filters create mode 100644 UWP/libkirk_UWP/pch.cpp create mode 100644 UWP/libkirk_UWP/pch.h create mode 100644 UWP/libkirk_UWP/targetver.h create mode 100644 UWP/pch.cpp create mode 100644 UWP/pch.h create mode 100644 UWP/zlib_UWP/targetver.h create mode 100644 UWP/zlib_UWP/zlib_UWP.vcxproj create mode 100644 UWP/zlib_UWP/zlib_UWP.vcxproj.filters diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index 6ba78a0b4..faa67c5c9 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 000000000..d6cdeab60 --- /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 000000000..9c8a311be --- /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 0000000000000000000000000000000000000000..735f57adb5dfc01886d137b4e493d7e97cf13af3 GIT binary patch literal 1430 zcmaJ>TTC2P7~aKltDttVHYH6u8Io4i*}3fO&d$gd*bA_<3j~&e7%8(eXJLfhS!M@! zKrliY>>6yT4+Kr95$!DoD(Qn-5TP|{V_KS`k~E6(LGS@#`v$hQo&^^BKsw3HIsZBT z_y6C2n`lK@apunKojRQ^(_P}Mgewt$(^BBKCTZ;*xa?J3wQ7~@S0lUvbcLeq1Bg4o zH-bvQi|wt~L7q$~a-gDFP!{&TQfc3fX*6=uHv* zT&1&U(-)L%Xp^djI2?~eBF2cxC@YOP$+9d?P&h?lPy-9M2UT9fg5jKm1t$m#iWE{M zIf%q9@;fyT?0UP>tcw-bLkz;s2LlKl2qeP0w zECS7Ate+Awk|KQ+DOk;fl}Xsy4o^CY=pwq%QAAKKl628_yNPsK>?A>%D8fQG6IgdJ ztnxttBz#NI_a@fk7SU`WtrpsfZsNs9^0(2a z@C3#YO3>k~w7?2hipBf{#b6`}Xw1hlG$yi?;1dDs7k~xDAw@jiI*+tc;t2Lflg&bM)0!Y;0_@=w%`LW^8DsYpS#-bLOklX9r?Ei}TScw|4DbpW%+7 zFgAI)f51s}{y-eWb|vrU-Ya!GuYKP)J7z#*V_k^Xo>4!1Yqj*m)x&0L^tg3GJbVAJ zJ-Pl$R=NAabouV=^z_t;^K*0AvFs!vYU>_<|I^#c?>>CR<(T?=%{;U=aI*SbZADLH z&(f2wz_Y0??Tf|g;?|1Znw6}6U43Q#qNRwv1vp9uFn1)V#*4p&%$mP9x&15^OaBiDS(XppT|z^>;B{PLVEbS3IFYV yGvCsSX*m literal 0 HcmV?d00001 diff --git a/UWP/Assets/SplashScreen.scale-200.png b/UWP/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..023e7f1feda78d5100569825acedfd213a0d84e9 GIT binary patch literal 7700 zcmeHLYj~4Yw%(;oxoEH#Kxq-eR|+VkP17b#Vk;?4QwkI+A{L04G+#<<(x#Un1#+h5>eArRq zTw$)ZvTWW_Y?bDho0nPVTh08+s`sp!j74rJTTtXIDww0SILedFv?sZ?yb@@}GN;#8 znk_b~Q(A0YR#uV4ef!osoV1M3;vQ8N$O|fStfgf$S5;ddUNv`tWtGjM;koG#N;7M< zP*84lnx(bn_KF&9Z5Ai$)#Cs3a|$OFw>WKCT$of*L7_CqQEinflT|W{JT+aKp-E0v zsxmYg)1(T>DROm+LN1eQw8}KCTp=C!$H7`PU!t9_Hw@TsTI2`udRZv*!a5`#A9hK6Y95L(CDUX&_@QxKV z_feX{UhA#ZWlvgpL$#w^D#lq`_A4AzDqd|Zv6y9PX&DNcN|l}_D^{q@GG&H^Pg583 z8FI6N8^H7b5WjGp;urW)d7F+_lcp%KsLX0viCmE(OHH+=%ZfD_=`voUuoUxFO^L;- z;!;2{g-YiiO6m4bs89OuF9!p{FGtH-f%8<2gY!h9s)4ciN%{Kh1+`}{^}M~+TDH9N z^Z5PlgVXMC&2&k*Hw^Lb9gny#ro$MOIxIt{+r)EA10$VR3 zanN8D{TUkl+v0CQ_>ZoHP<M-x#8@8ZiT#$Kh`(uRaX1g$Bg|qy$<#7 zSSAi{Nb8Y=lvNVeio+UGLCAtoLBfL`iOv`)yoJMDJBN>4IH@(l7YRF;61@>qq1iM9 zr@b#OC~SAxSle?5Pp8Z78{VO0YFr1x7kZU64Z23eLf2T2#6J_t;-E}DkB?NufZ0Ug zi?J&byXeaB-uTNVhuiM!UVQw}bZrJ3GtAETYp->!{q#zfN7D3AS9@Q7*V^85jGx#R z(QxYV(wW#F0XF9^^s>>H8pPlVJ>)3Oz z&_X8Sf@~?cH_O*cgi$U#`v`RRfv#y3m(ZpKk^5uLup+lVs$~}FZU$r_+}#hl%?g5m z-u-}-666ssp-xWQak~>PPy$mRc|~?pVSs1_@mBEXpPVfLF6(Ktf1S* zPPh@QZ=tFMs?LM2(5P3L2;l_6XX6s&cYsP1ip#eg0`ZEP0HGYh{UmS@o`MihLLvkU zgyAG0G`b1|qjxxh1(ODKFE%AP}Dq=3vK$P7TXP4GrM1kQ72!GUVMDl`rDC&2;TA}*nF z8$nQD&6ys_nc1*E7$*1S@R8$ymy(sQV}imGSedB@{!QR5P&N_H=-^o!?LsWs+2|mH z-e=)T^SvI)=_JIm7}j4;@*Z17=(#}m=~YF~z~CLI+vdAGlJDcdF$TM?CVI1%LhUrN zaa6DJ=Yh$)$k&Oz{-~8yw^GM^8prYxSxo zvI4k#ibryMa%%*8oI-5m61Koa_A_xg=(fwp0aBX{;X4Q;NXUhtaoJDo1>TqhWtn=_ zd5~chq#&6~c%8JZK#t_&J(9EVUU&upYeIovLt1>vaHe}UUq>#RGQj!EN#5+0@T`(@ z^g~>*c`VGRiSt;!$_4+0hk^I!@O3``5=sZ8IwlxWW7km1B&_t&E*u0_9UBa#VqwY* zz>nxv?FAsVnRaD(Bui=6i==BFUw0k4n$>`umU`F2l?7CYTD^)c2X+d9X&ddS9|gj? zM?knGkGCX&W8offw8aLC2$D{PjC3nVZwd4k?eZH8*mZ)U@3Qk8RDFOz_#WUA#vnzy zyP>KrCfKwSXea7}jgJjBc}PGY+4#6%lbZyjhy`5sZd_Vy6Wz;ixa?czkN}J9It1K6 zY!eu>|AwF^fwZlLAYyQI*lM@^>O>Iu6Vf6i>Q$?v!SeUS<{>UYMwz$*%Aq?w^`j{h z!$GZbhu=^D{&ET8;))LL%ZBDZkQqRd2;u~!d9bHGmLRhLDctNgYyjsuvoSZ#iVdoB z2!f--UUA#U;<{je#?cYt^{PIyKa%hW>}uepWMyAI{{Zo7?2>?$c9;whJae%oN|I-kpTQSx_C$Z&;f zi2i)qmEn=y4U0uvk)$m;zKfjPK@oc?I`}1Jzl$Q~aoKBd3kt7L#7gyt|A_qgz6ai< z=X%D1i!d2h?rHR^R8SUj&G||dkC?DT>{o#Yau<@uqVT{Xef&XG}5*E4aPk{}~ zplx&XhaV)&1EfI3Em;Bw#O5SV^c;{twb-1Rw)+=0!e_BLbd7tYmXCH0wrlOSS+~`7He8Iqx0{CN+DVit9;*6L~JAN zD&cyT)2?h}xnYmL?^)<7YyzZ3$FHU^Eg;DLqAV{#wv#Wj7S`Jdl1pX&{3(uZ?!uh} zDc$ZTNV*7le_W6}Hju~GMTxZQ1aWCeUc%!jv3MHAzt>Y-nQK%zfT*3ebDQA5b?iGn; zBjv3B+GhLTexd_(CzZDP4|#n5^~scvB6#Pk%Ho!kQ>yYw((Dv{6=$g3jT1!u6gORW zx5#`7Wy-ZHRa~IxGHdrp(bm%lf>2%J660nj$fCqN(epv@y!l9s7@k6EvxS{AMP>WY zX4$@F8^kayphIx-RGO$+LYl9YdoI5d|4#q9##`_F5Xnx`&GPzp2fB{-{P@ATw=X@~ z_|&^UMWAKD;jjBKTK(~o?cUFRK8EX=6>cXpfzg4ZpMB>*w_^8GSiT-Jp|xBOnzM+j z*09-@-~qJ(eqWq5@R4i^u4^{McCP(!3}C|v_WsTR*bIUxN(Nx`u##3B4{sE`Z`v8w zAwIG`?1~PkID~W{uDzmqH98Pew_1(;x2%8r^vY{)_&J2K)cN{W+h5+g)ZcjP&Ci#O zgy|8K@4kyMfwilHd&6TDlhb%++Pk!>9HRld6HT7gwyZGrxS$}CsD6`>6!!2K1@Mjf z(P0WYB7V_OFZyeWrbOFb>O54BNXf~K&?}3=^v;v_wT{DKr?jN^DtN&DXwX%u?s*c6`%8>WFz z7}YW^tp0bp^NriE)AB6M2l<7rn7fzePtR*omOevpfm9n?}2V*+0iW;S)C zhg`NAjL?D=W#k*$aR{>pGf~lD-rVtD;5jW1_*Jn1j1=es@Kcx4ySM_bwcQCT=d+DV z>Sz~L=Hj@(X%31nK$mWI@7d>}ORB`K(p=+`UD)+99YUGQc7y^bHZ1F(8|tL0 zdK*DT0kSXG_{BKTpP2*2PecdKV9;dq$^ZZDP;Nyq1kp-&GI5eAyZsK!e3V zK@rPy*{(`KIfo+lc878mDKk^V#`VT05}64kBtk%DgwLrOvLMj5-;*GNKv6c6pzMuL z6EP%ob|_0IW}lLRXCP2!9wWhEw3LA7iF#1O1mIZ@Z=6&bz41F;@S_GvYAG-#CW3z{ zP3+6vHhvP&A3$##Vo9$dT^#MoGg^|MDm=Bt1d2RRwSZ<;ZHICpLBv5Xs!D?BH^(9_ z7`H=N&^v|Z-%mP}wNzG{aiFCsRgwzwq!N6obW9+7(R; z(SZ=23`|`>qil!LMGG{_Heq!BD>(Y-zV9wD)}hz25JA37YR%39;kI4y9pgtcUass6 zP24}ZY$vvYeI`zy&)A_X#nY3017ap*0&jx|mVwyGhg3;!keU53a}Uhm3BZI$N$6Se zLWlAmy1S0xKJm4G_U@sN_Tm=`$xWJSEwKU98rZ&)1R^*$$1vA3oG#&*%SMxY_~oGP zP&PFJatFLM-Ps%84IV-+Ow)T{C7cqUAvauy4C z(FRz&?6$Rypj{xO!`y=*J5o4@U8Q-(y5(*=YoKeZ+-1YdljXxkA#B)zo=FeQH#?Le zycNUmEEHWO9a=X^pb#&cOq7-`7UA87#|S22)<7RUtZo|(zibX=w;K3qur9vy#`MNV z6UUcf9ZwEnKCCp+OoBnF@OdbvH)ANXO0o~Pi9l8=x3))}L<#vO0-~O4!~--Ket?d} zJaqsj<@CD1%S2cTW%rOP{Vto%0sGW~1RMa_j^)5nil0Yw- z0EE#bP+l4#P^%PQ+N*oxu1Zq05xZ!bXfYTg>9c{(Iw*lnjR^>kz%lAN^zFce7rppy zY8zA~3GD=A6d*hze&l4D_wA~+O!56)BZTe_rEu}Ezi<4!kG|W#amBZ5{&XS2@6R~H z{9o^y*BkH4$~yX9U&@CgbOzX1bn9xqF|zh$Dh0Y5y*E0e90*$!ObrHY3Ok0`2=O~r zCuke6KrP9KOf?V(YDsM<6pX2nVoN%M$LT^q#FmtaF?1^27F*IcNX~XRB(|hCFvdcc zc)$=S-)acdk$g4?_>jRqxpI6M3vHZk?0c^3=byamYDNf;uB{3NlKW5IhnOS3DNkMV z?tK8?kJ}pmvp%&&eTVOVjHP`q34hN1@!aK}H(K!vI`~gf|Gv+FNEQD5Yd<~yX7k_l h&G-K)@HZb3BABY{)U1?^%I#E6`MGoTtustd{~yM6srvu` literal 0 HcmV?d00001 diff --git a/UWP/Assets/Square150x150Logo.scale-200.png b/UWP/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..af49fec1a5484db1d52a7f9b5ec90a27c7030186 GIT binary patch literal 2937 zcma)84OCO-8BSud5)jwMLRVKgX(S?$n?Ld|vrsm<$CF7)&zTbyy1FE5bU`Q17MRv`9ue$;R(@8kR;#vJ*IM0>cJIAOte!d7oRgdH zd%ySjdB6L9=gX^A6)VzH7p2l@v~3zJAMw|DFy#^)F@@F*`mqUn=Il>l)8_+ab;nOW{%+iPx z+s{Eu|&pIs)Z7{La9~?xKfyl z#43?gjEL15d4WbOZo#SiP%>DB^+BcnJ=7dHEe;r#G=tuw|ka z%q@}##Uh7;tc%L_64m(kHtw74ty%BJMb)_1)#S0j`)F8_1jF7vScpsnH=0V19bO8y zR`0SjIdCUo&=>JwMQF8KHA<{ODHTiQh}0^@5QRmCA?gOH6_H3K^-_sNB^RrdNuK-R zOO*vOrKCVvDwgUck`kF(E7j{I#iiN;b*ZdCt4m@HPA`EuEqGGf4%!K<;(=I=&Vyrw z%TwcWtxa}8mCZ%Cyf&ActJ6_$ox5z6-D!0-dvnRx6t7y3d+h6QYpKWO;8OdnvERo7 zuEf>ih5`wqY)~o@OeVt-wM?Q!>QzdGRj!bz6fzYrfw$hZfAKzr2-M+D+R>}~oT574c;_3zquHcElqKIsryILt3g8n3jcMb+j?i?-L3FpZJ z2WRVBRdDPc+G5aaYg#5hpE+6nQ|(VSoxT3|biF;BUq#==-27Xi=gihDPYP$7?=9cP zYKE$jeQ|3~_L0VG-(F~2ZPyD0=k{J4Q~h(t__{-mz_w8{JDY9{`1ouzz!Vr5!ECdE z6U~O1k8c}24V7~zzXWTV-Pe4)y}wQJS&q%H5`Fo_f_JvIU489aCX$;P`u#!I-=^4ijC2{&9!O&h>mi?9oYD=GC#%)6{GzN6nQYw+Fal50!#x^asjBBR50i`+mho*ttoqV)ubM2KD9S~k7+FR4>{29?6 z{!l6kDdyTN0YJ9LgkPWeXm|gyi@zM3?0@{&pXT12w|78&W-q!RRF)&iLCEZVH<|fR zN0fr2^t8H(>L?>K#>^+jWROLral(Qy-xoBq1U7A&DV||wClb)Otd9?(gZ|8znMF}D zf<1haWz^s0qgecz;RFGt0C-B4g`jNGHsFU+;{<%t65v^sjk^h$lmWn#B0#_)9ij&d z-~lc`A)YYExi^7sBuPM^Y|wA2g*5?`K?#7tzELQYNxGo$UB$4J8RJp1k(8Jj+~hMT zlN~>M@KTTh^--8y3PK_NZ@AC!{PT=CziBzGd+wTJ^@icH!Bd}%)g8V)%K?|c&WTUk zy}qv1C%(fjRoZ4ozC3{O%@5?)XzH35zHns$pgU*Q?fj4v?fp1Qbm+j;3l;9jam9Da zXVcKjPlQ73x78QPu|Ffm6x?`~e3oD=gl=4kYK?={kD5j~QCXU)`HSdduNNENzA*2$ zOm3PzF!lN5e*06-f1Uot67wY#{o-S1!KZ7E=!~7ynnk9_iJR#kFoNbAOT#^2Gd17F zMmvU6>lndZQGd|ax9kUoXXO+$N?|j@6qpsF&_j7YXvwo_C{JpmLw5&#e6k>atv%es z5)7r*Wvv_JkUpT}M!_o!nVlEk1Zbl=a*2hQ*<|%*K1Glj^FcF`6kTzGQ3lz~2tCc@ z&x|tj;aH&1&9HwcJBcT`;{?a+pnej;M1HO(6Z{#J!cZA04hnFl;NXA+&`=7bjW_^o zfC40u3LMG?NdPtwGl>Tq6u}*QG)}-y;)lu-_>ee3kibW(69n0$0Zy!}9rQz%*v1iO zT9_H>99yIrSPYVy6^);rR}7Yo=J_T@hi+qhTZXnVWyf;JDYm5#eYLTxr*?kiNn!+Y zQ+LUkBafNJ#rH#C(?d5^;gw9o#%daEI{mA*LHPIHPU`#|H$hD zwm>0&+kahQ)E#%~k>&5@&#Vg82H?s%71=)(soi@174pi9--2{w{1$}Sz4zGn3Du&x bht0Iza^2ykEt4(epJ78uh5nDlX8(TxzDYwP literal 0 HcmV?d00001 diff --git a/UWP/Assets/Square44x44Logo.scale-200.png b/UWP/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..ce342a2ec8a61291ba76c54604aea7e9d20af11b GIT binary patch literal 1647 zcmaJ?eM}Q)7(e+G1Q(|`V9JhTI2>MkceK4;p;PR&$Pi?ejk3YQ_3o`S&|W_dsOZ8# zWPTt69g`t$ab`0cj-Y0yiBSOqmd)tG7G(}M5aP0_%&9TijB#&)I{zSE^4@#z^FF`l z`8{8`o%wlL(UI|y2!cdsuVamHH~H86F!*-15em4)NqUpCQM5?aoC_eCf@lV4wvF2a zjDQn1JBL69f&@2M3rvzJcfE!eZ8FZUBlFlC5RD)it33{mF9#B82AiyQE%w)`vlwa> zv{<1sm&kSKK$&%2jSFn7$t&P%%6Ue>R=EAnG8N7fqynWG8L3p!4801a;8{+nliO(qd(jNJ_?+9W3#hLIDLoT6~3fx9=`CC-D}-AMrpEO7HK zt3$GicGPc?GmDjy7K2P@La;eu4!$zWCZ`ym{Z$b zu-O6RM&K4JT|BIZB`E-gxqG%FzanI#+2FFmqHqXG7yxWB=w55RGOM)$xMb(>kSNR z2w=1AZi%z=AmG~yea~XaXJR!v7vLn(RUnELfiB1|6D84ICOS}^Zo2AdN}<&*h}G_u z{xZ!(%>tLT3J3<5XhWy-tg+6)0nmUUENLW8TWA{R6bgVd3X;anYFZ^IRis*_P-C-r z;i>%1^eL3UI2-{w8nuFFcs0e~7J{O2k^~Ce%+Ly4U?|=!0LH=t6()xi<^I-rs+9sF z*q{E-CxZbGPeu#a;XJwE;9S1?#R&uns>^0G3p`hEUF*v`M?@h%T%J%RChmD|EVydq zmHWh*_=S%emRC*mhxaVLzT@>Z2SX0u9v*DIJ@WC^kLVdlGV6LpK$KIrlJqc zpJ921)+3JJdTx|<`G&kXpKkjGJv=76R`yYIQ{#c-`%+`#V(7}Q;&@6U8!Td1`d;?N z_9mnI#?AA}4J!r)LN4!E-@H5eXauuB7TOawS>Y|{-P?NNx-lq+z1W-+y(;39P&&LP zL{N80?&=C*qKmdA^moMZRuPcD!B<*mq$ch=0Cnlitw#txRWhb3%TQvPqjkC`F69G4b! ze7z9MZ#+;_#l?H37UqUhDFb^l&s2{oM$3I0o^Q!yx;;V)QmCMo)Tb_ui|mit8MS?U zm##6$sZZ1$@|s%?l@>4Z<*Q}sRBSKMhb4I{e5LdEhsHIHTe8Bod5c>6QtT>$XgUBz z6MK`kO$=jmt@FqggOhJ5j~e@ygRbG;<{Vu)*+nn9aQeo0;$#j;|MS=S$&L?BeV25z xs3B`@=#`5TF{^6(A1rvdY@|-RtQ|iS5{tyX+wH?;n8E)G$kykv-D^wh{{!TZT%7;_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f6c02ce97e0a802b85f6021e822c89f8bf57d5cd GIT binary patch literal 1255 zcmaJ>TWs4@7*5+{G#S+&C!qC#> zf>5N3P6jO*Cz>ug*(_DmW=)kea&m$gZ^+nyiF`;j%w@}y8)>p*SH}C`m?DXeieF2U zyQHecc_L%Gh!7GMt+hG06y;+|p4>m~}PjA}rKViGiEnn7G0ZO<>G|7q;2?NwGCM3s?eued6%hd$B+ z*kQJ{#~$S=DFE(%=E+UkmlEI*%3llUf~8Ja9YU1Vui0IbGBkW_gHB%Rd&!!ioX zs40O?i9I{};kle7GMvE7(rk`la=gTI)47=>%?q@^iL-nUo3}h4S}N-KHn8t5mVP8w z&bSErwp+37 zNJJ8?a|{r5Q3R0Z5s-LB1WHOwYC@7pCHWND#cL1cZ?{kJ368_*(UDWUDyb<}0y@o# zfMF016iMWPCb6obAxT$JlB6(2DrlXDTB&!0`!m??4F(qWMhjVZo?JXQmz`1*58Z=& zcDmB|S-E@j?BoFGix0flckqdS4jsPNzhfWyWIM98GxcLs89C(~dw%$_t;JjX-SD}E zfiGV;{8Q%8r}w9x>EEigW81>`kvnU@pK)4+xk9@+bNj9L!AAZ@SZ@q|)&BmY3+HZx zul~BeG4|}-;L%cHViQGQX?^zFfO0&#cHwel=d`lH9sJ-@Sl@n*(8J2>%Ac`IxyY?Q z{=GhWvC#gu-~Ia7*n{=+;qM?Ul_wy1+u7ho;=`>EwP^g~R@{unBds`!#@}tluZQpS zm)M~nYEifJWJGx?_6DcTy>#uh%>!H9=hb^(v`=m3F1{L>db=<5_tm+_&knAQ2EU$s Mu9UqpbNZeC0BbUo^Z)<= literal 0 HcmV?d00001 diff --git a/UWP/Assets/StoreLogo.png b/UWP/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..7385b56c0e4d3c6b0efe3324aa1194157d837826 GIT binary patch literal 1451 zcmaJ>eN5D57_Z|bH;{0+1#mbl)eTU3{h)Wf7EZV?;HD@XL@{B`Ui%(2aMxQ~xdXSv z5nzWi(LW)U2=Vc-cY@s7nPt{i0hc6!7xN4NNHI#EQl>YNBy8l4%x9gr_W-j zEZMQmmTIy(>;lblRfh`dIyTgc9W5d!VP$L4(kKrN1c5G~(O_#xG zAJCNTstD^5SeXFB+&$h=ToJP2H>xr$iqPs-#O*;4(!Fjw25-!gEb*)mU}=)J;Iu>w zxK(5XoD0wrPSKQ~rbL^Cw6O_03*l*}i=ydbu7adJ6y;%@tjFeXIXT+ms30pmbOP%Q zX}S;+LBh8Tea~TSkHzvX6$rYb)+n&{kSbIqh|c7hmlxmwSiq5iVhU#iEQ<>a18|O^Sln-8t&+t`*{qBWo5M?wFM(JuimAOb5!K#D}XbslM@#1ZVz_;!9U zpfEpLAOz=0g@bd6Xj_ILi-x^!M}73h^o@}hM$1jflTs|Yuj9AL@A3<-?MV4!^4q`e z)fO@A;{9K^?W?DbnesnPr6kK>$zaKo&;FhFd(GYFCIU^T+OIMb%Tqo+P%oq(IdX7S zf6+HLO?7o0m+p>~Tp5UrXWh!UH!wZ5kv!E`_w)PTpI(#Iw{AS`gH4^b(bm^ZCq^FZ zY9DD7bH}rq9mg88+KgA$Zp!iWncuU2n1AuIa@=sWvUR-s`Qb{R*kk(SPU^`$6BXz8 zn#7yaFOIK%qGxyi`dYtm#&qqox0$h=pNi#u=M8zUG@bpiZ=3sT=1}Trr}39cC)H|v zbL?W)=&s4zrh)7>L(|cc%$1#!zfL?HjpeP%T+x_a+jZ16b^iKOHxFEX$7d|8${H-* zIrOJ5w&i$>*D>AKaIoYg`;{L@jM((Kt?$N$5OnuPqVvq**Nm}(f0wwOF%iX_Pba;V z;m@wxX&NcV3?<1+u?A{y_DIj7#m3Af1rCE)o`D&Y3}0%7E;iX1yMDiS)sh0wKi!36 zL!Wmq?P^Ku&rK~HJd97KkLTRl>ScGFYZNlYytWnhmuu|)L&ND8_PmkayQb{HOY640 bno1(wj@u8DCVuFR|31B*4ek@pZJqxCDDe1x literal 0 HcmV?d00001 diff --git a/UWP/Assets/Wide310x150Logo.scale-200.png b/UWP/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..288995b397fdbef1fb7e85afd71445d5de1952c5 GIT binary patch literal 3204 zcmbVPeQXow8NYmBd90>}0NP?GhXW~VaeThm=a0tV#EwJMI!)6M3}|c4_Bl3=Kd>G0 z(GHx1wl<7(tP?FsOQkTilSo*iIvF%uArExJ73~P zSv1xEy!U(Wd4A9D`FQV@W3@F^qJ@PEF$@z`Z!*BbFsS(^?B zyiAzJ+q})bkgiQHWqEb*jJD-coHYr1^iocg)l!Qa{Xqs-l~6J}p-|##ZHYofskQ3$ zI0;xzXyhazBeXhIsg5A=%ufo@f)1yy&ScKS0;HF^!r_2UE^lpZEom(+@duma3awTv zCrCL-%D_SvYWIcdHkmI}#50(fkUi)Qgx!80ju>g1za^}ff>JI8Z@^-iCiaCgg@TgF z+vtE?Q9{VQUX&MW9SYYmGcxA14%N2@7FwBTD4N<(2{nWgV8$e3?-F=L^&FrtWn~(U_Q~~^uYiyeY6-KoTnfh9AWz@ zIKje0)u!_Lw)E}G!#kEfwKVdNt(UAf9*f>tEL_(=xco-T%jTi@7YlC3hs2ik%Le0H ztj}RTeCF(5mwvi3_56>-yB?l;J>-1%!9~=fs|QcNG3J~a@JCu`4SB460s0ZO+##4fFUSGLcj_ja^fL4&BKALfb#$6$O?>P@qx2Agl^x0i&ugt zsy5Pyu=()`7HRMG3IB7F1@`_ z+-!J%#i6e^U$e#+C%Q>_qVRzWRsG^W_n+@OcX@vzI&z;mzHNb!GQ?LWA(wtpqHqTM z1OFw_{Zn?fD)p)`c`kOgv{de=v@suGRqY{N^U7gI1VF3*F=obwaXI6ob5__Yn zVTguS!%(NI09J8x#AO_aW!9W7k*UvB;IWDFC3srwftr{kHj%g)fvnAm;&h_dnl~

MY- zf+K}sCe8qU6Ujs`3ua{U0Of$R_gVQBuUA za0v=mu#vIOqiiAZOr&h*$WyOw&k-xr$;G4Ixa!#TJNr>95(h>l%)PUy4p+^SgR(uR zta%k*?ny-+nAr8spEk1fo{J4i!b^Fia`N{_F6@zidA2ZTTrjl#^5Z-2KfB@Cu}l9s z(*|Z2jc?p~vn2f)3y9i*7zJV1L{$?|&q)4oaT;uXi6>1GkRXVTOzAz(RHEmr=eFIi z`}<>-Q?K0GN8!IYxeP1XKXO+jsJbp~o^);Bc;%b7Flpe7;1`Ny@3r7ZR;?R)aJt8C ziNlEC<@3f_lIV4TwV}&e;D!Ee5_|e#g0LUh=5vmYWYm7&2h*M>QPKvGh9-)wfMMW3 z8J9b%1k7dzPzO0_NGQy92BZ^FR6R~6;^6?lqO;-QUP4BY%cG%3vEhbm#>4vIhPBh3 z-+pZGjh$x%Hp{?=FHsMp0&wNPlj00us{&`1ZOZTqs8%4X&xH=UDr*xyBW(Zp&Em94 zf)ZSfn#yg0N)>!1kWdkqJ^S*z0FF5|fj&qcE#Na|%OY0$uO>!&hP+1ywfD_WXk@4J(?MBftK7>$Nvqh@tDuarN%PrTLQ2Uzysx>UV=V zk^RrDSvdQ?0;=hY67EgII-f4`t=+i*yS=Y~!XlqIy_4x&%+OdfbKOFPXS2X5%4R{N z$SQMX^AK6(fA +#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 000000000..27edaafa6 --- /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 000000000..1137361a9 --- /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 000000000..af3e506d9 --- /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 000000000..73b4b8665 --- /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 000000000..8f3f555ee --- /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 000000000..17063ce54 --- /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 000000000..bcb5590be --- /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 000000000..529bbb17f --- /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 000000000..a66ecb00f --- /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 000000000..a52732c0d --- /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 000000000..2b20fc121 --- /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 000000000..bcb5590be --- /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 000000000..529bbb17f --- /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 000000000..a66ecb00f --- /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 000000000..28da0faa5 --- /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 000000000..4ede6509b --- /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 000000000..bcb5590be --- /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 000000000..529bbb17f --- /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 000000000..a66ecb00f --- /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 000000000..2eb6eaa87 --- /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 000000000..236f9f313 --- /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 000000000..bcb5590be --- /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 000000000..529bbb17f --- /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 000000000..a66ecb00f --- /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 000000000..e1b251955 --- /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 000000000..56eb4839f --- /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 000000000..359e07c20 --- /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 000000000..29cd46449 --- /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 000000000..cedc522ec --- /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 000000000..bcb5590be --- /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 000000000..529bbb17f --- /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 000000000..a66ecb00f --- /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 000000000..73278e7de --- /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 000000000..2dda8c4b8 --- /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 000000000..bcb5590be --- /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 000000000..529bbb17f --- /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 000000000..a66ecb00f --- /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 000000000..75ba1eb38 --- /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 000000000..fa3d9f07e --- /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 0000000000000000000000000000000000000000..cdcf39f7d07597e66c4f5493025941e92bb635fa GIT binary patch literal 2452 zcmZuz2{=^!8b4=NBg1GW%X~v*U&@)W3zc;~g^508N!i98p(0B;iLBYWlCmesQkE!d z$cMNl@?}ewE>a?-kle#_Z@2qA-+7<+f8O8k|Ns5Z`@H9z_Z$c&Ttk6q2qqZd2=bB4 z$ge~Y4`#yzRSZm^BlKPf#xDNf6m}8=W8Wh5FygOqJN~2M;RaFJFlGgUF^dol$NgU# z*_;={rNNHxA+>eQp-^}Z2F7suwtb$5Cw*xzzuUyQ zvA;j8n=MNrS@Fy)hC~S^U(^34)!6ryRno?Iw#1ABA}T+t5x_732ETRFbnPa{uvTLq zw+m03U2WdQI!p>m1ZxH)*YW8kSTDg0ja2J_0KHloRY|cR*W9{hNLMN}UOSh&!}jF-bwrG-vG0_E>T-WbT}y}KMCc_`(g zaSy(O*W>vExqH7WSzMjc9?7lkTQDs5-Z1my=NN7X;eXuV8WJ@~U*P=_-kfRNOHJ^p zlXK+g2js>cgw$JV^o5K~yC$-7tx5hZSItv>+O)D>i=y*Ir{fJ`#{3ok z5F)@EpF;19ULS4=nRvhyFL*-T3~sno{rUUB&ZAoMO57)+ddkl^PiGn}Ys*V|cLwVv z9gLbSeSxQ;0lWfGIueWtSQy}s*I2L(&adQpxxewp#6rO zX=j--K}%LX8)Rji*Np1LXU=ri9kXxPoOc@_MiG`cXTG0yv87G(PRELAL}A7rZ=>_KP=6v($mD}%0pQ!`FQ^PN&i*Gk2rU?hni}0-)7JH(-Rv|}<$XM6l zYJr6Tkc&EzwZwhFNO<{PD+WE5_C=iBOqInyjc}2TgUynpAAG5{S1xGCZk;p!O?hC} zf$7H6EPNVQW?4qA9ul=r5SNi|l=kuXuzYo?B`k?sNQXb>{*jQeSbMdKGZlM7%CK}s zZ*_7qS2FpLcYC{)z$=fPc092;717a2x!{-{k)B7b=(&~huFlZDsIl$qBWNaFu^UgE zT`$t8w;Cly$F9fE52(h5mE>B!JFL!0H{9tCnox=XH>+NU6y8%l{XArm24Ge!*HFN} zQsCgB6(zybR?(mDp6`0rN^fif;()C<;!AmIp6bi zE-}dOf4m4dD5Eo;C=Z)!vO>}7tOU2wx3~4UyYi2uDv|J$EZZhWl9AYMvz}`5sU}5_ z_Ved0OxiQwMZZ&cApcviQ+(D9tKof$;BLQr&7Q^ej}BW5&ir0+^lSJ1ETzHfI9I8- zz}KCe{koBl9pufmo|%W$UxT%Xb4yUlEIurI?P$CukhmaoOCnO@*_xdkC8E&0-P^nL zN{$;>xk^{!Oc=C7#L)XLxhWZ^mG;p(cWr~{v*=mX@~ooj$V?-xf6)zo)+1+PEICo- z?&$f$vS+%A9^MU+f3``&E;*)VDWf>9rT_I!c>B0!B`VAKG@zk*<}E*p&kQ7970$l@Za(5c?= zPiZ;*55A2M@#jUr9asS3r}H5c`VS16jAOc-@pJctLeMcqj zR(k8iPP3qhmHe1ufsfa#lWv!F;;M`XnNKx~MQkolbj$USU)Hn2&zm)W#DY&MF9}9* zfq=GC9$!MztR0v6KB>k{9^GyQawzsqx>lBki$p?D0tyWRV4f@_4e=ng79oS+CI$rokiZs_+Cn@KH;xN= zys%h28vSc6k(-3n5(E-$7&JEX@mTKye)(+Y{GOa+|ES*`{4m4Ec8H#rESrKJGF{Pr zWBD{A0JgcRtgni8&I!>jjkBC-a$cFD7KqEbeJKG1*?)!Kw)=R=OCQqO2ccUWHY`+~kAxJkxDA14;qkBPmT_aWJ_m~ys{@%RKGJxE16Susjn zP=m@S;&v3}uu0g65Y^p_x#LQ+G>867l|%Q5eeg fbA}#e(bnC&{N}ot%k%37%JLms|3yf<*gpOZehBn~ literal 0 HcmV?d00001 diff --git a/UWP/XAudioSoundStream.cpp b/UWP/XAudioSoundStream.cpp new file mode 100644 index 000000000..f0670235d --- /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 000000000..35b26f0ab --- /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 000000000..46a7c8114 --- /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 000000000..70bbd5a99 --- /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 000000000..bcb5590be --- /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 000000000..be721813f --- /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 000000000..a66ecb00f --- /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 000000000..d48670265 --- /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 000000000..9c2472aed --- /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 000000000..bcb5590be --- /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 000000000..529bbb17f --- /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 000000000..a66ecb00f --- /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 000000000..bcb5590be --- /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 000000000..95b1c658c --- /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 000000000..a66ecb00f --- /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 000000000..5232ff3a3 --- /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 000000000..42a70a431 --- /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 ed6f8d09d..59fc299d0 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