|
Blender V4.3
|
#include <algorithm>#include <cmath>#include <cstring>#include "MEM_guardedalloc.h"#include "DNA_material_types.h"#include "DNA_scene_types.h"#include "DNA_world_types.h"#include "BLI_listbase.h"#include "BLI_math_vector.h"#include "BLI_string.h"#include "BLI_time.h"#include "BLI_utildefines.h"#include "BKE_main.hh"#include "BKE_material.h"#include "BKE_node.hh"#include "NOD_shader.h"#include "GPU_material.hh"#include "GPU_shader.hh"#include "GPU_texture.hh"#include "GPU_uniform_buffer.hh"#include "DRW_engine.hh"#include "gpu_codegen.hh"#include "gpu_node_graph.hh"#include "atomic_ops.h"Go to the source code of this file.
Classes | |
| struct | GPUColorBandBuilder |
| struct | GPUSkyBuilder |
| struct | GPUMaterial |
| struct | GPUSssKernelData |
Macros | |
| #define | MAX_COLOR_BAND 128 |
| #define | MAX_GPU_SKIES 8 |
| #define | ASYNC_OPTIMIZED_PASS_CREATION 0 |
| #define | SSS_SAMPLES 65 |
| #define | SSS_EXPONENT 2.0f /* Importance sampling exponent */ |
Manages materials, lights and textures.
Definition in file gpu_material.cc.
| #define ASYNC_OPTIMIZED_PASS_CREATION 0 |
Whether the optimized variant of the GPUPass should be created asynchronously. Usage of this depends on whether there are possible threading challenges of doing so. Currently, the overhead of GPU_generate_pass is relatively small in comparison to shader compilation, though this option exists in case any potential scenarios for material graph optimization cause a slow down on the main thread.
NOTE: The actual shader program for the optimized pass will always be compiled asynchronously, this flag controls whether shader node graph source serialization happens on the compilation worker thread as well.
Definition at line 59 of file gpu_material.cc.
| #define MAX_COLOR_BAND 128 |
Definition at line 46 of file gpu_material.cc.
Referenced by gpu_material_ramp_texture_row_set().
| #define MAX_GPU_SKIES 8 |
Definition at line 47 of file gpu_material.cc.
Referenced by gpu_material_sky_texture_layer_set().
| #define SSS_EXPONENT 2.0f /* Importance sampling exponent */ |
Definition at line 380 of file gpu_material.cc.
| #define SSS_SAMPLES 65 |
Definition at line 379 of file gpu_material.cc.
| void GPU_material_acquire | ( | GPUMaterial * | mat | ) |
Definition at line 711 of file gpu_material.cc.
References atomic_add_and_fetch_uint32(), and GPUMaterial::refcount.
Referenced by drw_deferred_shader_compilation_exec().
| void GPU_material_add_output_link_aov | ( | GPUMaterial * | material, |
| GPUNodeLink * | link, | ||
| int | hash ) |
Definition at line 443 of file gpu_material.cc.
References BLI_addtail(), GPUNodeGraphOutputLink::hash, hash, MEM_callocN, and GPUNodeGraphOutputLink::outlink.
Referenced by blender::nodes::node_shader_output_aov_cc::node_shader_gpu_output_aov().
| void GPU_material_add_output_link_composite | ( | GPUMaterial * | material, |
| GPUNodeLink * | link ) |
Definition at line 452 of file gpu_material.cc.
References BLI_addtail(), MEM_callocN, and GPUNodeGraphOutputLink::outlink.
| void GPU_material_async_compile | ( | GPUMaterial * | mat | ) |
Definition at line 791 of file gpu_material.cc.
References BLI_assert, ELEM, GPU_MAT_CREATED, GPU_MAT_QUEUED, GPU_pass_begin_async_compilation(), GPUMaterial::name, GPUMaterial::pass, and GPUMaterial::status.
Referenced by drw_deferred_shader_compilation_exec().
| bool GPU_material_async_try_finalize | ( | GPUMaterial * | mat | ) |
Returns true if the material have finished its compilation.
Definition at line 803 of file gpu_material.cc.
References BLI_assert, ELEM, GPU_MAT_CREATED, GPU_MAT_QUEUED, gpu_material_finalize(), GPU_pass_async_compilation_try_finalize(), GPU_pass_shader_get(), GPUMaterial::pass, and GPUMaterial::status.
Referenced by drw_deferred_shader_compilation_exec().
| ListBase GPU_material_attributes | ( | const GPUMaterial * | material | ) |
Definition at line 353 of file gpu_material.cc.
Referenced by blender::draw::attribute_index_in_material(), DRW_shgroup_volume_create_sub(), blender::draw::ensure_attributes(), blender::draw::mesh_cd_calc_used_gpu_layers(), blender::draw::point_cloud_sub_pass_setup_implementation(), blender::draw::pointcloud_surface_shaded_get(), blender::eevee::SyncModule::sync_volume(), and blender::draw::volume_sub_pass_implementation().
| void GPU_material_compile | ( | GPUMaterial * | mat | ) |
Definition at line 774 of file gpu_material.cc.
References BLI_assert, ELEM, GPU_MAT_CREATED, GPU_MAT_QUEUED, gpu_material_finalize(), GPU_pass_compile(), GPUMaterial::name, GPUMaterial::pass, and GPUMaterial::status.
Referenced by drw_deferred_shader_add(), drw_deferred_shader_compilation_exec(), blender::eevee::ShaderModule::material_shader_get(), and blender::realtime_compositor::ShaderOperation::ShaderOperation().
|
static |
Perform asynchronous Render Pipeline State Object (PSO) compilation.
Warm PSO cache within asynchronous compilation thread using default material as source. GPU_shader_warm_cache(..) performs the API-specific PSO compilation using the assigned parent shader's cached PSO descriptors as an input.
This is only applied if the given material has a specified default reference material available, and the default material is already compiled.
As PSOs do not always match for default shaders, we limit warming for PSO configurations to ensure compile time remains fast, as these first entries will be the most commonly used PSOs. As not all PSOs are necessarily required immediately, this limit should remain low (1-3 at most).
Definition at line 721 of file gpu_material.cc.
References GPUMaterial::default_mat, ELEM, GPUMaterial::flag, GPU_MAT_FAILED, GPU_MAT_OPTIMIZATION_SKIP, GPU_MAT_SUCCESS, GPU_MATFLAG_UPDATED, gpu_node_graph_free(), gpu_node_graph_free_nodes(), GPU_pass_release(), GPU_pass_shader_get(), GPU_shader_set_parent(), GPU_shader_warm_cache(), GPUMaterial::graph, GPUMaterial::optimization_status, GPUMaterial::pass, and GPUMaterial::status.
Referenced by GPU_material_async_try_finalize(), and GPU_material_compile().
| eGPUMaterialFlag GPU_material_flag | ( | const GPUMaterial * | mat | ) |
Definition at line 569 of file gpu_material.cc.
References GPUMaterial::flag.
Referenced by GPUCodegen::GPUCodegen().
| bool GPU_material_flag_get | ( | const GPUMaterial * | mat, |
| eGPUMaterialFlag | flag ) |
Definition at line 564 of file gpu_material.cc.
References flag, and GPUMaterial::flag.
Referenced by blender::eevee::VolumeLayer::material_add(), blender::eevee::ShaderModule::material_create_info_amend(), blender::eevee::ForwardPipeline::material_opaque_add(), blender::nodes::node_shader_tex_environment_cc::node_shader_gpu_tex_environment(), blender::eevee::pass_replacement_cb(), blender::eevee::ForwardPipeline::prepass_opaque_add(), and blender::eevee::shader_closure_bits_from_flag().
| void GPU_material_flag_set | ( | GPUMaterial * | mat, |
| eGPUMaterialFlag | flag ) |
Definition at line 555 of file gpu_material.cc.
References flag, GPUMaterial::flag, GPU_MATFLAG_COAT, and GPU_MATFLAG_GLOSSY.
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_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_metallic_cc::node_shader_gpu_bsdf_metallic(), blender::nodes::node_shader_bsdf_principled_cc::node_shader_gpu_bsdf_principled(), blender::nodes::node_shader_bsdf_ray_portal_cc::node_shader_gpu_bsdf_ray_portal(), blender::nodes::node_shader_bsdf_refraction_cc::node_shader_gpu_bsdf_refraction(), blender::nodes::node_shader_bsdf_sheen_cc::node_shader_gpu_bsdf_sheen(), 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_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_bsdf_hair_principled_cc::node_shader_gpu_hair_principled(), 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(), 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(), and blender::nodes::node_shader_wireframe_cc::node_shader_gpu_wireframe().
| void GPU_material_free | ( | ListBase * | gpumaterial | ) |
Definition at line 291 of file gpu_material.cc.
References BLI_freelistN(), DRW_deferred_shader_remove, GPU_material_free_single(), and LISTBASE_FOREACH.
Referenced by BKE_material_defaults_free_gpu(), BKE_material_eval(), BKE_world_eval(), ED_node_set_active(), GPU_materials_free(), material_free_data(), blender::eevee::LookdevWorld::sync(), and world_free_data().
| void GPU_material_free_single | ( | GPUMaterial * | material | ) |
Definition at line 255 of file gpu_material.cc.
References atomic_sub_and_fetch_uint32(), gpu_node_graph_free(), GPU_pass_release(), GPU_texture_free(), GPU_uniformbuf_free(), and MEM_freeN().
Referenced by GPU_material_free(), GPU_material_release(), and blender::realtime_compositor::ShaderOperation::~ShaderOperation().
| GPUMaterial * GPU_material_from_callbacks | ( | eGPUMaterialEngine | engine, |
| ConstructGPUMaterialFn | construct_function_cb, | ||
| GPUCodegenCallbackFn | generate_code_function_cb, | ||
| void * | thunk ) |
Definition at line 913 of file gpu_material.cc.
References BLI_ghashutil_ptrcmp(), BLI_ghashutil_ptrhash(), BLI_gset_new(), GPU_generate_pass(), GPU_MAT_CREATED, GPU_MAT_FAILED, GPU_MAT_OPTIMIZATION_SKIP, GPU_MAT_SUCCESS, gpu_material_ramp_texture_build(), gpu_node_graph_free(), gpu_node_graph_free_nodes(), GPU_pass_shader_get(), GPUMaterial::graph, material, MEM_callocN, and GPUNodeGraph::used_libraries.
Referenced by blender::realtime_compositor::ShaderOperation::ShaderOperation().
| GPUMaterial * GPU_material_from_nodetree | ( | Scene * | scene, |
| Material * | ma, | ||
| bNodeTree * | ntree, | ||
| ListBase * | gpumaterials, | ||
| const char * | name, | ||
| eGPUMaterialEngine | engine, | ||
| uint64_t | shader_uuid, | ||
| bool | is_volume_shader, | ||
| bool | is_lookdev, | ||
| GPUCodegenCallbackFn | callback, | ||
| void * | thunk, | ||
| GPUMaterialPassReplacementCallbackFn | pass_replacement_cb ) |
WORKAROUND: The node tree code is never executed in default replaced passes, but the GPU validation will still complain if the node tree UBO is not bound. So we create a dummy UBO with (at least) the size of the default material one (192 bytes). We allocate 256 bytes to leave some room for future changes.
Definition at line 588 of file gpu_material.cc.
References BLI_addtail(), BLI_assert, BLI_ghashutil_ptrcmp(), BLI_ghashutil_ptrhash(), BLI_gset_new(), callback, LinkData::data, GPUMaterial::default_mat, GPUMaterial::engine, GPUMaterial::flag, GPU_generate_pass(), GPU_MAT_CREATED, GPU_MAT_FAILED, GPU_MAT_OPTIMIZATION_READY, GPU_MAT_OPTIMIZATION_SKIP, GPU_MAT_OPTIMIZATION_SUCCESS, GPU_MAT_SUCCESS, GPU_material_optimization_status_set(), gpu_material_ramp_texture_build(), gpu_material_sky_texture_build(), GPU_MATFLAG_LOOKDEV_HACK, GPU_MATFLAG_UPDATED, gpu_node_graph_free(), gpu_node_graph_free_nodes(), GPU_pass_acquire(), GPU_pass_shader_get(), GPU_pass_should_optimize(), GPU_uniformbuf_create_ex(), GPUMaterial::graph, bNodeTree::id, GPUMaterial::is_volume_shader, LISTBASE_FOREACH, GPUMaterial::ma, MEM_callocN, MEM_freeN(), GPUMaterial::name, blender::bke::node_tree_free_local_tree(), blender::bke::node_tree_localize(), ntreeGPUMaterialNodes, GPUMaterial::optimization_status, GPUMaterial::optimized_pass, GPUMaterial::pass, ID::py_instance, GPUMaterial::refcount, GPUMaterial::scene, scene, GPUMaterial::status, STRNCPY, GPUMaterial::ubo, GPUNodeGraph::used_libraries, and GPUMaterial::uuid.
Referenced by DRW_shader_from_material(), DRW_shader_from_world(), and blender::eevee::ShaderModule::material_shader_get().
| Material * GPU_material_get_material | ( | GPUMaterial * | material | ) |
Return can be null if it's a world material.
Definition at line 338 of file gpu_material.cc.
Referenced by GPUCodegen::generate_cryptomatte(), blender::nodes::node_shader_object_info_cc::node_shader_gpu_object_info(), blender::eevee::pass_replacement_cb(), blender::eevee::SyncModule::sync_curves(), blender::eevee::SyncModule::sync_mesh(), blender::eevee::SyncModule::sync_point_cloud(), and blender::eevee::SyncModule::sync_sculpt().
| const char * GPU_material_get_name | ( | GPUMaterial * | material | ) |
Definition at line 333 of file gpu_material.cc.
Referenced by blender::eevee::DeferredLayer::material_add(), blender::eevee::DeferredProbePipeline::material_add(), blender::eevee::PlanarProbePipeline::material_add(), blender::eevee::VolumeLayer::material_add(), blender::eevee::ForwardPipeline::material_opaque_add(), blender::eevee::ForwardPipeline::material_transparent_add(), blender::eevee::VolumeLayer::occupancy_add(), blender::eevee::DeferredLayer::prepass_add(), blender::eevee::DeferredProbePipeline::prepass_add(), blender::eevee::PlanarProbePipeline::prepass_add(), blender::eevee::ForwardPipeline::prepass_opaque_add(), blender::eevee::ForwardPipeline::prepass_transparent_add(), blender::eevee::CapturePipeline::surface_material_add(), and blender::eevee::ShadowPipeline::surface_material_add().
| GPUPass * GPU_material_get_pass | ( | GPUMaterial * | material | ) |
Definition at line 306 of file gpu_material.cc.
References GPU_MAT_OPTIMIZATION_SUCCESS, and GPU_material_optimization_status().
Referenced by DRW_shgroup_material_create(), blender::draw::detail::PassBase< DrawCommandBufType >::material_set(), blender::eevee::pass_replacement_cb(), and blender::eevee::CapturePipeline::surface_material_add().
| GPUShader * GPU_material_get_shader | ( | GPUMaterial * | material | ) |
Return the most optimal shader configuration for the given material.
Definition at line 316 of file gpu_material.cc.
References GPU_MAT_OPTIMIZATION_SUCCESS, GPU_material_optimization_status(), and GPU_pass_shader_get().
Referenced by blender::realtime_compositor::ShaderOperation::execute(), and blender::eevee::ShaderKey::ShaderKey().
| GPUShader * GPU_material_get_shader_base | ( | GPUMaterial * | material | ) |
Return the base un-optimized shader.
Definition at line 328 of file gpu_material.cc.
References GPU_pass_shader_get().
| bool GPU_material_has_displacement_output | ( | GPUMaterial * | mat | ) |
Definition at line 550 of file gpu_material.cc.
References GPUMaterial::has_displacement_output.
Referenced by blender::eevee::pass_replacement_cb(), blender::eevee::SyncModule::sync_curves(), blender::eevee::SyncModule::sync_mesh(), blender::eevee::SyncModule::sync_point_cloud(), and blender::eevee::SyncModule::sync_sculpt().
| bool GPU_material_has_surface_output | ( | GPUMaterial * | mat | ) |
Definition at line 540 of file gpu_material.cc.
References GPUMaterial::has_surface_output.
| bool GPU_material_has_volume_output | ( | GPUMaterial * | mat | ) |
Definition at line 545 of file gpu_material.cc.
References GPUMaterial::has_volume_output.
Referenced by blender::eevee::VolumeLayer::material_add(), blender::eevee::VolumeLayer::occupancy_add(), blender::eevee::WorldVolumePipeline::sync(), and blender::eevee::SyncModule::sync_volume().
| const ListBase * GPU_material_layer_attributes | ( | const GPUMaterial * | material | ) |
Definition at line 369 of file gpu_material.cc.
References BLI_listbase_is_empty().
Referenced by drw_register_shader_vlattrs(), DRW_shgroup_add_material_resources(), and blender::draw::Manager::register_layer_attributes().
| GPUNodeGraph * gpu_material_node_graph | ( | GPUMaterial * | material | ) |
Definition at line 489 of file gpu_material.cc.
Referenced by GPU_attribute(), GPU_attribute_default_color(), GPU_attribute_hair_length(), GPU_color_band(), GPU_image(), GPU_image_sky(), GPU_image_tiled(), GPU_layer_attribute(), GPU_link(), gpu_stack_link_v(), and GPU_uniform_attribute().
| bool GPU_material_optimization_ready | ( | GPUMaterial * | mat | ) |
Definition at line 518 of file gpu_material.cc.
References BLI_time_now_seconds(), and GPUMaterial::creation_time.
Referenced by DRW_shader_queue_optimize_material().
| eGPUMaterialOptimizationStatus GPU_material_optimization_status | ( | GPUMaterial * | mat | ) |
Return status for asynchronous optimization jobs.
Definition at line 504 of file gpu_material.cc.
References GPUMaterial::optimization_status.
Referenced by drw_deferred_queue_append(), DRW_shader_queue_optimize_material(), GPU_material_get_pass(), and GPU_material_get_shader().
| void GPU_material_optimization_status_set | ( | GPUMaterial * | mat, |
| eGPUMaterialOptimizationStatus | status ) |
Definition at line 509 of file gpu_material.cc.
References BLI_time_now_seconds(), GPUMaterial::creation_time, GPU_MAT_OPTIMIZATION_READY, and GPUMaterial::optimization_status.
Referenced by drw_deferred_queue_append(), DRW_deferred_shader_optimize_remove(), DRW_deferred_shader_remove(), DRW_shader_exit(), GPU_material_from_nodetree(), and GPU_material_optimize().
| void GPU_material_optimize | ( | GPUMaterial * | mat | ) |
Material Optimization.
Perform asynchronous Render Pipeline State Object (PSO) compilation.
Warm PSO cache within asynchronous compilation thread for optimized materials. This setup assigns the original unoptimized shader as a "parent" shader for the optimized version. This then allows the associated GPU backend to compile PSOs within this asynchronous pass, using the identical PSO descriptors of the parent shader.
This eliminates all run-time stuttering associated with material optimization and ensures realtime material editing and animation remains seamless, while retaining optimal realtime performance.
Definition at line 813 of file gpu_material.cc.
References BLI_assert, ELEM, GPUMaterial::engine, GPU_generate_pass(), GPU_MAT_OPTIMIZATION_READY, GPU_MAT_OPTIMIZATION_SKIP, GPU_MAT_OPTIMIZATION_SUCCESS, GPU_MAT_SUCCESS, GPU_material_optimization_status_set(), gpu_node_graph_free_nodes(), GPU_pass_compile(), GPU_pass_release(), GPU_pass_shader_get(), GPU_shader_set_parent(), GPU_shader_warm_cache(), GPUMaterial::graph, GPUMaterial::name, GPUMaterial::optimization_status, GPUMaterial::optimized_pass, GPUMaterial::pass, and GPUMaterial::status.
Referenced by drw_deferred_shader_compilation_exec().
| void GPU_material_output_displacement | ( | GPUMaterial * | material, |
| GPUNodeLink * | link ) |
Definition at line 428 of file gpu_material.cc.
Referenced by blender::nodes::node_shader_output_material_cc::node_shader_gpu_output_material().
| void GPU_material_output_surface | ( | GPUMaterial * | material, |
| GPUNodeLink * | link ) |
Definition at line 412 of file gpu_material.cc.
Referenced by blender::nodes::node_shader_output_light_cc::node_shader_gpu_output_light(), blender::nodes::node_shader_output_material_cc::node_shader_gpu_output_material(), and blender::nodes::node_shader_output_world_cc::node_shader_gpu_output_world().
| void GPU_material_output_thickness | ( | GPUMaterial * | material, |
| GPUNodeLink * | link ) |
Definition at line 436 of file gpu_material.cc.
Referenced by blender::nodes::node_shader_output_material_cc::node_shader_gpu_output_material().
| void GPU_material_output_volume | ( | GPUMaterial * | material, |
| GPUNodeLink * | link ) |
Definition at line 420 of file gpu_material.cc.
Referenced by blender::nodes::node_shader_output_material_cc::node_shader_gpu_output_material(), and blender::nodes::node_shader_output_world_cc::node_shader_gpu_output_world().
|
static |
Definition at line 216 of file gpu_material.cc.
References CM_TABLE, GPUMaterial::coba_builder, GPUMaterial::coba_tex, GPUColorBandBuilder::current_layer, GPU_RGBA16F, GPU_texture_create_1d_array(), GPU_TEXTURE_USAGE_SHADER_READ, MEM_freeN(), and GPUColorBandBuilder::pixels.
Referenced by GPU_material_from_callbacks(), and GPU_material_from_nodetree().
| GPUTexture ** gpu_material_ramp_texture_row_set | ( | GPUMaterial * | mat, |
| int | size, | ||
| const float * | pixels, | ||
| float * | r_row ) |
Returns the address of the future pointer to coba_tex.
Definition at line 185 of file gpu_material.cc.
References BLI_assert, CM_TABLE, GPUMaterial::coba_builder, GPUMaterial::coba_tex, GPUColorBandBuilder::current_layer, float, MAX_COLOR_BAND, MEM_mallocN, GPUColorBandBuilder::pixels, printf, and UNUSED_VARS_NDEBUG.
Referenced by GPU_color_band().
| bool GPU_material_recalc_flag_get | ( | GPUMaterial * | mat | ) |
Definition at line 574 of file gpu_material.cc.
References GPUMaterial::flag, and GPU_MATFLAG_UPDATED.
| void GPU_material_release | ( | GPUMaterial * | mat | ) |
Definition at line 716 of file gpu_material.cc.
References GPU_material_free_single().
Referenced by drw_deferred_shader_compilation_exec().
| Scene * GPU_material_scene | ( | GPUMaterial * | material | ) |
Definition at line 301 of file gpu_material.cc.
| void GPU_material_set_default | ( | GPUMaterial * | material, |
| GPUMaterial * | default_material ) |
Store reference to a similar default material for asynchronous PSO cache warming.
This function expects material to have not yet been compiled and for default_material to be ready. When compiling material as part of an asynchronous shader compilation job, use existing PSO descriptors from default_material's shader to also compile PSOs for this new material asynchronously, rather than at runtime.
The default_material options should match this new materials options in order for PSO descriptors to match those needed by the new material.
NOTE: default_material must exist when GPU_material_compile(..) is called for material.
See GPU_shader_warm_cache(..) for more information.
Definition at line 531 of file gpu_material.cc.
|
static |
Definition at line 236 of file gpu_material.cc.
References GPUSkyBuilder::current_layer, GPU_RGBA32F, GPU_SKY_HEIGHT, GPU_SKY_WIDTH, GPU_texture_create_2d_array(), GPU_TEXTURE_USAGE_SHADER_READ, MEM_freeN(), GPUSkyBuilder::pixels, GPUMaterial::sky_builder, and GPUMaterial::sky_tex.
Referenced by GPU_material_from_nodetree().
| GPUTexture ** gpu_material_sky_texture_layer_set | ( | GPUMaterial * | mat, |
| int | width, | ||
| int | height, | ||
| const float * | pixels, | ||
| float * | row ) |
Returns the address of the future pointer to sky_tex
Definition at line 155 of file gpu_material.cc.
References BLI_assert, GPUSkyBuilder::current_layer, float, GPU_SKY_HEIGHT, GPU_SKY_WIDTH, MAX_GPU_SKIES, MEM_mallocN, GPUSkyBuilder::pixels, printf, GPUMaterial::sky_builder, GPUMaterial::sky_tex, and UNUSED_VARS_NDEBUG.
Referenced by GPU_image_sky().
| 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.
| return_type | sub function return type. Output is cast to this type. |
| link | link to use as the sub function output. |
Definition at line 460 of file gpu_material.cc.
References BLI_addtail(), BLI_assert, GPU_FLOAT, GPU_link(), GPU_VEC3, GPU_VEC4, MEM_callocN, GPUNodeGraphFunctionLink::name, GPUNodeGraphFunctionLink::outlink, and SNPRINTF.
Referenced by blender::nodes::node_shader_bump_cc::gpu_shader_bump().
| bool GPU_material_sss_profile_create | ( | GPUMaterial * | material, |
| float | radii[3] ) |
Definition at line 392 of file gpu_material.cc.
References copy_v3_v3(), and GPU_uniformbuf_create.
Referenced by blender::nodes::node_shader_bsdf_principled_cc::node_shader_gpu_bsdf_principled(), and blender::nodes::node_shader_subsurface_scattering_cc::node_shader_gpu_subsurface_scattering().
| eGPUMaterialStatus GPU_material_status | ( | GPUMaterial * | mat | ) |
Return true if the material compilation has not yet begin or begin.
Definition at line 494 of file gpu_material.cc.
References GPUMaterial::status.
Referenced by drw_deferred_shader_add(), DRW_shader_queue_optimize_material(), and blender::eevee::WorldVolumePipeline::sync().
| void GPU_material_status_set | ( | GPUMaterial * | mat, |
| eGPUMaterialStatus | status ) |
Definition at line 499 of file gpu_material.cc.
References GPUMaterial::status.
Referenced by drw_deferred_queue_append(), DRW_deferred_shader_remove(), DRW_shader_exit(), blender::eevee::ShaderModule::material_shader_get(), and blender::realtime_compositor::ShaderOperation::ShaderOperation().
| ListBase GPU_material_textures | ( | GPUMaterial * | material | ) |
Definition at line 358 of file gpu_material.cc.
Referenced by DRW_shgroup_add_material_resources(), image_walk_gpu_materials(), and blender::draw::detail::PassBase< DrawCommandBufType >::material_set().
| const GPUUniformAttrList * GPU_material_uniform_attributes | ( | const GPUMaterial * | material | ) |
Definition at line 363 of file gpu_material.cc.
References GPUUniformAttrList::count.
Referenced by DRW_shgroup_add_material_resources(), blender::draw::Manager::extract_object_attributes(), blender::draw::Manager::extract_object_attributes(), and blender::eevee::ShaderModule::material_create_info_amend().
| void GPU_material_uniform_buffer_create | ( | GPUMaterial * | material, |
| ListBase * | inputs ) |
Create dynamic UBO from parameters
Definition at line 348 of file gpu_material.cc.
References GPU_uniformbuf_create_from_list().
Referenced by GPUCodegen::generate_uniform_buffer().
| GPUUniformBuf * GPU_material_uniform_buffer_get | ( | GPUMaterial * | material | ) |
Definition at line 343 of file gpu_material.cc.
Referenced by DRW_shgroup_add_material_resources(), and blender::draw::detail::PassBase< DrawCommandBufType >::material_set().
| uint64_t GPU_material_uuid_get | ( | GPUMaterial * | mat | ) |
Definition at line 583 of file gpu_material.cc.
References GPUMaterial::uuid.
Referenced by GPUCodegen::GPUCodegen(), blender::eevee::ShaderModule::material_create_info_amend(), and blender::eevee::pass_replacement_cb().
| void GPU_materials_free | ( | Main * | bmain | ) |
Definition at line 900 of file gpu_material.cc.
References BKE_material_defaults_free_gpu(), GPU_material_free(), LISTBASE_FOREACH, Main::materials, and Main::worlds.
Referenced by blender::ed::outliner::outliner_id_remap_exec().