Blender  V3.3
Classes | Typedefs | Enumerations | Functions
GPU_material.h File Reference
#include "DNA_customdata_types.h"
#include "DNA_image_types.h"
#include "DNA_listBase.h"
#include "BLI_sys_types.h"
#include "GPU_shader.h"
#include "GPU_texture.h"

Go to the source code of this file.

Classes

struct  GPUNodeStack
 
struct  GPUCodegenOutput
 
struct  GPUMaterialAttribute
 
struct  GPUMaterialTexture
 
struct  GPUUniformAttr
 
struct  GPUUniformAttrList
 

Typedefs

typedef struct GPUMaterial GPUMaterial
 
typedef struct GPUNode GPUNode
 
typedef struct GPUNodeLink GPUNodeLink
 
typedef enum eGPUType eGPUType
 
typedef enum eGPUMaterialFlag eGPUMaterialFlag
 
typedef struct GPUNodeStack GPUNodeStack
 
typedef enum eGPUMaterialStatus eGPUMaterialStatus
 
typedef enum eGPUDefaultValue eGPUDefaultValue
 
typedef struct GPUCodegenOutput GPUCodegenOutput
 
typedef void(* GPUCodegenCallbackFn) (void *thunk, GPUMaterial *mat, GPUCodegenOutput *codegen)
 
typedef struct GPUMaterialAttribute GPUMaterialAttribute
 
typedef struct GPUMaterialTexture GPUMaterialTexture
 
typedef struct GPUUniformAttr GPUUniformAttr
 
typedef struct GPUUniformAttrList GPUUniformAttrList
 

Enumerations

enum  eGPUType {
  GPU_NONE = 0 , GPU_FLOAT = 1 , GPU_VEC2 = 2 , GPU_VEC3 = 3 ,
  GPU_VEC4 = 4 , GPU_MAT3 = 9 , GPU_MAT4 = 16 , GPU_MAX_CONSTANT_DATA = GPU_MAT4 ,
  GPU_TEX1D_ARRAY = 1001 , GPU_TEX2D = 1002 , GPU_TEX2D_ARRAY = 1003 , GPU_TEX3D = 1004 ,
  GPU_CLOSURE = 1007 , GPU_ATTR = 3001
}
 
enum  eGPUMaterialFlag {
  GPU_MATFLAG_DIFFUSE = (1 << 0) , GPU_MATFLAG_SUBSURFACE = (1 << 1) , GPU_MATFLAG_GLOSSY = (1 << 2) , GPU_MATFLAG_REFRACT = (1 << 3) ,
  GPU_MATFLAG_EMISSION = (1 << 4) , GPU_MATFLAG_TRANSPARENT = (1 << 5) , GPU_MATFLAG_HOLDOUT = (1 << 6) , GPU_MATFLAG_SHADER_TO_RGBA = (1 << 7) ,
  GPU_MATFLAG_AO = (1 << 8) , GPU_MATFLAG_CLEARCOAT = (1 << 9) , GPU_MATFLAG_OBJECT_INFO = (1 << 10) , GPU_MATFLAG_AOV = (1 << 11) ,
  GPU_MATFLAG_BARYCENTRIC = (1 << 20) , GPU_MATFLAG_PRINCIPLED_CLEARCOAT = (1 << 21) , GPU_MATFLAG_PRINCIPLED_METALLIC = (1 << 22) , GPU_MATFLAG_PRINCIPLED_DIELECTRIC = (1 << 23) ,
  GPU_MATFLAG_PRINCIPLED_GLASS = (1 << 24) , GPU_MATFLAG_PRINCIPLED_ANY = (1 << 25) , GPU_MATFLAG_UPDATED = (1 << 29) , GPU_MATFLAG_LOOKDEV_HACK = (1 << 30)
}
 
enum  eGPUMaterialStatus { GPU_MAT_FAILED = 0 , GPU_MAT_CREATED , GPU_MAT_QUEUED , GPU_MAT_SUCCESS }
 
enum  eGPUDefaultValue { GPU_DEFAULT_0 = 0 , GPU_DEFAULT_1 }
 

Functions

 ENUM_OPERATORS (eGPUMaterialFlag, GPU_MATFLAG_LOOKDEV_HACK)
 
GPUNodeLinkGPU_constant (const float *num)
 
GPUNodeLinkGPU_uniform (const float *num)
 
GPUNodeLinkGPU_attribute (GPUMaterial *mat, eCustomDataType type, const char *name)
 
GPUNodeLinkGPU_attribute_default_color (GPUMaterial *mat)
 
GPUNodeLinkGPU_attribute_with_default (GPUMaterial *mat, eCustomDataType type, const char *name, eGPUDefaultValue default_value)
 
GPUNodeLinkGPU_uniform_attribute (GPUMaterial *mat, const char *name, bool use_dupli)
 
GPUNodeLinkGPU_image (GPUMaterial *mat, struct Image *ima, struct ImageUser *iuser, eGPUSamplerState sampler_state)
 
GPUNodeLinkGPU_image_tiled (GPUMaterial *mat, struct Image *ima, struct ImageUser *iuser, eGPUSamplerState sampler_state)
 
