|
@@ -935,31 +935,35 @@ public:
|
|
nullptr,
|
|
nullptr,
|
|
IID_PPV_ARGS(&pResource)));
|
|
IID_PPV_ARGS(&pResource)));
|
|
|
|
|
|
- VERIFY_SUCCEEDED(pDevice->CreateCommittedResource(
|
|
|
|
- &uploadHeapProperties,
|
|
|
|
- D3D12_HEAP_FLAG_NONE,
|
|
|
|
- &uploadBufferDesc,
|
|
|
|
- D3D12_RESOURCE_STATE_GENERIC_READ,
|
|
|
|
- nullptr,
|
|
|
|
- IID_PPV_ARGS(&pUploadResource)));
|
|
|
|
|
|
+ if (ppUploadResource)
|
|
|
|
+ VERIFY_SUCCEEDED(pDevice->CreateCommittedResource(
|
|
|
|
+ &uploadHeapProperties,
|
|
|
|
+ D3D12_HEAP_FLAG_NONE,
|
|
|
|
+ &uploadBufferDesc,
|
|
|
|
+ D3D12_RESOURCE_STATE_GENERIC_READ,
|
|
|
|
+ nullptr,
|
|
|
|
+ IID_PPV_ARGS(&pUploadResource)));
|
|
|
|
|
|
if (ppReadBuffer)
|
|
if (ppReadBuffer)
|
|
VERIFY_SUCCEEDED(pDevice->CreateCommittedResource(
|
|
VERIFY_SUCCEEDED(pDevice->CreateCommittedResource(
|
|
&readHeap, D3D12_HEAP_FLAG_NONE, &readDesc,
|
|
&readHeap, D3D12_HEAP_FLAG_NONE, &readDesc,
|
|
D3D12_RESOURCE_STATE_COPY_DEST, nullptr, IID_PPV_ARGS(&pReadBuffer)));
|
|
D3D12_RESOURCE_STATE_COPY_DEST, nullptr, IID_PPV_ARGS(&pReadBuffer)));
|
|
|
|
|
|
- transferData.pData = values;
|
|
|
|
- transferData.RowPitch = (LONG_PTR)(valueSizeInBytes/resDesc.Height);
|
|
|
|
- transferData.SlicePitch = (LONG_PTR)valueSizeInBytes;
|
|
|
|
|
|
+ if (ppUploadResource) {
|
|
|
|
+ transferData.pData = values;
|
|
|
|
+ transferData.RowPitch = (LONG_PTR)(valueSizeInBytes/resDesc.Height);
|
|
|
|
+ transferData.SlicePitch = (LONG_PTR)valueSizeInBytes;
|
|
|
|
|
|
- UpdateSubresources<1>(pCommandList, pResource.p, pUploadResource.p, 0, 0, 1, &transferData);
|
|
|
|
- if (resDesc.Flags & D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS)
|
|
|
|
- RecordTransitionBarrier(pCommandList, pResource, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_UNORDERED_ACCESS);
|
|
|
|
- else
|
|
|
|
- RecordTransitionBarrier(pCommandList, pResource, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COMMON);
|
|
|
|
|
|
+ UpdateSubresources<1>(pCommandList, pResource.p, pUploadResource.p, 0, 0, 1, &transferData);
|
|
|
|
+ if (resDesc.Flags & D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS)
|
|
|
|
+ RecordTransitionBarrier(pCommandList, pResource, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_UNORDERED_ACCESS);
|
|
|
|
+ else
|
|
|
|
+ RecordTransitionBarrier(pCommandList, pResource, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COMMON);
|
|
|
|
+ }
|
|
|
|
|
|
*ppResource = pResource.Detach();
|
|
*ppResource = pResource.Detach();
|
|
- *ppUploadResource = pUploadResource.Detach();
|
|
|
|
|
|
+ if (ppUploadResource)
|
|
|
|
+ *ppUploadResource = pUploadResource.Detach();
|
|
if (ppReadBuffer)
|
|
if (ppReadBuffer)
|
|
*ppReadBuffer = pReadBuffer.Detach();
|
|
*ppReadBuffer = pReadBuffer.Detach();
|
|
}
|
|
}
|
|
@@ -3830,7 +3834,6 @@ TEST_F(ExecutionTest, ATOWriteMSAATest) {
|
|
|
|
|
|
// Set up texture Resource.
|
|
// Set up texture Resource.
|
|
CComPtr<ID3D12Resource> pUavResource;
|
|
CComPtr<ID3D12Resource> pUavResource;
|
|
- CComPtr<ID3D12Resource> pUploadResource;
|
|
|
|
float values[valueSize];
|
|
float values[valueSize];
|
|
memset(values, 0xc, valueSizeInBytes);
|
|
memset(values, 0xc, valueSizeInBytes);
|
|
|
|
|
|
@@ -3842,10 +3845,10 @@ TEST_F(ExecutionTest, ATOWriteMSAATest) {
|
|
#endif
|
|
#endif
|
|
|
|
|
|
D3D12_RESOURCE_DESC tex2dDesc = CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R32_FLOAT,
|
|
D3D12_RESOURCE_DESC tex2dDesc = CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R32_FLOAT,
|
|
- NumThreadsX, NumThreadsY, ArraySize, 0, numsamp, 0,
|
|
|
|
- D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS);
|
|
|
|
|
|
+ NumThreadsX, NumThreadsY, ArraySize, 1, numsamp, 0,
|
|
|
|
+ D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS | D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET);
|
|
CreateTestResources(pDevice, pCommandList, values, valueSizeInBytes, tex2dDesc,
|
|
CreateTestResources(pDevice, pCommandList, values, valueSizeInBytes, tex2dDesc,
|
|
- &pUavResource, &pUploadResource);
|
|
|
|
|
|
+ &pUavResource, nullptr);
|
|
|
|
|
|
// Close the command list and execute it to perform the resource uploads
|
|
// Close the command list and execute it to perform the resource uploads
|
|
pCommandList->Close();
|
|
pCommandList->Close();
|