27 return "compositor_symmetric_separable_blur_float";
29 return "compositor_symmetric_separable_blur_float2";
32 return "compositor_symmetric_separable_blur_float4";
62 context.cache_manager().symmetric_separable_blur_weights.get(context, filter_type, radius);
81 output.allocate_texture(transposed_domain);
82 output.bind_as_image(shader,
"output_img");
96 Result &horizontal_pass_result,
113 context.cache_manager().symmetric_separable_blur_weights.get(context, filter_type, radius.y);
122 output.allocate_texture(domain);
123 output.bind_as_image(shader,
"output_img");
144 context, input, radius.x, filter_type, extend_bounds, gamma_correct);
148 horizontal_pass_result,
155 horizontal_pass_result.
release();
#define BLI_assert_unreachable()
void GPU_shader_bind(GPUShader *shader)
void GPU_shader_uniform_1b(GPUShader *sh, const char *name, bool value)
struct GPUShader GPUShader
void unbind_as_texture() const
const Domain & domain() const
static ResultType type(eGPUTextureFormat format)
void bind_as_texture(GPUShader *shader, const char *texture_name) const
void unbind_as_texture() const
void bind_as_texture(GPUShader *shader, const char *texture_name) const
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void symmetric_separable_blur(Context &context, Result &input, Result &output, float2 radius, int filter_type=R_FILTER_GAUSS, bool extend_bounds=false, bool gamma_correct=false)
static const char * get_blur_shader(ResultType type)
static void vertical_pass(Context &context, Result &original_input, Result &horizontal_pass_result, Result &output, int distance, int falloff_type)
static Result horizontal_pass(Context &context, Result &input, int distance, int falloff_type)
void compute_dispatch_threads_at_least(GPUShader *shader, int2 threads_range, int2 local_size=int2(16))
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2