Blender V4.3
blender::gpu::shader Namespace Reference

Classes

struct  PrintfFormat
 
struct  ShaderCreateInfo
 Describe inputs & outputs, stage interfaces, resources and sources of a shader. If all data is correctly provided, this is all that is needed to create and compile a GPUShader. More...
 
struct  SpecializationConstant
 
struct  StageInterfaceInfo
 

Typedefs

using CreateInfoDictionnary = Map<StringRef, ShaderCreateInfo *>
 
using CreateInfoValueDictionnary = Map<StringRef, ShaderCreateInfo>
 
using InterfaceDictionnary = Map<StringRef, StageInterfaceInfo *>
 

Enumerations

enum class  Type {
  FLOAT = 0 , VEC2 , VEC3 , VEC4 ,
  MAT3 , MAT4 , UINT , UVEC2 ,
  UVEC3 , UVEC4 , INT , IVEC2 ,
  IVEC3 , IVEC4 , BOOL , VEC3_101010I2 ,
  UCHAR , UCHAR2 , UCHAR3 , UCHAR4 ,
  CHAR , CHAR2 , CHAR3 , CHAR4 ,
  USHORT , USHORT2 , USHORT3 , USHORT4 ,
  SHORT , SHORT2 , SHORT3 , SHORT4
}
 
enum class  BuiltinBits {
  NONE = 0 , BARYCENTRIC_COORD = (1 << 0) , FRAG_COORD = (1 << 2) , FRONT_FACING = (1 << 4) ,
  GLOBAL_INVOCATION_ID = (1 << 5) , INSTANCE_ID = (1 << 6) , LAYER = (1 << 7) , LOCAL_INVOCATION_ID = (1 << 8) ,
  LOCAL_INVOCATION_INDEX = (1 << 9) , NUM_WORK_GROUP = (1 << 10) , POINT_COORD = (1 << 11) , POINT_SIZE = (1 << 12) ,
  PRIMITIVE_ID = (1 << 13) , VERTEX_ID = (1 << 14) , WORK_GROUP_ID = (1 << 15) , WORK_GROUP_SIZE = (1 << 16) ,
  VIEWPORT_INDEX = (1 << 17) , TEXTURE_ATOMIC = (1 << 18) , USE_PRINTF = (1 << 28) , USE_DEBUG_DRAW = (1 << 29) ,
  USE_DEBUG_PRINT = (1 << 30)
}
 
enum class  DepthWrite { UNCHANGED = 0 , ANY , GREATER , LESS }
 
enum class  ImageType {
  FLOAT_BUFFER = 0 , FLOAT_1D , FLOAT_1D_ARRAY , FLOAT_2D ,
  FLOAT_2D_ARRAY , FLOAT_3D , FLOAT_CUBE , FLOAT_CUBE_ARRAY ,
  INT_BUFFER , INT_1D , INT_1D_ARRAY , INT_2D ,
  INT_2D_ARRAY , INT_3D , INT_CUBE , INT_CUBE_ARRAY ,
  UINT_BUFFER , UINT_1D , UINT_1D_ARRAY , UINT_2D ,
  UINT_2D_ARRAY , UINT_3D , UINT_CUBE , UINT_CUBE_ARRAY ,
  SHADOW_2D , SHADOW_2D_ARRAY , SHADOW_CUBE , SHADOW_CUBE_ARRAY ,
  DEPTH_2D , DEPTH_2D_ARRAY , DEPTH_CUBE , DEPTH_CUBE_ARRAY ,
  UINT_2D_ATOMIC , UINT_2D_ARRAY_ATOMIC , UINT_3D_ATOMIC , INT_2D_ATOMIC ,
  INT_2D_ARRAY_ATOMIC , INT_3D_ATOMIC
}
 
enum class  Qualifier {
  NO_RESTRICT = (1 << 0) , READ = (1 << 1) , WRITE = (1 << 2) , READ_WRITE = READ | WRITE ,
  QUALIFIER_MAX = (WRITE << 1) - 1
}
 
enum class  Frequency { BATCH = 0 , PASS , GEOMETRY }
 
enum class  DualBlend { NONE = 0 , SRC_0 , SRC_1 }
 
enum class  Interpolation { SMOOTH = 0 , FLAT , NO_PERSPECTIVE }
 
enum class  PrimitiveIn {
  POINTS = 0 , LINES , LINES_ADJACENCY , TRIANGLES ,
  TRIANGLES_ADJACENCY
}
 
enum class  PrimitiveOut {
  POINTS = 0 , LINE_STRIP , TRIANGLE_STRIP , LINES ,
  TRIANGLES
}
 

Functions

BLI_INLINE int to_component_count (const Type &type)
 
static Type to_type (const eGPUType type)
 
static std::ostream & operator<< (std::ostream &stream, const Type type)
 
static std::ostream & operator<< (std::ostream &stream, const eGPUType type)
 
 ENUM_OPERATORS (BuiltinBits, BuiltinBits::USE_DEBUG_PRINT)
 
 ENUM_OPERATORS (Qualifier, Qualifier::QUALIFIER_MAX)
 
BuiltinBits gpu_shader_dependency_get_builtins (const StringRefNull source_name)
 
bool gpu_shader_dependency_has_printf ()
 
bool gpu_shader_dependency_force_gpu_print_injection ()
 
const PrintfFormatgpu_shader_dependency_get_printf_format (uint32_t format_hash)
 
Vector< const char * > gpu_shader_dependency_get_resolved_source (const StringRefNull source_name)
 
StringRefNull gpu_shader_dependency_get_source (const StringRefNull source_name)
 
StringRefNull gpu_shader_dependency_get_filename_from_source_string (const StringRefNull source_string)
 Find the name of the file from which the given string was generated.
 
Check Backend Support
static bool is_vulkan_compatible_interface (const StageInterfaceInfo &iface)
 

Variables

static CreateInfoDictionnaryg_create_infos = nullptr
 
static CreateInfoValueDictionnaryg_create_infos_unfinalized = nullptr
 
static InterfaceDictionnaryg_interfaces = nullptr
 

Typedef Documentation

◆ CreateInfoDictionnary

◆ CreateInfoValueDictionnary

◆ InterfaceDictionnary

Enumeration Type Documentation

◆ BuiltinBits

Enumerator
NONE 
BARYCENTRIC_COORD 

Allow getting barycentric coordinates inside the fragment shader.

Note
Emulated on OpenGL.
FRAG_COORD 
FRONT_FACING 
GLOBAL_INVOCATION_ID 
INSTANCE_ID 
LAYER 

Allow setting the target layer when the output is a layered frame-buffer.

Note
Emulated through geometry shader on older hardware.
LOCAL_INVOCATION_ID 
LOCAL_INVOCATION_INDEX 
NUM_WORK_GROUP 
POINT_COORD 
POINT_SIZE 
PRIMITIVE_ID 
VERTEX_ID 
WORK_GROUP_ID 
WORK_GROUP_SIZE 
VIEWPORT_INDEX 

Allow setting the target viewport when using multi viewport feature.

Note
Emulated through geometry shader on older hardware.
TEXTURE_ATOMIC 
USE_PRINTF 
USE_DEBUG_DRAW 
USE_DEBUG_PRINT 

Definition at line 156 of file gpu_shader_create_info.hh.

◆ DepthWrite

Follow convention described in: https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_conservative_depth.txt

Enumerator
UNCHANGED 
ANY 
GREATER 
LESS 

Definition at line 201 of file gpu_shader_create_info.hh.

◆ DualBlend

Dual Source Blending Index.

Enumerator
NONE 
SRC_0 
SRC_1 

Definition at line 282 of file gpu_shader_create_info.hh.

◆ Frequency

Maps to different descriptor sets.

Enumerator
BATCH 
PASS 
GEOMETRY 

Special frequency tag that will automatically source storage buffers from GPUBatch.

Definition at line 274 of file gpu_shader_create_info.hh.

◆ ImageType

Enumerator
FLOAT_BUFFER 

Color samplers/image.

FLOAT_1D 
FLOAT_1D_ARRAY 
FLOAT_2D 
FLOAT_2D_ARRAY 
FLOAT_3D 
FLOAT_CUBE 
FLOAT_CUBE_ARRAY 
INT_BUFFER 
INT_1D 
INT_1D_ARRAY 
INT_2D 
INT_2D_ARRAY 
INT_3D 
INT_CUBE 
INT_CUBE_ARRAY 
UINT_BUFFER 
UINT_1D 
UINT_1D_ARRAY 
UINT_2D 
UINT_2D_ARRAY 
UINT_3D 
UINT_CUBE 
UINT_CUBE_ARRAY 
SHADOW_2D 

Depth samplers (not supported as image).

SHADOW_2D_ARRAY 
SHADOW_CUBE 
SHADOW_CUBE_ARRAY 
DEPTH_2D 
DEPTH_2D_ARRAY 
DEPTH_CUBE 
DEPTH_CUBE_ARRAY 
UINT_2D_ATOMIC 

Atomic texture type wrappers. For OpenGL, these map to the equivalent (U)INT_* types. NOTE: Atomic variants MUST be used if the texture bound to this resource has usage flag: GPU_TEXTURE_USAGE_ATOMIC, even if atomic texture operations are not used in the given shader. The shader source MUST also utilize the correct atomic sampler handle e.g. usampler2DAtomic in conjunction with these types, for passing texture/image resources into functions.

UINT_2D_ARRAY_ATOMIC 
UINT_3D_ATOMIC 
INT_2D_ATOMIC 
INT_2D_ARRAY_ATOMIC 
INT_3D_ATOMIC 

Definition at line 210 of file gpu_shader_create_info.hh.

◆ Interpolation

Interpolation qualifiers.

Enumerator
SMOOTH 
FLAT 
NO_PERSPECTIVE 

Definition at line 289 of file gpu_shader_create_info.hh.

◆ PrimitiveIn

Input layout for geometry shader.

Enumerator
POINTS 
LINES 
LINES_ADJACENCY 
TRIANGLES 
TRIANGLES_ADJACENCY 

Definition at line 296 of file gpu_shader_create_info.hh.

◆ PrimitiveOut

Output layout for geometry shader.

Enumerator
POINTS 
LINE_STRIP 
TRIANGLE_STRIP 
LINES 
TRIANGLES 

Definition at line 305 of file gpu_shader_create_info.hh.

◆ Qualifier

Enumerator
NO_RESTRICT 

Restrict flag is set by default. Unless specified otherwise.

READ 
WRITE 
READ_WRITE 

Shorthand version of combined flags.

QUALIFIER_MAX 

Definition at line 262 of file gpu_shader_create_info.hh.

◆ Type

enum class blender::gpu::shader::Type
strong
Enumerator
FLOAT 
VEC2 
VEC3 
VEC4 
MAT3 
MAT4 
UINT 
UVEC2 
UVEC3 
UVEC4 
INT 
IVEC2 
IVEC3 
IVEC4 
BOOL 
VEC3_101010I2 
UCHAR 
UCHAR2 
UCHAR3 
UCHAR4 
CHAR 
CHAR2 
CHAR3 
CHAR4 
USHORT 
USHORT2 
USHORT3 
USHORT4 
SHORT 
SHORT2 
SHORT3 
SHORT4 

Definition at line 78 of file GPU_common_types.hh.

Function Documentation

◆ ENUM_OPERATORS() [1/2]

blender::gpu::shader::ENUM_OPERATORS ( BuiltinBits ,
BuiltinBits::USE_DEBUG_PRINT  )

◆ ENUM_OPERATORS() [2/2]

blender::gpu::shader::ENUM_OPERATORS ( Qualifier ,
Qualifier::QUALIFIER_MAX  )

◆ gpu_shader_dependency_force_gpu_print_injection()

bool blender::gpu::shader::gpu_shader_dependency_force_gpu_print_injection ( )

◆ gpu_shader_dependency_get_builtins()

BuiltinBits blender::gpu::shader::gpu_shader_dependency_get_builtins ( const StringRefNull source_name)

◆ gpu_shader_dependency_get_filename_from_source_string()

StringRefNull blender::gpu::shader::gpu_shader_dependency_get_filename_from_source_string ( const StringRefNull source_string)

Find the name of the file from which the given string was generated.

Returns
filename or empty string.
Note
source_string needs to be identical to the one given by gpu_shader_dependency_get_source()

Referenced by blender::gpu::MTLShader::compute_shader_from_glsl(), blender::gpu::MTLShader::fragment_shader_from_glsl(), blender::gpu::GLSource::GLSource(), and blender::gpu::Shader::print_log().

◆ gpu_shader_dependency_get_printf_format()

const PrintfFormat & blender::gpu::shader::gpu_shader_dependency_get_printf_format ( uint32_t format_hash)

◆ gpu_shader_dependency_get_resolved_source()

Vector< const char * > blender::gpu::shader::gpu_shader_dependency_get_resolved_source ( const StringRefNull source_name)

◆ gpu_shader_dependency_get_source()

StringRefNull blender::gpu::shader::gpu_shader_dependency_get_source ( const StringRefNull source_name)

◆ gpu_shader_dependency_has_printf()

bool blender::gpu::shader::gpu_shader_dependency_has_printf ( )

◆ is_vulkan_compatible_interface()

◆ operator<<() [1/2]

static std::ostream & blender::gpu::shader::operator<< ( std::ostream & stream,
const eGPUType type )
inlinestatic

Definition at line 146 of file gpu_shader_create_info.hh.

References GPU_CLOSURE, and to_type().

◆ operator<<() [2/2]

static std::ostream & blender::gpu::shader::operator<< ( std::ostream & stream,
const Type type )
inlinestatic

◆ to_component_count()

◆ to_type()

Variable Documentation

◆ g_create_infos

CreateInfoDictionnary* blender::gpu::shader::g_create_infos = nullptr
static

◆ g_create_infos_unfinalized

CreateInfoValueDictionnary* blender::gpu::shader::g_create_infos_unfinalized = nullptr
static

◆ g_interfaces

InterfaceDictionnary* blender::gpu::shader::g_interfaces = nullptr
static