Branimir Karadžić 9 years ago
parent
commit
c440387eac
7 changed files with 58 additions and 29 deletions
  1. 1 1
      include/bgfx/bgfxplatform.h
  2. 1 1
      src/bgfx.cpp
  3. 2 0
      src/config.h
  4. 7 1
      src/renderer_d3d.h
  5. 29 20
      src/renderer_d3d11.cpp
  6. 5 3
      src/renderer_d3d11.h
  7. 13 3
      src/renderer_d3d12.h

+ 1 - 1
include/bgfx/bgfxplatform.h

@@ -232,7 +232,7 @@ namespace bgfx
 
 
 } // namespace bgfx
 } // namespace bgfx
 
 
-#elif BX_PLATFORM_WINRT
+#elif BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 #   include <Unknwn.h>
 #   include <Unknwn.h>
 
 
 namespace bgfx
 namespace bgfx

+ 1 - 1
src/bgfx.cpp

@@ -1828,7 +1828,7 @@ again:
 			{
 			{
 				_type = RendererType::OpenGLES;
 				_type = RendererType::OpenGLES;
 			}
 			}
-			else if (BX_ENABLED(BX_PLATFORM_WINRT) )
+			else if (BX_ENABLED(BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT) )
 			{
 			{
 				_type = RendererType::Direct3D11;
 				_type = RendererType::Direct3D11;
 			}
 			}

+ 2 - 0
src/config.h

@@ -31,12 +31,14 @@
 #	ifndef BGFX_CONFIG_RENDERER_DIRECT3D11
 #	ifndef BGFX_CONFIG_RENDERER_DIRECT3D11
 #		define BGFX_CONFIG_RENDERER_DIRECT3D11 (0 \
 #		define BGFX_CONFIG_RENDERER_DIRECT3D11 (0 \
 					|| BX_PLATFORM_WINDOWS \
 					|| BX_PLATFORM_WINDOWS \
+					|| BX_PLATFORM_XBOXONE \
 					|| BX_PLATFORM_WINRT \
 					|| BX_PLATFORM_WINRT \
 					? 1 : 0)
 					? 1 : 0)
 #	endif // BGFX_CONFIG_RENDERER_DIRECT3D11
 #	endif // BGFX_CONFIG_RENDERER_DIRECT3D11
 
 
 #	ifndef BGFX_CONFIG_RENDERER_DIRECT3D12
 #	ifndef BGFX_CONFIG_RENDERER_DIRECT3D12
 #		define BGFX_CONFIG_RENDERER_DIRECT3D12 (0 \
 #		define BGFX_CONFIG_RENDERER_DIRECT3D12 (0 \
+					|| 0 /*BX_PLATFORM_XBOXONE*/ \
 					|| BX_PLATFORM_WINDOWS \
 					|| BX_PLATFORM_WINDOWS \
 					? 1 : 0)
 					? 1 : 0)
 #	endif // BGFX_CONFIG_RENDERER_DIRECT3D12
 #	endif // BGFX_CONFIG_RENDERER_DIRECT3D12

+ 7 - 1
src/renderer_d3d.h

@@ -21,6 +21,12 @@
 
 
 namespace bgfx
 namespace bgfx
 {
 {
+#if BX_PLATFORM_XBOXONE
+	typedef ::IGraphicsUnknown IUnknown;
+#else
+	typedef ::IUnknown IUnknown;
+#endif // BX_PLATFORM_XBOXONE
+
 #define _DX_CHECK(_call) \
 #define _DX_CHECK(_call) \
 			BX_MACRO_BLOCK_BEGIN \
 			BX_MACRO_BLOCK_BEGIN \
 				HRESULT __hr__ = _call; \
 				HRESULT __hr__ = _call; \
@@ -96,7 +102,7 @@ namespace bgfx
 		return _interface->Release();
 		return _interface->Release();
 	}
 	}
 
 
