rt: add debug labels to command buffer

This commit is contained in:
Ivan Avdeev 2022-01-18 22:21:14 -08:00
parent 1ad24b657b
commit 460b839a64
6 changed files with 51 additions and 6 deletions

View File

@ -94,6 +94,37 @@ do { \
} \
} while (0)
#define DEBUG_BEGIN(cmdbuf, msg) \
do { \
if (vk_core.debug) { \
const VkDebugUtilsLabelEXT label = { \
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, \
.pLabelName = msg, \
}; \
vkCmdBeginDebugUtilsLabelEXT(cmdbuf, &label); \
} \
} while(0)
#define DEBUG_BEGINF(cmdbuf, fmt, ...) \
do { \
if (vk_core.debug) { \
char buf[128]; \
snprintf(buf, sizeof(buf), fmt, ##__VA_ARGS__); \
const VkDebugUtilsLabelEXT label = { \
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, \
.pLabelName = buf, \
}; \
vkCmdBeginDebugUtilsLabelEXT(cmdbuf, &label); \
} \
} while(0)
#define DEBUG_END(cmdbuf) \
do { \
if (vk_core.debug) { \
vkCmdEndDebugUtilsLabelEXT(cmdbuf); \
} \
} while(0)
// TODO make this not fatal: devise proper error handling strategies
// FIXME Host_Error does not cause process to exit, we need to handle this manually
#define XVK_CHECK(f) do { \

View File

@ -176,7 +176,9 @@ void XVK_DenoiserDenoise( const xvk_denoiser_args_t* args ) {
VK_DescriptorsWrite(&g_denoiser.descriptors);
vkCmdBindPipeline(args->cmdbuf, VK_PIPELINE_BIND_POINT_COMPUTE, g_denoiser.pipeline);
vkCmdBindDescriptorSets(args->cmdbuf, VK_PIPELINE_BIND_POINT_COMPUTE, g_denoiser.descriptors.pipeline_layout, 0, 1, g_denoiser.descriptors.desc_sets + 0, 0, NULL);
vkCmdDispatch(args->cmdbuf, (args->width + WG_W - 1) / WG_W, (args->height + WG_H - 1) / WG_H, 1);
DEBUG_BEGIN(args->cmdbuf, "denoiser");
vkCmdBindPipeline(args->cmdbuf, VK_PIPELINE_BIND_POINT_COMPUTE, g_denoiser.pipeline);
vkCmdBindDescriptorSets(args->cmdbuf, VK_PIPELINE_BIND_POINT_COMPUTE, g_denoiser.descriptors.pipeline_layout, 0, 1, g_denoiser.descriptors.desc_sets + 0, 0, NULL);
vkCmdDispatch(args->cmdbuf, (args->width + WG_W - 1) / WG_W, (args->height + WG_H - 1) / WG_H, 1);
DEBUG_END(args->cmdbuf);
}

View File

@ -169,8 +169,10 @@ void XVK_RayTraceLightDirect( VkCommandBuffer cmdbuf, const xvk_ray_trace_light_
updateDescriptors( args );
vkCmdBindPipeline(cmdbuf, VK_PIPELINE_BIND_POINT_COMPUTE, g_ray_light_direct.pipeline);
vkCmdBindDescriptorSets(cmdbuf, VK_PIPELINE_BIND_POINT_COMPUTE, g_ray_light_direct.desc.riptors.pipeline_layout, 0, 1, g_ray_light_direct.desc.riptors.desc_sets + 0, 0, NULL);
vkCmdDispatch(cmdbuf, (args->width + WG_W - 1) / WG_W, (args->height + WG_H - 1) / WG_H, 1);
DEBUG_BEGIN(cmdbuf, "lights direct");
vkCmdBindPipeline(cmdbuf, VK_PIPELINE_BIND_POINT_COMPUTE, g_ray_light_direct.pipeline);
vkCmdBindDescriptorSets(cmdbuf, VK_PIPELINE_BIND_POINT_COMPUTE, g_ray_light_direct.desc.riptors.pipeline_layout, 0, 1, g_ray_light_direct.desc.riptors.desc_sets + 0, 0, NULL);
vkCmdDispatch(cmdbuf, (args->width + WG_W - 1) / WG_W, (args->height + WG_H - 1) / WG_H, 1);
DEBUG_END(cmdbuf);
}

View File

@ -246,7 +246,10 @@ vk_ray_model_t* VK_RayModelCreate( vk_ray_model_init_t args ) {
} else {
qboolean result;
asrgs.p_accel = &ray_model->as;
DEBUG_BEGINF(vk_core.cb, "build blas for %s", args.model->debug_name);
result = createOrUpdateAccelerationStructure(vk_core.cb, &asrgs, ray_model);
DEBUG_END(vk_core.cb);
if (!result)
{

View File

@ -283,6 +283,7 @@ void XVK_RayTracePrimary( VkCommandBuffer cmdbuf, const xvk_ray_trace_primary_t
/* vkCmdPushConstants(cmdbuf, g_ray_primary.descriptors.pipeline_layout, VK_SHADER_STAGE_RAYGEN_BIT_KHR | VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR | VK_SHADER_STAGE_ANY_HIT_BIT_KHR, 0, sizeof(push_constants), &push_constants); */
/* } */
DEBUG_BEGIN(cmdbuf, "primary");
vkCmdBindDescriptorSets(cmdbuf, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, g_ray_primary.desc.riptors.pipeline_layout, 0, 1, g_ray_primary.desc.riptors.desc_sets + 0, 0, NULL);
{
@ -299,5 +300,6 @@ void XVK_RayTracePrimary( VkCommandBuffer cmdbuf, const xvk_ray_trace_primary_t
vkCmdTraceRaysKHR(cmdbuf, &sbt_raygen, &sbt_miss, &sbt_hit, &sbt_callable, args->width, args->height, 1 );
}
DEBUG_END(cmdbuf);
}

View File

@ -565,6 +565,8 @@ static void createPipeline( void )
static void prepareTlas( VkCommandBuffer cmdbuf ) {
ASSERT(g_ray_model_state.frame.num_models > 0);
DEBUG_BEGIN(cmdbuf, "prepare tlas");
// Upload all blas instances references to GPU mem
{
VkAccelerationStructureInstanceKHR* inst = g_rtx.tlas_geom_buffer.mapped;
@ -622,6 +624,7 @@ static void prepareTlas( VkCommandBuffer cmdbuf ) {
// 2. Build TLAS
createTlas(cmdbuf);
DEBUG_END(cmdbuf);
}
static void updateDescriptors( const vk_ray_frame_render_args_t *args, int frame_index, const xvk_ray_frame_images_t *frame_dst ) {
@ -965,6 +968,7 @@ static void prepareUniformBuffer( const vk_ray_frame_render_args_t *args, int fr
}
static void performTracing( VkCommandBuffer cmdbuf, const vk_ray_frame_render_args_t* args, int frame_index, const xvk_ray_frame_images_t *current_frame, float fov_angle_y) {
DEBUG_BEGIN(cmdbuf, "yay tracing");
uploadLights();
prepareTlas(cmdbuf);
prepareUniformBuffer(args, frame_index, fov_angle_y);
@ -1179,6 +1183,7 @@ RAY_PRIMARY_OUTPUTS(X)
blitImage( &blit_args );
}
DEBUG_END(cmdbuf);
}
qboolean initVk2d(void);