Kaynağa Gözat

D3D12: Fixed validation issues.

Branimir Karadžić 7 yıl önce
ebeveyn
işleme
f4e1f47e1c
1 değiştirilmiş dosya ile 25 ekleme ve 6 silme
  1. 25 6
      src/renderer_d3d12.cpp

+ 25 - 6
src/renderer_d3d12.cpp

@@ -435,10 +435,12 @@ namespace bgfx { namespace d3d12
 
 
 	static void initHeapProperties(ID3D12Device* _device)
 	static void initHeapProperties(ID3D12Device* _device)
 	{
 	{
+#if BX_PLATFORM_WINDOWS
 		initHeapProperties(_device, s_heapProperties[HeapProperty::Default ].m_properties);
 		initHeapProperties(_device, s_heapProperties[HeapProperty::Default ].m_properties);
 		initHeapProperties(_device, s_heapProperties[HeapProperty::Texture ].m_properties);
 		initHeapProperties(_device, s_heapProperties[HeapProperty::Texture ].m_properties);
 		initHeapProperties(_device, s_heapProperties[HeapProperty::Upload  ].m_properties);
 		initHeapProperties(_device, s_heapProperties[HeapProperty::Upload  ].m_properties);
 		initHeapProperties(_device, s_heapProperties[HeapProperty::ReadBack].m_properties);
 		initHeapProperties(_device, s_heapProperties[HeapProperty::ReadBack].m_properties);
+#endif // BX_PLATFORM_WINDOWS
 	}
 	}
 
 
 	ID3D12Resource* createCommittedResource(ID3D12Device* _device, HeapProperty::Enum _heapProperty, const D3D12_RESOURCE_DESC* _resourceDesc, const D3D12_CLEAR_VALUE* _clearValue, bool _memSet = false)
 	ID3D12Resource* createCommittedResource(ID3D12Device* _device, HeapProperty::Enum _heapProperty, const D3D12_RESOURCE_DESC* _resourceDesc, const D3D12_CLEAR_VALUE* _clearValue, bool _memSet = false)
@@ -742,11 +744,13 @@ namespace bgfx { namespace d3d12
 
 
 				if (SUCCEEDED(hr) )
 				if (SUCCEEDED(hr) )
 				{
 				{
+					uint32_t debugFlags = 0;
+
 					if (_init.debug)
 					if (_init.debug)
 					{
 					{
+#if BX_PLATFORM_WINDOWS
 						debug0->EnableDebugLayer();
 						debug0->EnableDebugLayer();
 
 
-#if BX_PLATFORM_WINDOWS
 						{
 						{
 							ID3D12Debug1* debug1;
 							ID3D12Debug1* debug1;
 							hr = debug0->QueryInterface(IID_ID3D12Debug1, (void**)&debug1);
 							hr = debug0->QueryInterface(IID_ID3D12Debug1, (void**)&debug1);
@@ -760,15 +764,17 @@ namespace bgfx { namespace d3d12
 							DX_RELEASE(debug1, 1);
 							DX_RELEASE(debug1, 1);
 						}
 						}
 #elif BX_PLATFORM_XBOXONE
 #elif BX_PLATFORM_XBOXONE
-						debug0->SetProcessDebugFlags(D3D12_PROCESS_DEBUG_FLAG_DEBUG_LAYER_ENABLED);
+						debugFlags |= D3D12_PROCESS_DEBUG_FLAG_DEBUG_LAYER_ENABLED;
 #endif // BX_PLATFORM_WINDOWS
 #endif // BX_PLATFORM_WINDOWS
 					}
 					}
 
 
 #if BX_PLATFORM_XBOXONE
 #if BX_PLATFORM_XBOXONE
-					if (_init.profile)
+					// https://github.com/Microsoft/Xbox-ATG-Samples/blob/76d236e3bd372aceec18b2ad0556a7879dbd9628/XDKSamples/IntroGraphics/SimpleTriangle12/DeviceResources.cpp#L67
+					debugFlags |= _init.profile ? D3D12XBOX_PROCESS_DEBUG_FLAG_INSTRUMENTED : 0;
+
+					if (0 != debugFlags)
 					{
 					{
-						// https://github.com/Microsoft/Xbox-ATG-Samples/blob/76d236e3bd372aceec18b2ad0556a7879dbd9628/XDKSamples/IntroGraphics/SimpleTriangle12/DeviceResources.cpp#L67
-						debug0->SetProcessDebugFlags(D3D12XBOX_PROCESS_DEBUG_FLAG_INSTRUMENTED);
+						debug0->SetProcessDebugFlags(D3D12XBOX_PROCESS_DEBUG_FLAGS(debugFlags) );
 					}
 					}
 #endif // BX_PLATFORM_XBOXONE
 #endif // BX_PLATFORM_XBOXONE
 
 
@@ -813,6 +819,10 @@ namespace bgfx { namespace d3d12
 
 
 			m_dxgi.update(m_device);
 			m_dxgi.update(m_device);
 
 
+#if BX_PLATFORM_XBOXONE
+			m_device->SetDebugErrorFilterX(0x73EC9EAF, D3D12XBOX_DEBUG_FILTER_FLAG_DISABLE_BREAKS);
+#endif // BX_PLATFORM_XBOXONE
+
 			if (BGFX_PCI_ID_NVIDIA != m_dxgi.m_adapterDesc.VendorId)
 			if (BGFX_PCI_ID_NVIDIA != m_dxgi.m_adapterDesc.VendorId)
 			{
 			{
 				m_nvapi.shutdown();
 				m_nvapi.shutdown();
@@ -1998,10 +2008,16 @@ namespace bgfx { namespace d3d12
 			clearValue.DepthStencil.Depth   = 1.0f;
 			clearValue.DepthStencil.Depth   = 1.0f;
 			clearValue.DepthStencil.Stencil = 0;
 			clearValue.DepthStencil.Stencil = 0;
 
 
+			m_commandList = m_cmd.alloc();
+
 			m_backBufferDepthStencil = createCommittedResource(m_device, HeapProperty::Default, &resourceDesc, &clearValue);
 			m_backBufferDepthStencil = createCommittedResource(m_device, HeapProperty::Default, &resourceDesc, &clearValue);
 			m_device->CreateDepthStencilView(m_backBufferDepthStencil, NULL, getCPUHandleHeapStart(m_dsvDescriptorHeap));
 			m_device->CreateDepthStencilView(m_backBufferDepthStencil, NULL, getCPUHandleHeapStart(m_dsvDescriptorHeap));
 
 
-			m_commandList = m_cmd.alloc();
+			setResourceBarrier(m_commandList
+				, m_backBufferDepthStencil
+				, D3D12_RESOURCE_STATE_COMMON
+				, D3D12_RESOURCE_STATE_DEPTH_WRITE
+				);
 
 
 			for (uint32_t ii = 0; ii < BX_COUNTOF(m_frameBuffers); ++ii)
 			for (uint32_t ii = 0; ii < BX_COUNTOF(m_frameBuffers); ++ii)
 			{
 			{
@@ -4164,6 +4180,9 @@ namespace bgfx { namespace d3d12
 
 
 		if (drawIndirect)
 		if (drawIndirect)
 		{
 		{
+#if BX_PLATFORM_XBOXONE
+			flags |= D3D12XBOX_RESOURCE_FLAG_ALLOW_INDIRECT_BUFFER;
+#endif // BX_PLATFORM_XBOXONE
 			format = DXGI_FORMAT_R32G32B32A32_UINT;
 			format = DXGI_FORMAT_R32G32B32A32_UINT;
 			stride = 16;
 			stride = 16;
 		}
 		}