Loading...
Searching...
No Matches
itkGPUImage.h
Go to the documentation of this file.
/*=========================================================================
*
* Copyright UMC Utrecht and contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
/*=========================================================================
*
* Copyright Insight Software Consortium
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
#ifndef itkGPUImage_h
#define itkGPUImage_h
#include "itkImage.h"
#include "itkGPUImageDataManager.h"
#include "itkVersion.h"
#include "itkObjectFactoryBase.h"
namespace itk
{
template <typename TPixel, unsigned int VImageDimension = 2>
class ITK_TEMPLATE_EXPORT ITKOpenCL_EXPORT GPUImage : public Image<TPixel, VImageDimension>
{
public:
ITK_DISALLOW_COPY_AND_MOVE(GPUImage);
using Self = GPUImage;
using Superclass = Image<TPixel, VImageDimension>;
using Pointer = SmartPointer<Self>;
using ConstPointer = SmartPointer<const Self>;
using ConstWeakPointer = WeakPointer<const Self>;
itkNewMacro(Self);
itkTypeMacro(GPUImage, Image);
itkStaticConstMacro(ImageDimension, unsigned int, VImageDimension);
using typename Superclass::PixelType;
using typename Superclass::ValueType;
using typename Superclass::InternalPixelType;
using typename Superclass::IOPixelType;
using typename Superclass::DirectionType;
using typename Superclass::SpacingType;
using typename Superclass::PixelContainer;
using typename Superclass::SizeType;
using typename Superclass::IndexType;
using typename Superclass::OffsetType;
using typename Superclass::RegionType;
using PixelContainerPointer = typename PixelContainer::Pointer;
using PixelContainerConstPointer = typename PixelContainer::ConstPointer;
using typename Superclass::AccessorType;
using AccessorFunctorType = DefaultPixelAccessorFunctor<Self>;
using NeighborhoodAccessorFunctorType = NeighborhoodAccessorFunctor<Self>;
template <typename UPixelType, unsigned int VUImageDimension = VImageDimension>
struct Rebind
{
using Type = itk::GPUImage<UPixelType, VUImageDimension>;
};
template <typename UPixelType, unsigned int VUImageDimension = VImageDimension>
using RebindImageType = itk::GPUImage<UPixelType, VUImageDimension>;
void
Allocate(bool initialize = false) override;
void
AllocateGPU();
void
Initialize() override;
void
FillBuffer(const TPixel & value);
void
SetPixel(const IndexType & index, const TPixel & value);
const TPixel &
GetPixel(const IndexType & index) const;
TPixel &
GetPixel(const IndexType & index);
const TPixel & operator[](const IndexType & index) const;
TPixel & operator[](const IndexType & index);
void
UpdateBuffers();
void
UpdateCPUBuffer();
void
UpdateGPUBuffer();
TPixel *
GetBufferPointer() override;
const TPixel *
GetBufferPointer() const override;
AccessorType
GetPixelAccessor()
{
m_DataManager->SetGPUBufferDirty();
return Superclass::GetPixelAccessor();
}
const AccessorType
GetPixelAccessor() const
{
m_DataManager->UpdateCPUBuffer();
return Superclass::GetPixelAccessor();
}
NeighborhoodAccessorFunctorType
GetNeighborhoodAccessor()
{
m_DataManager->SetGPUBufferDirty();
return NeighborhoodAccessorFunctorType();
}
const NeighborhoodAccessorFunctorType
GetNeighborhoodAccessor() const
{
m_DataManager->UpdateCPUBuffer();
return NeighborhoodAccessorFunctorType();
}
void
SetPixelContainer(PixelContainer * container);
PixelContainer *
GetPixelContainer()
{
m_DataManager->SetGPUBufferDirty();
return Superclass::GetPixelContainer();
}
const PixelContainer *
GetPixelContainer() const
{
m_DataManager->UpdateCPUBuffer();
return Superclass::GetPixelContainer();
}
void
SetCurrentCommandQueue(int queueid)
{
m_DataManager->SetCurrentCommandQueue(queueid);
}
int
GetCurrentCommandQueueId()
{
return m_DataManager->GetCurrentCommandQueueId();
}
GPUDataManager::Pointer
GetGPUDataManager() const;
void
DataHasBeenGenerated() override
{
Superclass::DataHasBeenGenerated();
if (m_DataManager->IsCPUBufferDirty())
{
m_DataManager->Modified();
}
}
void
Graft(const DataObject * data) override;
void
GraftITKImage(const DataObject * data);
void
Modified() const override;
itkGetConstReferenceMacro(IndexToPhysicalPoint, DirectionType);
itkGetConstReferenceMacro(PhysicalPointToIndex, DirectionType);
protected:
GPUImage();
~GPUImage() override = default;
void
PrintSelf(std::ostream & os, Indent indent) const override;
private:
bool m_Graft{};
typename GPUImageDataManager<GPUImage>::Pointer m_DataManager{};
};
//------------------------------------------------------------------------------
template <typename T>
class ITK_TEMPLATE_EXPORT GPUTraits
{
public:
using Type = T;
};
template <typename TPixelType, unsigned int NDimension>
class ITK_TEMPLATE_EXPORT GPUTraits<Image<TPixelType, NDimension>>
{
public:
using Type = GPUImage<TPixelType, NDimension>;
};
} // end namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
# include "itkGPUImage.hxx"
#endif
#endif
itk::GPUDataManager::Pointer
SmartPointer< Self > Pointer
Definition itkGPUDataManager.h:74
itk::GPUImageDataManager::Pointer
SmartPointer< Self > Pointer
Definition itkGPUImageDataManager.h:77
itk::GPUImage
Templated n-dimensional image class for the GPU.
Definition itkGPUImage.h:64
itk::GPUImage::UpdateBuffers
void UpdateBuffers()
itk::GPUImage< TScalarType, NDimensions >::RebindImageType
itk::GPUImage< UPixelType, VUImageDimension > RebindImageType
Definition itkGPUImage.h:107
itk::GPUImage::GetNeighborhoodAccessor
const NeighborhoodAccessorFunctorType GetNeighborhoodAccessor() const
Definition itkGPUImage.h:183
itk::GPUImage::GraftITKImage
void GraftITKImage(const DataObject *data)
itk::GPUImage::Graft
void Graft(const DataObject *data) override
itk::GPUImage::Modified
void Modified() const override
itk::GPUImage< TScalarType, NDimensions >::PixelContainerConstPointer
typename PixelContainer::ConstPointer PixelContainerConstPointer
Definition itkGPUImage.h:92
itk::GPUImage< TScalarType, NDimensions >::AccessorFunctorType
DefaultPixelAccessorFunctor< Self > AccessorFunctorType
Definition itkGPUImage.h:95
itk::GPUImage::UpdateCPUBuffer
void UpdateCPUBuffer()
itk::GPUImage< TScalarType, NDimensions >::Self
GPUImage Self
Definition itkGPUImage.h:68
itk::GPUImage::GetPixel
const TPixel & GetPixel(const IndexType &index) const
itk::GPUImage< TScalarType, NDimensions >::NeighborhoodAccessorFunctorType
NeighborhoodAccessorFunctor< Self > NeighborhoodAccessorFunctorType
Definition itkGPUImage.h:97
itk::GPUImage::AllocateGPU
void AllocateGPU()
itk::GPUImage::GetBufferPointer
TPixel * GetBufferPointer() override
itk::GPUImage::GetBufferPointer
const TPixel * GetBufferPointer() const override
itk::GPUImage::UpdateGPUBuffer
void UpdateGPUBuffer()
itk::GPUImage::GetPixelAccessor
const AccessorType GetPixelAccessor() const
Definition itkGPUImage.h:165
itk::GPUImage::GetPixelContainer
const PixelContainer * GetPixelContainer() const
Definition itkGPUImage.h:203
itk::GPUImage::GetNeighborhoodAccessor
NeighborhoodAccessorFunctorType GetNeighborhoodAccessor()
Definition itkGPUImage.h:174
itk::GPUImage::GetPixelContainer
PixelContainer * GetPixelContainer()
Definition itkGPUImage.h:195
itk::GPUImage< TScalarType, NDimensions >::ConstPointer
SmartPointer< const Self > ConstPointer
Definition itkGPUImage.h:71
itk::GPUImage::SetPixel
void SetPixel(const IndexType &index, const TPixel &value)
itk::GPUImage::SetCurrentCommandQueue
void SetCurrentCommandQueue(int queueid)
Definition itkGPUImage.h:211
itk::GPUImage::ITK_DISALLOW_COPY_AND_MOVE
ITK_DISALLOW_COPY_AND_MOVE(GPUImage)
itk::GPUImage::Allocate
void Allocate(bool initialize=false) override
itk::GPUImage::operator[]
TPixel & operator[](const IndexType &index)
itk::GPUImage::DataHasBeenGenerated
void DataHasBeenGenerated() override
Definition itkGPUImage.h:235
itk::GPUImage::Initialize
void Initialize() override
itk::GPUImage::GetCurrentCommandQueueId
int GetCurrentCommandQueueId()
Definition itkGPUImage.h:218
itk::GPUImage::GetPixelAccessor
AccessorType GetPixelAccessor()
Definition itkGPUImage.h:156
itk::GPUImage::operator[]
const TPixel & operator[](const IndexType &index) const
itk::GPUImage< TScalarType, NDimensions >::Pointer
SmartPointer< Self > Pointer
Definition itkGPUImage.h:70
itk::GPUImage::GetGPUDataManager
GPUDataManager::Pointer GetGPUDataManager() const
itk::GPUImage::GPUImage
GPUImage()
itk::GPUImage< TScalarType, NDimensions >::ConstWeakPointer
WeakPointer< const Self > ConstWeakPointer
Definition itkGPUImage.h:72
itk::GPUImage::itkStaticConstMacro
itkStaticConstMacro(ImageDimension, unsigned int, VImageDimension)
itk::GPUImage< TScalarType, NDimensions >::m_DataManager
GPUImageDataManager< GPUImage >::Pointer m_DataManager
Definition itkGPUImage.h:272
itk::GPUImage< TScalarType, NDimensions >::Superclass
Image< TScalarType, VImageDimension > Superclass
Definition itkGPUImage.h:69
itk::GPUImage::SetPixelContainer
void SetPixelContainer(PixelContainer *container)
itk::GPUImage< TScalarType, NDimensions >::PixelContainerPointer
typename PixelContainer::Pointer PixelContainerPointer
Definition itkGPUImage.h:91
itk::GPUImage::PrintSelf
void PrintSelf(std::ostream &os, Indent indent) const override
itk::GPUImage::GetPixel
TPixel & GetPixel(const IndexType &index)
itk::GPUImage::~GPUImage
~GPUImage() override=default
itk::GPUImage::FillBuffer
void FillBuffer(const TPixel &value)
itk::GPUImage< TScalarType, NDimensions >::m_Graft
bool m_Graft
Definition itkGPUImage.h:270
itkGPUImageDataManager.h
ITKOpenCL_EXPORT
#define ITKOpenCL_EXPORT
Definition itkOpenCLExport.h:33
itk
Definition itkAdvancedImageToImageMetric.h:43
itk::GPUImage::Rebind
Definition itkGPUImage.h:102
itk::GPUImage::Rebind::Type
itk::GPUImage< UPixelType, VUImageDimension > Type
Definition itkGPUImage.h:103

Generated on 1768596610 for elastix by 1.15.0 |