|
Blender V4.3
|
#include "DNA_material_types.h"#include "DNA_object_types.h"#include "DNA_world_types.h"#include "BLI_dynstr.h"#include "BLI_listbase.h"#include "BLI_map.hh"#include "BLI_string_utils.hh"#include "BLI_threads.h"#include "BLI_time.h"#include "BKE_context.hh"#include "BKE_global.hh"#include "BKE_main.hh"#include "DEG_depsgraph_query.hh"#include "GPU_capabilities.hh"#include "GPU_material.hh"#include "GPU_shader.hh"#include "WM_api.hh"#include "WM_types.hh"#include "wm_window.hh"#include "draw_manager_c.hh"#include <atomic>#include <condition_variable>#include <mutex>Go to the source code of this file.
Classes | |
| struct | DRWShaderCompiler |
Macros | |
| #define | USE_DEFERRED_COMPILATION 1 |
Variables | |
| char | datatoc_gpu_shader_depth_only_frag_glsl [] |
| char | datatoc_common_fullscreen_vert_glsl [] |
| #define USE_DEFERRED_COMPILATION 1 |
Definition at line 44 of file draw_manager_shader.cc.
|
static |
NOTE: While the BLI_threads API requires a List, we only create a single thread at application startup and delete it at exit.
Definition at line 73 of file draw_manager_shader.cc.
Referenced by DRW_shader_exit(), and DRW_shader_init().
|
static |
Definition at line 79 of file draw_manager_shader.cc.
Referenced by drw_deferred_queue_append(), drw_deferred_shader_compilation_exec(), DRW_deferred_shader_optimize_remove(), DRW_deferred_shader_remove(), DRW_shader_exit(), and DRW_shader_init().
|
static |
Append either shader compilation or optimization job to deferred queue. We keep two separate queue's to ensure core compilations always complete before optimization.
Definition at line 251 of file draw_manager_shader.cc.
References blender::Vector< T, InlineBufferCapacity, Allocator >::append(), BLI_assert, compiler_data(), GPU_MAT_OPTIMIZATION_QUEUED, GPU_MAT_QUEUED, GPU_material_optimization_status(), GPU_material_optimization_status_set(), GPU_material_status_set(), DRWShaderCompiler::optimize_queue, DRWShaderCompiler::queue, and DRWShaderCompiler::queue_cv.
Referenced by drw_deferred_shader_add(), and DRW_shader_queue_optimize_material().
|
static |
Definition at line 269 of file draw_manager_shader.cc.
References BLI_time_sleep_ms(), drw_deferred_queue_append(), DRW_deferred_shader_remove, ELEM, GPU_MAT_CREATED, GPU_MAT_FAILED, GPU_MAT_QUEUED, GPU_MAT_SUCCESS, GPU_material_compile(), GPU_material_status(), and GPU_use_main_context_workaround().
Referenced by DRW_shader_from_material(), and DRW_shader_from_world().
|
static |
Definition at line 85 of file draw_manager_shader.cc.
References blender::Vector< T, InlineBufferCapacity, Allocator >::append(), DRWShaderCompiler::blender_gpu_context, BLI_assert, compiler_data(), GPU_BACKEND_OPENGL, GPU_context_active_set(), GPU_DEVICE_ANY, GPU_DRIVER_ANY, GPU_flush(), GPU_material_acquire(), GPU_material_async_compile(), GPU_material_async_try_finalize(), GPU_material_compile(), GPU_material_optimize(), GPU_material_release(), GPU_OS_ANY, GPU_render_begin(), GPU_render_end(), GPU_type_matches_ex(), GPU_use_parallel_compilation(), blender::Vector< T, InlineBufferCapacity, Allocator >::is_empty(), lock, DRWShaderCompiler::optimize_queue, blender::Vector< T, InlineBufferCapacity, Allocator >::pop_last(), DRWShaderCompiler::queue, DRWShaderCompiler::queue_cv, DRWShaderCompiler::queue_mutex, blender::Vector< T, InlineBufferCapacity, Allocator >::remove_if(), DRWShaderCompiler::system_gpu_context, WM_system_gpu_context_activate(), and WM_system_gpu_context_release().
Referenced by DRW_shader_init().
| void DRW_deferred_shader_optimize_remove | ( | GPUMaterial * | mat | ) |
Definition at line 358 of file draw_manager_shader.cc.
References compiler_data(), GPU_MAT_OPTIMIZATION_READY, GPU_material_optimization_status_set(), GPU_use_main_context_workaround(), DRWShaderCompiler::optimize_queue, and blender::Vector< T, InlineBufferCapacity, Allocator >::remove_first_occurrence_and_reorder().
Referenced by DRW_shader_queue_optimize_material().
| void DRW_deferred_shader_remove | ( | GPUMaterial * | mat | ) |
Definition at line 336 of file draw_manager_shader.cc.
|
static |
Definition at line 300 of file draw_manager_shader.cc.
References BLI_ghash_ensure_p(), BLI_insertlinkbefore(), DST, GPU_material_layer_attributes(), hash, GPULayerAttr::hash_code, LISTBASE_FOREACH, MEM_dupallocN, GPULayerAttr::next, POINTER_FROM_UINT, GPULayerAttr::prev, DRWData::vlattrs_name_cache, DRWData::vlattrs_name_list, DRWData::vlattrs_ubo_ready, and DRWManager::vmempool.
Referenced by DRW_shader_from_material(), and DRW_shader_from_world().
| void DRW_shader_exit | ( | ) |
Definition at line 216 of file draw_manager_shader.cc.
References BLI_threadpool_end(), compilation_threadpool(), compiler_data(), GPU_context_active_set(), GPU_context_discard(), GPU_MAT_CREATED, GPU_MAT_OPTIMIZATION_READY, GPU_material_optimization_status_set(), GPU_material_status_set(), GPU_use_main_context_workaround(), DRWShaderCompiler::queue_cv, DRWShaderCompiler::stop, WM_system_gpu_context_activate(), and WM_system_gpu_context_dispose().
Referenced by DRW_gpu_context_destroy().
| void DRW_shader_free | ( | GPUShader * | shader | ) |
Definition at line 488 of file draw_manager_shader.cc.
References GPU_shader_free().
| GPUMaterial * DRW_shader_from_material | ( | Material * | ma, |
| bNodeTree * | ntree, | ||
| eGPUMaterialEngine | engine, | ||
| const uint64_t | shader_id, | ||
| const bool | is_volume_shader, | ||
| bool | deferred, | ||
| GPUCodegenCallbackFn | callback, | ||
| void * | thunk, | ||
| GPUMaterialPassReplacementCallbackFn | pass_replacement_cb ) |
Definition at line 414 of file draw_manager_shader.cc.
References callback, DEG_get_original_id(), DRWManager::draw_ctx, drw_deferred_shader_add(), drw_register_shader_vlattrs(), DRW_shader_queue_optimize_material(), DST, GPU_material_from_nodetree(), Material::gpumaterial, Material::id, Scene::id, ID::name, and DRWContextState::scene.
Referenced by blender::eevee::ShaderModule::material_shader_get().
| GPUMaterial * DRW_shader_from_world | ( | World * | wo, |
| bNodeTree * | ntree, | ||
| eGPUMaterialEngine | engine, | ||
| const uint64_t | shader_id, | ||
| const bool | is_volume_shader, | ||
| bool | deferred, | ||
| GPUCodegenCallbackFn | callback, | ||
| void * | thunk ) |
Definition at line 380 of file draw_manager_shader.cc.
References callback, DEG_get_original_id(), DRWManager::draw_ctx, drw_deferred_shader_add(), drw_register_shader_vlattrs(), DRW_shader_queue_optimize_material(), DRW_state_is_image_render(), DST, GPU_material_from_nodetree(), World::gpumaterial, Scene::id, World::id, ID::name, and DRWContextState::scene.
Referenced by blender::eevee::ShaderModule::world_shader_get().
| void DRW_shader_init | ( | ) |
Definition at line 190 of file draw_manager_shader.cc.
References DRWManager::blender_gpu_context, DRWShaderCompiler::blender_gpu_context, BLI_assert_unreachable, BLI_threadpool_init(), BLI_threadpool_insert(), compilation_threadpool(), compiler_data(), drw_deferred_shader_compilation_exec(), DST, GPU_context_active_set(), GPU_context_create(), GPU_use_main_context_workaround(), initialized, DRWShaderCompiler::stop, DRWManager::system_gpu_context, DRWShaderCompiler::system_gpu_context, WM_system_gpu_context_activate(), and WM_system_gpu_context_create().
Referenced by DRW_gpu_context_create().
| void DRW_shader_queue_optimize_material | ( | GPUMaterial * | mat | ) |
Definition at line 445 of file draw_manager_shader.cc.
References BLI_time_sleep_ms(), drw_deferred_queue_append(), DRW_deferred_shader_optimize_remove(), DRW_state_is_image_render(), ELEM, GPU_MAT_OPTIMIZATION_QUEUED, GPU_MAT_OPTIMIZATION_SKIP, GPU_MAT_OPTIMIZATION_SUCCESS, GPU_MAT_SUCCESS, GPU_material_optimization_ready(), GPU_material_optimization_status(), and GPU_material_status().
Referenced by DRW_shader_from_material(), DRW_shader_from_world(), and blender::eevee::ShaderModule::material_shader_get().
| char datatoc_common_fullscreen_vert_glsl[] |
Definition at line 42 of file draw_manager_shader.cc.
| char datatoc_gpu_shader_depth_only_frag_glsl[] |
Definition at line 41 of file draw_manager_shader.cc.