43 #define USE_DEFERRED_COMPILATION 1
79 if (use_main_context_workaround) {
122 if (use_main_context_workaround) {
178 const bool job_own_context = !use_main_context;
213 if (use_main_context) {
266 const char *vert,
const char *geom,
const char *frag,
const char *defines,
const char *name)
279 char *vert_with_lib =
NULL;
280 char *frag_with_lib =
NULL;
281 char *geom_with_lib =
NULL;
325 const char **varying_names,
326 const int varying_count)
365 const bool is_volume_shader,
393 const bool is_volume_shader,
440 #define MAX_LIB_NAME 64
441 #define MAX_LIB_DEPS 8
461 for (
int i = 0; i <
MAX_LIB; i++) {
476 const char *pragma_str,
477 const char *lib_code,
478 const char *
UNUSED(lib_name))
481 uint pragma_len = strlen(pragma_str);
483 const char *haystack = lib_code;
484 while ((haystack = strstr(haystack, pragma_str))) {
485 haystack += pragma_len;
490 while ((*haystack !=
')') && (i < (
sizeof(dbg_name) - 2))) {
491 dbg_name[i] = *haystack;
499 "Dependency '%s' not found\n"
500 "This might be due to bad lib ordering or overriding a builtin shader.\n",
513 for (
int i = 0; i <
MAX_LIB; i++) {
524 lib,
"BLENDER_REQUIRE(", lib_code, lib_name);
527 printf(
"Error: Too many libraries. Cannot add %s.\n", lib_name);
538 for (
int i =
MAX_LIB - 1; i > -1; i--) {
544 for (
int i = 0; i < MAX_LIB && deps != 0llu; i++, deps >>= 1llu) {
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
A dynamically sized string ADT.
DynStr * BLI_dynstr_new(void) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
char * BLI_dynstr_get_cstring(const DynStr *ds) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BLI_dynstr_free(DynStr *ds) ATTR_NONNULL()
void BLI_dynstr_append(DynStr *__restrict ds, const char *cstr) ATTR_NONNULL()
#define LISTBASE_FOREACH(type, var, list)
struct LinkData * BLI_genericNodeN(void *data)
void void void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_poptail(ListBase *listbase) ATTR_NONNULL(1)
void * BLI_findptr(const struct ListBase *listbase, const void *ptr, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
#define BLI_string_joinN(...)
pthread_spinlock_t SpinLock
void BLI_spin_init(SpinLock *spin)
void BLI_spin_unlock(SpinLock *spin)
void BLI_spin_lock(SpinLock *spin)
#define CLOG_INFO(clg_ref, level,...)
struct ID * DEG_get_original_id(struct ID *id)
Object is a sort of wrapper for general info.
bool GPU_use_main_context_workaround(void)
struct GPUContext GPUContext
void GPU_context_main_lock(void)
void GPU_render_begin(void)
void GPU_context_discard(GPUContext *)
GPUContext * GPU_context_create(void *ghost_window)
void GPU_context_active_set(GPUContext *)
void GPU_context_main_unlock(void)
void GPU_render_end(void)
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_acquire(GPUMaterial *mat)
void GPU_material_compile(GPUMaterial *mat)
void GPU_material_status_set(GPUMaterial *mat, eGPUMaterialStatus status)
void(* GPUCodegenCallbackFn)(void *thunk, GPUMaterial *mat, GPUCodegenOutput *codegen)
void GPU_material_release(GPUMaterial *mat)
eGPUMaterialStatus GPU_material_status(GPUMaterial *mat)
GPUShader * GPU_shader_create(const char *vertcode, const char *fragcode, const char *geomcode, const char *libcode, const char *defines, const char *shname)
struct GPUShader GPUShader
GPUShader * GPU_shader_create_ex(const char *vertcode, const char *fragcode, const char *geomcode, const char *computecode, const char *libcode, const char *defines, eGPUShaderTFBType tf_type, const char **tf_names, int tf_count, const char *shname)
void GPU_shader_free(GPUShader *shader)
Platform independent time functions.
@ WM_JOB_TYPE_SHADER_COMPILATION
DEGForeachIDComponentCallback callback
bool DRW_state_is_image_render(void)
GPUMaterial * DRW_shader_from_world(World *wo, struct bNodeTree *ntree, const uint64_t shader_id, const bool is_volume_shader, bool deferred, GPUCodegenCallbackFn callback, void *thunk)
GPUMaterial * DRW_shader_from_material(Material *ma, struct bNodeTree *ntree, const uint64_t shader_id, const bool is_volume_shader, bool deferred, GPUCodegenCallbackFn callback, void *thunk)
GPUShader * DRW_shader_create_with_lib_ex(const char *vert, const char *geom, const char *frag, const char *lib, const char *defines, const char *name)
GPUShader * DRW_shader_create_with_transform_feedback(const char *vert, const char *geom, const char *defines, const eGPUShaderTFBType prim_type, const char **varying_names, const int varying_count)
char datatoc_gpu_shader_depth_only_frag_glsl[]
GPUShader * DRW_shader_create_ex(const char *vert, const char *geom, const char *frag, const char *defines, const char *name)
static void drw_deferred_shader_compilation_exec(void *custom_data, short *stop, short *UNUSED(do_update), float *UNUSED(progress))
void DRW_shader_free(GPUShader *shader)
struct DRWShaderCompiler DRWShaderCompiler
void DRW_shader_library_add_file(DRWShaderLibrary *lib, const char *lib_code, const char *lib_name)
char datatoc_common_fullscreen_vert_glsl[]
static int drw_shader_library_search(const DRWShaderLibrary *lib, const char *name)
void DRW_shader_library_free(DRWShaderLibrary *lib)
static uint64_t drw_shader_dependencies_get(const DRWShaderLibrary *lib, const char *pragma_str, const char *lib_code, const char *UNUSED(lib_name))
GPUShader * DRW_shader_create_fullscreen_ex(const char *frag, const char *defines, const char *name)
GPUShader * DRW_shader_create_with_shaderlib_ex(const char *vert, const char *geom, const char *frag, const DRWShaderLibrary *lib, const char *defines, const char *name)
DRWShaderLibrary * DRW_shader_library_create(void)
GPUShader * DRW_shader_create_fullscreen_with_shaderlib_ex(const char *frag, const DRWShaderLibrary *lib, const char *defines, const char *name)
#define USE_DEFERRED_COMPILATION
char * DRW_shader_library_create_shader_string(const DRWShaderLibrary *lib, const char *shader_code)
static void drw_deferred_shader_add(GPUMaterial *mat, bool deferred)
void DRW_deferred_shader_remove(GPUMaterial *mat)
static void drw_deferred_shader_compilation_free(void *custom_data)
ccl_gpu_kernel_postfix ccl_global float int int int int sh
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
unsigned __int64 uint64_t
const struct bContext * evil_C
uint64_t libs_deps[MAX_LIB]
const char * libs[MAX_LIB]
char libs_name[MAX_LIB][MAX_LIB_NAME]
void PIL_sleep_ms(int ms)
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
void * WM_jobs_customdata_from_type(wmWindowManager *wm, const void *owner, int job_type)
void WM_jobs_delay_start(wmJob *wm_job, double delay_time)
void WM_jobs_callbacks(wmJob *wm_job, wm_jobs_start_callback startjob, void(*initjob)(void *), void(*update)(void *), void(*endjob)(void *))
void * WM_jobs_customdata_get(wmJob *wm_job)
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *))
void WM_jobs_timer(wmJob *wm_job, double timestep, unsigned int note, unsigned int endnote)
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, int flag, int job_type)
void * WM_opengl_context_create(void)
void wm_window_reset_drawable(void)
void WM_opengl_context_activate(void *context)
void WM_opengl_context_release(void *context)
void WM_opengl_context_dispose(void *context)