29struct GPUShaderCreateInfo;
221 const float data[3][3]);
229 const float (*val)[2]);
233 const float (*val)[4]);
381#define GPU_NUM_UNIFORMS (GPU_UNIFORM_SCENE_LINEAR_XFORM + 1)
417#define GPU_SHADER_FREE_SAFE(shader) \
419 if (shader != nullptr) { \
420 GPU_shader_free(shader); \
436 std::string info_name_;
437 std::atomic<blender::gpu::Shader *> shader_ =
nullptr;
439 std::atomic<bool> failed_ =
false;
446 std::scoped_lock lock1(mutex_);
447 std::scoped_lock lock2(other.mutex_);
448 BLI_assert(shader_ ==
nullptr && info_name_.empty());
449 std::swap(info_name_, other.info_name_);
451 shader_.exchange(other.shader_.exchange(shader_));
452 failed_.exchange(other.failed_.exchange(failed_));
453 std::swap(compilation_handle_, other.compilation_handle_);
462 move(std::move(other));
466 move(std::move(other));
472 if (compilation_handle_) {
485 std::scoped_lock
lock(mutex_);
487 if (compilation_handle_) {
490 failed_ = shader_ ==
nullptr;
495 if (!shader_ && !failed_ && !compilation_handle_) {
504 return shader_ || failed_;
513 std::scoped_lock
lock(mutex_);
515 if (!shader_ && !failed_) {
516 if (compilation_handle_) {
523 failed_ = shader_ ==
nullptr;
533 std::scoped_lock
lock(mutex_);
542 std::atomic<T *> cache_ =
nullptr;
551 template<
typename... Args>
T &
get(Args &&...constructor_args)
557 std::lock_guard
lock(mutex_);
559 if (cache_ ==
nullptr) {
560 cache_ =
new T(std::forward<Args>(constructor_args)...);
571 std::lock_guard
lock(mutex_);
581 return std::lock_guard(mutex_);
blender::gpu::Shader * GPU_shader_create_from_info_python(const GPUShaderCreateInfo *_info)
int GPU_shader_get_ubo_binding(blender::gpu::Shader *shader, const char *name)
void GPU_shader_uniform_2fv_array(blender::gpu::Shader *sh, const char *name, int len, const float(*val)[2])
int GPU_shader_get_constant(blender::gpu::Shader *shader, const char *name)
void GPU_shader_uniform_1b(blender::gpu::Shader *sh, const char *name, bool value)
const blender::gpu::shader::SpecializationConstants & GPU_shader_get_default_constant_state(blender::gpu::Shader *sh)
#define GPU_SHADER_FREE_SAFE(shader)
int GPU_shader_get_uniform_block(blender::gpu::Shader *shader, const char *name)
void GPU_shader_uniform_4fv_array(blender::gpu::Shader *sh, const char *name, int len, const float(*val)[4])
static constexpr int GPU_MAX_ATTR
void GPU_shader_uniform_1f(blender::gpu::Shader *sh, const char *name, float value)
void GPU_shader_cache_dir_clear_old()
void GPU_shader_free(blender::gpu::Shader *shader)
bool GPU_shader_get_attribute_info(const blender::gpu::Shader *shader, int attr_location, char r_name[256], int *r_type)
bool GPU_shader_get_ssbo_input_info(const blender::gpu::Shader *shader, int ssbo_location, char r_name[256])
blender::gpu::Shader * GPU_shader_create_from_info(const GPUShaderCreateInfo *_info)
void GPU_shader_uniform_4fv(blender::gpu::Shader *sh, const char *name, const float data[4])
void GPU_shader_uniform_mat3_as_mat4(blender::gpu::Shader *sh, const char *name, const float data[3][3])
int GPU_shader_get_sampler_binding(blender::gpu::Shader *shader, const char *name)
void GPU_shader_uniform_3fv(blender::gpu::Shader *sh, const char *name, const float data[3])
bool GPU_shader_batch_is_compiling()
void GPU_shader_batch_wait_for_all()
uint GPU_shader_get_attribute_len(const blender::gpu::Shader *shader)
uint GPU_shader_get_ssbo_input_len(const blender::gpu::Shader *shader)
void GPU_shader_bind(blender::gpu::Shader *shader, const blender::gpu::shader::SpecializationConstants *constants_state=nullptr)
blender::Vector< blender::gpu::Shader * > GPU_shader_batch_finalize(BatchHandle &handle)
bool GPU_shader_batch_is_ready(BatchHandle handle)
int GPU_shader_get_ssbo_binding(blender::gpu::Shader *shader, const char *name)
std::string GPU_shader_preprocess_source(blender::StringRefNull original)
blender::gpu::Shader * GPU_shader_get_bound()
SpecializationBatchHandle GPU_shader_batch_specializations(blender::Span< ShaderSpecialization > specializations, CompilationPriority priority=CompilationPriority::High)
const GPUShaderCreateInfo * GPU_shader_create_info_get(const char *info_name)
void GPU_shader_uniform_int_ex(blender::gpu::Shader *shader, int location, int length, int array_size, const int *value)
void GPU_shader_uniform_1i(blender::gpu::Shader *sh, const char *name, int value)
void GPU_shader_batch_specializations_cancel(SpecializationBatchHandle &handle)
static constexpr int GPU_MAX_UNIFORM_ATTR
@ GPU_UNIFORM_VIEWPROJECTION_INV
@ GPU_UNIFORM_RESOURCE_ID
@ GPU_UNIFORM_VIEWPROJECTION
@ GPU_UNIFORM_SRGB_TRANSFORM
@ GPU_UNIFORM_BASE_INSTANCE
@ GPU_UNIFORM_SCENE_LINEAR_XFORM
@ GPU_UNIFORM_PROJECTION_INV
@ GPU_UNIFORM_MODELVIEW_INV
@ GPU_UNIFORM_RESOURCE_CHUNK
void GPU_shader_uniform_mat4(blender::gpu::Shader *sh, const char *name, const float data[4][4])
void GPU_shader_uniform_4f(blender::gpu::Shader *sh, const char *name, float x, float y, float z, float w)
int64_t SpecializationBatchHandle
const char * GPU_shader_get_name(blender::gpu::Shader *shader)
int GPU_shader_get_attribute(const blender::gpu::Shader *shader, const char *name)
void GPU_shader_uniform_2f(blender::gpu::Shader *sh, const char *name, float x, float y)
void GPU_shader_set_parent(blender::gpu::Shader *shader, blender::gpu::Shader *parent)
blender::gpu::Shader * GPU_shader_create_from_info_name(const char *info_name)
void GPU_shader_uniform_2fv(blender::gpu::Shader *sh, const char *name, const float data[2])
int GPU_shader_get_uniform(blender::gpu::Shader *shader, const char *name)
void GPU_shader_batch_cancel(BatchHandle &handle)
void GPU_shader_uniform_1f_array(blender::gpu::Shader *sh, const char *name, int len, const float *val)
bool GPU_shader_create_info_check_error(const GPUShaderCreateInfo *_info, char r_error[128])
void GPU_shader_warm_cache(blender::gpu::Shader *shader, int limit)
void GPU_shader_uniform_3f(blender::gpu::Shader *sh, const char *name, float x, float y, float z)
BatchHandle GPU_shader_batch_create_from_infos(blender::Span< const GPUShaderCreateInfo * > infos, CompilationPriority priority=CompilationPriority::High)
int GPU_shader_get_builtin_uniform(blender::gpu::Shader *shader, int builtin)
@ GPU_UNIFORM_BLOCK_DRW_VIEW
@ GPU_UNIFORM_BLOCK_DRW_MODEL
@ GPU_UNIFORM_BLOCK_MODEL
@ GPU_UNIFORM_BLOCK_DRW_CLIPPING
@ GPU_UNIFORM_BLOCK_DRW_INFOS
void GPU_shader_uniform_float_ex(blender::gpu::Shader *shader, int location, int length, int array_size, const float *value)
bool GPU_shader_batch_specializations_is_ready(SpecializationBatchHandle &handle)
void GPU_shader_compile_static()
void GPU_shader_uniform_2iv(blender::gpu::Shader *sh, const char *name, const int data[2])
void GPU_shader_uniform_3iv(blender::gpu::Shader *sh, const char *name, const int data[3])
BMesh const char void * data
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
NonCopyable(const NonCopyable &other)=delete
T & get(Args &&...constructor_args)
std::lock_guard< std::mutex > lock_guard()
StaticShader & operator=(StaticShader &&other)
void set(blender::gpu::Shader *shader)
blender::gpu::Shader * get()
StaticShader(StaticShader &&other)
void ensure_compile_async()
StaticShader(std::string info_name)
float length(VecOp< float, D >) RET
blender::gpu::shader::SpecializationConstants constants
blender::gpu::Shader * shader