Parcourir la source

D3D12: Cleanup.

Branimir Karadžić il y a 7 ans
Parent
commit
2f446e10a1
3 fichiers modifiés avec 29 ajouts et 5 suppressions
  1. 2 1
      src/bgfx.cpp
  2. 2 2
      src/renderer_d3d11.cpp
  3. 25 2
      src/renderer_d3d12.cpp

+ 2 - 1
src/bgfx.cpp

@@ -2148,7 +2148,8 @@ namespace bgfx
 					 ||  BX_PLATFORM_WINRT
 					 ) )
 				{
-					score += RendererType::Direct3D11 == renderer ? 20 : 0;
+					score += RendererType::Direct3D12 == renderer ? 20 : 0;
+					score += RendererType::Direct3D11 == renderer ? 10 : 0;
 				}
 
 				scores[numScores++] = (score<<8) | uint8_t(renderer);

+ 2 - 2
src/renderer_d3d11.cpp

@@ -4479,7 +4479,7 @@ namespace bgfx { namespace d3d11
 			case Texture2D:
 			case TextureCube:
 				{
-					D3D11_TEXTURE2D_DESC desc;
+					D3D11_TEXTURE2D_DESC desc = {};
 					desc.Width  = textureWidth;
 					desc.Height = textureHeight;
 					desc.MipLevels  = numMips;
@@ -4583,7 +4583,7 @@ namespace bgfx { namespace d3d11
 
 			case Texture3D:
 				{
-					D3D11_TEXTURE3D_DESC desc;
+					D3D11_TEXTURE3D_DESC desc = {};
 					desc.Width  = textureWidth;
 					desc.Height = textureHeight;
 					desc.Depth  = imageContainer.m_depth;

+ 25 - 2
src/renderer_d3d12.cpp

@@ -439,7 +439,7 @@ namespace bgfx { namespace d3d12
 		initHeapProperties(_device, s_heapProperties[HeapProperty::ReadBack].m_properties);
 	}
 
-	ID3D12Resource* createCommittedResource(ID3D12Device* _device, HeapProperty::Enum _heapProperty, D3D12_RESOURCE_DESC* _resourceDesc, D3D12_CLEAR_VALUE* _clearValue)
+	ID3D12Resource* createCommittedResource(ID3D12Device* _device, HeapProperty::Enum _heapProperty, const D3D12_RESOURCE_DESC* _resourceDesc, const D3D12_CLEAR_VALUE* _clearValue, bool _memSet = false)
 	{
 		const HeapProperty& heapProperty = s_heapProperties[_heapProperty];
 		ID3D12Resource* resource;
@@ -455,6 +455,16 @@ namespace bgfx { namespace d3d12
 			, _resourceDesc->Width
 			);
 
+		if (BX_ENABLED(BX_PLATFORM_XBOXONE)
+		&&  _memSet)
+		{
+			void* ptr;
+			DX_CHECK(resource->Map(0, NULL, &ptr) );
+			D3D12_RESOURCE_ALLOCATION_INFO rai = _device->GetResourceAllocationInfo(1, 1, _resourceDesc);
+			bx::memSet(ptr, 0, rai.SizeInBytes);
+			resource->Unmap(0, NULL);
+		}
+
 		return resource;
 	}
 
@@ -1898,6 +1908,19 @@ namespace bgfx { namespace d3d12
 					, (void**)&m_backBufferColor[ii]
 					) );
 				m_device->CreateRenderTargetView(m_backBufferColor[ii], NULL, handle);
+
+				if (BX_ENABLED(BX_PLATFORM_XBOXONE) )
+				{
+					ID3D12Resource* resource = m_backBufferColor[ii];
+
+					BX_CHECK(DXGI_FORMAT_R8G8B8A8_UNORM == m_scd.format, "");
+					const uint32_t size = m_scd.width*m_scd.height*4;
+
+					void* ptr;
+					DX_CHECK(resource->Map(0, NULL, &ptr) );
+					bx::memSet(ptr, 0, size);
+					resource->Unmap(0, NULL);
+				}
 			}
 
 			D3D12_RESOURCE_DESC resourceDesc;
@@ -4620,7 +4643,7 @@ data.NumQualityLevels = 0;
 				break;
 			}
 
-			m_ptr = createCommittedResource(device, HeapProperty::Texture, &resourceDesc, clearValue);
+			m_ptr = createCommittedResource(device, HeapProperty::Texture, &resourceDesc, clearValue, renderTarget);
 
 			if (directAccess)
 			{