@@ -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