GPUNodeLinkGPU_image_tiled_mapping (GPUMaterial *mat, struct Image *ima, struct ImageUser *iuser)
 
GPUNodeLinkGPU_color_band (GPUMaterial *mat, int size, float *pixels, float *row)
 
GPUNodeLinkGPU_differentiate_float_function (const char *function_name)
 
bool GPU_link (GPUMaterial *mat, const char *name,...)
 
bool GPU_stack_link (GPUMaterial *mat, struct bNode *node, const char *name, GPUNodeStack *in, GPUNodeStack *out,...)
 
GPUNodeLinkGPU_uniformbuf_link_out (struct GPUMaterial *mat, struct bNode *node, struct GPUNodeStack *stack, int index)
 
void GPU_material_output_surface (GPUMaterial *material, GPUNodeLink *link)
 
void GPU_material_output_volume (GPUMaterial *material, GPUNodeLink *link)
 
void GPU_material_output_displacement (GPUMaterial *material, GPUNodeLink *link)
 
void GPU_material_output_thickness (GPUMaterial *material, GPUNodeLink *link)
 
void GPU_material_add_output_link_aov (GPUMaterial *material, GPUNodeLink *link, int hash)
 
char * GPU_material_split_sub_function (GPUMaterial *material, eGPUType return_type, GPUNodeLink **link)
 
bool GPU_material_sss_profile_create (GPUMaterial *material, float radii[3])
 
struct GPUUniformBufGPU_material_sss_profile_get (GPUMaterial *material, int sample_len, struct GPUTexture **tex_profile)
 
GPUMaterialGPU_material_from_nodetree_find (struct ListBase *gpumaterials, const void *engine_type, int options)
 
GPUMaterialGPU_material_from_nodetree (struct Scene *scene, struct Material *ma, struct bNodeTree *ntree, struct ListBase *gpumaterials, const char *name, uint64_t shader_uuid, bool is_volume_shader, bool is_lookdev, GPUCodegenCallbackFn callback, void *thunk)
 
void GPU_material_compile (GPUMaterial *mat)
 
void GPU_material_free (struct ListBase *gpumaterial)
 
void GPU_material_acquire (GPUMaterial *mat)
 
void GPU_material_release (GPUMaterial *mat)
 
void GPU_materials_free (struct Main *bmain)
 
struct SceneGPU_material_scene (GPUMaterial *material)
 
struct GPUPassGPU_material_get_pass (GPUMaterial *material)
 
struct GPUShaderGPU_material_get_shader (GPUMaterial *material)
 
struct MaterialGPU_material_get_material (GPUMaterial *material)
 
eGPUMaterialStatus GPU_material_status (GPUMaterial *mat)
 
void GPU_material_status_set (GPUMaterial *mat, eGPUMaterialStatus status)
 
struct GPUUniformBufGPU_material_uniform_buffer_get (GPUMaterial *material)
 
void GPU_material_uniform_buffer_create (GPUMaterial *material, ListBase *inputs)
 
struct GPUUniformBufGPU_material_create_sss_profile_ubo (void)
 
bool GPU_material_has_surface_output (GPUMaterial *mat)
 
bool GPU_material_has_volume_output (GPUMaterial *mat)
 
void GPU_material_flag_set (GPUMaterial *mat, eGPUMaterialFlag flag)
 
bool GPU_material_flag_get (const GPUMaterial *mat, eGPUMaterialFlag flag)
 
eGPUMaterialFlag GPU_material_flag (const GPUMaterial *mat)
 
bool GPU_material_recalc_flag_get (GPUMaterial *mat)
 
uint64_t GPU_material_uuid_get (GPUMaterial *mat)
 
void GPU_pass_cache_init (void)
 
void GPU_pass_cache_garbage_collect (void)
 
void GPU_pass_cache_free (void)
 
ListBase GPU_material_attributes (GPUMaterial *material)
 
ListBase GPU_material_textures (GPUMaterial *material)
 
GPUUniformAttrListGPU_material_uniform_attributes (GPUMaterial *material)
 
struct GHashGPU_uniform_attr_list_hash_new (const char *info)
 
void GPU_uniform_attr_list_copy (GPUUniformAttrList *dest, GPUUniformAttrList *src)
 
void GPU_uniform_attr_list_free (GPUUniformAttrList *set)
 

Typedef Documentation

◆ eGPUDefaultValue

◆ eGPUMaterialFlag

◆ eGPUMaterialStatus

◆ eGPUType

typedef enum eGPUType eGPUType

◆ GPUCodegenCallbackFn

typedef void(* GPUCodegenCallbackFn) (void *thunk, GPUMaterial *mat, GPUCodegenOutput *codegen)

Definition at line 137 of file GPU_material.h.

◆ GPUCodegenOutput

◆ GPUMaterial

typedef struct GPUMaterial GPUMaterial

Definition at line 1 of file GPU_material.h.

◆ GPUMaterialAttribute

◆ GPUMaterialTexture

◆ GPUNode

typedef struct GPUNode GPUNode

Definition at line 1 of file GPU_material.h.

◆ GPUNodeLink

typedef struct GPUNodeLink GPUNodeLink

