From ccbff3ff6758b3bd67c9dbde64a1fc13e6f5ec6d Mon Sep 17 00:00:00 2001 From: Samuel Li Date: Wed, 31 Aug 2016 15:58:58 -0700 Subject: [PATCH] DWT2Dv2 passes all my tests! --- vtkm/worklet/wavelets/WaveletDWT.h | 27 ++++++++++------------- vtkm/worklet/wavelets/WaveletTransforms.h | 2 +- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/vtkm/worklet/wavelets/WaveletDWT.h b/vtkm/worklet/wavelets/WaveletDWT.h index 7b3038449..926dc5399 100644 --- a/vtkm/worklet/wavelets/WaveletDWT.h +++ b/vtkm/worklet/wavelets/WaveletDWT.h @@ -95,7 +95,6 @@ public: // Work on right extension typedef vtkm::worklet::wavelets::RightExtentionWorklet2D RightWorkletType; - typedef vtkm::worklet::wavelets::AssignZero2DColumnWorklet AssignZero2DType; ExtendArrayType rightExtend; if( !attachZeroRightLeft ) // no attach zero, or only attach on RightRight { @@ -685,16 +684,9 @@ public: // Transpose afterYBuf to output coeffOut.PrepareForOutput( sigInLen, DeviceTag() ); - WaveletBase::DeviceTranspose( afterYBuf, inYLen, inXLen, coeffOut, - inYLen, inXLen, 0, 0, DeviceTag() ); -#if 0 -for( vtkm::Id i = 0; i < afterYBuf.GetNumberOfValues(); i++ ) -{ - std::cerr << afterYBuf.GetPortalConstControl().Get(i) << " "; - if( i % inYLen == inYLen-1 ) std::cerr << std::endl; -} -#endif - + WaveletBase::DeviceTranspose( afterYBuf, inYLen, inXLen, + coeffOut, inXLen, inYLen, + 0, 0, DeviceTag() ); return elapsedTime; } @@ -813,6 +805,7 @@ for( vtkm::Id i = 0; i < afterYBuf.GetNumberOfValues(); i++ ) afterX.InterpretAs2D( outDimX, outDimY ); typedef vtkm::worklet::wavelets::ForwardTransform2D ForwardXForm; + { ForwardXForm worklet( filterLen, L[0], oddLow, sigExtendedDimX, sigExtendedDimY, outDimX, outDimY ); vtkm::worklet::DispatcherMapField< ForwardXForm, DeviceTag > dispatcher( worklet ); @@ -820,6 +813,7 @@ for( vtkm::Id i = 0; i < afterYBuf.GetNumberOfValues(); i++ ) WaveletBase::filter.GetLowDecomposeFilter(), WaveletBase::filter.GetHighDecomposeFilter(), afterX ); + } sigExtended.ReleaseResources(); // Then do transform in Y direction @@ -836,16 +830,19 @@ for( vtkm::Id i = 0; i < afterYBuf.GetNumberOfValues(); i++ ) WaveletBase::wmode, WaveletBase::wmode, false, false, DeviceTag() ); afterXTransposed.ReleaseResources(); + ArrayType afterY; afterY.PrepareForOutput( outDimY * outDimX, DeviceTag() ); afterY.InterpretAs2D( outDimY, outDimX ); + { ForwardXForm worklet2( filterLen, L[1], oddLow, sigExtendedDimX, sigExtendedDimY, outDimY, outDimX ); vtkm::worklet::DispatcherMapField< ForwardXForm, DeviceTag > dispatcher2( worklet2 ); - dispatcher.Invoke( sigExtended, - WaveletBase::filter.GetLowDecomposeFilter(), - WaveletBase::filter.GetHighDecomposeFilter(), - afterY ); + dispatcher2.Invoke( sigExtended, + WaveletBase::filter.GetLowDecomposeFilter(), + WaveletBase::filter.GetHighDecomposeFilter(), + afterY ); + } sigExtended.ReleaseResources(); // Transpose to output diff --git a/vtkm/worklet/wavelets/WaveletTransforms.h b/vtkm/worklet/wavelets/WaveletTransforms.h index f926cb4a6..e330ca3c0 100644 --- a/vtkm/worklet/wavelets/WaveletTransforms.h +++ b/vtkm/worklet/wavelets/WaveletTransforms.h @@ -138,7 +138,7 @@ private: this->xlstart = this->oddlow ? 1 : 0; this->xhstart = this->oddhigh ? 1 : 0; } -}; // Finish class ForwardTransform +}; // Worklet: perform a simple 2D forward transform