60#define GPU_BATCH_OWNS_NONE GPU_BATCH_INVALID
63 "eGPUBatchFlag: Error: status flags are shadowed by the ownership bits!")
86 GPUStorageBuf *resource_id_buf;
94 virtual ~Batch() =
default;
96 virtual void draw(
int v_first,
int v_count,
int i_first,
int i_count) = 0;
97 virtual void draw_indirect(GPUStorageBuf *indirect_buf, intptr_t offset) = 0;
98 virtual void multi_draw_indirect(GPUStorageBuf *indirect_buf,
101 intptr_t stride) = 0;
103 uint32_t vertex_count_get()
const
106 return elem_()->index_len_get();
108 return verts_(0)->vertex_len;
112 IndexBuf *elem_()
const
116 VertBuf *verts_(
const int index)
const
120 VertBuf *inst_(
const int index)
const
148#define GPU_batch_create(primitive_type, vertex_buf, index_buf) \
149 GPU_batch_create_ex(primitive_type, vertex_buf, index_buf, (eGPUBatchFlag)0)
166#define GPU_batch_init(batch, primitive_type, vertex_buf, index_buf) \
167 GPU_batch_init_ex(batch, primitive_type, vertex_buf, index_buf, (eGPUBatchFlag)0)
173void GPU_batch_copy(blender::gpu::Batch *batch_dst, blender::gpu::Batch *batch_src);
190#define GPU_BATCH_CLEAR_SAFE(batch) \
192 if (batch != nullptr) { \
193 GPU_batch_clear(batch); \
194 GPU_batch_zero(batch); \
204#define GPU_BATCH_DISCARD_SAFE(batch) \
206 if (batch != nullptr) { \
207 GPU_batch_discard(batch); \
280 blender::gpu::Batch *
batch,
299#define GPU_batch_uniform_1i(batch, name, x) GPU_shader_uniform_1i((batch)->shader, name, x);
300#define GPU_batch_uniform_1b(batch, name, x) GPU_shader_uniform_1b((batch)->shader, name, x);
301#define GPU_batch_uniform_1f(batch, name, x) GPU_shader_uniform_1f((batch)->shader, name, x);
302#define GPU_batch_uniform_2f(batch, name, x, y) GPU_shader_uniform_2f((batch)->shader, name, x, y);
303#define GPU_batch_uniform_3f(batch, name, x, y, z) \
304 GPU_shader_uniform_3f((batch)->shader, name, x, y, z);
305#define GPU_batch_uniform_4f(batch, name, x, y, z, w) \
306 GPU_shader_uniform_4f((batch)->shader, name, x, y, z, w);
307#define GPU_batch_uniform_2fv(batch, name, val) GPU_shader_uniform_2fv((batch)->shader, name, val);
308#define GPU_batch_uniform_3fv(batch, name, val) GPU_shader_uniform_3fv((batch)->shader, name, val);
309#define GPU_batch_uniform_4fv(batch, name, val) GPU_shader_uniform_4fv((batch)->shader, name, val);
310#define GPU_batch_uniform_2fv_array(batch, name, len, val) \
311 GPU_shader_uniform_2fv_array((batch)->shader, name, len, val);
312#define GPU_batch_uniform_4fv_array(batch, name, len, val) \
313 GPU_shader_uniform_4fv_array((batch)->shader, name, len, val);
314#define GPU_batch_uniform_mat4(batch, name, val) \
315 GPU_shader_uniform_mat4((batch)->shader, name, val);
316#define GPU_batch_uniformbuf_bind(batch, name, ubo) \
317 GPU_uniformbuf_bind(ubo, GPU_shader_get_ubo_binding((batch)->shader, name));
318#define GPU_batch_texture_bind(batch, name, tex) \
319 GPU_texture_bind(tex, GPU_shader_get_sampler_binding((batch)->shader, name));
325 blender::gpu::Batch *
batch,
399 GPUStorageBuf *indirect_buf,
415 GPUStorageBuf *indirect_buf,
428 int *r_instance_count);
437 int output_primitive_cout);
#define BLI_STATIC_ASSERT(a, msg)
#define ENUM_OPERATORS(_type, _max)
void GPU_batch_elembuf_set(blender::gpu::Batch *batch, blender::gpu::IndexBuf *index_buf, bool own_ibo)
blender::gpu::Batch * GPU_batch_create_ex(GPUPrimType primitive_type, blender::gpu::VertBuf *vertex_buf, blender::gpu::IndexBuf *index_buf, eGPUBatchFlag owns_flag)
static constexpr int GPU_BATCH_VBO_MAX_LEN
void GPU_batch_init_ex(blender::gpu::Batch *batch, GPUPrimType primitive_type, blender::gpu::VertBuf *vertex_buf, blender::gpu::IndexBuf *index_buf, eGPUBatchFlag owns_flag)
blender::gpu::Batch * GPU_batch_procedural_triangle_strips_get()
void GPU_batch_discard(blender::gpu::Batch *batch)
void GPU_batch_zero(blender::gpu::Batch *batch)
blender::gpu::Batch * GPU_batch_procedural_lines_get()
void GPU_batch_draw_advanced(blender::gpu::Batch *batch, int vertex_first, int vertex_count, int instance_first, int instance_count)
static constexpr int GPU_BATCH_INST_VBO_MAX_LEN
blender::IndexRange GPU_batch_draw_expanded_parameter_get(GPUPrimType input_prim_type, GPUPrimType output_prim_type, int vertex_count, int vertex_first, int output_primitive_cout)
void GPU_batch_instbuf_set(blender::gpu::Batch *batch, blender::gpu::VertBuf *vertex_buf, bool own_vbo)
void GPU_batch_draw_instance_range(blender::gpu::Batch *batch, int instance_first, int instance_count)
void GPU_batch_draw_indirect(blender::gpu::Batch *batch, GPUStorageBuf *indirect_buf, intptr_t offset)
static constexpr int GPU_BATCH_VAO_STATIC_LEN
void GPU_batch_resource_id_buf_set(blender::gpu::Batch *batch, GPUStorageBuf *resource_id_buf)
static constexpr int GPU_BATCH_VAO_DYN_ALLOC_COUNT
blender::gpu::Batch * GPU_batch_procedural_points_get()
void GPU_batch_program_set_imm_shader(blender::gpu::Batch *batch)
int GPU_batch_instbuf_add(blender::gpu::Batch *batch, blender::gpu::VertBuf *vertex_buf, bool own_vbo)
void GPU_batch_clear(blender::gpu::Batch *batch)
int GPU_batch_vertbuf_add(blender::gpu::Batch *batch, blender::gpu::VertBuf *vertex_buf, bool own_vbo)
void GPU_batch_bind_as_resources(blender::gpu::Batch *batch, GPUShader *shader, const blender::gpu::shader::SpecializationConstants *constants=nullptr)
blender::gpu::Batch * GPU_batch_procedural_triangles_get()
void GPU_batch_multi_draw_indirect(blender::gpu::Batch *batch, GPUStorageBuf *indirect_buf, int count, intptr_t offset, intptr_t stride)
void GPU_batch_program_set_builtin(blender::gpu::Batch *batch, eGPUBuiltinShader shader_id)
void GPU_batch_draw(blender::gpu::Batch *batch)
void GPU_batch_set_shader(blender::gpu::Batch *batch, GPUShader *shader, const blender::gpu::shader::SpecializationConstants *constants_state=nullptr)
void GPU_batch_copy(blender::gpu::Batch *batch_dst, blender::gpu::Batch *batch_src)
void GPU_batch_program_set_builtin_with_config(blender::gpu::Batch *batch, eGPUBuiltinShader shader_id, eGPUShaderConfig sh_cfg)
void GPU_batch_draw_range(blender::gpu::Batch *batch, int vertex_first, int vertex_count)
bool GPU_batch_vertbuf_has(const blender::gpu::Batch *batch, const blender::gpu::VertBuf *vertex_buf)
@ GPU_BATCH_OWNS_INST_VBO
@ GPU_BATCH_OWNS_INST_VBO_MAX
@ GPU_BATCH_OWNS_INST_VBO_ANY
void GPU_batch_draw_parameter_get(blender::gpu::Batch *batch, int *r_vertex_count, int *r_vertex_first, int *r_base_index, int *r_instance_count)
Batch * GPU_batch_calloc()
struct @242053044010324116347033273112253060004051364061::@051143074301336237271216303350234260141112266062 batch