Definition at line 1 of file GPU_material.h.

◆ GPUNodeStack

typedef struct GPUNodeStack GPUNodeStack

◆ GPUUniformAttr

◆ GPUUniformAttrList

Enumeration Type Documentation

◆ eGPUDefaultValue

Enumerator
GPU_DEFAULT_0 
GPU_DEFAULT_1 

Definition at line 120 of file GPU_material.h.

◆ eGPUMaterialFlag

Enumerator
GPU_MATFLAG_DIFFUSE 
GPU_MATFLAG_SUBSURFACE 
GPU_MATFLAG_GLOSSY 
GPU_MATFLAG_REFRACT 
GPU_MATFLAG_EMISSION 
GPU_MATFLAG_TRANSPARENT 
GPU_MATFLAG_HOLDOUT 
GPU_MATFLAG_SHADER_TO_RGBA 
GPU_MATFLAG_AO 
GPU_MATFLAG_CLEARCOAT 
GPU_MATFLAG_OBJECT_INFO 
GPU_MATFLAG_AOV 
GPU_MATFLAG_BARYCENTRIC 
GPU_MATFLAG_PRINCIPLED_CLEARCOAT 
GPU_MATFLAG_PRINCIPLED_METALLIC 
GPU_MATFLAG_PRINCIPLED_DIELECTRIC 
GPU_MATFLAG_PRINCIPLED_GLASS 
GPU_MATFLAG_PRINCIPLED_ANY 
GPU_MATFLAG_UPDATED 
GPU_MATFLAG_LOOKDEV_HACK 

Definition at line 70 of file GPU_material.h.

◆ eGPUMaterialStatus

Enumerator
GPU_MAT_FAILED 
GPU_MAT_CREATED 
GPU_MAT_QUEUED 
GPU_MAT_SUCCESS 

Definition at line 113 of file GPU_material.h.

◆ eGPUType

enum eGPUType
Enumerator
GPU_NONE 
GPU_FLOAT 
GPU_VEC2 
GPU_VEC3 
GPU_VEC4 
GPU_MAT3 
GPU_MAT4 
GPU_MAX_CONSTANT_DATA 
GPU_TEX1D_ARRAY 
GPU_TEX2D 
GPU_TEX2D_ARRAY 
GPU_TEX3D 
GPU_CLOSURE 
GPU_ATTR 

Definition at line 45 of file GPU_material.h.

Function Documentation

◆ ENUM_OPERATORS()

ENUM_OPERATORS ( eGPUMaterialFlag  ,
GPU_MATFLAG_LOOKDEV_HACK   
)

◆ GPU_attribute()

GPUNodeLink* GPU_attribute ( GPUMaterial mat,
eCustomDataType  type,
const char *  name 
)

◆ GPU_attribute_default_color()

GPUNodeLink* GPU_attribute_default_color ( GPUMaterial mat)

Add a GPU attribute that refers to the default color attribute on a geometry. The name, type, and domain are unknown and do not depend on the material.

Definition at line 497 of file gpu_node_graph.c.

References GPUNodeLink::attr, CD_AUTO_FROM_NAME, GPU_constant(), gpu_material_node_graph(), GPU_MAX_CONSTANT_DATA, gpu_node_graph_add_attribute(), GPU_NODE_LINK_ATTR, gpu_node_link_create(), graph, GPUMaterialAttribute::is_default_color, GPUNodeLink::link_type, and NULL.

Referenced by blender::nodes::node_shader_vertex_color_cc::node_shader_gpu_vertex_color().

◆ GPU_attribute_with_default()

GPUNodeLink* GPU_attribute_with_default ( GPUMaterial mat,
eCustomDataType  type,
const char *  name,
eGPUDefaultValue  default_value 
)

◆ GPU_color_band()

GPUNodeLink* GPU_color_band ( GPUMaterial mat,
int  size,
float pixels,
float row 
)

◆ GPU_constant()

GPUNodeLink* GPU_constant ( const float num)

Definition at line 541 of file gpu_node_graph.c.

References GPUNodeLink::data, GPU_NODE_LINK_CONSTANT, gpu_node_link_create(), and GPUNodeLink::link_type.

