38 return "compositor_summed_area_table_compute_incomplete_prologues_identity";
40 return "compositor_summed_area_table_compute_incomplete_prologues_square";
57 Result &incomplete_x_prologues,
58 Result &incomplete_y_prologues)
64 input.bind_as_texture(shader,
"input_tx");
67 const int2 input_size = input.domain().size;
71 incomplete_x_prologues.
bind_as_image(shader,
"incomplete_x_prologues_img");
74 incomplete_y_prologues.
bind_as_image(shader,
"incomplete_y_prologues_img");
79 input.unbind_as_texture();
93 Result &incomplete_x_prologues,
94 Result &complete_x_prologues,
95 Result &complete_x_prologues_sum)
101 incomplete_x_prologues.
bind_as_texture(shader,
"incomplete_x_prologues_tx");
104 const int2 input_size = input.domain().size;
108 complete_x_prologues.
bind_as_image(shader,
"complete_x_prologues_img");
111 complete_x_prologues_sum.
bind_as_image(shader,
"complete_x_prologues_sum_img");
128 Result &incomplete_y_prologues,
129 Result &complete_x_prologues_sum,
130 Result &complete_y_prologues)
136 incomplete_y_prologues.
bind_as_texture(shader,
"incomplete_y_prologues_tx");
137 complete_x_prologues_sum.
bind_as_texture(shader,
"complete_x_prologues_sum_tx");
140 const int2 input_size = input.domain().size;
144 complete_y_prologues.
bind_as_image(shader,
"complete_y_prologues_img");
158 return "compositor_summed_area_table_compute_complete_blocks_identity";
160 return "compositor_summed_area_table_compute_complete_blocks_square";
173 Result &complete_x_prologues,
174 Result &complete_y_prologues,
182 input.bind_as_texture(shader,
"input_tx");
183 complete_x_prologues.
bind_as_texture(shader,
"complete_x_prologues_tx");
184 complete_y_prologues.
bind_as_texture(shader,
"complete_y_prologues_tx");
186 output.allocate_texture(input.domain());
187 output.bind_as_image(shader,
"output_img",
true);
190 const int2 input_size = input.domain().size;
196 input.unbind_as_texture();
199 output.unbind_as_image();
210 context, input, operation, incomplete_x_prologues, incomplete_y_prologues);
216 context, input, incomplete_x_prologues, complete_x_prologues, complete_x_prologues_sum);
217 incomplete_x_prologues.
release();
221 context, input, incomplete_y_prologues, complete_x_prologues_sum, complete_y_prologues);
222 incomplete_y_prologues.
release();
223 complete_x_prologues_sum.
release();
226 context, input, complete_x_prologues, complete_y_prologues, operation, output);
227 complete_x_prologues.
release();
228 complete_y_prologues.
release();
#define BLI_assert_unreachable()
void GPU_compute_dispatch(GPUShader *shader, uint groups_x_len, uint groups_y_len, uint groups_z_len)
void GPU_shader_bind(GPUShader *shader)
struct GPUShader GPUShader
void bind_as_image(GPUShader *shader, const char *image_name, bool read=false) const
void unbind_as_texture() const
const Domain & domain() const
void unbind_as_image() const
void allocate_texture(Domain domain, bool from_pool=true)
void bind_as_texture(GPUShader *shader, const char *texture_name) const
VecBase< T, Size > divide_ceil(const VecBase< T, Size > &a, const VecBase< T, Size > &b)
static void compute_complete_blocks(Context &context, Result &input, Result &complete_x_prologues, Result &complete_y_prologues, SummedAreaTableOperation operation, Result &output)
static void compute_complete_y_prologues(Context &context, Result &input, Result &incomplete_y_prologues, Result &complete_x_prologues_sum, Result &complete_y_prologues)
static void compute_complete_x_prologues(Context &context, Result &input, Result &incomplete_x_prologues, Result &complete_x_prologues, Result &complete_x_prologues_sum)
static const char * get_compute_complete_blocks_shader(SummedAreaTableOperation operation)
static const char * get_compute_incomplete_prologues_shader(SummedAreaTableOperation operation)
void summed_area_table(Context &context, Result &input, Result &output, SummedAreaTableOperation operation=SummedAreaTableOperation::Identity)
static void compute_incomplete_prologues(Context &context, Result &input, SummedAreaTableOperation operation, Result &incomplete_x_prologues, Result &incomplete_y_prologues)
VecBase< int32_t, 2 > int2