-	template <typename Ty>
+	template<typename Ty>
 	class StateCacheT
 	class StateCacheT
 	{
 	{
 	public:
 	public:

+ 29 - 20
src/renderer_d3d11.cpp

@@ -8,10 +8,12 @@
 #if BGFX_CONFIG_RENDERER_DIRECT3D11
 #if BGFX_CONFIG_RENDERER_DIRECT3D11
 #	include "renderer_d3d11.h"
 #	include "renderer_d3d11.h"
 
 
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 #	include <inspectable.h>
 #	include <inspectable.h>
-#	include <windows.ui.xaml.media.dxinterop.h>
-#endif // BX_PLATFORM_WINRT
+#	if BX_PLATFORM_WINRT
+#		include <windows.ui.xaml.media.dxinterop.h>
+#	endif // BX_PLATFORM_WINRT
+#endif // BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 
 
 #if BGFX_CONFIG_PROFILER_REMOTERY
 #if BGFX_CONFIG_PROFILER_REMOTERY
 #	define BGFX_GPU_PROFILER_BIND(_device, _context) rmt_BindD3D11(_device, _context)
 #	define BGFX_GPU_PROFILER_BIND(_device, _context) rmt_BindD3D11(_device, _context)
@@ -791,12 +793,15 @@ namespace bgfx { namespace d3d11
 
 
 			HRESULT hr;
 			HRESULT hr;
 			IDXGIFactory* factory;
 			IDXGIFactory* factory;
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE
+			hr = S_OK;
+			factory = NULL;
+#elif BX_PLATFORM_WINRT
 			// WinRT requires the IDXGIFactory2 interface, which isn't supported on older platforms
 			// WinRT requires the IDXGIFactory2 interface, which isn't supported on older platforms
 			hr = CreateDXGIFactory1(__uuidof(IDXGIFactory2), (void**)&factory);
 			hr = CreateDXGIFactory1(__uuidof(IDXGIFactory2), (void**)&factory);
 #else
 #else
 			hr = CreateDXGIFactory(IID_IDXGIFactory, (void**)&factory);
 			hr = CreateDXGIFactory(IID_IDXGIFactory, (void**)&factory);
-#endif // BX_PLATFORM_WINRT
+#endif // BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 			BX_WARN(SUCCEEDED(hr), "Unable to create DXGI factory.");
 			BX_WARN(SUCCEEDED(hr), "Unable to create DXGI factory.");
 			if (FAILED(hr) )
 			if (FAILED(hr) )
 			{
 			{
@@ -1027,7 +1032,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 
 
 				if (NULL == g_platformData.backBuffer)
 				if (NULL == g_platformData.backBuffer)
 				{
 				{
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 					hr = adapter->GetParent(__uuidof(IDXGIFactory2), (void**)&m_factory);
 					hr = adapter->GetParent(__uuidof(IDXGIFactory2), (void**)&m_factory);
 					BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D11 device.");
 					BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D11 device.");
 					DX_RELEASE(adapter, 2);
 					DX_RELEASE(adapter, 2);
@@ -1072,6 +1077,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 								);
 								);
 						BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D11 swap chain.");
 						BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D11 swap chain.");
 
 
+#	if BX_PLATFORM_WINRT
 						IInspectable* nativeWindow = reinterpret_cast<IInspectable *>(g_platformData.nwh);
 						IInspectable* nativeWindow = reinterpret_cast<IInspectable *>(g_platformData.nwh);
 						ISwapChainBackgroundPanelNative* panel = NULL;
 						ISwapChainBackgroundPanelNative* panel = NULL;
 						hr = nativeWindow->QueryInterface(__uuidof(ISwapChainBackgroundPanelNative), (void**)&panel);
 						hr = nativeWindow->QueryInterface(__uuidof(ISwapChainBackgroundPanelNative), (void**)&panel);
@@ -1084,6 +1090,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 
 
 							panel->Release();
 							panel->Release();
 						}
 						}
+#	endif // BX_PLATFORM_WINRT
 					}
 					}
 #else
 #else
 					hr = adapter->GetParent(IID_IDXGIFactory, (void**)&m_factory);
 					hr = adapter->GetParent(IID_IDXGIFactory, (void**)&m_factory);
@@ -1116,7 +1123,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 						| DXGI_MWA_NO_WINDOW_CHANGES
 						| DXGI_MWA_NO_WINDOW_CHANGES
 						| DXGI_MWA_NO_ALT_ENTER
 						| DXGI_MWA_NO_ALT_ENTER
 						) );
 						) );