Referenced by GPU_attribute(), GPU_attribute_default_color(), gpu_node_input_socket(), blender::nodes::node_shader_bump_cc::gpu_shader_bump(), blender::nodes::node_shader_curves_cc::gpu_shader_curve_float(), blender::nodes::node_shader_curves_cc::gpu_shader_curve_rgb(), blender::nodes::node_shader_curves_cc::gpu_shader_curve_vec(), blender::nodes::node_shader_map_range_cc::gpu_shader_map_range(), blender::nodes::node_shader_math_cc::gpu_shader_math(), blender::nodes::node_shader_mix_rgb_cc::gpu_shader_mix_rgb(), blender::nodes::node_shader_normal_map_cc::gpu_shader_normal_map(), blender::nodes::node_shader_color_ramp_cc::gpu_shader_valtorgb(), blender::nodes::node_shader_vector_transform_cc::gpu_shader_vect_transform(), blender::nodes::node_shader_vector_rotate_cc::gpu_shader_vector_rotate(), GPU_uniform_attribute(), blender::nodes::node_shader_ambient_occlusion_cc::node_shader_gpu_ambient_occlusion(), blender::nodes::node_shader_blackbody_cc::node_shader_gpu_blackbody(), blender::nodes::node_shader_bsdf_anisotropic_cc::node_shader_gpu_bsdf_anisotropic(), blender::nodes::node_shader_bsdf_glass_cc::node_shader_gpu_bsdf_glass(), blender::nodes::node_shader_bsdf_glossy_cc::node_shader_gpu_bsdf_glossy(), blender::nodes::node_shader_bsdf_principled_cc::node_shader_gpu_bsdf_principled(), blender::nodes::node_shader_eevee_specular_cc::node_shader_gpu_eevee_specular(), blender::nodes::node_shader_geometry_cc::node_shader_gpu_geometry(), blender::nodes::node_shader_hair_info_cc::node_shader_gpu_hair_info(), blender::nodes::node_shader_object_info_cc::node_shader_gpu_object_info(), blender::nodes::node_shader_output_aov_cc::node_shader_gpu_output_aov(), blender::nodes::node_shader_tex_brick_cc::node_shader_gpu_tex_brick(), blender::nodes::node_shader_tex_coord_cc::node_shader_gpu_tex_coord(), blender::nodes::node_shader_tex_gradient_cc::node_shader_gpu_tex_gradient(), blender::nodes::node_shader_tex_magic_cc::node_shader_gpu_tex_magic(), blender::nodes::node_shader_tex_voronoi_cc::node_shader_gpu_tex_voronoi(), blender::nodes::node_shader_tex_wave_cc::node_shader_gpu_tex_wave(), blender::nodes::node_shader_volume_principled_cc::node_shader_gpu_volume_principled(), and blender::nodes::node_shader_wavelength_cc::node_shader_gpu_wavelength().

◆ GPU_differentiate_float_function()

GPUNodeLink* GPU_differentiate_float_function ( const char *  function_name)

Create an implementation defined differential calculation of a float function. The given function should return a float. The result will be a vec2 containing dFdx and dFdy result of that function.

Definition at line 557 of file gpu_node_graph.c.

References GPUNodeLink::function_name, gpu_node_link_create(), GPU_NODE_LINK_DIFFERENTIATE_FLOAT_FN, and GPUNodeLink::link_type.

Referenced by blender::nodes::node_shader_bump_cc::gpu_shader_bump().

◆ GPU_image()

GPUNodeLink* GPU_image ( GPUMaterial mat,
struct Image ima,
struct ImageUser iuser,
eGPUSamplerState  sampler_state 
)

◆ GPU_image_tiled()

GPUNodeLink* GPU_image_tiled ( GPUMaterial mat,
struct Image ima,
struct ImageUser iuser,
eGPUSamplerState  sampler_state 
)

◆ GPU_image_tiled_mapping()

GPUNodeLink* GPU_image_tiled_mapping ( GPUMaterial mat,
struct Image ima,
struct ImageUser iuser 
)

◆ GPU_link()

bool GPU_link ( GPUMaterial mat,
const char *  name,
  ... 
)

Definition at line 616 of file gpu_node_graph.c.

References BLI_addtail(), FUNCTION_QUAL_OUT, gpu_material_library_use_function(), gpu_material_node_graph(), gpu_node_create(), gpu_node_input_link(), gpu_node_output(), graph, node, and params.

Referenced by blender::nodes::node_shader_volume_principled_cc::attribute_post_process(), GPU_material_split_sub_function(), blender::nodes::node_shader_bevel_cc::gpu_shader_bevel(), blender::nodes::node_shader_bump_cc::gpu_shader_bump(), blender::nodes::node_shader_displacement_cc::gpu_shader_displacement(), blender::nodes::node_shader_map_range_cc::gpu_shader_map_range(), blender::nodes::node_shader_math_cc::gpu_shader_math(), blender::nodes::node_shader_mix_rgb_cc::gpu_shader_mix_rgb(), blender::nodes::node_shader_normal_map_cc::gpu_shader_normal_map(), blender::nodes::node_shader_vector_transform_cc::gpu_shader_vect_transform(), gpu_uniformbuffer_link(), blender::nodes::node_shader_ambient_occlusion_cc::node_shader_gpu_ambient_occlusion(), blender::nodes::node_shader_attribute_cc::node_shader_gpu_attribute(), blender::nodes::node_shader_bsdf_anisotropic_cc::node_shader_gpu_bsdf_anisotropic(), blender::nodes::node_shader_bsdf_diffuse_cc::node_shader_gpu_bsdf_diffuse(), blender::nodes::node_shader_bsdf_glass_cc::node_shader_gpu_bsdf_glass(), blender::nodes::node_shader_bsdf_glossy_cc::node_shader_gpu_bsdf_glossy(), blender::nodes::node_shader_bsdf_principled_cc::node_shader_gpu_bsdf_principled(), blender::nodes::node_shader_bsdf_refraction_cc::node_shader_gpu_bsdf_refraction(), blender::nodes::node_shader_bsdf_toon_cc::node_shader_gpu_bsdf_toon(), blender::nodes::node_shader_bsdf_translucent_cc::node_shader_gpu_bsdf_translucent(), blender::nodes::node_shader_bsdf_velvet_cc::node_shader_gpu_bsdf_velvet(), node_shader_gpu_bump_tex_coord(), blender::nodes::node_shader_eevee_specular_cc::node_shader_gpu_eevee_specular(), blender::nodes::node_shader_fresnel_cc::node_shader_gpu_fresnel(), blender::nodes::node_shader_geometry_cc::node_shader_gpu_geometry(), blender::nodes::node_shader_layer_weight_cc::node_shader_gpu_layer_weight(), blender::nodes::node_shader_output_light_cc::node_shader_gpu_output_light(), blender::nodes::node_shader_output_material_cc::node_shader_gpu_output_material(), blender::nodes::node_shader_output_world_cc::node_shader_gpu_output_world(), blender::nodes::node_shader_subsurface_scattering_cc::node_shader_gpu_subsurface_scattering(), blender::nodes::node_shader_tangent_cc::node_shader_gpu_tangent(), blender::nodes::node_shader_tex_coord_cc::node_shader_gpu_tex_coord(), blender::nodes::node_shader_tex_environment_cc::node_shader_gpu_tex_environment(), blender::nodes::node_shader_tex_image_cc::node_shader_gpu_tex_image(), node_shader_gpu_tex_mapping(), and blender::nodes::node_shader_volume_info_cc::node_shader_gpu_volume_info().

