Implicit surface rendering via ray tracing
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

415 lines
16 KiB

/*
* Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-FileCopyrightText: Copyright (c) 2018-2021 NVIDIA CORPORATION
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include <vulkan/vulkan.h>
/**
\fn load_VK_EXTENSIONS
\brief load_VK_EXTENSIONS : Vulkan Extension Loader
The extensions_vk files takes care of loading and providing the symbols of Vulkan C Api extensions.
It is generated by `extensions_vk.py` and generates all extensions found in vk.xml. See script for details.
.
The framework triggers this implicitly in the `nvvk::Context` class, immediately after creating the device.
\code{.cpp}
// loads all known extensions
load_VK_EXTENSIONS(instance, vkGetInstanceProcAddr, device, vkGetDeviceProcAddr);
\endcode
*/
/* Load all avaiable extensions */
void load_VK_EXTENSIONS(VkInstance instance, PFN_vkGetInstanceProcAddr getInstanceProcAddr, VkDevice device, PFN_vkGetDeviceProcAddr getDeviceProcAddr);
/* NVVK_GENERATE_DEFINE */
#if defined(VK_AMD_buffer_marker)
#define NVVK_HAS_VK_AMD_buffer_marker
#endif /* VK_AMD_buffer_marker */
#if defined(VK_AMD_display_native_hdr)
#define NVVK_HAS_VK_AMD_display_native_hdr
#endif /* VK_AMD_display_native_hdr */
#if defined(VK_AMD_draw_indirect_count)
#define NVVK_HAS_VK_AMD_draw_indirect_count
#endif /* VK_AMD_draw_indirect_count */
#if defined(VK_AMD_shader_info)
#define NVVK_HAS_VK_AMD_shader_info
#endif /* VK_AMD_shader_info */
#if defined(VK_ANDROID_external_memory_android_hardware_buffer)
#define NVVK_HAS_VK_ANDROID_external_memory_android_hardware_buffer
#endif /* VK_ANDROID_external_memory_android_hardware_buffer */
#if defined(VK_EXT_acquire_drm_display)
#define NVVK_HAS_VK_EXT_acquire_drm_display
#endif /* VK_EXT_acquire_drm_display */
#if defined(VK_EXT_acquire_xlib_display)
#define NVVK_HAS_VK_EXT_acquire_xlib_display
#endif /* VK_EXT_acquire_xlib_display */
#if defined(VK_EXT_buffer_device_address)
#define NVVK_HAS_VK_EXT_buffer_device_address
#endif /* VK_EXT_buffer_device_address */
#if defined(VK_EXT_calibrated_timestamps)
#define NVVK_HAS_VK_EXT_calibrated_timestamps
#endif /* VK_EXT_calibrated_timestamps */
#if defined(VK_EXT_color_write_enable)
#define NVVK_HAS_VK_EXT_color_write_enable
#endif /* VK_EXT_color_write_enable */
#if defined(VK_EXT_conditional_rendering)
#define NVVK_HAS_VK_EXT_conditional_rendering
#endif /* VK_EXT_conditional_rendering */
#if defined(VK_EXT_debug_marker)
#define NVVK_HAS_VK_EXT_debug_marker
#endif /* VK_EXT_debug_marker */
#if defined(VK_EXT_debug_report)
#define NVVK_HAS_VK_EXT_debug_report
#endif /* VK_EXT_debug_report */
#if defined(VK_EXT_debug_utils)
#define NVVK_HAS_VK_EXT_debug_utils
#endif /* VK_EXT_debug_utils */
#if defined(VK_EXT_descriptor_buffer)
#define NVVK_HAS_VK_EXT_descriptor_buffer
#endif /* VK_EXT_descriptor_buffer */
#if defined(VK_EXT_device_fault)
#define NVVK_HAS_VK_EXT_device_fault
#endif /* VK_EXT_device_fault */
#if defined(VK_EXT_direct_mode_display)
#define NVVK_HAS_VK_EXT_direct_mode_display
#endif /* VK_EXT_direct_mode_display */
#if defined(VK_EXT_directfb_surface)
#define NVVK_HAS_VK_EXT_directfb_surface
#endif /* VK_EXT_directfb_surface */
#if defined(VK_EXT_discard_rectangles)
#define NVVK_HAS_VK_EXT_discard_rectangles
#endif /* VK_EXT_discard_rectangles */
#if defined(VK_EXT_display_control)
#define NVVK_HAS_VK_EXT_display_control
#endif /* VK_EXT_display_control */
#if defined(VK_EXT_display_surface_counter)
#define NVVK_HAS_VK_EXT_display_surface_counter
#endif /* VK_EXT_display_surface_counter */
#if defined(VK_EXT_extended_dynamic_state)
#define NVVK_HAS_VK_EXT_extended_dynamic_state
#endif /* VK_EXT_extended_dynamic_state */
#if defined(VK_EXT_extended_dynamic_state2)
#define NVVK_HAS_VK_EXT_extended_dynamic_state2
#endif /* VK_EXT_extended_dynamic_state2 */
#if defined(VK_EXT_extended_dynamic_state3)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 */
#if defined(VK_EXT_external_memory_host)
#define NVVK_HAS_VK_EXT_external_memory_host
#endif /* VK_EXT_external_memory_host */
#if defined(VK_EXT_full_screen_exclusive)
#define NVVK_HAS_VK_EXT_full_screen_exclusive
#endif /* VK_EXT_full_screen_exclusive */
#if defined(VK_EXT_hdr_metadata)
#define NVVK_HAS_VK_EXT_hdr_metadata
#endif /* VK_EXT_hdr_metadata */
#if defined(VK_EXT_headless_surface)
#define NVVK_HAS_VK_EXT_headless_surface
#endif /* VK_EXT_headless_surface */
#if defined(VK_EXT_host_query_reset)
#define NVVK_HAS_VK_EXT_host_query_reset
#endif /* VK_EXT_host_query_reset */
#if defined(VK_EXT_image_compression_control)
#define NVVK_HAS_VK_EXT_image_compression_control
#endif /* VK_EXT_image_compression_control */
#if defined(VK_EXT_image_drm_format_modifier)
#define NVVK_HAS_VK_EXT_image_drm_format_modifier
#endif /* VK_EXT_image_drm_format_modifier */
#if defined(VK_EXT_line_rasterization)
#define NVVK_HAS_VK_EXT_line_rasterization
#endif /* VK_EXT_line_rasterization */
#if defined(VK_EXT_mesh_shader)
#define NVVK_HAS_VK_EXT_mesh_shader
#endif /* VK_EXT_mesh_shader */
#if defined(VK_EXT_metal_objects)
#define NVVK_HAS_VK_EXT_metal_objects
#endif /* VK_EXT_metal_objects */
#if defined(VK_EXT_metal_surface)
#define NVVK_HAS_VK_EXT_metal_surface
#endif /* VK_EXT_metal_surface */
#if defined(VK_EXT_multi_draw)
#define NVVK_HAS_VK_EXT_multi_draw
#endif /* VK_EXT_multi_draw */
#if defined(VK_EXT_opacity_micromap)
#define NVVK_HAS_VK_EXT_opacity_micromap
#endif /* VK_EXT_opacity_micromap */
#if defined(VK_EXT_pageable_device_local_memory)
#define NVVK_HAS_VK_EXT_pageable_device_local_memory
#endif /* VK_EXT_pageable_device_local_memory */
#if defined(VK_EXT_pipeline_properties)
#define NVVK_HAS_VK_EXT_pipeline_properties
#endif /* VK_EXT_pipeline_properties */
#if defined(VK_EXT_private_data)
#define NVVK_HAS_VK_EXT_private_data
#endif /* VK_EXT_private_data */
#if defined(VK_EXT_sample_locations)
#define NVVK_HAS_VK_EXT_sample_locations
#endif /* VK_EXT_sample_locations */
#if defined(VK_EXT_shader_module_identifier)
#define NVVK_HAS_VK_EXT_shader_module_identifier
#endif /* VK_EXT_shader_module_identifier */
#if defined(VK_EXT_shader_object)
#define NVVK_HAS_VK_EXT_shader_object
#endif /* VK_EXT_shader_object */
#if defined(VK_EXT_swapchain_maintenance1)
#define NVVK_HAS_VK_EXT_swapchain_maintenance1
#endif /* VK_EXT_swapchain_maintenance1 */
#if defined(VK_EXT_tooling_info)
#define NVVK_HAS_VK_EXT_tooling_info
#endif /* VK_EXT_tooling_info */
#if defined(VK_EXT_transform_feedback)
#define NVVK_HAS_VK_EXT_transform_feedback
#endif /* VK_EXT_transform_feedback */
#if defined(VK_EXT_validation_cache)
#define NVVK_HAS_VK_EXT_validation_cache
#endif /* VK_EXT_validation_cache */
#if defined(VK_EXT_vertex_input_dynamic_state)
#define NVVK_HAS_VK_EXT_vertex_input_dynamic_state
#endif /* VK_EXT_vertex_input_dynamic_state */
#if defined(VK_FUCHSIA_buffer_collection)
#define NVVK_HAS_VK_FUCHSIA_buffer_collection
#endif /* VK_FUCHSIA_buffer_collection */
#if defined(VK_FUCHSIA_external_memory)
#define NVVK_HAS_VK_FUCHSIA_external_memory
#endif /* VK_FUCHSIA_external_memory */
#if defined(VK_FUCHSIA_external_semaphore)
#define NVVK_HAS_VK_FUCHSIA_external_semaphore
#endif /* VK_FUCHSIA_external_semaphore */
#if defined(VK_FUCHSIA_imagepipe_surface)
#define NVVK_HAS_VK_FUCHSIA_imagepipe_surface
#endif /* VK_FUCHSIA_imagepipe_surface */
#if defined(VK_GGP_stream_descriptor_surface)
#define NVVK_HAS_VK_GGP_stream_descriptor_surface
#endif /* VK_GGP_stream_descriptor_surface */
#if defined(VK_GOOGLE_display_timing)
#define NVVK_HAS_VK_GOOGLE_display_timing
#endif /* VK_GOOGLE_display_timing */
#if defined(VK_HUAWEI_cluster_culling_shader)
#define NVVK_HAS_VK_HUAWEI_cluster_culling_shader
#endif /* VK_HUAWEI_cluster_culling_shader */
#if defined(VK_HUAWEI_invocation_mask)
#define NVVK_HAS_VK_HUAWEI_invocation_mask
#endif /* VK_HUAWEI_invocation_mask */
#if defined(VK_HUAWEI_subpass_shading)
#define NVVK_HAS_VK_HUAWEI_subpass_shading
#endif /* VK_HUAWEI_subpass_shading */
#if defined(VK_INTEL_performance_query)
#define NVVK_HAS_VK_INTEL_performance_query
#endif /* VK_INTEL_performance_query */
#if defined(VK_KHR_acceleration_structure)
#define NVVK_HAS_VK_KHR_acceleration_structure
#endif /* VK_KHR_acceleration_structure */
#if defined(VK_KHR_android_surface)
#define NVVK_HAS_VK_KHR_android_surface
#endif /* VK_KHR_android_surface */
#if defined(VK_KHR_bind_memory2)
#define NVVK_HAS_VK_KHR_bind_memory2
#endif /* VK_KHR_bind_memory2 */
#if defined(VK_KHR_buffer_device_address)
#define NVVK_HAS_VK_KHR_buffer_device_address
#endif /* VK_KHR_buffer_device_address */
#if defined(VK_KHR_copy_commands2)
#define NVVK_HAS_VK_KHR_copy_commands2
#endif /* VK_KHR_copy_commands2 */
#if defined(VK_KHR_create_renderpass2)
#define NVVK_HAS_VK_KHR_create_renderpass2
#endif /* VK_KHR_create_renderpass2 */
#if defined(VK_KHR_deferred_host_operations)
#define NVVK_HAS_VK_KHR_deferred_host_operations
#endif /* VK_KHR_deferred_host_operations */
#if defined(VK_KHR_descriptor_update_template)
#define NVVK_HAS_VK_KHR_descriptor_update_template
#endif /* VK_KHR_descriptor_update_template */
#if defined(VK_KHR_device_group)
#define NVVK_HAS_VK_KHR_device_group
#endif /* VK_KHR_device_group */
#if defined(VK_KHR_device_group_creation)
#define NVVK_HAS_VK_KHR_device_group_creation
#endif /* VK_KHR_device_group_creation */
#if defined(VK_KHR_draw_indirect_count)
#define NVVK_HAS_VK_KHR_draw_indirect_count
#endif /* VK_KHR_draw_indirect_count */
#if defined(VK_KHR_dynamic_rendering)
#define NVVK_HAS_VK_KHR_dynamic_rendering
#endif /* VK_KHR_dynamic_rendering */
#if defined(VK_KHR_external_fence_capabilities)
#define NVVK_HAS_VK_KHR_external_fence_capabilities
#endif /* VK_KHR_external_fence_capabilities */
#if defined(VK_KHR_external_fence_fd)
#define NVVK_HAS_VK_KHR_external_fence_fd
#endif /* VK_KHR_external_fence_fd */
#if defined(VK_KHR_external_fence_win32)
#define NVVK_HAS_VK_KHR_external_fence_win32
#endif /* VK_KHR_external_fence_win32 */
#if defined(VK_KHR_external_memory_capabilities)
#define NVVK_HAS_VK_KHR_external_memory_capabilities
#endif /* VK_KHR_external_memory_capabilities */
#if defined(VK_KHR_external_memory_fd)
#define NVVK_HAS_VK_KHR_external_memory_fd
#endif /* VK_KHR_external_memory_fd */
#if defined(VK_KHR_external_memory_win32)
#define NVVK_HAS_VK_KHR_external_memory_win32
#endif /* VK_KHR_external_memory_win32 */
#if defined(VK_KHR_external_semaphore_capabilities)
#define NVVK_HAS_VK_KHR_external_semaphore_capabilities
#endif /* VK_KHR_external_semaphore_capabilities */
#if defined(VK_KHR_external_semaphore_fd)
#define NVVK_HAS_VK_KHR_external_semaphore_fd
#endif /* VK_KHR_external_semaphore_fd */
#if defined(VK_KHR_external_semaphore_win32)
#define NVVK_HAS_VK_KHR_external_semaphore_win32
#endif /* VK_KHR_external_semaphore_win32 */
#if defined(VK_KHR_fragment_shading_rate)
#define NVVK_HAS_VK_KHR_fragment_shading_rate
#endif /* VK_KHR_fragment_shading_rate */
#if defined(VK_KHR_get_memory_requirements2)
#define NVVK_HAS_VK_KHR_get_memory_requirements2
#endif /* VK_KHR_get_memory_requirements2 */
#if defined(VK_KHR_get_physical_device_properties2)
#define NVVK_HAS_VK_KHR_get_physical_device_properties2
#endif /* VK_KHR_get_physical_device_properties2 */
#if defined(VK_KHR_maintenance1)
#define NVVK_HAS_VK_KHR_maintenance1
#endif /* VK_KHR_maintenance1 */
#if defined(VK_KHR_maintenance3)
#define NVVK_HAS_VK_KHR_maintenance3
#endif /* VK_KHR_maintenance3 */
#if defined(VK_KHR_maintenance4)
#define NVVK_HAS_VK_KHR_maintenance4
#endif /* VK_KHR_maintenance4 */
#if defined(VK_KHR_map_memory2)
#define NVVK_HAS_VK_KHR_map_memory2
#endif /* VK_KHR_map_memory2 */
#if defined(VK_KHR_performance_query)
#define NVVK_HAS_VK_KHR_performance_query
#endif /* VK_KHR_performance_query */
#if defined(VK_KHR_pipeline_executable_properties)
#define NVVK_HAS_VK_KHR_pipeline_executable_properties
#endif /* VK_KHR_pipeline_executable_properties */
#if defined(VK_KHR_present_wait)
#define NVVK_HAS_VK_KHR_present_wait
#endif /* VK_KHR_present_wait */
#if defined(VK_KHR_push_descriptor)
#define NVVK_HAS_VK_KHR_push_descriptor
#endif /* VK_KHR_push_descriptor */
#if defined(VK_KHR_ray_tracing_maintenance1)
#define NVVK_HAS_VK_KHR_ray_tracing_maintenance1
#endif /* VK_KHR_ray_tracing_maintenance1 */
#if defined(VK_KHR_ray_tracing_pipeline)
#define NVVK_HAS_VK_KHR_ray_tracing_pipeline
#endif /* VK_KHR_ray_tracing_pipeline */
#if defined(VK_KHR_sampler_ycbcr_conversion)
#define NVVK_HAS_VK_KHR_sampler_ycbcr_conversion
#endif /* VK_KHR_sampler_ycbcr_conversion */
#if defined(VK_KHR_shared_presentable_image)
#define NVVK_HAS_VK_KHR_shared_presentable_image
#endif /* VK_KHR_shared_presentable_image */
#if defined(VK_KHR_synchronization2)
#define NVVK_HAS_VK_KHR_synchronization2
#endif /* VK_KHR_synchronization2 */
#if defined(VK_KHR_timeline_semaphore)
#define NVVK_HAS_VK_KHR_timeline_semaphore
#endif /* VK_KHR_timeline_semaphore */
#if defined(VK_KHR_video_decode_queue)
#define NVVK_HAS_VK_KHR_video_decode_queue
#endif /* VK_KHR_video_decode_queue */
#if defined(VK_KHR_video_queue)
#define NVVK_HAS_VK_KHR_video_queue
#endif /* VK_KHR_video_queue */
#if defined(VK_MVK_ios_surface)
#define NVVK_HAS_VK_MVK_ios_surface
#endif /* VK_MVK_ios_surface */
#if defined(VK_MVK_macos_surface)
#define NVVK_HAS_VK_MVK_macos_surface
#endif /* VK_MVK_macos_surface */
#if defined(VK_NN_vi_surface)
#define NVVK_HAS_VK_NN_vi_surface
#endif /* VK_NN_vi_surface */
#if defined(VK_NVX_binary_import)
#define NVVK_HAS_VK_NVX_binary_import
#endif /* VK_NVX_binary_import */
#if defined(VK_NVX_image_view_handle)
#define NVVK_HAS_VK_NVX_image_view_handle
#endif /* VK_NVX_image_view_handle */
#if defined(VK_NV_acquire_winrt_display)
#define NVVK_HAS_VK_NV_acquire_winrt_display
#endif /* VK_NV_acquire_winrt_display */
#if defined(VK_NV_clip_space_w_scaling)
#define NVVK_HAS_VK_NV_clip_space_w_scaling
#endif /* VK_NV_clip_space_w_scaling */
#if defined(VK_NV_cooperative_matrix)
#define NVVK_HAS_VK_NV_cooperative_matrix
#endif /* VK_NV_cooperative_matrix */
#if defined(VK_NV_copy_memory_indirect)
#define NVVK_HAS_VK_NV_copy_memory_indirect
#endif /* VK_NV_copy_memory_indirect */
#if defined(VK_NV_coverage_reduction_mode)
#define NVVK_HAS_VK_NV_coverage_reduction_mode
#endif /* VK_NV_coverage_reduction_mode */
#if defined(VK_NV_device_diagnostic_checkpoints)
#define NVVK_HAS_VK_NV_device_diagnostic_checkpoints
#endif /* VK_NV_device_diagnostic_checkpoints */
#if defined(VK_NV_device_generated_commands)
#define NVVK_HAS_VK_NV_device_generated_commands
#endif /* VK_NV_device_generated_commands */
#if defined(VK_NV_external_memory_capabilities)
#define NVVK_HAS_VK_NV_external_memory_capabilities
#endif /* VK_NV_external_memory_capabilities */
#if defined(VK_NV_external_memory_rdma)
#define NVVK_HAS_VK_NV_external_memory_rdma
#endif /* VK_NV_external_memory_rdma */
#if defined(VK_NV_external_memory_win32)
#define NVVK_HAS_VK_NV_external_memory_win32
#endif /* VK_NV_external_memory_win32 */
#if defined(VK_NV_fragment_shading_rate_enums)
#define NVVK_HAS_VK_NV_fragment_shading_rate_enums
#endif /* VK_NV_fragment_shading_rate_enums */
#if defined(VK_NV_memory_decompression)
#define NVVK_HAS_VK_NV_memory_decompression
#endif /* VK_NV_memory_decompression */
#if defined(VK_NV_mesh_shader)
#define NVVK_HAS_VK_NV_mesh_shader
#endif /* VK_NV_mesh_shader */
#if defined(VK_NV_optical_flow)
#define NVVK_HAS_VK_NV_optical_flow
#endif /* VK_NV_optical_flow */
#if defined(VK_NV_ray_tracing)
#define NVVK_HAS_VK_NV_ray_tracing
#endif /* VK_NV_ray_tracing */
#if defined(VK_NV_scissor_exclusive)
#define NVVK_HAS_VK_NV_scissor_exclusive
#endif /* VK_NV_scissor_exclusive */
#if defined(VK_NV_shading_rate_image)
#define NVVK_HAS_VK_NV_shading_rate_image
#endif /* VK_NV_shading_rate_image */
#if defined(VK_QCOM_tile_properties)
#define NVVK_HAS_VK_QCOM_tile_properties
#endif /* VK_QCOM_tile_properties */
#if defined(VK_QNX_screen_surface)
#define NVVK_HAS_VK_QNX_screen_surface
#endif /* VK_QNX_screen_surface */
#if defined(VK_VALVE_descriptor_set_host_mapping)
#define NVVK_HAS_VK_VALVE_descriptor_set_host_mapping
#endif /* VK_VALVE_descriptor_set_host_mapping */
/* NVVK_GENERATE_DEFINE */