-#endif // BX_PLATFORM_WINRT
+#endif // BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 					BX_WARN(SUCCEEDED(hr), "Failed to create swap chain.");
 					BX_WARN(SUCCEEDED(hr), "Failed to create swap chain.");
 					if (FAILED(hr) )
 					if (FAILED(hr) )
 					{
 					{
@@ -2110,7 +2117,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 			if (NULL != m_swapChain)
 			if (NULL != m_swapChain)
 			{
 			{
 				HRESULT hr = S_OK;
 				HRESULT hr = S_OK;
-				uint32_t syncInterval = BX_ENABLED(BX_PLATFORM_WINRT)
+				uint32_t syncInterval = BX_ENABLED(BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT)
 					? 1 // sync interval of 0 is not supported on WinRT
 					? 1 // sync interval of 0 is not supported on WinRT
 					: !!(m_resolution.m_flags & BGFX_RESET_VSYNC)
 					: !!(m_resolution.m_flags & BGFX_RESET_VSYNC)
 					;
 					;
@@ -2226,7 +2233,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 				flags &= ~BGFX_RESET_INTERNAL_FORCE;
 				flags &= ~BGFX_RESET_INTERNAL_FORCE;
 
 
 				bool resize = true
 				bool resize = true
-					&& !BX_ENABLED(BX_PLATFORM_WINRT) // can't use ResizeBuffers on Windows Phone
+					&& !BX_ENABLED(BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT) // can't use ResizeBuffers on Windows Phone
 					&& (m_resolution.m_flags&BGFX_RESET_MSAA_MASK) == (flags&BGFX_RESET_MSAA_MASK)
 					&& (m_resolution.m_flags&BGFX_RESET_MSAA_MASK) == (flags&BGFX_RESET_MSAA_MASK)
 					;
 					;
 
 
@@ -2278,7 +2285,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 							scd = &swapChainScd;
 							scd = &swapChainScd;
 						}
 						}
 
 
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 						HRESULT hr;
 						HRESULT hr;
 						if (g_platformData.ndt == 0)
 						if (g_platformData.ndt == 0)
 						{
 						{
@@ -2301,6 +2308,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 									);
 									);
 							BGFX_FATAL(SUCCEEDED(hr), Fatal::UnableToInitialize, "Unable to create Direct3D11 swap chain.");
 							BGFX_FATAL(SUCCEEDED(hr), Fatal::UnableToInitialize, "Unable to create Direct3D11 swap chain.");
 
 
+#	if BX_PLATFORM_WINRT
 							IInspectable *nativeWindow = reinterpret_cast<IInspectable *>(g_platformData.nwh);
 							IInspectable *nativeWindow = reinterpret_cast<IInspectable *>(g_platformData.nwh);
 							ISwapChainBackgroundPanelNative* panel = NULL;
 							ISwapChainBackgroundPanelNative* panel = NULL;
 							hr = nativeWindow->QueryInterface(__uuidof(ISwapChainBackgroundPanelNative), (void **)&panel);
 							hr = nativeWindow->QueryInterface(__uuidof(ISwapChainBackgroundPanelNative), (void **)&panel);
@@ -2313,6 +2321,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 
 
 								panel->Release();
 								panel->Release();
 							}
 							}
+#	endif // BX_PLATFORM_WINRT
 						}
 						}
 #else
 #else
 						HRESULT hr;
 						HRESULT hr;