◆ GPU_material_acquire()

void GPU_material_acquire ( GPUMaterial mat)

◆ GPU_material_add_output_link_aov()

void GPU_material_add_output_link_aov ( GPUMaterial material,
GPUNodeLink link,
int  hash 
)

◆ GPU_material_attributes()

ListBase GPU_material_attributes ( GPUMaterial material)

◆ GPU_material_compile()

void GPU_material_compile ( GPUMaterial mat)

◆ GPU_material_create_sss_profile_ubo()

struct GPUUniformBuf* GPU_material_create_sss_profile_ubo ( void  )

Definition at line 494 of file gpu_material.c.

References GPU_uniformbuf_create.

◆ GPU_material_flag()

eGPUMaterialFlag GPU_material_flag ( const GPUMaterial mat)

Definition at line 606 of file gpu_material.c.

References GPUMaterial::flag.

Referenced by GPUCodegen::GPUCodegen().

◆ GPU_material_flag_get()

bool GPU_material_flag_get ( const GPUMaterial mat,
eGPUMaterialFlag  flag 
)

◆ GPU_material_flag_set()

void GPU_material_flag_set ( GPUMaterial mat,
eGPUMaterialFlag  flag 
)

Definition at line 596 of file gpu_material.c.

References GPUMaterial::flag.

Referenced by GPU_attribute(), blender::nodes::node_shader_normal_map_cc::gpu_shader_normal_map(), blender::nodes::node_shader_particle_info_cc::gpu_shader_particle_info(), blender::nodes::node_shader_ambient_occlusion_cc::node_shader_gpu_ambient_occlusion(), blender::nodes::node_shader_bsdf_anisotropic_cc::node_shader_gpu_bsdf_anisotropic(), blender::nodes::node_shader_bsdf_diffuse_cc::node_shader_gpu_bsdf_diffuse(), blender::nodes::node_shader_bsdf_glass_cc::node_shader_gpu_bsdf_glass(), blender::nodes::node_shader_bsdf_glossy_cc::node_shader_gpu_bsdf_glossy(), blender::nodes::node_shader_bsdf_principled_cc::node_shader_gpu_bsdf_principled(), blender::nodes::node_shader_bsdf_refraction_cc::node_shader_gpu_bsdf_refraction(), blender::nodes::node_shader_bsdf_toon_cc::node_shader_gpu_bsdf_toon(), blender::nodes::node_shader_bsdf_translucent_cc::node_shader_gpu_bsdf_translucent(), blender::nodes::node_shader_bsdf_transparent_cc::node_shader_gpu_bsdf_transparent(), blender::nodes::node_shader_bsdf_velvet_cc::node_shader_gpu_bsdf_velvet(), blender::nodes::node_shader_eevee_specular_cc::node_shader_gpu_eevee_specular(), blender::nodes::node_shader_emission_cc::node_shader_gpu_emission(), blender::nodes::node_shader_geometry_cc::node_shader_gpu_geometry(), blender::nodes::node_shader_object_info_cc::node_shader_gpu_object_info(), blender::nodes::node_shader_output_aov_cc::node_shader_gpu_output_aov(), blender::nodes::node_shader_shader_to_rgb_cc::node_shader_gpu_shadertorgb(), blender::nodes::node_shader_subsurface_scattering_cc::node_shader_gpu_subsurface_scattering(), and blender::nodes::node_shader_wireframe_cc::node_shader_gpu_wireframe().

◆ GPU_material_free()

void GPU_material_free ( struct ListBase gpumaterial)

◆ GPU_material_from_nodetree()

GPUMaterial* GPU_material_from_nodetree ( struct Scene scene,
struct Material ma,
struct bNodeTree ntree,
struct ListBase gpumaterials,
const char *  name,
uint64_t  shader_uuid,
bool  is_volume_shader,
bool  is_lookdev,
GPUCodegenCallbackFn  callback,
void thunk 
)

◆ GPU_material_from_nodetree_find()

GPUMaterial* GPU_material_from_nodetree_find ( struct ListBase gpumaterials,
const void engine_type,
int  options 
)

High level functions to create and use GPU materials.

◆ GPU_material_get_material()

struct Material* GPU_material_get_material ( GPUMaterial material)

Return can be NULL if it's a world material.

Definition at line 196 of file gpu_material.c.

References material.

Referenced by blender::nodes::node_shader_object_info_cc::node_shader_gpu_object_info().

◆ GPU_material_get_pass()

struct GPUPass* GPU_material_get_pass ( GPUMaterial material)

Definition at line 186 of file gpu_material.c.

References material.

Referenced by DRW_shgroup_material_create().

◆ GPU_material_get_shader()

struct GPUShader* GPU_material_get_shader ( GPUMaterial material)

◆ GPU_material_has_surface_output()

bool GPU_material_has_surface_output ( GPUMaterial mat)

Definition at line 586 of file gpu_material.c.

References GPUMaterial::has_surface_output.

Referenced by EEVEE_materials_cache_populate().

◆ GPU_material_has_volume_output()

bool GPU_material_has_volume_output ( GPUMaterial mat)

◆ GPU_material_output_displacement()

void GPU_material_output_displacement ( GPUMaterial material,
GPUNodeLink link 
)

◆ GPU_material_output_surface()

void GPU_material_output_surface ( GPUMaterial material,
GPUNodeLink link 
)

◆ GPU_material_output_thickness()

void GPU_material_output_thickness ( GPUMaterial material,
GPUNodeLink link 
)

◆ GPU_material_output_volume()

void GPU_material_output_volume ( GPUMaterial material,
GPUNodeLink link 
)

◆ GPU_material_recalc_flag_get()

bool GPU_material_recalc_flag_get ( GPUMaterial mat)

Definition at line 612 of file gpu_material.c.

References GPUMaterial::flag, and GPU_MATFLAG_UPDATED.

◆ GPU_material_release()

void GPU_material_release ( GPUMaterial mat)

Definition at line 707 of file gpu_material.c.

References gpu_material_free_single().

Referenced by drw_deferred_shader_compilation_exec().

◆ GPU_material_scene()

struct Scene* GPU_material_scene ( GPUMaterial material)

Definition at line 181 of file gpu_material.c.

References material.

◆ GPU_material_split_sub_function()

char* GPU_material_split_sub_function ( GPUMaterial material,
eGPUType  return_type,
GPUNodeLink **  link 
)

Wrap a part of the material graph into a function. You need then need to call the function by using something like GPU_differentiate_float_function.

Note
This replace the link by a constant to break the link with the main graph.
Parameters
return_typesub function return type. Output is cast to this type.
linklink to use as the sub function output.
Returns
the name of the generated function.

Definition at line 541 of file gpu_material.c.

References BLI_addtail(), BLI_assert, GPU_FLOAT, GPU_link(), GPU_VEC3, GPU_VEC4, material, MEM_callocN, GPUNodeGraphFunctionLink::name, GPUNodeGraphFunctionLink::outlink, and SNPRINTF.

Referenced by blender::nodes::node_shader_bump_cc::gpu_shader_bump().

◆ GPU_material_sss_profile_create()

bool GPU_material_sss_profile_create ( GPUMaterial material,
float  radii[3] 
)

◆ GPU_material_sss_profile_get()

struct GPUUniformBuf* GPU_material_sss_profile_get ( GPUMaterial material,
int  sample_len,
struct GPUTexture **  tex_profile 
)

◆ GPU_material_status()

eGPUMaterialStatus GPU_material_status ( GPUMaterial mat)

Return true if the material compilation has not yet begin or begin.

Definition at line 574 of file gpu_material.c.

References GPUMaterial::status.

Referenced by drw_deferred_shader_add(), and EEVEE_material_get().

◆ GPU_material_status_set()

void GPU_material_status_set ( GPUMaterial mat,
eGPUMaterialStatus  status 
)

◆ GPU_material_textures()

ListBase GPU_material_textures ( GPUMaterial material)

Definition at line 221 of file gpu_material.c.

References material.

Referenced by DRW_shgroup_add_material_resources(), and image_walk_gpu_materials().

◆ GPU_material_uniform_attributes()

GPUUniformAttrList* GPU_material_uniform_attributes ( GPUMaterial material)

Definition at line 226 of file gpu_material.c.

References GPUUniformAttrList::count, material, and NULL.

Referenced by DRW_shgroup_add_material_resources().

◆ GPU_material_uniform_buffer_create()

void GPU_material_uniform_buffer_create ( GPUMaterial material,
ListBase inputs 
)

Create dynamic UBO from parameters

Parameters
inputsItems are LinkData, data is GPUInput (BLI_genericNodeN(GPUInput)).

Definition at line 206 of file gpu_material.c.

