|
Blender
V2.93
|
#include "MEM_guardedalloc.h"#include "BLI_dynstr.h"#include "BLI_math_base.h"#include "BLI_math_vector.h"#include "BLI_path_util.h"#include "BLI_string.h"#include "BLI_string_utils.h"#include "BLI_utildefines.h"#include "BLI_vector.hh"#include "BKE_appdir.h"#include "BKE_global.h"#include "DNA_space_types.h"#include "GPU_capabilities.h"#include "GPU_matrix.h"#include "GPU_platform.h"#include "GPU_shader.h"#include "GPU_texture.h"#include "GPU_uniform_buffer.h"#include "gpu_backend.hh"#include "gpu_context_private.hh"#include "gpu_shader_private.hh"#include "CLG_log.h"Go to the source code of this file.
Functions | |
Creation / Destruction | |
| static void | standard_defines (Vector< const char * > &sources) |
| GPUShader * | GPU_shader_create_ex (const char *vertcode, const char *fragcode, const char *geomcode, const char *libcode, const char *defines, const eGPUShaderTFBType tf_type, const char **tf_names, const int tf_count, const char *shname) |
| void | GPU_shader_free (GPUShader *shader) |
Creation utils | |
| GPUShader * | GPU_shader_create (const char *vertcode, const char *fragcode, const char *geomcode, const char *libcode, const char *defines, const char *shname) |
| GPUShader * | GPU_shader_create_from_python (const char *vertcode, const char *fragcode, const char *geomcode, const char *libcode, const char *defines) |
| static const char * | string_join_array_maybe_alloc (const char **str_arr, bool *r_is_alloc) |
| struct GPUShader * | GPU_shader_create_from_arrays_impl (const struct GPU_ShaderCreateFromArray_Params *params, const char *func, int line) |
Binding | |
| void | GPU_shader_bind (GPUShader *gpu_shader) |
| void | GPU_shader_unbind (void) |
Transform feedback | |
TODO(fclem): Should be replaced by compute shaders. | |
| bool | GPU_shader_transform_feedback_enable (GPUShader *shader, GPUVertBuf *vertbuf) |
| void | GPU_shader_transform_feedback_disable (GPUShader *shader) |
Uniforms / Resource location | |
| int | GPU_shader_get_uniform (GPUShader *shader, const char *name) |
| int | GPU_shader_get_builtin_uniform (GPUShader *shader, int builtin) |
| int | GPU_shader_get_builtin_block (GPUShader *shader, int builtin) |
| int | GPU_shader_get_uniform_block (GPUShader *shader, const char *name) |
| int | GPU_shader_get_uniform_block_binding (GPUShader *shader, const char *name) |
| int | GPU_shader_get_texture_binding (GPUShader *shader, const char *name) |
| int | GPU_shader_get_attribute (GPUShader *shader, const char *name) |
Getters | |
| int | GPU_shader_get_program (GPUShader *shader) |
Uniforms setters | |
| void | GPU_shader_uniform_vector (GPUShader *shader, int loc, int len, int arraysize, const float *value) |
| void | GPU_shader_uniform_vector_int (GPUShader *shader, int loc, int len, int arraysize, const int *value) |
| void | GPU_shader_uniform_int (GPUShader *shader, int location, int value) |
| void | GPU_shader_uniform_float (GPUShader *shader, int location, float value) |
| void | GPU_shader_uniform_1i (GPUShader *sh, const char *name, int value) |
| void | GPU_shader_uniform_1b (GPUShader *sh, const char *name, bool value) |
| void | GPU_shader_uniform_2f (GPUShader *sh, const char *name, float x, float y) |
| void | GPU_shader_uniform_3f (GPUShader *sh, const char *name, float x, float y, float z) |
| void | GPU_shader_uniform_4f (GPUShader *sh, const char *name, float x, float y, float z, float w) |
| void | GPU_shader_uniform_1f (GPUShader *sh, const char *name, float value) |
| void | GPU_shader_uniform_2fv (GPUShader *sh, const char *name, const float data[2]) |
| void | GPU_shader_uniform_3fv (GPUShader *sh, const char *name, const float data[3]) |
| void | GPU_shader_uniform_4fv (GPUShader *sh, const char *name, const float data[4]) |
| void | GPU_shader_uniform_mat4 (GPUShader *sh, const char *name, const float data[4][4]) |
| void | GPU_shader_uniform_2fv_array (GPUShader *sh, const char *name, int len, const float(*val)[2]) |
| void | GPU_shader_uniform_4fv_array (GPUShader *sh, const char *name, int len, const float(*val)[4]) |
Variables | |
| char | datatoc_gpu_shader_colorspace_lib_glsl [] |
| static CLG_LogRef | LOG = {"gpu.shader"} |
sRGB Rendering Workaround | |
The viewport overlay frame-buffer is sRGB and will expect shaders to output display referred Linear colors. But other frame-buffers (i.e: the area frame-buffers) are not sRGB and require the shader output color to be in sRGB space (assumed display encoded color-space as the time of writing). For this reason we have a uniform to switch the transform on and off depending on the current frame-buffer color-space. | |
| static int | g_shader_builtin_srgb_transform = 0 |
| static bool | g_shader_builtin_srgb_is_dirty = false |
| static bool | gpu_shader_srgb_uniform_dirty_get () |
| void | GPU_shader_set_srgb_uniform (GPUShader *shader) |
| void | GPU_shader_set_framebuffer_srgb_target (int use_srgb_to_linear) |
| void GPU_shader_bind | ( | GPUShader * | gpu_shader | ) |
Definition at line 494 of file gpu_shader.cc.
References blender::gpu::Context::get(), GPU_matrix_bind(), GPU_matrix_dirty_get(), GPU_shader_set_srgb_uniform(), gpu_shader_srgb_uniform_dirty_get(), shader(), blender::gpu::Context::shader, and blender::gpu::unwrap().
Referenced by createGPUShader(), draw_filled_lasso(), draw_shgroup(), blender::gpu::GLImmediate::end(), GPU_batch_draw(), GPU_batch_draw_instanced(), GPU_batch_draw_range(), GPU_batch_set_shader(), icon_draw_cache_texture_flush_ex(), icon_draw_texture(), immBindShader(), pygpu_batch_program_use_begin(), pygpu_shader_bind(), and wm_draw_region_blend().
| GPUShader* GPU_shader_create | ( | const char * | vertcode, |
| const char * | fragcode, | ||
| const char * | geomcode, | ||
| const char * | libcode, | ||
| const char * | defines, | ||
| const char * | shname | ||
| ) |
Definition at line 376 of file gpu_shader.cc.
References GPU_shader_create_ex(), and GPU_SHADER_TFB_NONE.
Referenced by createGPUShader(), DRW_shader_create_ex(), DRW_shader_create_fullscreen_ex(), DRW_shader_create_fullscreen_with_shaderlib_ex(), DRW_shader_create_with_lib_ex(), DRW_shader_create_with_shaderlib_ex(), GPU_pass_compile(), and GPU_shader_create_from_arrays_impl().
| GPUShader* GPU_shader_create_ex | ( | const char * | vertcode, |
| const char * | fragcode, | ||
| const char * | geomcode, | ||
| const char * | libcode, | ||
| const char * | defines, | ||
| const eGPUShaderTFBType | tf_type, | ||
| const char ** | tf_names, | ||
| const int | tf_count, | ||
| const char * | shname | ||
| ) |
Definition at line 290 of file gpu_shader.cc.
References blender::Vector< T, InlineBufferCapacity, Allocator >::append(), BLI_assert, blender::gpu::GPUBackend::get(), GPU_SHADER_TFB_NONE, shader(), blender::gpu::GPUBackend::shader_alloc(), standard_defines(), and blender::gpu::wrap().
Referenced by DRW_shader_create_with_transform_feedback(), GPU_shader_create(), and GPU_shader_create_from_python().
| struct GPUShader* GPU_shader_create_from_arrays_impl | ( | const struct GPU_ShaderCreateFromArray_Params * | params, |
| const char * | func, | ||
| int | line | ||
| ) |
Use via GPU_shader_create_from_arrays macro (avoids passing in param).
Similar to DRW_shader_create_with_lib with the ability to include libs for each type of shader.
It has the advantage that each item can be conditionally included without having to build the string inline, then free it.
| params | NULL terminated arrays of strings. |
Example:
Definition at line 461 of file gpu_shader.cc.
References ARRAY_SIZE, BLI_snprintf(), GPU_shader_create(), MEM_freeN, params, str, and string_join_array_maybe_alloc().
| GPUShader* GPU_shader_create_from_python | ( | const char * | vertcode, |
| const char * | fragcode, | ||
| const char * | geomcode, | ||
| const char * | libcode, | ||
| const char * | defines | ||
| ) |
Definition at line 387 of file gpu_shader.cc.
References BLI_strdupcat(), datatoc_gpu_shader_colorspace_lib_glsl, GPU_shader_create_ex(), GPU_SHADER_TFB_NONE, and MEM_SAFE_FREE.
Referenced by pygpu_shader__tp_new().
| void GPU_shader_free | ( | GPUShader * | shader | ) |
Definition at line 365 of file gpu_shader.cc.
References shader(), and blender::gpu::unwrap().
Referenced by DRW_shader_free(), GPU_pass_compile(), gpu_pass_free(), GPU_shader_free_builtin_shaders(), pygpu_shader__tp_dealloc(), and OCIO_GPUShader::~OCIO_GPUShader().
| int GPU_shader_get_attribute | ( | GPUShader * | shader, |
| const char * | name | ||
| ) |
Definition at line 592 of file gpu_shader.cc.
References blender::gpu::ShaderInput::location.
Referenced by pygpu_shader_attr_from_name().
| int GPU_shader_get_builtin_block | ( | GPUShader * | shader, |
| int | builtin | ||
| ) |
Definition at line 564 of file gpu_shader.cc.
References blender::gpu::ShaderInterface::ubo_builtin().
Referenced by drw_shgroup_init().
| int GPU_shader_get_builtin_uniform | ( | GPUShader * | shader, |
| int | builtin | ||
| ) |
Definition at line 558 of file gpu_shader.cc.
References blender::gpu::ShaderInterface::uniform_builtin().
Referenced by drw_shgroup_init(), GPU_matrix_bind(), GPU_shader_set_srgb_uniform(), icon_draw_texture(), immUniformColor4f(), and wm_draw_region_blend().
| int GPU_shader_get_program | ( | GPUShader * | shader | ) |
Definition at line 606 of file gpu_shader.cc.
References shader(), and blender::gpu::unwrap().
Referenced by pygpu_shader_program_get().
| int GPU_shader_get_texture_binding | ( | GPUShader * | shader, |
| const char * | name | ||
| ) |
Definition at line 585 of file gpu_shader.cc.
References tex.
Referenced by DRW_shgroup_uniform_image(), DRW_shgroup_uniform_image_ref(), DRW_shgroup_uniform_texture_ex(), DRW_shgroup_uniform_texture_ref_ex(), icon_draw_cache_texture_flush_ex(), icon_draw_texture(), immBindTexture(), immBindTextureSampler(), pygpu_shader_uniform_sampler(), and wm_draw_region_blend().
| int GPU_shader_get_uniform | ( | GPUShader * | shader, |
| const char * | name | ||
| ) |
Definition at line 551 of file gpu_shader.cc.
References blender::gpu::ShaderInput::location.
Referenced by count_active_texture_sampler(), createGPUShader(), draw_filled_lasso(), draw_image_buffer(), drw_shgroup_uniform(), DRW_shgroup_uniform_vec4_array_copy(), ED_mask_draw_region(), GPU_shader_uniform_1f(), GPU_shader_uniform_1i(), GPU_shader_uniform_2fv(), GPU_shader_uniform_2fv_array(), GPU_shader_uniform_3fv(), GPU_shader_uniform_4fv(), GPU_shader_uniform_4fv_array(), GPU_shader_uniform_mat4(), icon_draw_cache_texture_flush_ex(), icon_draw_texture(), immDrawPixelsTexScaled_clipping(), pygpu_shader_uniform_location_get(), sima_draw_zbuf_pixels(), sima_draw_zbuffloat_pixels(), and wm_draw_region_blend().
| int GPU_shader_get_uniform_block | ( | GPUShader * | shader, |
| const char * | name | ||
| ) |
Definition at line 571 of file gpu_shader.cc.
References blender::gpu::ShaderInput::location.
Referenced by pygpu_shader_uniform_block(), and pygpu_shader_uniform_block_from_name().
| int GPU_shader_get_uniform_block_binding | ( | GPUShader * | shader, |
| const char * | name | ||
| ) |
Definition at line 578 of file gpu_shader.cc.
References blender::gpu::ShaderInput::binding.
Referenced by createGPUShader(), DRW_shgroup_add_material_resources(), DRW_shgroup_uniform_block(), and DRW_shgroup_uniform_block_ref().
| void GPU_shader_set_framebuffer_srgb_target | ( | int | use_srgb_to_linear | ) |
Definition at line 740 of file gpu_shader.cc.
References g_shader_builtin_srgb_is_dirty, and g_shader_builtin_srgb_transform.
Referenced by blender::gpu::GLFrameBuffer::bind().
| void GPU_shader_set_srgb_uniform | ( | GPUShader * | shader | ) |
Definition at line 731 of file gpu_shader.cc.
References g_shader_builtin_srgb_is_dirty, g_shader_builtin_srgb_transform, GPU_shader_get_builtin_uniform(), GPU_shader_uniform_vector_int(), GPU_UNIFORM_SRGB_TRANSFORM, and shader().
Referenced by GPU_shader_bind(), and immBindShader().
|
static |
Definition at line 726 of file gpu_shader.cc.
References g_shader_builtin_srgb_is_dirty.
Referenced by GPU_shader_bind().
| void GPU_shader_transform_feedback_disable | ( | GPUShader * | shader | ) |
Definition at line 540 of file gpu_shader.cc.
References shader(), and blender::gpu::unwrap().
Referenced by draw_shgroup().
| bool GPU_shader_transform_feedback_enable | ( | GPUShader * | shader, |
| GPUVertBuf * | vertbuf | ||
| ) |
Definition at line 535 of file gpu_shader.cc.
References shader(), and blender::gpu::unwrap().
Referenced by draw_update_uniforms().
| void GPU_shader_unbind | ( | void | ) |
Definition at line 516 of file gpu_shader.cc.
References blender::gpu::Context::get(), blender::gpu::Context::shader, and blender::gpu::Shader::unbind().
Referenced by draw_filled_lasso(), draw_shgroup(), drw_draw_pass_ex(), immUnbindProgram(), and pygpu_shader_unbind().
| void GPU_shader_uniform_1b | ( | GPUShader * | sh, |
| const char * | name, | ||
| bool | value | ||
| ) |
Definition at line 645 of file gpu_shader.cc.
References GPU_shader_uniform_1i().
Definition at line 668 of file gpu_shader.cc.
References GPU_shader_get_uniform(), and GPU_shader_uniform_float().
Referenced by createGPUShader(), and immUniform1f().
| void GPU_shader_uniform_1i | ( | GPUShader * | sh, |
| const char * | name, | ||
| int | value | ||
| ) |
Definition at line 639 of file gpu_shader.cc.
References GPU_shader_get_uniform(), and GPU_shader_uniform_int().
Referenced by GPU_shader_uniform_1b(), immUniform1i(), pygpu_shader_uniform_block(), and pygpu_shader_uniform_sampler().
Definition at line 650 of file gpu_shader.cc.
References data, GPU_shader_uniform_2fv(), x, and y.
Referenced by immUniform2f().
Definition at line 674 of file gpu_shader.cc.
References data, GPU_shader_get_uniform(), and GPU_shader_uniform_vector().
Referenced by GPU_shader_uniform_2f(), and immUniform2fv().
| void GPU_shader_uniform_2fv_array | ( | GPUShader * | sh, |
| const char * | name, | ||
| int | len, | ||
| const float(*) | val[2] | ||
| ) |
Definition at line 698 of file gpu_shader.cc.
References GPU_shader_get_uniform(), GPU_shader_uniform_vector(), and len.
Definition at line 656 of file gpu_shader.cc.
References data, GPU_shader_uniform_3fv(), x, y, and z.
Referenced by createGPUShader(), and immUniform3f().
Definition at line 680 of file gpu_shader.cc.
References data, GPU_shader_get_uniform(), and GPU_shader_uniform_vector().
Referenced by GPU_shader_uniform_3f(), and immUniform3fv().
| void GPU_shader_uniform_4f | ( | GPUShader * | sh, |
| const char * | name, | ||
| float | x, | ||
| float | y, | ||
| float | z, | ||
| float | w | ||
| ) |
Definition at line 662 of file gpu_shader.cc.
References data, GPU_shader_uniform_4fv(), w(), x, y, and z.
Referenced by button2d_draw_intern(), and immUniform4f().
Definition at line 686 of file gpu_shader.cc.
References data, GPU_shader_get_uniform(), and GPU_shader_uniform_vector().
Referenced by GPU_shader_uniform_4f(), and immUniform4fv().
| void GPU_shader_uniform_4fv_array | ( | GPUShader * | sh, |
| const char * | name, | ||
| int | len, | ||
| const float(*) | val[4] | ||
| ) |
Definition at line 704 of file gpu_shader.cc.
References GPU_shader_get_uniform(), GPU_shader_uniform_vector(), and len.
Referenced by immUniformArray4fv().
Definition at line 634 of file gpu_shader.cc.
References GPU_shader_uniform_vector(), and shader().
Referenced by GPU_shader_uniform_1f().
| void GPU_shader_uniform_int | ( | GPUShader * | shader, |
| int | location, | ||
| int | value | ||
| ) |
Definition at line 629 of file gpu_shader.cc.
References GPU_shader_uniform_vector_int(), and shader().
Referenced by createGPUShader(), draw_call_resource_bind(), draw_update_uniforms(), and GPU_shader_uniform_1i().
Definition at line 692 of file gpu_shader.cc.
References data, GPU_shader_get_uniform(), and GPU_shader_uniform_vector().
Referenced by immUniformMatrix4fv().
| void GPU_shader_uniform_vector | ( | GPUShader * | shader, |
| int | loc, | ||
| int | len, | ||
| int | arraysize, | ||
| const float * | value | ||
| ) |
Definition at line 617 of file gpu_shader.cc.
References len, shader(), and blender::gpu::unwrap().
Referenced by createGPUShader(), draw_filled_lasso(), draw_image_buffer(), draw_legacy_matrix_update(), draw_update_uniforms(), ED_mask_draw_region(), GPU_matrix_bind(), GPU_shader_uniform_2fv(), GPU_shader_uniform_2fv_array(), GPU_shader_uniform_3fv(), GPU_shader_uniform_4fv(), GPU_shader_uniform_4fv_array(), GPU_shader_uniform_float(), GPU_shader_uniform_mat4(), icon_draw_cache_texture_flush_ex(), icon_draw_texture(), immUniformColor4f(), pygpu_shader_uniform_float(), pygpu_shader_uniform_vector_float(), sima_draw_zbuf_pixels(), sima_draw_zbuffloat_pixels(), and wm_draw_region_blend().
| void GPU_shader_uniform_vector_int | ( | GPUShader * | shader, |
| int | loc, | ||
| int | len, | ||
| int | arraysize, | ||
| const int * | value | ||
| ) |
Definition at line 623 of file gpu_shader.cc.
References len, shader(), and blender::gpu::unwrap().
Referenced by createGPUShader(), draw_geometry_execute(), draw_update_uniforms(), GPU_shader_set_srgb_uniform(), GPU_shader_uniform_int(), pygpu_shader_uniform_bool(), pygpu_shader_uniform_int(), and pygpu_shader_uniform_vector_int().
|
static |
Definition at line 259 of file gpu_shader.cc.
References blender::Vector< T, InlineBufferCapacity, Allocator >::append(), BLI_assert, GPU_crappy_amd_driver(), GPU_DEVICE_ANY, GPU_DEVICE_ATI, GPU_DEVICE_INTEL, GPU_DEVICE_NVIDIA, GPU_DRIVER_ANY, GPU_OS_ANY, GPU_OS_MAC, GPU_OS_UNIX, GPU_OS_WIN, GPU_type_matches(), and blender::Vector< T, InlineBufferCapacity, Allocator >::size().
Referenced by GPU_shader_create_ex().
|
static |
Definition at line 416 of file gpu_shader.cc.
References BLI_string_join_arrayN().
Referenced by GPU_shader_create_from_arrays_impl().
| char datatoc_gpu_shader_colorspace_lib_glsl[] |
Definition at line 53 of file gpu_shader.cc.
Referenced by GPU_shader_create_from_python().
|
static |
Definition at line 724 of file gpu_shader.cc.
Referenced by GPU_shader_set_framebuffer_srgb_target(), GPU_shader_set_srgb_uniform(), and gpu_shader_srgb_uniform_dirty_get().
|
static |
Definition at line 723 of file gpu_shader.cc.
Referenced by GPU_shader_set_framebuffer_srgb_target(), and GPU_shader_set_srgb_uniform().
|
static |
Definition at line 55 of file gpu_shader.cc.
Referenced by blender::gpu::Shader::print_log().