Skip to content

Commit 145a411

Browse files
Deduplicate CopyBackResource lambda into a function.
1 parent f154a0e commit 145a411

1 file changed

Lines changed: 37 additions & 54 deletions

File tree

lib/API/DX/Device.cpp

Lines changed: 37 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2752,6 +2752,39 @@ class DXDevice : public offloadtest::Device {
27522752
return llvm::Error::success();
27532753
}
27542754

2755+
static llvm::Error
2756+
CopyBackResource(offloadtest::ComputeEncoder &ReadbackEncoder,
2757+
ResourcePair &R) {
2758+
if (R.first->isTexture()) {
2759+
for (const ResourceSet &RS : R.second) {
2760+
if (RS.Readback == nullptr)
2761+
continue;
2762+
2763+
if (auto Err =
2764+
ReadbackEncoder.copyTextureToBuffer(*RS.Texture, *RS.Readback))
2765+
return Err;
2766+
}
2767+
} else if (R.first->isBuffer()) {
2768+
for (const ResourceSet &RS : R.second) {
2769+
if (RS.Readback == nullptr)
2770+
continue;
2771+
2772+
if (auto Err = ReadbackEncoder.copyBufferToBuffer(
2773+
*RS.Buffer, 0, *RS.Readback, 0, RS.Buffer->getSizeInBytes()))
2774+
return Err;
2775+
2776+
if (!RS.Buffer->getDesc().HasCounter)
2777+
continue;
2778+
2779+
if (auto Err = ReadbackEncoder.copyCounterToBuffer(*RS.Buffer,
2780+
*RS.CounterReadback))
2781+
return Err;
2782+
}
2783+
}
2784+
2785+
return llvm::Error::success();
2786+
}
2787+
27552788
llvm::Error createComputeCommands(Pipeline &P, InvocationState &IS) {
27562789
CD3DX12_GPU_DESCRIPTOR_HANDLE Handle;
27572790
if (IS.DescHeap) {
@@ -2866,41 +2899,13 @@ class DXDevice : public offloadtest::Device {
28662899
return EncoderOrErr.takeError();
28672900
auto ReadbackEncoder = std::move(*EncoderOrErr);
28682901

2869-
auto CopyBackResource = [&ReadbackEncoder](ResourcePair &R) -> llvm::Error {
2870-
if (R.first->isTexture()) {
2871-
for (const ResourceSet &RS : R.second) {
2872-
if (RS.Readback == nullptr)
2873-
continue;
2874-
if (auto Err = ReadbackEncoder->copyTextureToBuffer(*RS.Texture,
2875-
*RS.Readback))
2876-
return Err;
2877-
}
2878-
} else {
2879-
for (const ResourceSet &RS : R.second) {
2880-
if (RS.Readback == nullptr)
2881-
continue;
2882-
2883-
if (auto Err = ReadbackEncoder->copyBufferToBuffer(
2884-
*RS.Buffer, 0, *RS.Readback, 0,
2885-
RS.Readback->getSizeInBytes()))
2886-
return Err;
2887-
2888-
if (RS.Buffer->getDesc().HasCounter)
2889-
if (auto Err = ReadbackEncoder->copyCounterToBuffer(
2890-
*RS.Buffer, *RS.CounterReadback))
2891-
return Err;
2892-
}
2893-
}
2894-
return llvm::Error::success();
2895-
};
2896-
28972902
for (auto &Table : IS.DescTables)
28982903
for (auto &R : Table.Resources)
2899-
if (auto Err = CopyBackResource(R))
2904+
if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R))
29002905
return Err;
29012906

29022907
for (auto &R : IS.RootResources)
2903-
if (auto Err = CopyBackResource(R))
2908+
if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R))
29042909
return Err;
29052910

29062911
ReadbackEncoder->endEncoding();
@@ -3086,35 +3091,13 @@ class DXDevice : public offloadtest::Device {
30863091
*IS.RTReadback))
30873092
return Err;
30883093

3089-
auto CopyBackResource = [&ReadbackEncoder](ResourcePair &R) -> llvm::Error {
3090-
if (R.first->isTexture()) {
3091-
for (const ResourceSet &RS : R.second) {
3092-
if (RS.Readback == nullptr)
3093-
continue;
3094-
3095-
if (auto Err = ReadbackEncoder->copyTextureToBuffer(*RS.Texture,
3096-
*RS.Readback))
3097-
return Err;
3098-
}
3099-
} else {
3100-
for (const ResourceSet &RS : R.second) {
3101-
if (RS.Readback != nullptr)
3102-
if (auto Err = ReadbackEncoder->copyBufferToBuffer(
3103-
*RS.Buffer, 0, *RS.Readback, 0,
3104-
RS.Buffer->getSizeInBytes()))
3105-
return Err;
3106-
}
3107-
}
3108-
return llvm::Error::success();
3109-
};
3110-
31113094
for (auto &Table : IS.DescTables)
31123095
for (auto &R : Table.Resources)
3113-
if (auto Err = CopyBackResource(R))
3096+
if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R))
31143097
return Err;
31153098

31163099
for (auto &R : IS.RootResources)
3117-
if (auto Err = CopyBackResource(R))
3100+
if (auto Err = DXDevice::CopyBackResource(*ReadbackEncoder, R))
31183101
return Err;
31193102

31203103
return llvm::Error::success();

0 commit comments

Comments
 (0)