Code refactor: make texture code more consistent between devices.
* Use common TextureInfo struct for all devices, except CUDA fermi. * Move image sampling code to kernels/*/kernel_*_image.h files. * Use arrays for data textures on Fermi too, so device_vector<Struct> works.
This commit is contained in:
@@ -46,12 +46,64 @@ CCL_NAMESPACE_BEGIN
|
||||
|
||||
#if defined (__KERNEL_CUDA__) && (__CUDA_ARCH__ < 300)
|
||||
# define kernel_tex_type(tex) (tex < TEX_START_BYTE4_CUDA ? IMAGE_DATA_TYPE_FLOAT4 : IMAGE_DATA_TYPE_BYTE4)
|
||||
# define kernel_tex_index(tex) (tex)
|
||||
#else
|
||||
# define kernel_tex_type(tex) (tex & IMAGE_DATA_TYPE_MASK)
|
||||
# define kernel_tex_index(tex) (tex >> IMAGE_DATA_TYPE_SHIFT)
|
||||
#endif
|
||||
|
||||
/* Interpolation types for textures
|
||||
* cuda also use texture space to store other objects */
|
||||
enum InterpolationType {
|
||||
INTERPOLATION_NONE = -1,
|
||||
INTERPOLATION_LINEAR = 0,
|
||||
INTERPOLATION_CLOSEST = 1,
|
||||
INTERPOLATION_CUBIC = 2,
|
||||
INTERPOLATION_SMART = 3,
|
||||
|
||||
INTERPOLATION_NUM_TYPES,
|
||||
};
|
||||
|
||||
/* Texture types
|
||||
* Since we store the type in the lower bits of a flat index,
|
||||
* the shift and bit mask constant below need to be kept in sync. */
|
||||
enum ImageDataType {
|
||||
IMAGE_DATA_TYPE_FLOAT4 = 0,
|
||||
IMAGE_DATA_TYPE_BYTE4 = 1,
|
||||
IMAGE_DATA_TYPE_HALF4 = 2,
|
||||
IMAGE_DATA_TYPE_FLOAT = 3,
|
||||
IMAGE_DATA_TYPE_BYTE = 4,
|
||||
IMAGE_DATA_TYPE_HALF = 5,
|
||||
|
||||
IMAGE_DATA_NUM_TYPES
|
||||
};
|
||||
|
||||
#define IMAGE_DATA_TYPE_SHIFT 3
|
||||
#define IMAGE_DATA_TYPE_MASK 0x7
|
||||
|
||||
/* Extension types for textures.
|
||||
*
|
||||
* Defines how the image is extrapolated past its original bounds. */
|
||||
enum ExtensionType {
|
||||
/* Cause the image to repeat horizontally and vertically. */
|
||||
EXTENSION_REPEAT = 0,
|
||||
/* Extend by repeating edge pixels of the image. */
|
||||
EXTENSION_EXTEND = 1,
|
||||
/* Clip to image size and set exterior pixels as transparent. */
|
||||
EXTENSION_CLIP = 2,
|
||||
|
||||
EXTENSION_NUM_TYPES,
|
||||
};
|
||||
|
||||
typedef struct TextureInfo {
|
||||
/* Pointer, offset or texture depending on device. */
|
||||
uint64_t data;
|
||||
/* Buffer number for OpenCL. */
|
||||
uint cl_buffer;
|
||||
/* Interpolation and extension type. */
|
||||
uint interpolation, extension;
|
||||
/* Dimensions. */
|
||||
uint width, height, depth;
|
||||
} TextureInfo;
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
#endif /* __UTIL_TEXTURE_H__ */
|
||||
|
||||
@@ -101,52 +101,6 @@ ccl_device_inline size_t round_down(size_t x, size_t multiple)
|
||||
return (x / multiple) * multiple;
|
||||
}
|
||||
|
||||
/* Interpolation types for textures
|
||||
* cuda also use texture space to store other objects */
|
||||
enum InterpolationType {
|
||||
INTERPOLATION_NONE = -1,
|
||||
INTERPOLATION_LINEAR = 0,
|
||||
INTERPOLATION_CLOSEST = 1,
|
||||
INTERPOLATION_CUBIC = 2,
|
||||
INTERPOLATION_SMART = 3,
|
||||
|
||||
INTERPOLATION_NUM_TYPES,
|
||||
};
|
||||
|
||||
/* Texture types
|
||||
* Since we store the type in the lower bits of a flat index,
|
||||
* the shift and bit mask constant below need to be kept in sync.
|
||||
*/
|
||||
|
||||
enum ImageDataType {
|
||||
IMAGE_DATA_TYPE_FLOAT4 = 0,
|
||||
IMAGE_DATA_TYPE_BYTE4 = 1,
|
||||
IMAGE_DATA_TYPE_HALF4 = 2,
|
||||
IMAGE_DATA_TYPE_FLOAT = 3,
|
||||
IMAGE_DATA_TYPE_BYTE = 4,
|
||||
IMAGE_DATA_TYPE_HALF = 5,
|
||||
|
||||
IMAGE_DATA_NUM_TYPES
|
||||
};
|
||||
|
||||
#define IMAGE_DATA_TYPE_SHIFT 3
|
||||
#define IMAGE_DATA_TYPE_MASK 0x7
|
||||
|
||||
/* Extension types for textures.
|
||||
*
|
||||
* Defines how the image is extrapolated past its original bounds.
|
||||
*/
|
||||
enum ExtensionType {
|
||||
/* Cause the image to repeat horizontally and vertically. */
|
||||
EXTENSION_REPEAT = 0,
|
||||
/* Extend by repeating edge pixels of the image. */
|
||||
EXTENSION_EXTEND = 1,
|
||||
/* Clip to image size and set exterior pixels as transparent. */
|
||||
EXTENSION_CLIP = 2,
|
||||
|
||||
EXTENSION_NUM_TYPES,
|
||||
};
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
/* Vectorized types declaration. */
|
||||
|
||||
Reference in New Issue
Block a user