27 return "compositor_symmetric_separable_blur_float";
29 return "compositor_symmetric_separable_blur_float2";
32 return "compositor_symmetric_separable_blur_float4";
59 input.bind_as_texture(shader,
"input_tx");
62 context.cache_manager().symmetric_separable_blur_weights.get(context, filter_type, radius);
65 Domain domain = input.domain();
78 const int2 transposed_domain =
int2(domain.size.y, domain.size.x);
80 Result output = context.create_result(input.type());
82 output.bind_as_image(shader,
"output_img");
87 input.unbind_as_texture();
89 output.unbind_as_image();
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");
131 output.unbind_as_image();
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
void allocate_texture(Domain domain, bool from_pool=true)
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