From 87e5b0e9faa3231ca3f853a170b9b34e2ddbf804 Mon Sep 17 00:00:00 2001 From: Boris Galochkin Date: Fri, 19 Feb 2021 09:19:42 +0300 Subject: [PATCH] Fix of CaptureTexture for Reserved and MultiSample resources (#218) --- DirectXTex/DirectXTexD3D12.cpp | 11 ++++------- ScreenGrab/ScreenGrab12.cpp | 9 +++------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/DirectXTex/DirectXTexD3D12.cpp b/DirectXTex/DirectXTexD3D12.cpp index c6101b8..7bee954 100644 --- a/DirectXTex/DirectXTexD3D12.cpp +++ b/DirectXTex/DirectXTexD3D12.cpp @@ -141,12 +141,6 @@ namespace return HRESULT_E_NOT_SUPPORTED; } - D3D12_HEAP_PROPERTIES sourceHeapProperties; - D3D12_HEAP_FLAGS sourceHeapFlags; - HRESULT hr = pSource->GetHeapProperties(&sourceHeapProperties, &sourceHeapFlags); - if (FAILED(hr)) - return hr; - numberOfResources = (desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D) ? 1u : desc.DepthOrArraySize; numberOfResources *= desc.MipLevels; @@ -171,7 +165,9 @@ namespace device->GetCopyableFootprints(&desc, 0, numberOfResources, 0, pLayout, pNumRows, pRowSizesInBytes, &totalResourceSize); - if (sourceHeapProperties.Type == D3D12_HEAP_TYPE_READBACK) + D3D12_HEAP_PROPERTIES sourceHeapProperties; + HRESULT hr = pSource->GetHeapProperties(&sourceHeapProperties, nullptr); + if (SUCCEEDED(hr) && sourceHeapProperties.Type == D3D12_HEAP_TYPE_READBACK) { // Handle case where the source is already a staging texture we can use directly pStaging = pSource; @@ -218,6 +214,7 @@ namespace auto descCopy = desc; descCopy.SampleDesc.Count = 1; descCopy.SampleDesc.Quality = 0; + descCopy.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; ComPtr pTemp; hr = device->CreateCommittedResource( diff --git a/ScreenGrab/ScreenGrab12.cpp b/ScreenGrab/ScreenGrab12.cpp index a71102a..d0add34 100644 --- a/ScreenGrab/ScreenGrab12.cpp +++ b/ScreenGrab/ScreenGrab12.cpp @@ -691,12 +691,8 @@ namespace return HRESULT_E_NOT_SUPPORTED; D3D12_HEAP_PROPERTIES sourceHeapProperties; - D3D12_HEAP_FLAGS sourceHeapFlags; - HRESULT hr = pSource->GetHeapProperties(&sourceHeapProperties, &sourceHeapFlags); - if (FAILED(hr)) - return hr; - - if (sourceHeapProperties.Type == D3D12_HEAP_TYPE_READBACK) + HRESULT hr = pSource->GetHeapProperties(&sourceHeapProperties, nullptr); + if (SUCCEEDED(hr) && sourceHeapProperties.Type == D3D12_HEAP_TYPE_READBACK) { // Handle case where the source is already a staging texture we can use directly pStaging = pSource; @@ -745,6 +741,7 @@ namespace auto descCopy = desc; descCopy.SampleDesc.Count = 1; descCopy.SampleDesc.Quality = 0; + descCopy.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; ComPtr pTemp; hr = device->CreateCommittedResource(