rt: hide internal apis

This commit is contained in:
Ivan Avdeev 2023-06-01 09:25:55 -07:00
parent ed4d0070f8
commit 8f47115a01
4 changed files with 53 additions and 43 deletions

View File

@ -3,6 +3,7 @@
#include "vk_core.h"
#include "vk_buffer.h"
#include "vk_const.h"
#include "vk_rtx.h"
#define MAX_INSTANCES 2048
#define MAX_KUSOCHKI 32768
@ -89,3 +90,44 @@ void XVK_RayModel_ClearForNextFrame( void );
void XVK_RayModel_Validate(void);
void RT_RayModel_Clear(void);
// Just creates an empty BLAS structure, doesn't alloc anything
// Memory pointed to by name must remain alive until RT_BlasDestroy
struct rt_blas_s* RT_BlasCreate(const char *name, rt_blas_usage_e usage);
// Create an empty BLAS with specified limits
struct rt_blas_s* RT_BlasCreatePreallocated(const char *name, rt_blas_usage_e usage, int max_geometries, const int *max_prims, int max_vertex, uint32_t extra_buffer_offset);
void RT_BlasDestroy(struct rt_blas_s* blas);
// 1. Schedules BLAS build (allocates geoms+ranges from a temp pool, etc).
// 2. Allocates kusochki (if not) and fills them with geom and initial material data
qboolean RT_BlasBuild(struct rt_blas_s *blas, const struct vk_render_geometry_s *geoms, int geoms_count);
VkDeviceAddress RT_BlasGetDeviceAddress(struct rt_blas_s *blas);
typedef struct rt_kusochki_s {
uint32_t offset;
int count;
int internal_index__;
} rt_kusochki_t;
// TODO lifetime arg here is KORYAVY
rt_kusochki_t RT_KusochkiAlloc(int count, r_geometry_lifetime_t lifetime);
void RT_KusochkiFree(const rt_kusochki_t*);
struct vk_render_geometry_s;
qboolean RT_KusochkiUpload(const rt_kusochki_t *kusochki, const struct vk_render_geometry_s *geoms, int geoms_count, int override_texture_id);
// Update animated materials
void RT_KusochkiUploadSubset(rt_kusochki_t *kusochki, const struct vk_render_geometry_s *geoms, const int *geoms_indices, int geoms_indices_count);
typedef struct {
const struct rt_blas_s* blas;
uint32_t kusochki_offset;
int render_type; // TODO material_mode
const matrix3x4 *transform, *prev_transform;
const vec4_t *color;
} rt_blas_frame_args_t;
void RT_BlasAddToFrame( rt_blas_frame_args_t args );

View File

@ -574,6 +574,12 @@ void RT_FrameAddModel( struct rt_model_s *model, rt_frame_add_model_t args ) {
rt_draw_instance_t* draw_instance = g_ray_model_state.frame.instances + g_ray_model_state.frame.instances_count;
/* if (args.textures_override > 0) { */
/* // FIXME need geometries + count */
/* rt_kusochki_t temp_kusok = RT_KusochkiAlloc(int count, r_geometry_lifetime_t lifetime); */
/* qboolean RT_KusochkiUpload(const rt_kusochki_t *kusochki, const struct vk_render_geometry_s *geoms, int geoms_count, int override_texture_id); */
/* } */
draw_instance->model_toremove = NULL;
draw_instance->blas_addr = model->blas_addr;
draw_instance->kusochki_offset = model->kusochki.offset;

View File

@ -809,6 +809,7 @@ void R_RenderModelDraw(const vk_render_model_t *model, r_model_draw_t args) {
.transform = (const matrix3x4*)args.transform,
.prev_transform = (const matrix3x4*)args.prev_transform,
.color = args.color,
.textures_override = args.textures_override,
});
} else {
submitToTraditionalRender(model, *args.transform, *args.color, args.render_type, args.textures_override);

View File

@ -36,6 +36,7 @@ typedef struct {
const matrix4x4 *projection, *view;
// Buffer holding vertex and index data
// TODO remove
struct {
VkBuffer buffer; // must be the same as in vk_ray_model_create_t TODO: validate or make impossible to specify incorrectly
uint64_t size;
@ -54,55 +55,14 @@ void VK_RayShutdown( void );
struct rt_blas_s;
struct vk_render_geometry_s;
struct rt_model_s;
typedef enum {
kBlasBuildStatic, // builds slow for fast trace
kBlasBuildDynamicUpdate, // builds if not built, updates if built
kBlasBuildDynamicFast, // builds fast from scratch (no correlation with previous frame guaranteed, e.g. triapi)
} rt_blas_usage_e;
// Just creates an empty BLAS structure, doesn't alloc anything
// Memory pointed to by name must remain alive until RT_BlasDestroy
struct rt_blas_s* RT_BlasCreate(const char *name, rt_blas_usage_e usage);
// Create an empty BLAS with specified limits
struct rt_blas_s* RT_BlasCreatePreallocated(const char *name, rt_blas_usage_e usage, int max_geometries, const int *max_prims, int max_vertex, uint32_t extra_buffer_offset);
void RT_BlasDestroy(struct rt_blas_s* blas);
// 1. Schedules BLAS build (allocates geoms+ranges from a temp pool, etc).
// 2. Allocates kusochki (if not) and fills them with geom and initial material data
qboolean RT_BlasBuild(struct rt_blas_s *blas, const struct vk_render_geometry_s *geoms, int geoms_count);
VkDeviceAddress RT_BlasGetDeviceAddress(struct rt_blas_s *blas);
typedef struct rt_kusochki_s {
uint32_t offset;
int count;
int internal_index__;
} rt_kusochki_t;
// TODO lifetime arg here is KORYAVY
rt_kusochki_t RT_KusochkiAlloc(int count, r_geometry_lifetime_t lifetime);
void RT_KusochkiFree(const rt_kusochki_t*);
struct vk_render_geometry_s;
qboolean RT_KusochkiUpload(const rt_kusochki_t *kusochki, const struct vk_render_geometry_s *geoms, int geoms_count, int override_texture_id);
// Update animated materials
void RT_KusochkiUploadSubset(rt_kusochki_t *kusochki, const struct vk_render_geometry_s *geoms, const int *geoms_indices, int geoms_indices_count);
typedef struct {
const struct rt_blas_s* blas;
uint32_t kusochki_offset;
int render_type; // TODO material_mode
const matrix3x4 *transform, *prev_transform;
const vec4_t *color;
} rt_blas_frame_args_t;
void RT_BlasAddToFrame( rt_blas_frame_args_t args );
struct rt_model_s;
typedef struct {
const char *debug_name; // Must remain alive until RT_ModelDestroy
const struct vk_render_geometry_s *geometries;
@ -116,6 +76,7 @@ typedef struct {
int render_type; // TODO material_mode
const matrix3x4 *transform, *prev_transform;
const vec4_t *color;
int textures_override; // Override kusochki/material textures if > 0
} rt_frame_add_model_t;
void RT_FrameAddModel( struct rt_model_s *model, rt_frame_add_model_t args );