mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 03:30:10 +01:00
radv/bvh: Replace is_final_tree with bvh_offset
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20818>
This commit is contained in:
parent
688f598237
commit
4e87a01b93
4 changed files with 15 additions and 15 deletions
|
|
@ -109,13 +109,13 @@ struct radv_ir_node {
|
|||
float cost;
|
||||
};
|
||||
|
||||
#define FINAL_TREE_PRESENT 0
|
||||
#define FINAL_TREE_NOT_PRESENT 1
|
||||
#define FINAL_TREE_UNKNOWN 2
|
||||
#define RADV_UNKNOWN_BVH_OFFSET 0xFFFFFFFF
|
||||
#define RADV_NULL_BVH_OFFSET 0xFFFFFFFE
|
||||
|
||||
struct radv_ir_box_node {
|
||||
radv_ir_node base;
|
||||
uint32_t children[2];
|
||||
uint32_t in_final_tree;
|
||||
uint32_t bvh_offset;
|
||||
};
|
||||
|
||||
struct radv_ir_aabb_node {
|
||||
|
|
|
|||
|
|
@ -161,12 +161,12 @@ main()
|
|||
uint32_t node_id = pack_node_id(dst_node_offset, radv_bvh_node_box32);
|
||||
|
||||
for (;;) {
|
||||
/* Make changes to the current node's in_final_tree value visible. */
|
||||
/* Make changes to the current node's BVH offset value visible. */
|
||||
memoryBarrier(gl_ScopeDevice, gl_StorageSemanticsBuffer,
|
||||
gl_SemanticsAcquireRelease | gl_SemanticsMakeAvailable | gl_SemanticsMakeVisible);
|
||||
|
||||
uint32_t in_final_tree = node_id == RADV_BVH_ROOT_NODE ? FINAL_TREE_PRESENT : DEREF(src_node).in_final_tree;
|
||||
if (in_final_tree == FINAL_TREE_UNKNOWN)
|
||||
uint32_t bvh_offset = node_id == RADV_BVH_ROOT_NODE ? id_to_offset(RADV_BVH_ROOT_NODE) : DEREF(src_node).bvh_offset;
|
||||
if (bvh_offset == RADV_UNKNOWN_BVH_OFFSET)
|
||||
continue;
|
||||
|
||||
uint32_t found_child_count = 0;
|
||||
|
|
@ -221,8 +221,8 @@ main()
|
|||
children[collapsed_child_index] = children[found_child_count];
|
||||
}
|
||||
|
||||
if (in_final_tree == FINAL_TREE_PRESENT)
|
||||
DEREF(child_node).in_final_tree = FINAL_TREE_NOT_PRESENT;
|
||||
if (bvh_offset != RADV_NULL_BVH_OFFSET)
|
||||
DEREF(child_node).bvh_offset = RADV_NULL_BVH_OFFSET;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
|
|
@ -237,9 +237,9 @@ main()
|
|||
uint32_t child_index = offset_in_internal_nodes / SIZEOF(radv_ir_box_node);
|
||||
dst_offset = dst_internal_offset + child_index * SIZEOF(radv_bvh_box32_node);
|
||||
|
||||
if (in_final_tree == FINAL_TREE_PRESENT) {
|
||||
if (bvh_offset != RADV_NULL_BVH_OFFSET) {
|
||||
REF(radv_ir_box_node) child_node = REF(radv_ir_box_node)OFFSET(args.intermediate_bvh, offset);
|
||||
DEREF(child_node).in_final_tree = FINAL_TREE_PRESENT;
|
||||
DEREF(child_node).bvh_offset = dst_offset;
|
||||
}
|
||||
} else {
|
||||
uint32_t child_index = offset / intermediate_leaf_node_size;
|
||||
|
|
@ -255,7 +255,7 @@ main()
|
|||
|
||||
uint32_t child_id = pack_node_id(dst_offset, ir_type_to_bvh_type(type));
|
||||
children[i] = child_id;
|
||||
if (in_final_tree == FINAL_TREE_PRESENT)
|
||||
if (bvh_offset != RADV_NULL_BVH_OFFSET)
|
||||
set_parent(child_id, node_id);
|
||||
}
|
||||
|
||||
|
|
@ -266,7 +266,7 @@ main()
|
|||
}
|
||||
}
|
||||
|
||||
/* Make changes to the children's in_final_tree value available to the other invocations. */
|
||||
/* Make changes to the children's BVH offset value available to the other invocations. */
|
||||
memoryBarrier(gl_ScopeDevice, gl_StorageSemanticsBuffer,
|
||||
gl_SemanticsAcquireRelease | gl_SemanticsMakeAvailable | gl_SemanticsMakeVisible);
|
||||
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ main(void)
|
|||
radv_ir_box_node node_value;
|
||||
|
||||
node_value.base.aabb = bounds;
|
||||
node_value.in_final_tree = FINAL_TREE_UNKNOWN;
|
||||
node_value.bvh_offset = RADV_UNKNOWN_BVH_OFFSET;
|
||||
node_value.children = children;
|
||||
|
||||
DEREF(node) = node_value;
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ push_node(uint32_t children[2])
|
|||
#if EXTENDED_SAH
|
||||
DEREF(dst_node).base.cost = cost * 0.5 + BVH_LEVEL_COST;
|
||||
#endif
|
||||
DEREF(dst_node).in_final_tree = FINAL_TREE_UNKNOWN;
|
||||
DEREF(dst_node).bvh_offset = RADV_UNKNOWN_BVH_OFFSET;
|
||||
return dst_id;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue