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)
 
GPUNodeLink * GPU_constant (const float *num)
 
GPUNodeLink * GPU_uniform (const float *num)
 
GPUNodeLink * GPU_attribute (GPUMaterial *mat, eCustomDataType type, const char *name)
 
GPUNodeLink * GPU_attribute_default_color (GPUMaterial *mat)
 
GPUNodeLink * GPU_attribute_with_default (GPUMaterial *mat, eCustomDataType type, const char *name, eGPUDefaultValue default_value)
 
GPUNodeLink * GPU_uniform_attribute (GPUMaterial *mat, const char *name, bool use_dupli)
 
GPUNodeLink * GPU_image (GPUMaterial *mat, struct Image *ima, struct ImageUser *iuser, eGPUSamplerState sampler_state)
 
GPUNodeLink * GPU_image_tiled (GPUMaterial *mat, struct Image *ima, struct ImageUser *iuser, eGPUSamplerState sampler_state)
 
GPUNodeLink * GPU_image_tiled_mapping (GPUMaterial *mat, struct Image *ima, struct ImageUser *iuser)
 
GPUNodeLink * GPU_color_band (GPUMaterial *mat, int size, float *pixels, float *row)
 
GPUNodeLink * GPU_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,...)
 
GPUNodeLink * GPU_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 GPUUniformBuf * GPU_material_sss_profile_get (GPUMaterial *material, int sample_len, struct GPUTexture **tex_profile)
 
GPUMaterial * GPU_material_from_nodetree_find (struct ListBase *gpumaterials, const void *engine_type, int options)
 
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)
 
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 Scene * GPU_material_scene (GPUMaterial *material)
 
struct GPUPass * GPU_material_get_pass (GPUMaterial *material)
 
struct GPUShader * GPU_material_get_shader (GPUMaterial *material)
 
struct Material * GPU_material_get_material (GPUMaterial *material)
 
eGPUMaterialStatus GPU_material_status (GPUMaterial *mat)
 
void GPU_material_status_set (GPUMaterial *mat, eGPUMaterialStatus status)
 
struct GPUUniformBuf * GPU_material_uniform_buffer_get (GPUMaterial *material)
 
void GPU_material_uniform_buffer_create (GPUMaterial *material, ListBase *inputs)
 
struct GPUUniformBuf * GPU_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)
 
GPUUniformAttrList * GPU_material_uniform_attributes (GPUMaterial *material)
 
struct GHash * GPU_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 
)