mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
radv/rra/gfx12: Handle box nodes without children
Reviewed-by: Natalie Vock <natalie.vock@gmx.de> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35166>
This commit is contained in:
parent
f33623ea5f
commit
a61f78b8f4
1 changed files with 18 additions and 14 deletions
|
|
@ -73,22 +73,24 @@ rra_gather_bvh_info_gfx12(const uint8_t *bvh, uint32_t node_id, struct rra_bvh_i
|
|||
|
||||
uint32_t valid_child_count_minus_one = src->child_count_exponents >> 28;
|
||||
|
||||
uint32_t internal_id = src->internal_base_id;
|
||||
uint32_t primitive_id = src->primitive_base_id;
|
||||
for (uint32_t i = 0; i <= valid_child_count_minus_one; i++) {
|
||||
uint32_t child_type = (src->children[i].dword2 >> 24) & 0xf;
|
||||
uint32_t child_size = src->children[i].dword2 >> 28;
|
||||
if (valid_child_count_minus_one != 0xf) {
|
||||
uint32_t internal_id = src->internal_base_id;
|
||||
uint32_t primitive_id = src->primitive_base_id;
|
||||
for (uint32_t i = 0; i <= valid_child_count_minus_one; i++) {
|
||||
uint32_t child_type = (src->children[i].dword2 >> 24) & 0xf;
|
||||
uint32_t child_size = src->children[i].dword2 >> 28;
|
||||
|
||||
uint32_t child_id;
|
||||
if (child_type == radv_bvh_node_box32) {
|
||||
child_id = internal_id | child_type;
|
||||
internal_id += (child_size * RADV_GFX12_BVH_NODE_SIZE) >> 3;
|
||||
} else {
|
||||
child_id = primitive_id | child_type;
|
||||
primitive_id += (child_size * RADV_GFX12_BVH_NODE_SIZE) >> 3;
|
||||
uint32_t child_id;
|
||||
if (child_type == radv_bvh_node_box32) {
|
||||
child_id = internal_id | child_type;
|
||||
internal_id += (child_size * RADV_GFX12_BVH_NODE_SIZE) >> 3;
|
||||
} else {
|
||||
child_id = primitive_id | child_type;
|
||||
primitive_id += (child_size * RADV_GFX12_BVH_NODE_SIZE) >> 3;
|
||||
}
|
||||
|
||||
rra_gather_bvh_info_gfx12(bvh, child_id, dst);
|
||||
}
|
||||
|
||||
rra_gather_bvh_info_gfx12(bvh, child_id, dst);
|
||||
}
|
||||
} else {
|
||||
dst->geometry_infos[get_geometry_id(node, node_type)].primitive_count++;
|
||||
|
|
@ -107,6 +109,8 @@ rra_transcode_box8_node(struct rra_transcoding_context *ctx, const struct radv_g
|
|||
dst->unused = parent_id;
|
||||
|
||||
uint32_t valid_child_count_minus_one = dst->child_count_exponents >> 28;
|
||||
if (valid_child_count_minus_one == 0xf)
|
||||
return;
|
||||
|
||||
uint32_t internal_child_count = 0;
|
||||
uint32_t leaf_child_count = 0;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue