radv: Add BVH IR types
Reviewed-by: Konstantin Seurer <konstantin.seurer@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18769>
This commit is contained in:
committed by
Marge Bot
parent
ca8061c2a7
commit
3e6033394e
@@ -196,6 +196,13 @@ TYPE(uvec4, 16);
|
||||
|
||||
TYPE(VOID_REF, 8);
|
||||
|
||||
/* copied from u_math.h */
|
||||
uint32_t
|
||||
align(uint32_t value, uint32_t alignment)
|
||||
{
|
||||
return (value + alignment - 1) & ~(alignment - 1);
|
||||
}
|
||||
|
||||
void
|
||||
min_float_emulated(REF(int32_t) addr, float f)
|
||||
{
|
||||
@@ -237,6 +244,14 @@ TYPE(radv_bvh_instance_node, 8);
|
||||
TYPE(radv_bvh_box16_node, 4);
|
||||
TYPE(radv_bvh_box32_node, 4);
|
||||
|
||||
TYPE(radv_ir_node, 4);
|
||||
TYPE(radv_ir_box_node, 4);
|
||||
TYPE(radv_ir_triangle_node, 4);
|
||||
TYPE(radv_ir_aabb_node, 4);
|
||||
TYPE(radv_ir_instance_node, 8);
|
||||
|
||||
#define NULL_NODE_ID 0xFFFFFFFF
|
||||
|
||||
uint32_t
|
||||
id_to_offset(uint32_t id)
|
||||
{
|
||||
@@ -255,7 +270,40 @@ pack_node_id(uint32_t offset, uint32_t type)
|
||||
return (offset >> 3) | type;
|
||||
}
|
||||
|
||||
#define NULL_NODE_ID 0xFFFFFFFF
|
||||
uint32_t
|
||||
ir_id_to_offset(uint32_t id)
|
||||
{
|
||||
return id & (~3u);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
ir_id_to_type(uint32_t id)
|
||||
{
|
||||
return id & 3u;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
pack_ir_node_id(uint32_t offset, uint32_t type)
|
||||
{
|
||||
return offset | type;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
ir_type_to_bvh_type(uint32_t type)
|
||||
{
|
||||
switch (type) {
|
||||
case radv_ir_node_triangle:
|
||||
return radv_bvh_node_triangle;
|
||||
case radv_ir_node_internal:
|
||||
return radv_bvh_node_internal;
|
||||
case radv_ir_node_instance:
|
||||
return radv_bvh_node_instance;
|
||||
case radv_ir_node_aabb:
|
||||
return radv_bvh_node_aabb;
|
||||
}
|
||||
/* unreachable in valid nodes */
|
||||
return NULL_NODE_ID;
|
||||
}
|
||||
|
||||
AABB
|
||||
calculate_instance_node_bounds(radv_bvh_instance_node instance)
|
||||
|
||||
@@ -29,10 +29,16 @@
|
||||
#define radv_bvh_node_instance 6
|
||||
#define radv_bvh_node_aabb 7
|
||||
|
||||
#define radv_ir_node_triangle 0
|
||||
#define radv_ir_node_internal 1
|
||||
#define radv_ir_node_instance 2
|
||||
#define radv_ir_node_aabb 3
|
||||
|
||||
#ifdef VULKAN
|
||||
#define VK_UUID_SIZE 16
|
||||
#else
|
||||
#include <vulkan/vulkan.h>
|
||||
typedef struct radv_ir_node radv_ir_node;
|
||||
|
||||
typedef struct {
|
||||
float values[3][4];
|
||||
@@ -74,6 +80,41 @@ struct radv_accel_struct_header {
|
||||
uint32_t internal_node_count;
|
||||
};
|
||||
|
||||
struct radv_ir_node {
|
||||
float sah_cost;
|
||||
uint32_t parent;
|
||||
float aabb[2][3];
|
||||
};
|
||||
|
||||
struct radv_ir_box_node {
|
||||
radv_ir_node base;
|
||||
uint32_t children[2];
|
||||
};
|
||||
|
||||
struct radv_ir_aabb_node {
|
||||
radv_ir_node base;
|
||||
uint32_t primitive_id;
|
||||
uint32_t geometry_id_and_flags;
|
||||
};
|
||||
|
||||
struct radv_ir_triangle_node {
|
||||
radv_ir_node base;
|
||||
float coords[3][3];
|
||||
uint32_t triangle_id;
|
||||
uint32_t id;
|
||||
uint32_t geometry_id_and_flags;
|
||||
};
|
||||
|
||||
struct radv_ir_instance_node {
|
||||
radv_ir_node base;
|
||||
/* See radv_bvh_instance_node */
|
||||
uint64_t base_ptr;
|
||||
uint32_t custom_instance_and_mask;
|
||||
uint32_t sbt_offset_and_flags;
|
||||
mat3x4 otw_matrix;
|
||||
uint32_t instance_id;
|
||||
};
|
||||
|
||||
struct radv_bvh_triangle_node {
|
||||
float coords[3][3];
|
||||
uint32_t reserved[3];
|
||||
|
||||
Reference in New Issue
Block a user