32#define GPU_BATCH_VBO_MAX_LEN 16
33#define GPU_BATCH_INST_VBO_MAX_LEN 2
34#define GPU_BATCH_VAO_STATIC_LEN 3
35#define GPU_BATCH_VAO_DYN_ALLOC_COUNT 16
49 ~GPU_BATCH_OWNS_VBO_ANY,
61#define GPU_BATCH_OWNS_NONE GPU_BATCH_INVALID
64 "eGPUBatchFlag: Error: status flags are shadowed by the ownership bits!")
87 GPUStorageBuf *resource_id_buf;
95 virtual ~Batch() =
default;
97 virtual void draw(
int v_first,
int v_count,
int i_first,
int i_count) = 0;
98 virtual void draw_indirect(GPUStorageBuf *indirect_buf,
intptr_t offset) = 0;
99 virtual void multi_draw_indirect(GPUStorageBuf *indirect_buf,
109 return verts_(0)->vertex_len;
113 IndexBuf *elem_()
const
117 VertBuf *verts_(
const int index)
const
121 VertBuf *inst_(
const int index)
const
149#define GPU_batch_create(primitive_type, vertex_buf, index_buf) \
150 GPU_batch_create_ex(primitive_type, vertex_buf, index_buf, (eGPUBatchFlag)0)
167#define GPU_batch_init(batch, primitive_type, vertex_buf, index_buf) \
168 GPU_batch_init_ex(batch, primitive_type, vertex_buf, index_buf, (eGPUBatchFlag)0)
174void GPU_batch_copy(blender::gpu::Batch *batch_dst, blender::gpu::Batch *batch_src);
191#define GPU_BATCH_CLEAR_SAFE(batch) \
193 if (batch != nullptr) { \
194 GPU_batch_clear(batch); \
195 GPU_batch_zero(batch); \
205#define GPU_BATCH_DISCARD_SAFE(batch) \
207 if (batch != nullptr) { \
208 GPU_batch_discard(batch); \
297#define GPU_batch_uniform_1i(batch, name, x) GPU_shader_uniform_1i((batch)->shader, name, x);
298#define GPU_batch_uniform_1b(batch, name, x) GPU_shader_uniform_1b((batch)->shader, name, x);
299#define GPU_batch_uniform_1f(batch, name, x) GPU_shader_uniform_1f((batch)->shader, name, x);
300#define GPU_batch_uniform_2f(batch, name, x, y) GPU_shader_uniform_2f((batch)->shader, name, x, y);
301#define GPU_batch_uniform_3f(batch, name, x, y, z) \
302 GPU_shader_uniform_3f((batch)->shader, name, x, y, z);
303#define GPU_batch_uniform_4f(batch, name, x, y, z, w) \
304 GPU_shader_uniform_4f((batch)->shader, name, x, y, z, w);
305#define GPU_batch_uniform_2fv(batch, name, val) GPU_shader_uniform_2fv((batch)->shader, name, val);
306#define GPU_batch_uniform_3fv(batch, name, val) GPU_shader_uniform_3fv((batch)->shader, name, val);
307#define GPU_batch_uniform_4fv(batch, name, val) GPU_shader_uniform_4fv((batch)->shader, name, val);
308#define GPU_batch_uniform_2fv_array(batch, name, len, val) \
309 GPU_shader_uniform_2fv_array((batch)->shader, name, len, val);
310#define GPU_batch_uniform_4fv_array(batch, name, len, val) \
311 GPU_shader_uniform_4fv_array((batch)->shader, name, len, val);
312#define GPU_batch_uniform_mat4(batch, name, val) \
313 GPU_shader_uniform_mat4((batch)->shader, name, val);
314#define GPU_batch_uniformbuf_bind(batch, name, ubo) \
315 GPU_uniformbuf_bind(ubo, GPU_shader_get_ubo_binding((batch)->shader, name));
316#define GPU_batch_texture_bind(batch, name, tex) \
317 GPU_texture_bind(tex, GPU_shader_get_sampler_binding((batch)->shader, name));
394 GPUStorageBuf *indirect_buf,
410 GPUStorageBuf *indirect_buf,
423 int *r_instance_count);
#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)
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)
void GPU_batch_discard(blender::gpu::Batch *batch)
void GPU_batch_zero(blender::gpu::Batch *batch)
void GPU_batch_draw_advanced(blender::gpu::Batch *batch, int vertex_first, int vertex_count, int instance_first, int instance_count)
#define GPU_BATCH_INST_VBO_MAX_LEN
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)
void GPU_batch_resource_id_buf_set(blender::gpu::Batch *batch, GPUStorageBuf *resource_id_buf)
blender::IndexRange GPU_batch_draw_expanded_parameter_get(const blender::gpu::Batch *batch, GPUPrimType expanded_prim_type, int vertex_count, int vertex_first)
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)
#define GPU_BATCH_VBO_MAX_LEN
void GPU_batch_multi_draw_indirect(blender::gpu::Batch *batch, GPUStorageBuf *indirect_buf, int count, intptr_t offset, intptr_t stride)
void GPU_batch_set_shader(blender::gpu::Batch *batch, GPUShader *shader)
void GPU_batch_program_set_builtin(blender::gpu::Batch *batch, eGPUBuiltinShader shader_id)
void GPU_batch_draw(blender::gpu::Batch *batch)
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)
void GPU_batch_bind_as_resources(blender::gpu::Batch *batch, GPUShader *shader)
struct GPUShader GPUShader
uint32_t index_len_get() const
Batch * GPU_batch_calloc()