Blender V5.0
gpu_shader_cxx_sampler.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
10
11#pragma once
12
14
15/* Some compilers complain about lack of return values. Keep it short. */
16#define RET \
17 { \
18 return {}; \
19 }
20
21/* -------------------------------------------------------------------- */
24
25template<typename T,
26 int Dimensions,
27 bool Cube = false,
28 bool Array = false,
29 bool Atomic = false,
30 bool Depth = false>
32 static constexpr int coord_dim = Dimensions + int(Cube) + int(Array);
33 static constexpr int deriv_dim = Dimensions + int(Cube);
34 static constexpr int extent_dim = Dimensions + int(Array);
35
41};
42
43#define TEX_TEMPLATE \
44 template<typename T, \
45 typename IntCoord = typename T::int_coord_type, \
46 typename FltCoord = typename T::flt_coord_type, \
47 typename DerivVec = typename T::derivative_type, \
48 typename DataVec = typename T::data_vec_type, \
49 typename SizeVec = typename T::size_vec_type>
50
52TEX_TEMPLATE DataVec texelFetch(T, IntCoord, int) RET;
53TEX_TEMPLATE DataVec texelFetchOffset(T, IntCoord, int, IntCoord) RET;
54TEX_TEMPLATE DataVec texture(T, FltCoord, float /*bias*/ = 0.0f) RET;
55TEX_TEMPLATE DataVec textureGather(T, FltCoord) RET;
56TEX_TEMPLATE DataVec textureGrad(T, FltCoord, DerivVec, DerivVec) RET;
57TEX_TEMPLATE DataVec textureLod(T, FltCoord, float) RET;
58TEX_TEMPLATE DataVec textureLodOffset(T, FltCoord, float, IntCoord) RET;
59
60#undef TEX_TEMPLATE
61
74
81
85
89
94
99
104
105/* Sampler Buffers do not have LOD. */
109
111
112#undef RET
static T Cube(const T &x)
#define RET
SamplerBase< uint, 2, true, true > usamplerCubeArray
SamplerBase< float, 2, false, true, false, true > sampler2DArrayDepth
SamplerBase< uint, 1 > usamplerBuffer
SamplerBase< float, 1, false, true > sampler1DArray
SamplerBase< uint, 2, false, true > usampler2DArray
SamplerBase< int, 2, true, true > isamplerCubeArray
TEX_TEMPLATE DataVec texture(T, FltCoord, float=0.0f) RET
TEX_TEMPLATE DataVec texelFetch(T, IntCoord, int) RET
SamplerBase< uint, 2, false, false, true > usampler2DAtomic
SamplerBase< float, 1 > sampler1D
SamplerBase< int, 3 > isampler3D
SamplerBase< int, 1, false, true > isampler1DArray
SamplerBase< int, 2, false, true > isampler2DArray
SamplerBase< uint, 1, false, false, true > usampler1DAtomic
SamplerBase< float, 1 > samplerBuffer
TEX_TEMPLATE DataVec textureLod(T, FltCoord, float) RET
SamplerBase< float, 2, true, false, false, true > samplerCubeDepth
SamplerBase< float, 2, true, true > samplerCubeArray
SamplerBase< int, 2 > isampler2D
SamplerBase< float, 3 > sampler3D
SamplerBase< int, 2, false, false, true > isampler2DAtomic
SamplerBase< uint, 2, false, true, true > usampler2DArrayAtomic
TEX_TEMPLATE DataVec textureGrad(T, FltCoord, DerivVec, DerivVec) RET
SamplerBase< uint, 2, true > usamplerCube
SamplerBase< float, 2, false, false, false, true > sampler2DDepth
SamplerBase< float, 2, false, true > sampler2DArray
SamplerBase< int, 1 > isamplerBuffer
TEX_TEMPLATE DataVec textureLodOffset(T, FltCoord, float, IntCoord) RET
SamplerBase< int, 2, false, true, true > isampler2DArrayAtomic
SamplerBase< int, 1 > isampler1D
SamplerBase< int, 1, false, false, true > isampler1DAtomic
SamplerBase< uint, 1 > usampler1D
SamplerBase< float, 2 > sampler2D
SamplerBase< uint, 3 > usampler3D
SamplerBase< int, 2, true > isamplerCube
TEX_TEMPLATE SizeVec textureSize(T, int) RET
TEX_TEMPLATE DataVec texelFetchOffset(T, IntCoord, int, IntCoord) RET
#define TEX_TEMPLATE
SamplerBase< float, 2, true > samplerCube
SamplerBase< uint, 3, false, false, true > usampler3DAtomic
SamplerBase< uint, 1, false, true > usampler1DArray
SamplerBase< uint, 2 > usampler2D
SamplerBase< float, 2, true, true, false, true > samplerCubeArrayDepth
SamplerBase< int, 3, false, false, true > isampler3DAtomic
TEX_TEMPLATE DataVec textureGather(T, FltCoord) RET
#define T
VecBase< float, coord_dim > flt_coord_type
VecBase< int, extent_dim > size_vec_type
VecBase< int, coord_dim > int_coord_type
VecBase< float, deriv_dim > derivative_type
static constexpr int extent_dim
VecBase< T, 4 > data_vec_type