29 #ifndef vtkPPixelTransfer_h 
   30 #define vtkPPixelTransfer_h 
   37 #include "vtkRenderingParallelLICModule.h"  
   38 #include "vtkSetGet.h"                      
   66     , SrcWholeExt(srcWholeExt)
 
   69     , DestWholeExt(destWholeExt)
 
   84     , SrcWholeExt(srcWholeExt)
 
   87     , DestWholeExt(destWholeExt)
 
  102     , SrcWholeExt(wholeExt)
 
  105     , DestWholeExt(wholeExt)
 
  137     , SrcWholeExt(srcWholeExt)
 
  138     , SrcExt(srcWholeExt)
 
  140     , DestWholeExt(destWholeExt)
 
  141     , DestExt(destWholeExt)
 
  156     , SrcWholeExt(srcWholeExt)
 
  159     , DestWholeExt(destWholeExt)
 
  185   bool Sender(
int rank)
 const { 
return (this->SrcRank == rank); }
 
  186   bool Receiver(
int rank)
 const { 
return (this->DestRank == rank); }
 
  187   bool Local(
int rank)
 const { 
return (this->Sender(rank) && this->Receiver(rank)); }
 
  250   template <
typename SOURCE_TYPE, 
typename DEST_TYPE>
 
  251   int Execute(MPI_Comm comm, 
int rank, 
int nComps, SOURCE_TYPE* srcData, DEST_TYPE* destData,
 
  252     std::vector<MPI_Request>& reqs, std::deque<MPI_Datatype>& types, 
int tag);
 
  258   int Execute(MPI_Comm comm, 
int rank, 
int nComps, 
int srcType, 
void* srcData, 
int destType,
 
  259     void* destData, std::vector<MPI_Request>& reqs, std::deque<MPI_Datatype>& types, 
int tag);
 
  264   int Blit(
int nComps, 
int srcType, 
void* srcData, 
int destType, 
void* destData);
 
  268   template <
typename SOURCE_TYPE>
 
  269   int Execute(MPI_Comm comm, 
int rank, 
int nComps, SOURCE_TYPE* srcData, 
int destType,
 
  270     void* destData, std::vector<MPI_Request>& reqs, std::deque<MPI_Datatype>& types, 
int tag);
 
  285 template <
typename SOURCE_TYPE>
 
  287   int destType, 
void* destData, std::vector<MPI_Request>& reqs, std::deque<MPI_Datatype>& types,
 
  294       return this->
Execute(comm, rank, nComps, srcData, (VTK_TT*)destData, reqs, types, tag));
 
  300 template <
typename SOURCE_TYPE, 
typename DEST_TYPE>
 
  302   DEST_TYPE* destData, std::vector<MPI_Request>& reqs, std::deque<MPI_Datatype>& types, 
int tag)
 
  305   if ((comm == MPI_COMM_NULL) || (this->
Local(rank)))
 
  309       this->DestExt, nComps, srcData, nComps, destData);
 
  312   if (rank == this->DestRank)
 
  315     if (destData == NULL)
 
  320     MPI_Datatype subarray;
 
  321     iErr = vtkMPIPixelViewNew<DEST_TYPE>(this->DestWholeExt, this->DestExt, nComps, subarray);
 
  327     if (this->UseBlockingRecv)
 
  330       iErr = MPI_Recv(destData, 1, subarray, this->SrcRank, tag, comm, &stat);
 
  334       reqs.push_back(MPI_REQUEST_NULL);
 
  335       iErr = MPI_Irecv(destData, 1, subarray, this->SrcRank, tag, comm, &reqs.back());
 
  338 #define HOLD_RECV_TYPES 
  339 #ifdef HOLD_RECV_YPES 
  340     types.push_back(subarray);
 
  342     MPI_Type_free(&subarray);
 
  351   if (rank == this->SrcRank)
 
  359     MPI_Datatype subarray;
 
  360     iErr = vtkMPIPixelViewNew<SOURCE_TYPE>(this->SrcWholeExt, this->SrcExt, nComps, subarray);
 
  366     if (this->UseBlockingSend)
 
  368       iErr = MPI_Ssend(srcData, 1, subarray, this->DestRank, tag, comm);
 
  373       iErr = MPI_Isend(srcData, 1, subarray, this->DestRank, tag, comm, &req);
 
  374 #define SAVE_SEND_REQS 
  375 #ifdef SAVE_SEND_REQS 
  378       MPI_Request_free(&req);
 
  382 #define HOLD_SEND_TYPES 
  383 #ifdef HOLD_SEND_TYPES 
  384     types.push_back(subarray);
 
  386     MPI_Type_free(&subarray);
 
  398 VTKRENDERINGPARALLELLIC_EXPORT