Browse Source

HL_XBS: dx12 minor workaround

Yuxiao Mao 2 năm trước cách đây
mục cha
commit
d858b13d07
1 tập tin đã thay đổi với 6 bổ sung2 xóa
  1. 6 2
      libs/directx/dx12.cpp

+ 6 - 2
libs/directx/dx12.cpp

@@ -579,16 +579,20 @@ void HL_NAME(resource_unmap)( ID3D12Resource *res, int subres, D3D12_RANGE *rang
 int64 HL_NAME(get_required_intermediate_size)( ID3D12Resource *res, int first, int count ) {
 	auto desc = res->GetDesc();
 	UINT64 size = 0;
+#ifndef HL_XBS
 	static_driver->device->GetCopyableFootprints(&desc, first, count, 0, NULL, NULL, NULL, &size);
-#ifdef HL_XBS
+#else
 	D3D12_PLACED_SUBRESOURCE_FOOTPRINT pLayouts;
-	static_driver->device->GetCopyableFootprints(&desc, first, 1, 0, &pLayouts, NULL, NULL, NULL);
+	static_driver->device->GetCopyableFootprints(&desc, first + count - 1, 1, 0, &pLayouts, NULL, NULL, &size);
 	size += pLayouts.Offset;
 #endif
 	return size;
 }
 
 bool HL_NAME(update_sub_resource)( ID3D12GraphicsCommandList *cmd, ID3D12Resource *res, ID3D12Resource *tmp, int64 tmpOffs, int first, int count, D3D12_SUBRESOURCE_DATA *data ) {
+#ifdef HL_XBS
+	tmpOffs = 0;
+#endif
 	return UpdateSubresources(cmd,res,tmp,(UINT64)tmpOffs,(UINT)first,(UINT)count,data) != 0;
 }