mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-19 00:10:27 +01:00
libagx: refactor index buffer code
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32759>
This commit is contained in:
parent
686daf2524
commit
ff7abb1e22
2 changed files with 35 additions and 8 deletions
|
|
@ -153,10 +153,40 @@ agx_draw_indexed_indirect(uint64_t ptr, uint64_t buf, uint32_t range_B,
|
|||
};
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
agx_draw_index_range_B(struct agx_draw d)
|
||||
{
|
||||
uint range_B = d.index_buffer_range_B;
|
||||
if (!agx_is_indirect(d.b))
|
||||
range_B -= agx_indices_to_B(d.start, d.index_size);
|
||||
|
||||
return range_B;
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
agx_draw_index_range_el(struct agx_draw d)
|
||||
{
|
||||
return d.index_buffer_range_B >> d.index_size;
|
||||
assert(d.indexed);
|
||||
return agx_draw_index_range_B(d) >> d.index_size;
|
||||
}
|
||||
|
||||
static inline uint64_t
|
||||
agx_draw_index_buffer(struct agx_draw d)
|
||||
{
|
||||
assert(d.indexed);
|
||||
|
||||
uint64_t ib = d.index_buffer;
|
||||
if (!agx_is_indirect(d.b))
|
||||
ib += agx_indices_to_B(d.start, d.index_size);
|
||||
|
||||
return ib;
|
||||
}
|
||||
|
||||
static bool
|
||||
agx_direct_draw_overreads_indices(struct agx_draw d)
|
||||
{
|
||||
uint32_t range_B = agx_indices_to_B(d.start + d.b.count[0], d.index_size);
|
||||
return range_B > d.index_buffer_range_B;
|
||||
}
|
||||
|
||||
enum agx_chip {
|
||||
|
|
@ -219,9 +249,7 @@ static inline GLOBAL uint32_t *
|
|||
agx_vdm_draw(GLOBAL uint32_t *out, enum agx_chip chip, struct agx_draw draw,
|
||||
enum agx_primitive topology)
|
||||
{
|
||||
uint64_t ib = draw.index_buffer;
|
||||
if (draw.indexed && !agx_is_indirect(draw.b))
|
||||
ib += (draw.start << draw.index_size);
|
||||
uint64_t ib = draw.indexed ? agx_draw_index_buffer(draw) : 0;
|
||||
|
||||
agx_push(out, INDEX_LIST, cfg) {
|
||||
cfg.primitive = topology;
|
||||
|
|
@ -271,7 +299,7 @@ agx_vdm_draw(GLOBAL uint32_t *out, enum agx_chip chip, struct agx_draw draw,
|
|||
|
||||
if (draw.indexed) {
|
||||
agx_push(out, INDEX_LIST_BUFFER_SIZE, cfg) {
|
||||
cfg.size = draw.index_buffer_range_B;
|
||||
cfg.size = align(agx_draw_index_range_B(draw), 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1071,11 +1071,10 @@ hk_upload_ia_params(struct hk_cmd_buffer *cmd, struct agx_draw draw)
|
|||
unsigned range_el = agx_draw_index_range_el(draw);
|
||||
|
||||
ia.index_buffer =
|
||||
libagx_index_buffer(draw.index_buffer, range_el, draw.start,
|
||||
libagx_index_buffer(agx_draw_index_buffer(draw), range_el, 0,
|
||||
index_size_B, dev->rodata.zero_sink);
|
||||
|
||||
ia.index_buffer_range_el =
|
||||
libagx_index_buffer_range_el(range_el, draw.start);
|
||||
ia.index_buffer_range_el = range_el;
|
||||
}
|
||||
|
||||
return hk_pool_upload(cmd, &ia, sizeof(ia), 8);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue