mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-09 23:08:18 +02:00
kk: Use index element size instead of Metal enum to avoid asserts
Since Metal only has 16 and 32 bit types, if 8 bit indices were used, we would ran into asserts when trying to fetch the size from the util call. Reviewed-by: squidbus <squidbus@proton.me> Signed-off-by: Aitor Camacho <aitor@lunarg.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/42024>
This commit is contained in:
parent
aa26554e6c
commit
25cef2e476
1 changed files with 14 additions and 14 deletions
|
|
@ -1031,7 +1031,7 @@ struct kk_draw_data {
|
|||
mtl_buffer *buffer;
|
||||
uint64_t offset;
|
||||
uint64_t range;
|
||||
enum mtl_index_type type;
|
||||
uint32_t el_size_B;
|
||||
} index;
|
||||
uint32_t vertex_offset;
|
||||
enum mtl_primitive_type primitive_type;
|
||||
|
|
@ -1057,8 +1057,7 @@ kk_upload_vertex_params(struct kk_cmd_buffer *cmd, struct kk_draw_data data)
|
|||
params.index_buffer =
|
||||
mtl_buffer_get_gpu_address(data.index.buffer) + data.index.offset;
|
||||
|
||||
params.index_buffer_range_el =
|
||||
data.index.range / mtl_index_type_to_size_B(data.index.type);
|
||||
params.index_buffer_range_el = data.index.range / data.index.el_size_B;
|
||||
}
|
||||
|
||||
struct kk_shader *vs = cmd->state.shaders[MESA_SHADER_VERTEX];
|
||||
|
|
@ -1513,18 +1512,21 @@ kk_dispatch_draw(mtl_render_encoder *enc, struct kk_draw_data data)
|
|||
if (kk_grid_is_indirect(data.grid)) {
|
||||
if (data.index.buffer) {
|
||||
mtl_draw_indexed_primitives_indirect(
|
||||
enc, data.primitive_type, data.index.type, data.index.buffer,
|
||||
data.index.offset, data.grid.indirect, data.grid.offset);
|
||||
enc, data.primitive_type,
|
||||
index_size_in_bytes_to_mtl_index_type(data.index.el_size_B),
|
||||
data.index.buffer, data.index.offset, data.grid.indirect,
|
||||
data.grid.offset);
|
||||
} else {
|
||||
mtl_draw_primitives_indirect(enc, data.primitive_type,
|
||||
data.grid.indirect, data.grid.offset);
|
||||
}
|
||||
} else {
|
||||
if (data.index.buffer) {
|
||||
mtl_draw_indexed_primitives(enc, data.primitive_type, data.grid.size.x,
|
||||
data.index.type, data.index.buffer,
|
||||
data.index.offset, data.grid.size.y,
|
||||
data.vertex_offset, data.grid.size.z);
|
||||
mtl_draw_indexed_primitives(
|
||||
enc, data.primitive_type, data.grid.size.x,
|
||||
index_size_in_bytes_to_mtl_index_type(data.index.el_size_B),
|
||||
data.index.buffer, data.index.offset, data.grid.size.y,
|
||||
data.vertex_offset, data.grid.size.z);
|
||||
} else {
|
||||
/* Avoid Metal validation error. Empty draws from tessellation will
|
||||
* have values set to 0. */
|
||||
|
|
@ -1703,7 +1705,7 @@ kk_launch_tess(struct kk_cmd_buffer *cmd, struct kk_draw_data draw,
|
|||
if (draw.index.buffer) {
|
||||
args.in_index_buffer =
|
||||
mtl_buffer_get_gpu_address(draw.index.buffer) + draw.index.offset;
|
||||
args.in_index_size_B = mtl_index_type_to_size_B(draw.index.type);
|
||||
args.in_index_size_B = draw.index.el_size_B;
|
||||
args.in_index_buffer_range_el =
|
||||
draw.index.range / args.in_index_size_B;
|
||||
}
|
||||
|
|
@ -1778,7 +1780,7 @@ kk_launch_tess(struct kk_cmd_buffer *cmd, struct kk_draw_data draw,
|
|||
|
||||
draw.index.buffer = dev->heap->map;
|
||||
draw.index.offset = sizeof(struct poly_heap);
|
||||
draw.index.type = MTL_INDEX_TYPE_UINT32;
|
||||
draw.index.el_size_B = 4u;
|
||||
draw.primitive_type = mesa_prim_to_mtl_primitive_type(gfx->tess.prim);
|
||||
return draw;
|
||||
}
|
||||
|
|
@ -1794,9 +1796,7 @@ build_draw_data(struct kk_cmd_buffer *cmd, struct kk_draw_command *data,
|
|||
struct kk_draw_data draw = {
|
||||
.index.buffer = data->index_buffer,
|
||||
.index.offset = data->index_buffer_offset,
|
||||
.index.type = data->indexed ? index_size_in_bytes_to_mtl_index_type(
|
||||
data->index_buffer_el_size_B)
|
||||
: 0u,
|
||||
.index.el_size_B = data->index_buffer_el_size_B,
|
||||
.index.range = data->index_buffer_range_B,
|
||||
.primitive_type = tess ? 0u : mesa_prim_to_mtl_primitive_type(data->prim),
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue