From 145a4111954e652cc1206eceb2f071a79ec597ba Mon Sep 17 00:00:00 2001 From: Manon Oomen Date: Mon, 22 Jun 2026 14:17:07 +0200 Subject: [PATCH 1/2] Deduplicate CopyBackResource lambda into a function. --- lib/API/DX/Device.cpp | 91 ++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 54 deletions(-) diff --git a/lib/API/DX/Device.cpp b/lib/API/DX/Device.cpp index 76d05f39e..9dbd2e425 100644 --- a/lib/API/DX/Device.cpp +++ b/lib/API/DX/Device.cpp @@ -2752,6 +2752,39 @@ class DXDevice : public offloadtest::Device { return llvm::Error::success(); } + static llvm::Error + CopyBackResource(offloadtest::ComputeEncoder &ReadbackEncoder, + ResourcePair &R) { + if (R.first->isTexture()) { + for (const ResourceSet &RS : R.second) { + if (RS.Readback == nullptr) + continue; + + if (auto Err = + ReadbackEncoder.copyTextureToBuffer(*RS.Texture, *RS.Readback)) + return Err; + } + } else if (R.first->isBuffer()) { + for (const ResourceSet &RS : R.second) { + if (RS.Readback == nullptr) + continue; + + if (auto Err = ReadbackEncoder.copyBufferToBuffer( + *RS.Buffer, 0, *RS.Readback, 0, RS.Buffer->getSizeInBytes())) + return Err; + + if (!RS.Buffer->getDesc().HasCounter) + continue; + + if (auto Err = ReadbackEncoder.copyCounterToBuffer(*RS.Buffer, + *RS.CounterReadback)) + return Err; + } + } + + return llvm::Error::success(); + } + llvm::Error createComputeCommands(Pipeline &P, InvocationState &IS) { CD3DX12_GPU_DESCRIPTOR_HANDLE Handle; if (IS.DescHeap) { @@ -2866,41 +2899,13 @@ class DXDevice : public offloadtest::Device { return EncoderOrErr.takeError(); auto ReadbackEncoder = std::move(*EncoderOrErr); - auto CopyBackResource = [&ReadbackEncoder](ResourcePair &R) -> llvm::Error { - if (R.first->isTexture()) { - for (const ResourceSet &RS : R.second) { - if (RS.Readback == nullptr) - continue; - if (auto Err = ReadbackEncoder->copyTextureToBuffer(*RS.Texture, - *RS.Readback)) - return Err; - } - } else { - for (const ResourceSet &RS : R.second) { - if (RS.Readback == nullptr) - continue; - - if (auto Err = ReadbackEncoder->copyBufferToBuffer( - *RS.Buffer, 0, *RS.Readback, 0, - RS.Readback->getSizeInBytes())) - return Err; - - if (RS.Buffer->getDesc().HasCounter) - if (auto Err = ReadbackEncoder->copyCounterToBuffer( - *RS.Buffer, *RS.CounterReadback)) - return Err; - } - } - return llvm::Error::success(); - }; - for (auto &Table : IS.DescTables) for (auto &R : Table.Resources) - if (auto Err = CopyBackResource(R)) + if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R)) return Err; for (auto &R : IS.RootResources) - if (auto Err = CopyBackResource(R)) + if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R)) return Err; ReadbackEncoder->endEncoding(); @@ -3086,35 +3091,13 @@ class DXDevice : public offloadtest::Device { *IS.RTReadback)) return Err; - auto CopyBackResource = [&ReadbackEncoder](ResourcePair &R) -> llvm::Error { - if (R.first->isTexture()) { - for (const ResourceSet &RS : R.second) { - if (RS.Readback == nullptr) - continue; - - if (auto Err = ReadbackEncoder->copyTextureToBuffer(*RS.Texture, - *RS.Readback)) - return Err; - } - } else { - for (const ResourceSet &RS : R.second) { - if (RS.Readback != nullptr) - if (auto Err = ReadbackEncoder->copyBufferToBuffer( - *RS.Buffer, 0, *RS.Readback, 0, - RS.Buffer->getSizeInBytes())) - return Err; - } - } - return llvm::Error::success(); - }; - for (auto &Table : IS.DescTables) for (auto &R : Table.Resources) - if (auto Err = CopyBackResource(R)) + if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R)) return Err; for (auto &R : IS.RootResources) - if (auto Err = CopyBackResource(R)) + if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R)) return Err; return llvm::Error::success(); From c73269b01aed80fe43d472d07b9e526dae4c39f2 Mon Sep 17 00:00:00 2001 From: Manon Oomen Date: Mon, 22 Jun 2026 15:40:17 +0200 Subject: [PATCH 2/2] Fix casing of copyBackResource function. --- lib/API/DX/Device.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/API/DX/Device.cpp b/lib/API/DX/Device.cpp index 9dbd2e425..f2a202002 100644 --- a/lib/API/DX/Device.cpp +++ b/lib/API/DX/Device.cpp @@ -2753,7 +2753,7 @@ class DXDevice : public offloadtest::Device { } static llvm::Error - CopyBackResource(offloadtest::ComputeEncoder &ReadbackEncoder, + copyBackResource(offloadtest::ComputeEncoder &ReadbackEncoder, ResourcePair &R) { if (R.first->isTexture()) { for (const ResourceSet &RS : R.second) { @@ -2901,11 +2901,11 @@ class DXDevice : public offloadtest::Device { for (auto &Table : IS.DescTables) for (auto &R : Table.Resources) - if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R)) + if (auto Err = DXDevice::copyBackResource(*ReadbackEncoder, R)) return Err; for (auto &R : IS.RootResources) - if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R)) + if (auto Err = DXDevice::copyBackResource(*ReadbackEncoder, R)) return Err; ReadbackEncoder->endEncoding(); @@ -3093,11 +3093,11 @@ class DXDevice : public offloadtest::Device { for (auto &Table : IS.DescTables) for (auto &R : Table.Resources) - if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R)) + if (auto Err = DXDevice::copyBackResource(*ReadbackEncoder, R)) return Err; for (auto &R : IS.RootResources) - if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R)) + if (auto Err = DXDevice::copyBackResource(*ReadbackEncoder, R)) return Err; return llvm::Error::success();