@@ -2320,7 +2329,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 								, scd
 								, scd
 								, &m_swapChain
 								, &m_swapChain
 								);
 								);
-#endif // BX_PLATFORM_WINRT
+#endif // BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 						BGFX_FATAL(SUCCEEDED(hr), bgfx::Fatal::UnableToInitialize, "Failed to create swap chain.");
 						BGFX_FATAL(SUCCEEDED(hr), bgfx::Fatal::UnableToInitialize, "Failed to create swap chain.");
 					}
 					}
 				}
 				}
@@ -2793,7 +2802,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 
 
 		DXGI_FORMAT getBufferFormat()
 		DXGI_FORMAT getBufferFormat()
 		{
 		{
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 			return m_scd.Format;
 			return m_scd.Format;
 #else
 #else
 			return m_scd.BufferDesc.Format;
 			return m_scd.BufferDesc.Format;
@@ -2802,7 +2811,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 
 
 		uint32_t getBufferWidth()
 		uint32_t getBufferWidth()
 		{
 		{
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 			return m_scd.Width;
 			return m_scd.Width;
 #else
 #else
 			return m_scd.BufferDesc.Width;
 			return m_scd.BufferDesc.Width;
@@ -2811,7 +2820,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 
 
 		uint32_t getBufferHeight()
 		uint32_t getBufferHeight()
 		{
 		{
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 			return m_scd.Height;
 			return m_scd.Height;
 #else
 #else
 			return m_scd.BufferDesc.Height;
 			return m_scd.BufferDesc.Height;
@@ -2820,7 +2829,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 
 
 		void setBufferSize(uint32_t _width, uint32_t _height)
 		void setBufferSize(uint32_t _width, uint32_t _height)
 		{
 		{
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 			m_scd.Width  = _width;
 			m_scd.Width  = _width;
 			m_scd.Height = _height;
 			m_scd.Height = _height;
 #else
 #else
@@ -3352,13 +3361,13 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 		D3D_FEATURE_LEVEL m_featureLevel;
 		D3D_FEATURE_LEVEL m_featureLevel;
 		IDXGIAdapter*     m_adapter;
 		IDXGIAdapter*     m_adapter;
 		DXGI_ADAPTER_DESC m_adapterDesc;
 		DXGI_ADAPTER_DESC m_adapterDesc;
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 		IDXGIFactory2*    m_factory;
 		IDXGIFactory2*    m_factory;
 		IDXGISwapChain1*  m_swapChain;
 		IDXGISwapChain1*  m_swapChain;
 #else
 #else
 		IDXGIFactory*     m_factory;
 		IDXGIFactory*     m_factory;
 		IDXGISwapChain*   m_swapChain;
 		IDXGISwapChain*   m_swapChain;
-#endif // BX_PLATFORM_WINRT
+#endif // BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 
 
 		uint16_t m_lost;
 		uint16_t m_lost;
 		uint16_t m_numWindows;
 		uint16_t m_numWindows;
@@ -3381,11 +3390,11 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 		Resolution m_resolution;
 		Resolution m_resolution;
 		bool m_wireframe;
 		bool m_wireframe;
 
 
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 		typedef DXGI_SWAP_CHAIN_DESC1 SwapChainDesc;
 		typedef DXGI_SWAP_CHAIN_DESC1 SwapChainDesc;
 #else
 #else
 		typedef DXGI_SWAP_CHAIN_DESC  SwapChainDesc;
 		typedef DXGI_SWAP_CHAIN_DESC  SwapChainDesc;
-#endif // BX_PLATFORM_WINRT
+#endif // BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 
 
 		SwapChainDesc m_scd;
 		SwapChainDesc m_scd;
 		uint32_t m_maxAnisotropy;
 		uint32_t m_maxAnisotropy;
@@ -3465,7 +3474,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 				}
 				}
 			}
 			}
 		}
 		}
-#endif // BX_PLATFORM_WINRT
+#endif // BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 	}
 	}
 
 
 	void stubMultiDrawInstancedIndirect(uint32_t _numDrawIndirect, ID3D11Buffer* _ptr, uint32_t _offset, uint32_t _stride)
 	void stubMultiDrawInstancedIndirect(uint32_t _numDrawIndirect, ID3D11Buffer* _ptr, uint32_t _offset, uint32_t _stride)

+ 5 - 3
src/renderer_d3d11.h

@@ -6,7 +6,7 @@
 #ifndef BGFX_RENDERER_D3D11_H_HEADER_GUARD
 #ifndef BGFX_RENDERER_D3D11_H_HEADER_GUARD
 #define BGFX_RENDERER_D3D11_H_HEADER_GUARD
 #define BGFX_RENDERER_D3D11_H_HEADER_GUARD
 
 
-#define USE_D3D11_DYNAMIC_LIB !BX_PLATFORM_WINRT
+#define USE_D3D11_DYNAMIC_LIB !(BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT)
 
 
 #if !USE_D3D11_DYNAMIC_LIB
 #if !USE_D3D11_DYNAMIC_LIB
 #	undef  BGFX_CONFIG_DEBUG_PIX
 #	undef  BGFX_CONFIG_DEBUG_PIX
@@ -19,11 +19,13 @@ BX_PRAGMA_DIAGNOSTIC_IGNORED_GCC("-Wpragmas");
 BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4005) // warning C4005: '' : macro redefinition
 BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4005) // warning C4005: '' : macro redefinition
 #include <sal.h>
 #include <sal.h>
 #define D3D11_NO_HELPERS
 #define D3D11_NO_HELPERS
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE
+#	include <d3d11_x.h>
+#elif BX_PLATFORM_WINRT
 #	include <d3d11_3.h>
 #	include <d3d11_3.h>
 #else
 #else
 #	include <d3d11.h>
 #	include <d3d11.h>
