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:
Friedrich Vock
2022-09-22 22:47:11 +02:00
committed by Marge Bot
parent ca8061c2a7
commit 3e6033394e
2 changed files with 90 additions and 1 deletions
+49 -1
View File
@@ -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)
+41
View File
@@ -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];