References GPU_uniformbuf_create_from_list(), inputs, and material.

Referenced by GPUCodegen::generate_uniform_buffer().

◆ GPU_material_uniform_buffer_get()

struct GPUUniformBuf* GPU_material_uniform_buffer_get ( GPUMaterial material)

Definition at line 201 of file gpu_material.c.

References material.

Referenced by DRW_shgroup_add_material_resources().

◆ GPU_material_uuid_get()

uint64_t GPU_material_uuid_get ( GPUMaterial mat)

◆ GPU_materials_free()

void GPU_materials_free ( struct Main bmain)

◆ GPU_pass_cache_free()

void GPU_pass_cache_free ( void  )

◆ GPU_pass_cache_garbage_collect()

void GPU_pass_cache_garbage_collect ( void  )

◆ GPU_pass_cache_init()

void GPU_pass_cache_init ( void  )

Definition at line 784 of file gpu_codegen.cc.

References BLI_spin_init(), and pass_cache_spin.

Referenced by WM_init_opengl().

◆ GPU_stack_link()

bool GPU_stack_link ( GPUMaterial mat,
struct bNode node,
const char *  name,
GPUNodeStack in,
GPUNodeStack out,
  ... 
)

Definition at line 723 of file gpu_node_graph.c.

References gpu_stack_link_v(), material, usdtokens::out(), and params.

Referenced by blender::nodes::node_shader_bevel_cc::gpu_shader_bevel(), blender::nodes::node_shader_brightness_cc::gpu_shader_brightcontrast(), blender::nodes::node_shader_bump_cc::gpu_shader_bump(), blender::nodes::node_shader_camera_cc::gpu_shader_camera(), blender::nodes::node_shader_clamp_cc::gpu_shader_clamp(), blender::nodes::node_shader_combine_color_cc::gpu_shader_combcolor(), blender::nodes::node_shader_sepcomb_hsv_cc::gpu_shader_combhsv(), blender::nodes::node_shader_sepcomb_rgb_cc::gpu_shader_combrgb(), blender::nodes::node_shader_sepcomb_xyz_cc::gpu_shader_combxyz(), blender::nodes::node_shader_curves_cc::gpu_shader_curve_float(), blender::nodes::node_shader_curves_cc::gpu_shader_curve_rgb(), blender::nodes::node_shader_curves_cc::gpu_shader_curve_vec(), blender::nodes::node_shader_displacement_cc::gpu_shader_displacement(), blender::nodes::node_shader_hueSatVal_cc::gpu_shader_hue_sat(), blender::nodes::node_shader_invert_cc::gpu_shader_invert(), blender::nodes::node_shader_map_range_cc::gpu_shader_map_range(), blender::nodes::node_shader_mapping_cc::gpu_shader_mapping(), blender::nodes::node_shader_math_cc::gpu_shader_math(), blender::nodes::node_shader_mix_rgb_cc::gpu_shader_mix_rgb(), blender::nodes::node_shader_normal_cc::gpu_shader_normal(), blender::nodes::node_shader_particle_info_cc::gpu_shader_particle_info(), blender::nodes::node_shader_holdout_cc::gpu_shader_rgb(), blender::nodes::node_shader_rgb_cc::gpu_shader_rgb(), blender::nodes::node_shader_rgb_to_bw_cc::gpu_shader_rgbtobw(), blender::nodes::node_shader_separate_color_cc::gpu_shader_sepcolor(), blender::nodes::node_shader_sepcomb_hsv_cc::gpu_shader_sephsv(), blender::nodes::node_shader_sepcomb_rgb_cc::gpu_shader_seprgb(), blender::nodes::node_shader_sepcomb_xyz_cc::gpu_shader_sepxyz(), blender::nodes::node_shader_squeeze_cc::gpu_shader_squeeze(), blender::nodes::node_shader_tex_white_noise_cc::gpu_shader_tex_white_noise(), blender::nodes::node_shader_color_ramp_cc::gpu_shader_valtorgb(), blender::nodes::node_shader_value_cc::gpu_shader_value(), blender::nodes::node_shader_vector_displacement_cc::gpu_shader_vector_displacement(), blender::nodes::node_shader_vector_math_cc::gpu_shader_vector_math(), blender::nodes::node_shader_vector_rotate_cc::gpu_shader_vector_rotate(), blender::nodes::node_shader_add_shader_cc::node_shader_gpu_add_shader(), blender::nodes::node_shader_ambient_occlusion_cc::node_shader_gpu_ambient_occlusion(), blender::nodes::node_shader_attribute_cc::node_shader_gpu_attribute(), blender::nodes::node_shader_background_cc::node_shader_gpu_background(), blender::nodes::node_shader_blackbody_cc::node_shader_gpu_blackbody(), blender::nodes::node_shader_bsdf_anisotropic_cc::node_shader_gpu_bsdf_anisotropic(), blender::nodes::node_shader_bsdf_diffuse_cc::node_shader_gpu_bsdf_diffuse(), blender::nodes::node_shader_bsdf_glass_cc::node_shader_gpu_bsdf_glass(), blender::nodes::node_shader_bsdf_glossy_cc::node_shader_gpu_bsdf_glossy(), blender::nodes::node_shader_bsdf_hair_cc::node_shader_gpu_bsdf_hair(), blender::nodes::node_shader_bsdf_principled_cc::node_shader_gpu_bsdf_principled(), blender::nodes::node_shader_bsdf_refraction_cc::node_shader_gpu_bsdf_refraction(), blender::nodes::node_shader_bsdf_toon_cc::node_shader_gpu_bsdf_toon(), blender::nodes::node_shader_bsdf_translucent_cc::node_shader_gpu_bsdf_translucent(), blender::nodes::node_shader_bsdf_transparent_cc::node_shader_gpu_bsdf_transparent(), blender::nodes::node_shader_bsdf_velvet_cc::node_shader_gpu_bsdf_velvet(), blender::nodes::node_shader_eevee_specular_cc::node_shader_gpu_eevee_specular(), blender::nodes::node_shader_emission_cc::node_shader_gpu_emission(), blender::nodes::node_shader_fresnel_cc::node_shader_gpu_fresnel(), blender::nodes::node_shader_gamma_cc::node_shader_gpu_gamma(), blender::nodes::node_shader_geometry_cc::node_shader_gpu_geometry(), blender::nodes::node_shader_hair_info_cc::node_shader_gpu_hair_info(), blender::nodes::node_shader_bsdf_hair_principled_cc::node_shader_gpu_hair_principled(), blender::nodes::node_shader_layer_weight_cc::node_shader_gpu_layer_weight(), blender::nodes::node_shader_light_falloff_cc::node_shader_gpu_light_falloff(), blender::nodes::node_shader_light_path_cc::node_shader_gpu_light_path(), blender::nodes::node_shader_mix_shader_cc::node_shader_gpu_mix_shader(), blender::nodes::node_shader_object_info_cc::node_shader_gpu_object_info(), blender::nodes::node_shader_output_aov_cc::node_shader_gpu_output_aov(), blender::nodes::node_shader_point_info_cc::node_shader_gpu_point_info(), blender::nodes::node_shader_shader_to_rgb_cc::node_shader_gpu_shadertorgb(), blender::nodes::node_shader_subsurface_scattering_cc::node_shader_gpu_subsurface_scattering(), blender::nodes::node_shader_tangent_cc::node_shader_gpu_tangent(), blender::nodes::node_shader_tex_brick_cc::node_shader_gpu_tex_brick(), blender::nodes::node_shader_tex_checker_cc::node_shader_gpu_tex_checker(), blender::nodes::node_shader_tex_coord_cc::node_shader_gpu_tex_coord(), blender::nodes::node_shader_tex_environment_cc::node_shader_gpu_tex_environment(), blender::nodes::node_shader_tex_gradient_cc::node_shader_gpu_tex_gradient(), blender::nodes::node_shader_tex_image_cc::node_shader_gpu_tex_image(), blender::nodes::node_shader_tex_magic_cc::node_shader_gpu_tex_magic(), blender::nodes::node_shader_tex_musgrave_cc::node_shader_gpu_tex_musgrave(), blender::nodes::node_shader_tex_noise_cc::node_shader_gpu_tex_noise(), blender::nodes::node_shader_tex_sky_cc::node_shader_gpu_tex_sky(), blender::nodes::node_shader_tex_voronoi_cc::node_shader_gpu_tex_voronoi(), blender::nodes::node_shader_tex_wave_cc::node_shader_gpu_tex_wave(), blender::nodes::node_shader_uvmap_cc::node_shader_gpu_uvmap(), blender::nodes::node_shader_vertex_color_cc::node_shader_gpu_vertex_color(), blender::nodes::node_shader_volume_absorption_cc::node_shader_gpu_volume_absorption(), blender::nodes::node_shader_volume_principled_cc::node_shader_gpu_volume_principled(), blender::nodes::node_shader_volume_scatter_cc::node_shader_gpu_volume_scatter(), blender::nodes::node_shader_wavelength_cc::node_shader_gpu_wavelength(), and blender::nodes::node_shader_wireframe_cc::node_shader_gpu_wireframe().

◆ GPU_uniform()

GPUNodeLink* GPU_uniform ( const float num)

◆ GPU_uniform_attr_list_copy()

void GPU_uniform_attr_list_copy ( GPUUniformAttrList dest,
GPUUniformAttrList src 
)

Definition at line 292 of file gpu_node_graph.c.

References BLI_duplicatelist(), dest, and src.

Referenced by drw_uniform_attrs_pool_ensure().

◆ GPU_uniform_attr_list_free()

void GPU_uniform_attr_list_free ( GPUUniformAttrList set)

◆ GPU_uniform_attr_list_hash_new()

struct GHash* GPU_uniform_attr_list_hash_new ( const char *  info)

◆ GPU_uniform_attribute()

GPUNodeLink* GPU_uniform_attribute ( GPUMaterial mat,
const char *  name,
bool  use_dupli 
)

◆ GPU_uniformbuf_link_out()

GPUNodeLink* GPU_uniformbuf_link_out ( struct GPUMaterial mat,
struct bNode node,
struct GPUNodeStack stack,
int  index 
)