-#endif // BX_PLATFORM_WINRT
+#endif // BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
 BX_PRAGMA_DIAGNOSTIC_POP()
 BX_PRAGMA_DIAGNOSTIC_POP()
 
 
 #include "renderer.h"
 #include "renderer.h"

+ 13 - 3
src/renderer_d3d12.h

@@ -9,7 +9,11 @@
 #define USE_D3D12_DYNAMIC_LIB 1
 #define USE_D3D12_DYNAMIC_LIB 1
 
 
 #include <sal.h>
 #include <sal.h>
-#include <d3d12.h>
+#if BX_PLATFORM_XBOXONE
+#	include <d3d12_x.h>
+#else
+#	include <d3d12.h>
+#endif // BX_PLATFORM_XBOXONE
 
 
 #if defined(__MINGW32__) // BK - temp workaround for MinGW until I nuke d3dx12 usage.
 #if defined(__MINGW32__) // BK - temp workaround for MinGW until I nuke d3dx12 usage.
 extern "C++" {
 extern "C++" {
@@ -27,10 +31,16 @@ extern "C++" {
 
 
 BX_PRAGMA_DIAGNOSTIC_PUSH();
 BX_PRAGMA_DIAGNOSTIC_PUSH();
 BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wmissing-field-initializers");
 BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wmissing-field-initializers");
-#include <d3dx12.h>
+#if BX_PLATFORM_XBOXONE
+#	include <d3dx12_x.h>
+#else
+#	include <d3dx12.h>
+#endif // BX_PLATFORM_XBOXONE
 BX_PRAGMA_DIAGNOSTIC_POP();
 BX_PRAGMA_DIAGNOSTIC_POP();
 
 
-#include <dxgi1_4.h>
+#if !BX_PLATFORM_XBOXONE
+#	include <dxgi1_4.h>
+#endif // !BX_PLATFORM_XBOXONE
 
 
 #include "renderer.h"
 #include "renderer.h"
 #include "renderer_d3d.h"
 #include "renderer_d3d.h"