This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/intern/cycles/util/texture.h
Patrick Mours a8c81ffa83 Cycles: Add half precision float support for volumes with NanoVDB
This patch makes it possible to change the precision with which to
store volume data in the NanoVDB data structure (as float, half, or
using variable bit quantization) via the previously unused precision
field in the volume data block.
It makes it possible to further reduce memory usage during
rendering, at a slight cost to the visual detail of a volume.

Differential Revision: https://developer.blender.org/D10023
2022-05-23 19:08:01 +02:00

89 lines
2.2 KiB
C++

/* SPDX-License-Identifier: Apache-2.0
* Copyright 2011-2022 Blender Foundation */
#ifndef __UTIL_TEXTURE_H__
#define __UTIL_TEXTURE_H__
#include "util/transform.h"
CCL_NAMESPACE_BEGIN
/* Color to use when textures are not found. */
#define TEX_IMAGE_MISSING_R 1
#define TEX_IMAGE_MISSING_G 0
#define TEX_IMAGE_MISSING_B 1
#define TEX_IMAGE_MISSING_A 1
/* Interpolation types for textures
* CUDA also use texture space to store other objects. */
typedef enum InterpolationType {
INTERPOLATION_NONE = -1,
INTERPOLATION_LINEAR = 0,
INTERPOLATION_CLOSEST = 1,
INTERPOLATION_CUBIC = 2,
INTERPOLATION_SMART = 3,
INTERPOLATION_NUM_TYPES,
} InterpolationType;
typedef 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_TYPE_USHORT4 = 6,
IMAGE_DATA_TYPE_USHORT = 7,
IMAGE_DATA_TYPE_NANOVDB_FLOAT = 8,
IMAGE_DATA_TYPE_NANOVDB_FLOAT3 = 9,
IMAGE_DATA_TYPE_NANOVDB_FPN = 10,
IMAGE_DATA_TYPE_NANOVDB_FP16 = 11,
IMAGE_DATA_NUM_TYPES
} ImageDataType;
/* Alpha types
* How to treat alpha in images. */
typedef enum ImageAlphaType {
IMAGE_ALPHA_UNASSOCIATED = 0,
IMAGE_ALPHA_ASSOCIATED = 1,
IMAGE_ALPHA_CHANNEL_PACKED = 2,
IMAGE_ALPHA_IGNORE = 3,
IMAGE_ALPHA_AUTO = 4,
IMAGE_ALPHA_NUM_TYPES,
} ImageAlphaType;
/* Extension types for textures.
*
* Defines how the image is extrapolated past its original bounds. */
typedef 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,
} ExtensionType;
typedef struct TextureInfo {
/* Pointer, offset or texture depending on device. */
uint64_t data;
/* Data Type */
uint data_type;
/* Interpolation and extension type. */
uint interpolation, extension;
/* Dimensions. */
uint width, height, depth;
/* Transform for 3D textures. */
uint use_transform_3d;
Transform transform_3d;
} TextureInfo;
CCL_NAMESPACE_END
#endif /* __UTIL_TEXTURE_H__ */