diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cf8b4517572a..6a2adc7e3998 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -72,6 +72,25 @@ jobs: name: windows_d3d11_x64 path: | build/bin/cpp-tests/**/* + win32-vk: + runs-on: windows-latest + steps: + - uses: actions/checkout@v5 + - name: Build + shell: pwsh + run: | + .\tools\cmdline\axmol -p win32 -a x64 -xc '-DAX_RENDER_API=vk' + - name: Check prebuilt workflow + shell: pwsh + run: | + ./setup.ps1 + axmol new HelloCpp + axmol -d .\HelloCpp -xc '-DAX_PREBUILT_DIR=build' + - uses: actions/upload-artifact@v4 + with: + name: windows_vk_x64 + path: | + build/bin/cpp-tests/**/* winuwp-ogl: runs-on: windows-latest steps: @@ -116,6 +135,19 @@ jobs: - name: Build shell: pwsh run: ./tools/cmdline/axmol -p linux -a x64 -t 'cpp-tests,lua-tests' && ./tools/cmdline/axmol run -p linux -a x64 -t unit-tests -wait + linux-vk: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + + - name: Install dependencies + run: | + AX_ROOT=`pwd` + echo -e "y" | pwsh $AX_ROOT/setup.ps1 + + - name: Build + shell: pwsh + run: ./tools/cmdline/axmol -p linux -a x64 -t 'cpp-tests,lua-tests' -xc '-DAX_RENDER_API=vk' osx-arm64: runs-on: macos-latest steps: @@ -157,6 +189,22 @@ jobs: path: | templates/**/*.apk tests/**/*.apk + android-vk: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + + - name: Build + shell: pwsh + run: | + $AX_ROOT = $(Get-Location).Path + ./tools/cmdline/axmol -p android -a arm64 -xc '-DAX_RENDER_API=vk' + - uses: actions/upload-artifact@v4 + with: + name: android_arm64_vk + path: | + templates/**/*.apk + tests/**/*.apk ios: runs-on: macos-latest strategy: diff --git a/1k/build.profiles b/1k/build.profiles index 0953a8cf90b8..7f71f0955637 100644 --- a/1k/build.profiles +++ b/1k/build.profiles @@ -6,7 +6,7 @@ # --- region platfom:common # The axmol shader compiler, legacy name is 'glslcc' before axmol-2.3.0 -axslcc=1.13.2+ +axslcc=3.0.0+ # The cmake, @gradle @axmol-cmdline # as latest as possible diff --git a/3rdparty/glad/CMakeLists.txt b/3rdparty/glad/CMakeLists.txt index a0046b583fff..5628dc996333 100644 --- a/3rdparty/glad/CMakeLists.txt +++ b/3rdparty/glad/CMakeLists.txt @@ -4,7 +4,11 @@ set(target_name ${lib_name}) project(${target_name}) -set(target_src_files "include/glad/gl.h" src/gl.c) +if(AX_RENDER_API STREQUAL "gl") + set(target_src_files "include/glad/gl.h" src/gl.c) +elseif(AX_RENDER_API STREQUAL "vk") + set(target_src_files "include/glad/vulkan.h" src/vulkan.c) +endif() add_library(${target_name} ${target_src_files}) @@ -20,10 +24,16 @@ if(BUILD_SHARED_LIBS) endif() if(ANDROID) - target_compile_definitions(${target_name} - PUBLIC GLAD_GLES2=1 - PUBLIC GLAD_GLES2_USE_SYSTEM_EGL=1 # refer: https://github.com/Dav1dde/glad/pull/438 - ) + if(AX_RENDER_API STREQUAL "gl") + target_compile_definitions(${target_name} + PUBLIC GLAD_GLES2=1 + PUBLIC GLAD_GLES2_USE_SYSTEM_EGL=1 # refer: https://github.com/Dav1dde/glad/pull/438 + ) + elseif(AX_RENDER_API STREQUAL "vk") + target_compile_definitions(${target_name} + PUBLIC VK_USE_PLATFORM_ANDROID_KHR=1 + ) + endif() endif() target_include_directories(${target_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/3rdparty/glad/include/glad/gl.h b/3rdparty/glad/include/glad/gl.h index 3c89528348d9..75c0b4b05473 100644 --- a/3rdparty/glad/include/glad/gl.h +++ b/3rdparty/glad/include/glad/gl.h @@ -1,11 +1,11 @@ /** - * Loader generated by glad 2.0.8 on Wed Oct 2 02:19:36 2024 + * Loader generated by glad 2.0.8 on Sat Nov 8 08:57:51 2025 * * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 * * Generator: C/C++ * Specification: gl - * Extensions: 836 + * Extensions: 841 * * APIs: * - gl:core=3.3 @@ -20,7 +20,7 @@ * - ON_DEMAND = False * * Commandline: - * --merge --api='gl:core=3.3,gles2=3.0' --extensions='GL_3DFX_multisample,GL_3DFX_tbuffer,GL_3DFX_texture_compression_FXT1,GL_AMD_blend_minmax_factor,GL_AMD_conservative_depth,GL_AMD_debug_output,GL_AMD_depth_clamp_separate,GL_AMD_draw_buffers_blend,GL_AMD_framebuffer_multisample_advanced,GL_AMD_framebuffer_sample_positions,GL_AMD_gcn_shader,GL_AMD_gpu_shader_half_float,GL_AMD_gpu_shader_int16,GL_AMD_gpu_shader_int64,GL_AMD_interleaved_elements,GL_AMD_multi_draw_indirect,GL_AMD_name_gen_delete,GL_AMD_occlusion_query_event,GL_AMD_performance_monitor,GL_AMD_pinned_memory,GL_AMD_query_buffer_object,GL_AMD_sample_positions,GL_AMD_seamless_cubemap_per_texture,GL_AMD_shader_atomic_counter_ops,GL_AMD_shader_ballot,GL_AMD_shader_explicit_vertex_parameter,GL_AMD_shader_gpu_shader_half_float_fetch,GL_AMD_shader_image_load_store_lod,GL_AMD_shader_stencil_export,GL_AMD_shader_trinary_minmax,GL_AMD_sparse_texture,GL_AMD_stencil_operation_extended,GL_AMD_texture_gather_bias_lod,GL_AMD_texture_texture4,GL_AMD_transform_feedback3_lines_triangles,GL_AMD_transform_feedback4,GL_AMD_vertex_shader_layer,GL_AMD_vertex_shader_tessellator,GL_AMD_vertex_shader_viewport_index,GL_APPLE_aux_depth_stencil,GL_APPLE_client_storage,GL_APPLE_element_array,GL_APPLE_fence,GL_APPLE_float_pixels,GL_APPLE_flush_buffer_range,GL_APPLE_object_purgeable,GL_APPLE_rgb_422,GL_APPLE_row_bytes,GL_APPLE_specular_vector,GL_APPLE_texture_range,GL_APPLE_transform_hint,GL_APPLE_vertex_array_object,GL_APPLE_vertex_array_range,GL_APPLE_vertex_program_evaluators,GL_APPLE_ycbcr_422,GL_ARB_ES2_compatibility,GL_ARB_ES3_1_compatibility,GL_ARB_ES3_2_compatibility,GL_ARB_ES3_compatibility,GL_ARB_arrays_of_arrays,GL_ARB_base_instance,GL_ARB_bindless_texture,GL_ARB_blend_func_extended,GL_ARB_buffer_storage,GL_ARB_cl_event,GL_ARB_clear_buffer_object,GL_ARB_clear_texture,GL_ARB_clip_control,GL_ARB_color_buffer_float,GL_ARB_compatibility,GL_ARB_compressed_texture_pixel_storage,GL_ARB_compute_shader,GL_ARB_compute_variable_group_size,GL_ARB_conditional_render_inverted,GL_ARB_conservative_depth,GL_ARB_copy_buffer,GL_ARB_copy_image,GL_ARB_cull_distance,GL_ARB_debug_output,GL_ARB_depth_buffer_float,GL_ARB_depth_clamp,GL_ARB_depth_texture,GL_ARB_derivative_control,GL_ARB_direct_state_access,GL_ARB_draw_buffers,GL_ARB_draw_buffers_blend,GL_ARB_draw_elements_base_vertex,GL_ARB_draw_indirect,GL_ARB_draw_instanced,GL_ARB_enhanced_layouts,GL_ARB_explicit_attrib_location,GL_ARB_explicit_uniform_location,GL_ARB_fragment_coord_conventions,GL_ARB_fragment_layer_viewport,GL_ARB_fragment_program,GL_ARB_fragment_program_shadow,GL_ARB_fragment_shader,GL_ARB_fragment_shader_interlock,GL_ARB_framebuffer_no_attachments,GL_ARB_framebuffer_object,GL_ARB_framebuffer_sRGB,GL_ARB_geometry_shader4,GL_ARB_get_program_binary,GL_ARB_get_texture_sub_image,GL_ARB_gl_spirv,GL_ARB_gpu_shader5,GL_ARB_gpu_shader_fp64,GL_ARB_gpu_shader_int64,GL_ARB_half_float_pixel,GL_ARB_half_float_vertex,GL_ARB_imaging,GL_ARB_indirect_parameters,GL_ARB_instanced_arrays,GL_ARB_internalformat_query,GL_ARB_internalformat_query2,GL_ARB_invalidate_subdata,GL_ARB_map_buffer_alignment,GL_ARB_map_buffer_range,GL_ARB_matrix_palette,GL_ARB_multi_bind,GL_ARB_multi_draw_indirect,GL_ARB_multisample,GL_ARB_multitexture,GL_ARB_occlusion_query,GL_ARB_occlusion_query2,GL_ARB_parallel_shader_compile,GL_ARB_pipeline_statistics_query,GL_ARB_pixel_buffer_object,GL_ARB_point_parameters,GL_ARB_point_sprite,GL_ARB_polygon_offset_clamp,GL_ARB_post_depth_coverage,GL_ARB_program_interface_query,GL_ARB_provoking_vertex,GL_ARB_query_buffer_object,GL_ARB_robust_buffer_access_behavior,GL_ARB_robustness,GL_ARB_robustness_isolation,GL_ARB_sample_locations,GL_ARB_sample_shading,GL_ARB_sampler_objects,GL_ARB_seamless_cube_map,GL_ARB_seamless_cubemap_per_texture,GL_ARB_separate_shader_objects,GL_ARB_shader_atomic_counter_ops,GL_ARB_shader_atomic_counters,GL_ARB_shader_ballot,GL_ARB_shader_bit_encoding,GL_ARB_shader_clock,GL_ARB_shader_draw_parameters,GL_ARB_shader_group_vote,GL_ARB_shader_image_load_store,GL_ARB_shader_image_size,GL_ARB_shader_objects,GL_ARB_shader_precision,GL_ARB_shader_stencil_export,GL_ARB_shader_storage_buffer_object,GL_ARB_shader_subroutine,GL_ARB_shader_texture_image_samples,GL_ARB_shader_texture_lod,GL_ARB_shader_viewport_layer_array,GL_ARB_shading_language_100,GL_ARB_shading_language_420pack,GL_ARB_shading_language_include,GL_ARB_shading_language_packing,GL_ARB_shadow,GL_ARB_shadow_ambient,GL_ARB_sparse_buffer,GL_ARB_sparse_texture,GL_ARB_sparse_texture2,GL_ARB_sparse_texture_clamp,GL_ARB_spirv_extensions,GL_ARB_stencil_texturing,GL_ARB_sync,GL_ARB_tessellation_shader,GL_ARB_texture_barrier,GL_ARB_texture_border_clamp,GL_ARB_texture_buffer_object,GL_ARB_texture_buffer_object_rgb32,GL_ARB_texture_buffer_range,GL_ARB_texture_compression,GL_ARB_texture_compression_bptc,GL_ARB_texture_compression_rgtc,GL_ARB_texture_cube_map,GL_ARB_texture_cube_map_array,GL_ARB_texture_env_add,GL_ARB_texture_env_combine,GL_ARB_texture_env_crossbar,GL_ARB_texture_env_dot3,GL_ARB_texture_filter_anisotropic,GL_ARB_texture_filter_minmax,GL_ARB_texture_float,GL_ARB_texture_gather,GL_ARB_texture_mirror_clamp_to_edge,GL_ARB_texture_mirrored_repeat,GL_ARB_texture_multisample,GL_ARB_texture_non_power_of_two,GL_ARB_texture_query_levels,GL_ARB_texture_query_lod,GL_ARB_texture_rectangle,GL_ARB_texture_rg,GL_ARB_texture_rgb10_a2ui,GL_ARB_texture_stencil8,GL_ARB_texture_storage,GL_ARB_texture_storage_multisample,GL_ARB_texture_swizzle,GL_ARB_texture_view,GL_ARB_timer_query,GL_ARB_transform_feedback2,GL_ARB_transform_feedback3,GL_ARB_transform_feedback_instanced,GL_ARB_transform_feedback_overflow_query,GL_ARB_transpose_matrix,GL_ARB_uniform_buffer_object,GL_ARB_vertex_array_bgra,GL_ARB_vertex_array_object,GL_ARB_vertex_attrib_64bit,GL_ARB_vertex_attrib_binding,GL_ARB_vertex_blend,GL_ARB_vertex_buffer_object,GL_ARB_vertex_program,GL_ARB_vertex_shader,GL_ARB_vertex_type_10f_11f_11f_rev,GL_ARB_vertex_type_2_10_10_10_rev,GL_ARB_viewport_array,GL_ARB_window_pos,GL_ATI_draw_buffers,GL_ATI_element_array,GL_ATI_envmap_bumpmap,GL_ATI_fragment_shader,GL_ATI_map_object_buffer,GL_ATI_meminfo,GL_ATI_pixel_format_float,GL_ATI_pn_triangles,GL_ATI_separate_stencil,GL_ATI_text_fragment_shader,GL_ATI_texture_env_combine3,GL_ATI_texture_float,GL_ATI_texture_mirror_once,GL_ATI_vertex_array_object,GL_ATI_vertex_attrib_array_object,GL_ATI_vertex_streams,GL_EXT_422_pixels,GL_EXT_EGL_image_storage,GL_EXT_EGL_sync,GL_EXT_abgr,GL_EXT_bgra,GL_EXT_bindable_uniform,GL_EXT_blend_color,GL_EXT_blend_equation_separate,GL_EXT_blend_func_separate,GL_EXT_blend_logic_op,GL_EXT_blend_minmax,GL_EXT_blend_subtract,GL_EXT_clip_volume_hint,GL_EXT_cmyka,GL_EXT_color_subtable,GL_EXT_compiled_vertex_array,GL_EXT_convolution,GL_EXT_coordinate_frame,GL_EXT_copy_texture,GL_EXT_cull_vertex,GL_EXT_debug_label,GL_EXT_debug_marker,GL_EXT_depth_bounds_test,GL_EXT_direct_state_access,GL_EXT_draw_buffers2,GL_EXT_draw_instanced,GL_EXT_draw_range_elements,GL_EXT_external_buffer,GL_EXT_fog_coord,GL_EXT_framebuffer_blit,GL_EXT_framebuffer_blit_layers,GL_EXT_framebuffer_multisample,GL_EXT_framebuffer_multisample_blit_scaled,GL_EXT_framebuffer_object,GL_EXT_framebuffer_sRGB,GL_EXT_geometry_shader4,GL_EXT_gpu_program_parameters,GL_EXT_gpu_shader4,GL_EXT_histogram,GL_EXT_index_array_formats,GL_EXT_index_func,GL_EXT_index_material,GL_EXT_index_texture,GL_EXT_light_texture,GL_EXT_memory_object,GL_EXT_memory_object_fd,GL_EXT_memory_object_win32,GL_EXT_misc_attribute,GL_EXT_multi_draw_arrays,GL_EXT_multisample,GL_EXT_multiview_tessellation_geometry_shader,GL_EXT_multiview_texture_multisample,GL_EXT_multiview_timer_query,GL_EXT_packed_depth_stencil,GL_EXT_packed_float,GL_EXT_packed_pixels,GL_EXT_paletted_texture,GL_EXT_pixel_buffer_object,GL_EXT_pixel_transform,GL_EXT_pixel_transform_color_table,GL_EXT_point_parameters,GL_EXT_polygon_offset,GL_EXT_polygon_offset_clamp,GL_EXT_post_depth_coverage,GL_EXT_provoking_vertex,GL_EXT_raster_multisample,GL_EXT_rescale_normal,GL_EXT_secondary_color,GL_EXT_semaphore,GL_EXT_semaphore_fd,GL_EXT_semaphore_win32,GL_EXT_separate_shader_objects,GL_EXT_separate_specular_color,GL_EXT_shader_framebuffer_fetch,GL_EXT_shader_framebuffer_fetch_non_coherent,GL_EXT_shader_image_load_formatted,GL_EXT_shader_image_load_store,GL_EXT_shader_integer_mix,GL_EXT_shader_samples_identical,GL_EXT_shadow_funcs,GL_EXT_shared_texture_palette,GL_EXT_sparse_texture2,GL_EXT_stencil_clear_tag,GL_EXT_stencil_two_side,GL_EXT_stencil_wrap,GL_EXT_subtexture,GL_EXT_texture,GL_EXT_texture3D,GL_EXT_texture_array,GL_EXT_texture_buffer_object,GL_EXT_texture_compression_latc,GL_EXT_texture_compression_rgtc,GL_EXT_texture_compression_s3tc,GL_EXT_texture_cube_map,GL_EXT_texture_env_add,GL_EXT_texture_env_combine,GL_EXT_texture_env_dot3,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_filter_minmax,GL_EXT_texture_integer,GL_EXT_texture_lod_bias,GL_EXT_texture_mirror_clamp,GL_EXT_texture_object,GL_EXT_texture_perturb_normal,GL_EXT_texture_sRGB,GL_EXT_texture_sRGB_R8,GL_EXT_texture_sRGB_RG8,GL_EXT_texture_sRGB_decode,GL_EXT_texture_shadow_lod,GL_EXT_texture_shared_exponent,GL_EXT_texture_snorm,GL_EXT_texture_storage,GL_EXT_texture_swizzle,GL_EXT_timer_query,GL_EXT_transform_feedback,GL_EXT_vertex_array,GL_EXT_vertex_array_bgra,GL_EXT_vertex_attrib_64bit,GL_EXT_vertex_shader,GL_EXT_vertex_weighting,GL_EXT_win32_keyed_mutex,GL_EXT_window_rectangles,GL_EXT_x11_sync_object,GL_GREMEDY_frame_terminator,GL_GREMEDY_string_marker,GL_HP_convolution_border_modes,GL_HP_image_transform,GL_HP_occlusion_test,GL_HP_texture_lighting,GL_IBM_cull_vertex,GL_IBM_multimode_draw_arrays,GL_IBM_rasterpos_clip,GL_IBM_static_data,GL_IBM_texture_mirrored_repeat,GL_IBM_vertex_array_lists,GL_INGR_blend_func_separate,GL_INGR_color_clamp,GL_INGR_interlace_read,GL_INTEL_blackhole_render,GL_INTEL_conservative_rasterization,GL_INTEL_fragment_shader_ordering,GL_INTEL_framebuffer_CMAA,GL_INTEL_map_texture,GL_INTEL_parallel_arrays,GL_INTEL_performance_query,GL_KHR_blend_equation_advanced,GL_KHR_blend_equation_advanced_coherent,GL_KHR_context_flush_control,GL_KHR_debug,GL_KHR_no_error,GL_KHR_parallel_shader_compile,GL_KHR_robust_buffer_access_behavior,GL_KHR_robustness,GL_KHR_shader_subgroup,GL_KHR_texture_compression_astc_hdr,GL_KHR_texture_compression_astc_ldr,GL_KHR_texture_compression_astc_sliced_3d,GL_MESAX_texture_stack,GL_MESA_framebuffer_flip_x,GL_MESA_framebuffer_flip_y,GL_MESA_framebuffer_swap_xy,GL_MESA_pack_invert,GL_MESA_program_binary_formats,GL_MESA_resize_buffers,GL_MESA_shader_integer_functions,GL_MESA_tile_raster_order,GL_MESA_window_pos,GL_MESA_ycbcr_texture,GL_NVX_blend_equation_advanced_multi_draw_buffers,GL_NVX_conditional_render,GL_NVX_gpu_memory_info,GL_NVX_gpu_multicast2,GL_NVX_linked_gpu_multicast,GL_NVX_progress_fence,GL_NV_alpha_to_coverage_dither_control,GL_NV_bindless_multi_draw_indirect,GL_NV_bindless_multi_draw_indirect_count,GL_NV_bindless_texture,GL_NV_blend_equation_advanced,GL_NV_blend_equation_advanced_coherent,GL_NV_blend_minmax_factor,GL_NV_blend_square,GL_NV_clip_space_w_scaling,GL_NV_command_list,GL_NV_compute_program5,GL_NV_compute_shader_derivatives,GL_NV_conditional_render,GL_NV_conservative_raster,GL_NV_conservative_raster_dilate,GL_NV_conservative_raster_pre_snap,GL_NV_conservative_raster_pre_snap_triangles,GL_NV_conservative_raster_underestimation,GL_NV_copy_depth_to_color,GL_NV_copy_image,GL_NV_deep_texture3D,GL_NV_depth_buffer_float,GL_NV_depth_clamp,GL_NV_draw_texture,GL_NV_draw_vulkan_image,GL_NV_evaluators,GL_NV_explicit_multisample,GL_NV_fence,GL_NV_fill_rectangle,GL_NV_float_buffer,GL_NV_fog_distance,GL_NV_fragment_coverage_to_color,GL_NV_fragment_program,GL_NV_fragment_program2,GL_NV_fragment_program4,GL_NV_fragment_program_option,GL_NV_fragment_shader_barycentric,GL_NV_fragment_shader_interlock,GL_NV_framebuffer_mixed_samples,GL_NV_framebuffer_multisample_coverage,GL_NV_geometry_program4,GL_NV_geometry_shader4,GL_NV_geometry_shader_passthrough,GL_NV_gpu_multicast,GL_NV_gpu_program4,GL_NV_gpu_program5,GL_NV_gpu_program5_mem_extended,GL_NV_gpu_shader5,GL_NV_half_float,GL_NV_internalformat_sample_query,GL_NV_light_max_exponent,GL_NV_memory_attachment,GL_NV_memory_object_sparse,GL_NV_mesh_shader,GL_NV_multisample_coverage,GL_NV_multisample_filter_hint,GL_NV_occlusion_query,GL_NV_packed_depth_stencil,GL_NV_parameter_buffer_object,GL_NV_parameter_buffer_object2,GL_NV_path_rendering,GL_NV_path_rendering_shared_edge,GL_NV_pixel_data_range,GL_NV_point_sprite,GL_NV_present_video,GL_NV_primitive_restart,GL_NV_primitive_shading_rate,GL_NV_query_resource,GL_NV_query_resource_tag,GL_NV_register_combiners,GL_NV_register_combiners2,GL_NV_representative_fragment_test,GL_NV_robustness_video_memory_purge,GL_NV_sample_locations,GL_NV_sample_mask_override_coverage,GL_NV_scissor_exclusive,GL_NV_shader_atomic_counters,GL_NV_shader_atomic_float,GL_NV_shader_atomic_float64,GL_NV_shader_atomic_fp16_vector,GL_NV_shader_atomic_int64,GL_NV_shader_buffer_load,GL_NV_shader_buffer_store,GL_NV_shader_storage_buffer_object,GL_NV_shader_subgroup_partitioned,GL_NV_shader_texture_footprint,GL_NV_shader_thread_group,GL_NV_shader_thread_shuffle,GL_NV_shading_rate_image,GL_NV_stereo_view_rendering,GL_NV_tessellation_program5,GL_NV_texgen_emboss,GL_NV_texgen_reflection,GL_NV_texture_barrier,GL_NV_texture_compression_vtc,GL_NV_texture_env_combine4,GL_NV_texture_expand_normal,GL_NV_texture_multisample,GL_NV_texture_rectangle,GL_NV_texture_rectangle_compressed,GL_NV_texture_shader,GL_NV_texture_shader2,GL_NV_texture_shader3,GL_NV_timeline_semaphore,GL_NV_transform_feedback,GL_NV_transform_feedback2,GL_NV_uniform_buffer_std430_layout,GL_NV_uniform_buffer_unified_memory,GL_NV_vdpau_interop,GL_NV_vdpau_interop2,GL_NV_vertex_array_range,GL_NV_vertex_array_range2,GL_NV_vertex_attrib_integer_64bit,GL_NV_vertex_buffer_unified_memory,GL_NV_vertex_program,GL_NV_vertex_program1_1,GL_NV_vertex_program2,GL_NV_vertex_program2_option,GL_NV_vertex_program3,GL_NV_vertex_program4,GL_NV_video_capture,GL_NV_viewport_array2,GL_NV_viewport_swizzle,GL_OES_byte_coordinates,GL_OES_compressed_paletted_texture,GL_OES_fixed_point,GL_OES_query_matrix,GL_OES_read_format,GL_OES_single_precision,GL_OML_interlace,GL_OML_resample,GL_OML_subsample,GL_OVR_multiview,GL_OVR_multiview2,GL_PGI_misc_hints,GL_PGI_vertex_hints,GL_REND_screen_coordinates,GL_S3_s3tc,GL_SGIS_detail_texture,GL_SGIS_fog_function,GL_SGIS_generate_mipmap,GL_SGIS_multisample,GL_SGIS_pixel_texture,GL_SGIS_point_line_texgen,GL_SGIS_point_parameters,GL_SGIS_sharpen_texture,GL_SGIS_texture4D,GL_SGIS_texture_border_clamp,GL_SGIS_texture_color_mask,GL_SGIS_texture_edge_clamp,GL_SGIS_texture_filter4,GL_SGIS_texture_lod,GL_SGIS_texture_select,GL_SGIX_async,GL_SGIX_async_histogram,GL_SGIX_async_pixel,GL_SGIX_blend_alpha_minmax,GL_SGIX_calligraphic_fragment,GL_SGIX_clipmap,GL_SGIX_convolution_accuracy,GL_SGIX_depth_pass_instrument,GL_SGIX_depth_texture,GL_SGIX_flush_raster,GL_SGIX_fog_offset,GL_SGIX_fragment_lighting,GL_SGIX_framezoom,GL_SGIX_igloo_interface,GL_SGIX_instruments,GL_SGIX_interlace,GL_SGIX_ir_instrument1,GL_SGIX_list_priority,GL_SGIX_pixel_texture,GL_SGIX_pixel_tiles,GL_SGIX_polynomial_ffd,GL_SGIX_reference_plane,GL_SGIX_resample,GL_SGIX_scalebias_hint,GL_SGIX_shadow,GL_SGIX_shadow_ambient,GL_SGIX_sprite,GL_SGIX_subsample,GL_SGIX_tag_sample_buffer,GL_SGIX_texture_add_env,GL_SGIX_texture_coordinate_clamp,GL_SGIX_texture_lod_bias,GL_SGIX_texture_multi_buffer,GL_SGIX_texture_scale_bias,GL_SGIX_vertex_preclip,GL_SGIX_ycrcb,GL_SGIX_ycrcb_subsample,GL_SGIX_ycrcba,GL_SGI_color_matrix,GL_SGI_color_table,GL_SGI_texture_color_table,GL_SUNX_constant_data,GL_SUN_convolution_border_modes,GL_SUN_global_alpha,GL_SUN_mesh_array,GL_SUN_slice_accum,GL_SUN_triangle_list,GL_SUN_vertex,GL_WIN_phong_shading,GL_WIN_specular_fog,GL_AMD_compressed_3DC_texture,GL_AMD_compressed_ATC_texture,GL_AMD_program_binary_Z400,GL_ANDROID_extension_pack_es31a,GL_ANGLE_depth_texture,GL_ANGLE_framebuffer_blit,GL_ANGLE_framebuffer_multisample,GL_ANGLE_instanced_arrays,GL_ANGLE_pack_reverse_row_order,GL_ANGLE_program_binary,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ANGLE_texture_usage,GL_ANGLE_translated_shader_source,GL_APPLE_clip_distance,GL_APPLE_color_buffer_packed_float,GL_APPLE_copy_texture_levels,GL_APPLE_framebuffer_multisample,GL_APPLE_sync,GL_APPLE_texture_format_BGRA8888,GL_APPLE_texture_max_level,GL_APPLE_texture_packed_float,GL_ARM_mali_program_binary,GL_ARM_mali_shader_binary,GL_ARM_rgba8,GL_ARM_shader_core_properties,GL_ARM_shader_framebuffer_fetch,GL_ARM_shader_framebuffer_fetch_depth_stencil,GL_ARM_texture_unnormalized_coordinates,GL_DMP_program_binary,GL_DMP_shader_binary,GL_EXT_EGL_image_array,GL_EXT_EGL_image_storage_compression,GL_EXT_YUV_target,GL_EXT_base_instance,GL_EXT_blend_func_extended,GL_EXT_buffer_storage,GL_EXT_clear_texture,GL_EXT_clip_control,GL_EXT_clip_cull_distance,GL_EXT_color_buffer_float,GL_EXT_color_buffer_half_float,GL_EXT_conservative_depth,GL_EXT_copy_image,GL_EXT_depth_clamp,GL_EXT_discard_framebuffer,GL_EXT_disjoint_timer_query,GL_EXT_draw_buffers,GL_EXT_draw_buffers_indexed,GL_EXT_draw_elements_base_vertex,GL_EXT_draw_transform_feedback,GL_EXT_float_blend,GL_EXT_fragment_shading_rate,GL_EXT_geometry_point_size,GL_EXT_geometry_shader,GL_EXT_gpu_shader5,GL_EXT_instanced_arrays,GL_EXT_map_buffer_range,GL_EXT_multi_draw_indirect,GL_EXT_multisampled_compatibility,GL_EXT_multisampled_render_to_texture,GL_EXT_multisampled_render_to_texture2,GL_EXT_multiview_draw_buffers,GL_EXT_occlusion_query_boolean,GL_EXT_primitive_bounding_box,GL_EXT_protected_textures,GL_EXT_pvrtc_sRGB,GL_EXT_read_format_bgra,GL_EXT_render_snorm,GL_EXT_robustness,GL_EXT_sRGB,GL_EXT_sRGB_write_control,GL_EXT_separate_depth_stencil,GL_EXT_shader_group_vote,GL_EXT_shader_implicit_conversions,GL_EXT_shader_io_blocks,GL_EXT_shader_non_constant_global_initializers,GL_EXT_shader_pixel_local_storage,GL_EXT_shader_pixel_local_storage2,GL_EXT_shader_texture_lod,GL_EXT_shadow_samplers,GL_EXT_sparse_texture,GL_EXT_tessellation_point_size,GL_EXT_tessellation_shader,GL_EXT_texture_border_clamp,GL_EXT_texture_buffer,GL_EXT_texture_compression_astc_decode_mode,GL_EXT_texture_compression_bptc,GL_EXT_texture_compression_dxt1,GL_EXT_texture_compression_s3tc_srgb,GL_EXT_texture_cube_map_array,GL_EXT_texture_format_BGRA8888,GL_EXT_texture_format_sRGB_override,GL_EXT_texture_mirror_clamp_to_edge,GL_EXT_texture_norm16,GL_EXT_texture_query_lod,GL_EXT_texture_rg,GL_EXT_texture_storage_compression,GL_EXT_texture_type_2_10_10_10_REV,GL_EXT_texture_view,GL_EXT_unpack_subimage,GL_FJ_shader_binary_GCCSO,GL_IMG_bindless_texture,GL_IMG_framebuffer_downsample,GL_IMG_multisampled_render_to_texture,GL_IMG_program_binary,GL_IMG_read_format,GL_IMG_shader_binary,GL_IMG_texture_compression_pvrtc,GL_IMG_texture_compression_pvrtc2,GL_IMG_texture_filter_cubic,GL_MESA_bgra,GL_MESA_sampler_objects,GL_NV_copy_buffer,GL_NV_coverage_sample,GL_NV_depth_nonlinear,GL_NV_draw_buffers,GL_NV_draw_instanced,GL_NV_explicit_attrib_location,GL_NV_fbo_color_attachments,GL_NV_framebuffer_blit,GL_NV_framebuffer_multisample,GL_NV_generate_mipmap_sRGB,GL_NV_image_formats,GL_NV_instanced_arrays,GL_NV_non_square_matrices,GL_NV_pack_subimage,GL_NV_pixel_buffer_object,GL_NV_polygon_mode,GL_NV_read_buffer,GL_NV_read_buffer_front,GL_NV_read_depth,GL_NV_read_depth_stencil,GL_NV_read_stencil,GL_NV_sRGB_formats,GL_NV_shader_noperspective_interpolation,GL_NV_shadow_samplers_array,GL_NV_shadow_samplers_cube,GL_NV_texture_border_clamp,GL_NV_texture_compression_s3tc_update,GL_NV_texture_npot_2D_mipmap,GL_NV_viewport_array,GL_OES_EGL_image,GL_OES_EGL_image_external,GL_OES_EGL_image_external_essl3,GL_OES_compressed_ETC1_RGB8_sub_texture,GL_OES_compressed_ETC1_RGB8_texture,GL_OES_copy_image,GL_OES_depth24,GL_OES_depth32,GL_OES_depth_texture,GL_OES_draw_buffers_indexed,GL_OES_draw_elements_base_vertex,GL_OES_element_index_uint,GL_OES_fbo_render_mipmap,GL_OES_fragment_precision_high,GL_OES_geometry_point_size,GL_OES_geometry_shader,GL_OES_get_program_binary,GL_OES_gpu_shader5,GL_OES_mapbuffer,GL_OES_packed_depth_stencil,GL_OES_primitive_bounding_box,GL_OES_required_internalformat,GL_OES_rgb8_rgba8,GL_OES_sample_shading,GL_OES_sample_variables,GL_OES_shader_image_atomic,GL_OES_shader_io_blocks,GL_OES_shader_multisample_interpolation,GL_OES_standard_derivatives,GL_OES_stencil1,GL_OES_stencil4,GL_OES_surfaceless_context,GL_OES_tessellation_point_size,GL_OES_tessellation_shader,GL_OES_texture_3D,GL_OES_texture_border_clamp,GL_OES_texture_buffer,GL_OES_texture_compression_astc,GL_OES_texture_cube_map_array,GL_OES_texture_float,GL_OES_texture_float_linear,GL_OES_texture_half_float,GL_OES_texture_half_float_linear,GL_OES_texture_npot,GL_OES_texture_stencil8,GL_OES_texture_storage_multisample_2d_array,GL_OES_texture_view,GL_OES_vertex_array_object,GL_OES_vertex_half_float,GL_OES_vertex_type_10_10_10_2,GL_OES_viewport_array,GL_OVR_multiview_multisampled_render_to_texture,GL_QCOM_YUV_texture_gather,GL_QCOM_alpha_test,GL_QCOM_binning_control,GL_QCOM_driver_control,GL_QCOM_extended_get,GL_QCOM_extended_get2,GL_QCOM_frame_extrapolation,GL_QCOM_framebuffer_foveated,GL_QCOM_motion_estimation,GL_QCOM_perfmon_global_mode,GL_QCOM_render_sRGB_R8_RG8,GL_QCOM_render_shared_exponent,GL_QCOM_shader_framebuffer_fetch_noncoherent,GL_QCOM_shader_framebuffer_fetch_rate,GL_QCOM_shading_rate,GL_QCOM_texture_foveated,GL_QCOM_texture_foveated2,GL_QCOM_texture_foveated_subsampled_layout,GL_QCOM_texture_lod_bias,GL_QCOM_tiled_rendering,GL_QCOM_writeonly_rendering,GL_QCOM_ycbcr_degamma,GL_VIV_shader_binary' c --alias --loader + * --merge --api='gl:core=3.3,gles2=3.0' --extensions='GL_3DFX_multisample,GL_3DFX_tbuffer,GL_3DFX_texture_compression_FXT1,GL_AMD_blend_minmax_factor,GL_AMD_conservative_depth,GL_AMD_debug_output,GL_AMD_depth_clamp_separate,GL_AMD_draw_buffers_blend,GL_AMD_framebuffer_multisample_advanced,GL_AMD_framebuffer_sample_positions,GL_AMD_gcn_shader,GL_AMD_gpu_shader_half_float,GL_AMD_gpu_shader_int16,GL_AMD_gpu_shader_int64,GL_AMD_interleaved_elements,GL_AMD_multi_draw_indirect,GL_AMD_name_gen_delete,GL_AMD_occlusion_query_event,GL_AMD_performance_monitor,GL_AMD_pinned_memory,GL_AMD_query_buffer_object,GL_AMD_sample_positions,GL_AMD_seamless_cubemap_per_texture,GL_AMD_shader_atomic_counter_ops,GL_AMD_shader_ballot,GL_AMD_shader_explicit_vertex_parameter,GL_AMD_shader_gpu_shader_half_float_fetch,GL_AMD_shader_image_load_store_lod,GL_AMD_shader_stencil_export,GL_AMD_shader_trinary_minmax,GL_AMD_sparse_texture,GL_AMD_stencil_operation_extended,GL_AMD_texture_gather_bias_lod,GL_AMD_texture_texture4,GL_AMD_transform_feedback3_lines_triangles,GL_AMD_transform_feedback4,GL_AMD_vertex_shader_layer,GL_AMD_vertex_shader_tessellator,GL_AMD_vertex_shader_viewport_index,GL_APPLE_aux_depth_stencil,GL_APPLE_client_storage,GL_APPLE_element_array,GL_APPLE_fence,GL_APPLE_float_pixels,GL_APPLE_flush_buffer_range,GL_APPLE_object_purgeable,GL_APPLE_rgb_422,GL_APPLE_row_bytes,GL_APPLE_specular_vector,GL_APPLE_texture_range,GL_APPLE_transform_hint,GL_APPLE_vertex_array_object,GL_APPLE_vertex_array_range,GL_APPLE_vertex_program_evaluators,GL_APPLE_ycbcr_422,GL_ARB_ES2_compatibility,GL_ARB_ES3_1_compatibility,GL_ARB_ES3_2_compatibility,GL_ARB_ES3_compatibility,GL_ARB_arrays_of_arrays,GL_ARB_base_instance,GL_ARB_bindless_texture,GL_ARB_blend_func_extended,GL_ARB_buffer_storage,GL_ARB_cl_event,GL_ARB_clear_buffer_object,GL_ARB_clear_texture,GL_ARB_clip_control,GL_ARB_color_buffer_float,GL_ARB_compatibility,GL_ARB_compressed_texture_pixel_storage,GL_ARB_compute_shader,GL_ARB_compute_variable_group_size,GL_ARB_conditional_render_inverted,GL_ARB_conservative_depth,GL_ARB_copy_buffer,GL_ARB_copy_image,GL_ARB_cull_distance,GL_ARB_debug_output,GL_ARB_depth_buffer_float,GL_ARB_depth_clamp,GL_ARB_depth_texture,GL_ARB_derivative_control,GL_ARB_direct_state_access,GL_ARB_draw_buffers,GL_ARB_draw_buffers_blend,GL_ARB_draw_elements_base_vertex,GL_ARB_draw_indirect,GL_ARB_draw_instanced,GL_ARB_enhanced_layouts,GL_ARB_explicit_attrib_location,GL_ARB_explicit_uniform_location,GL_ARB_fragment_coord_conventions,GL_ARB_fragment_layer_viewport,GL_ARB_fragment_program,GL_ARB_fragment_program_shadow,GL_ARB_fragment_shader,GL_ARB_fragment_shader_interlock,GL_ARB_framebuffer_no_attachments,GL_ARB_framebuffer_object,GL_ARB_framebuffer_sRGB,GL_ARB_geometry_shader4,GL_ARB_get_program_binary,GL_ARB_get_texture_sub_image,GL_ARB_gl_spirv,GL_ARB_gpu_shader5,GL_ARB_gpu_shader_fp64,GL_ARB_gpu_shader_int64,GL_ARB_half_float_pixel,GL_ARB_half_float_vertex,GL_ARB_imaging,GL_ARB_indirect_parameters,GL_ARB_instanced_arrays,GL_ARB_internalformat_query,GL_ARB_internalformat_query2,GL_ARB_invalidate_subdata,GL_ARB_map_buffer_alignment,GL_ARB_map_buffer_range,GL_ARB_matrix_palette,GL_ARB_multi_bind,GL_ARB_multi_draw_indirect,GL_ARB_multisample,GL_ARB_multitexture,GL_ARB_occlusion_query,GL_ARB_occlusion_query2,GL_ARB_parallel_shader_compile,GL_ARB_pipeline_statistics_query,GL_ARB_pixel_buffer_object,GL_ARB_point_parameters,GL_ARB_point_sprite,GL_ARB_polygon_offset_clamp,GL_ARB_post_depth_coverage,GL_ARB_program_interface_query,GL_ARB_provoking_vertex,GL_ARB_query_buffer_object,GL_ARB_robust_buffer_access_behavior,GL_ARB_robustness,GL_ARB_robustness_isolation,GL_ARB_sample_locations,GL_ARB_sample_shading,GL_ARB_sampler_objects,GL_ARB_seamless_cube_map,GL_ARB_seamless_cubemap_per_texture,GL_ARB_separate_shader_objects,GL_ARB_shader_atomic_counter_ops,GL_ARB_shader_atomic_counters,GL_ARB_shader_ballot,GL_ARB_shader_bit_encoding,GL_ARB_shader_clock,GL_ARB_shader_draw_parameters,GL_ARB_shader_group_vote,GL_ARB_shader_image_load_store,GL_ARB_shader_image_size,GL_ARB_shader_objects,GL_ARB_shader_precision,GL_ARB_shader_stencil_export,GL_ARB_shader_storage_buffer_object,GL_ARB_shader_subroutine,GL_ARB_shader_texture_image_samples,GL_ARB_shader_texture_lod,GL_ARB_shader_viewport_layer_array,GL_ARB_shading_language_100,GL_ARB_shading_language_420pack,GL_ARB_shading_language_include,GL_ARB_shading_language_packing,GL_ARB_shadow,GL_ARB_shadow_ambient,GL_ARB_sparse_buffer,GL_ARB_sparse_texture,GL_ARB_sparse_texture2,GL_ARB_sparse_texture_clamp,GL_ARB_spirv_extensions,GL_ARB_stencil_texturing,GL_ARB_sync,GL_ARB_tessellation_shader,GL_ARB_texture_barrier,GL_ARB_texture_border_clamp,GL_ARB_texture_buffer_object,GL_ARB_texture_buffer_object_rgb32,GL_ARB_texture_buffer_range,GL_ARB_texture_compression,GL_ARB_texture_compression_bptc,GL_ARB_texture_compression_rgtc,GL_ARB_texture_cube_map,GL_ARB_texture_cube_map_array,GL_ARB_texture_env_add,GL_ARB_texture_env_combine,GL_ARB_texture_env_crossbar,GL_ARB_texture_env_dot3,GL_ARB_texture_filter_anisotropic,GL_ARB_texture_filter_minmax,GL_ARB_texture_float,GL_ARB_texture_gather,GL_ARB_texture_mirror_clamp_to_edge,GL_ARB_texture_mirrored_repeat,GL_ARB_texture_multisample,GL_ARB_texture_non_power_of_two,GL_ARB_texture_query_levels,GL_ARB_texture_query_lod,GL_ARB_texture_rectangle,GL_ARB_texture_rg,GL_ARB_texture_rgb10_a2ui,GL_ARB_texture_stencil8,GL_ARB_texture_storage,GL_ARB_texture_storage_multisample,GL_ARB_texture_swizzle,GL_ARB_texture_view,GL_ARB_timer_query,GL_ARB_transform_feedback2,GL_ARB_transform_feedback3,GL_ARB_transform_feedback_instanced,GL_ARB_transform_feedback_overflow_query,GL_ARB_transpose_matrix,GL_ARB_uniform_buffer_object,GL_ARB_vertex_array_bgra,GL_ARB_vertex_array_object,GL_ARB_vertex_attrib_64bit,GL_ARB_vertex_attrib_binding,GL_ARB_vertex_blend,GL_ARB_vertex_buffer_object,GL_ARB_vertex_program,GL_ARB_vertex_shader,GL_ARB_vertex_type_10f_11f_11f_rev,GL_ARB_vertex_type_2_10_10_10_rev,GL_ARB_viewport_array,GL_ARB_window_pos,GL_ATI_draw_buffers,GL_ATI_element_array,GL_ATI_envmap_bumpmap,GL_ATI_fragment_shader,GL_ATI_map_object_buffer,GL_ATI_meminfo,GL_ATI_pixel_format_float,GL_ATI_pn_triangles,GL_ATI_separate_stencil,GL_ATI_text_fragment_shader,GL_ATI_texture_env_combine3,GL_ATI_texture_float,GL_ATI_texture_mirror_once,GL_ATI_vertex_array_object,GL_ATI_vertex_attrib_array_object,GL_ATI_vertex_streams,GL_EXT_422_pixels,GL_EXT_EGL_image_storage,GL_EXT_EGL_sync,GL_EXT_abgr,GL_EXT_bgra,GL_EXT_bindable_uniform,GL_EXT_blend_color,GL_EXT_blend_equation_separate,GL_EXT_blend_func_separate,GL_EXT_blend_logic_op,GL_EXT_blend_minmax,GL_EXT_blend_subtract,GL_EXT_clip_volume_hint,GL_EXT_cmyka,GL_EXT_color_subtable,GL_EXT_compiled_vertex_array,GL_EXT_convolution,GL_EXT_coordinate_frame,GL_EXT_copy_texture,GL_EXT_cull_vertex,GL_EXT_debug_label,GL_EXT_debug_marker,GL_EXT_depth_bounds_test,GL_EXT_direct_state_access,GL_EXT_draw_buffers2,GL_EXT_draw_instanced,GL_EXT_draw_range_elements,GL_EXT_external_buffer,GL_EXT_fog_coord,GL_EXT_fragment_shading_rate,GL_EXT_framebuffer_blit,GL_EXT_framebuffer_blit_layers,GL_EXT_framebuffer_multisample,GL_EXT_framebuffer_multisample_blit_scaled,GL_EXT_framebuffer_object,GL_EXT_framebuffer_sRGB,GL_EXT_geometry_shader4,GL_EXT_gpu_program_parameters,GL_EXT_gpu_shader4,GL_EXT_histogram,GL_EXT_index_array_formats,GL_EXT_index_func,GL_EXT_index_material,GL_EXT_index_texture,GL_EXT_light_texture,GL_EXT_memory_object,GL_EXT_memory_object_fd,GL_EXT_memory_object_win32,GL_EXT_mesh_shader,GL_EXT_misc_attribute,GL_EXT_multi_draw_arrays,GL_EXT_multisample,GL_EXT_multiview_tessellation_geometry_shader,GL_EXT_multiview_texture_multisample,GL_EXT_multiview_timer_query,GL_EXT_packed_depth_stencil,GL_EXT_packed_float,GL_EXT_packed_pixels,GL_EXT_paletted_texture,GL_EXT_pixel_buffer_object,GL_EXT_pixel_transform,GL_EXT_pixel_transform_color_table,GL_EXT_point_parameters,GL_EXT_polygon_offset,GL_EXT_polygon_offset_clamp,GL_EXT_post_depth_coverage,GL_EXT_provoking_vertex,GL_EXT_raster_multisample,GL_EXT_rescale_normal,GL_EXT_secondary_color,GL_EXT_semaphore,GL_EXT_semaphore_fd,GL_EXT_semaphore_win32,GL_EXT_separate_shader_objects,GL_EXT_separate_specular_color,GL_EXT_shader_framebuffer_fetch,GL_EXT_shader_framebuffer_fetch_non_coherent,GL_EXT_shader_image_load_formatted,GL_EXT_shader_image_load_store,GL_EXT_shader_integer_mix,GL_EXT_shader_samples_identical,GL_EXT_shadow_funcs,GL_EXT_shared_texture_palette,GL_EXT_sparse_texture2,GL_EXT_stencil_clear_tag,GL_EXT_stencil_two_side,GL_EXT_stencil_wrap,GL_EXT_subtexture,GL_EXT_texture,GL_EXT_texture3D,GL_EXT_texture_array,GL_EXT_texture_buffer_object,GL_EXT_texture_compression_latc,GL_EXT_texture_compression_rgtc,GL_EXT_texture_compression_s3tc,GL_EXT_texture_cube_map,GL_EXT_texture_env_add,GL_EXT_texture_env_combine,GL_EXT_texture_env_dot3,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_filter_minmax,GL_EXT_texture_integer,GL_EXT_texture_lod_bias,GL_EXT_texture_mirror_clamp,GL_EXT_texture_object,GL_EXT_texture_perturb_normal,GL_EXT_texture_sRGB,GL_EXT_texture_sRGB_R8,GL_EXT_texture_sRGB_RG8,GL_EXT_texture_sRGB_decode,GL_EXT_texture_shadow_lod,GL_EXT_texture_shared_exponent,GL_EXT_texture_snorm,GL_EXT_texture_storage,GL_EXT_texture_swizzle,GL_EXT_timer_query,GL_EXT_transform_feedback,GL_EXT_vertex_array,GL_EXT_vertex_array_bgra,GL_EXT_vertex_attrib_64bit,GL_EXT_vertex_shader,GL_EXT_vertex_weighting,GL_EXT_win32_keyed_mutex,GL_EXT_window_rectangles,GL_EXT_x11_sync_object,GL_GREMEDY_frame_terminator,GL_GREMEDY_string_marker,GL_HP_convolution_border_modes,GL_HP_image_transform,GL_HP_occlusion_test,GL_HP_texture_lighting,GL_IBM_cull_vertex,GL_IBM_multimode_draw_arrays,GL_IBM_rasterpos_clip,GL_IBM_static_data,GL_IBM_texture_mirrored_repeat,GL_IBM_vertex_array_lists,GL_INGR_blend_func_separate,GL_INGR_color_clamp,GL_INGR_interlace_read,GL_INTEL_blackhole_render,GL_INTEL_conservative_rasterization,GL_INTEL_fragment_shader_ordering,GL_INTEL_framebuffer_CMAA,GL_INTEL_map_texture,GL_INTEL_parallel_arrays,GL_INTEL_performance_query,GL_KHR_blend_equation_advanced,GL_KHR_blend_equation_advanced_coherent,GL_KHR_context_flush_control,GL_KHR_debug,GL_KHR_no_error,GL_KHR_parallel_shader_compile,GL_KHR_robust_buffer_access_behavior,GL_KHR_robustness,GL_KHR_shader_subgroup,GL_KHR_texture_compression_astc_hdr,GL_KHR_texture_compression_astc_ldr,GL_KHR_texture_compression_astc_sliced_3d,GL_MESAX_texture_stack,GL_MESA_framebuffer_flip_x,GL_MESA_framebuffer_flip_y,GL_MESA_framebuffer_swap_xy,GL_MESA_pack_invert,GL_MESA_program_binary_formats,GL_MESA_resize_buffers,GL_MESA_shader_integer_functions,GL_MESA_texture_const_bandwidth,GL_MESA_tile_raster_order,GL_MESA_window_pos,GL_MESA_ycbcr_texture,GL_NVX_blend_equation_advanced_multi_draw_buffers,GL_NVX_conditional_render,GL_NVX_gpu_memory_info,GL_NVX_gpu_multicast2,GL_NVX_linked_gpu_multicast,GL_NVX_progress_fence,GL_NV_alpha_to_coverage_dither_control,GL_NV_bindless_multi_draw_indirect,GL_NV_bindless_multi_draw_indirect_count,GL_NV_bindless_texture,GL_NV_blend_equation_advanced,GL_NV_blend_equation_advanced_coherent,GL_NV_blend_minmax_factor,GL_NV_blend_square,GL_NV_clip_space_w_scaling,GL_NV_command_list,GL_NV_compute_program5,GL_NV_compute_shader_derivatives,GL_NV_conditional_render,GL_NV_conservative_raster,GL_NV_conservative_raster_dilate,GL_NV_conservative_raster_pre_snap,GL_NV_conservative_raster_pre_snap_triangles,GL_NV_conservative_raster_underestimation,GL_NV_copy_depth_to_color,GL_NV_copy_image,GL_NV_deep_texture3D,GL_NV_depth_buffer_float,GL_NV_depth_clamp,GL_NV_draw_texture,GL_NV_draw_vulkan_image,GL_NV_evaluators,GL_NV_explicit_multisample,GL_NV_fence,GL_NV_fill_rectangle,GL_NV_float_buffer,GL_NV_fog_distance,GL_NV_fragment_coverage_to_color,GL_NV_fragment_program,GL_NV_fragment_program2,GL_NV_fragment_program4,GL_NV_fragment_program_option,GL_NV_fragment_shader_barycentric,GL_NV_fragment_shader_interlock,GL_NV_framebuffer_mixed_samples,GL_NV_framebuffer_multisample_coverage,GL_NV_geometry_program4,GL_NV_geometry_shader4,GL_NV_geometry_shader_passthrough,GL_NV_gpu_multicast,GL_NV_gpu_program4,GL_NV_gpu_program5,GL_NV_gpu_program5_mem_extended,GL_NV_gpu_shader5,GL_NV_half_float,GL_NV_internalformat_sample_query,GL_NV_light_max_exponent,GL_NV_memory_attachment,GL_NV_memory_object_sparse,GL_NV_mesh_shader,GL_NV_multisample_coverage,GL_NV_multisample_filter_hint,GL_NV_occlusion_query,GL_NV_packed_depth_stencil,GL_NV_parameter_buffer_object,GL_NV_parameter_buffer_object2,GL_NV_path_rendering,GL_NV_path_rendering_shared_edge,GL_NV_pixel_data_range,GL_NV_point_sprite,GL_NV_present_video,GL_NV_primitive_restart,GL_NV_primitive_shading_rate,GL_NV_query_resource,GL_NV_query_resource_tag,GL_NV_register_combiners,GL_NV_register_combiners2,GL_NV_representative_fragment_test,GL_NV_robustness_video_memory_purge,GL_NV_sample_locations,GL_NV_sample_mask_override_coverage,GL_NV_scissor_exclusive,GL_NV_shader_atomic_counters,GL_NV_shader_atomic_float,GL_NV_shader_atomic_float64,GL_NV_shader_atomic_fp16_vector,GL_NV_shader_atomic_int64,GL_NV_shader_buffer_load,GL_NV_shader_buffer_store,GL_NV_shader_storage_buffer_object,GL_NV_shader_subgroup_partitioned,GL_NV_shader_texture_footprint,GL_NV_shader_thread_group,GL_NV_shader_thread_shuffle,GL_NV_shading_rate_image,GL_NV_stereo_view_rendering,GL_NV_tessellation_program5,GL_NV_texgen_emboss,GL_NV_texgen_reflection,GL_NV_texture_barrier,GL_NV_texture_compression_vtc,GL_NV_texture_env_combine4,GL_NV_texture_expand_normal,GL_NV_texture_multisample,GL_NV_texture_rectangle,GL_NV_texture_rectangle_compressed,GL_NV_texture_shader,GL_NV_texture_shader2,GL_NV_texture_shader3,GL_NV_timeline_semaphore,GL_NV_transform_feedback,GL_NV_transform_feedback2,GL_NV_uniform_buffer_std430_layout,GL_NV_uniform_buffer_unified_memory,GL_NV_vdpau_interop,GL_NV_vdpau_interop2,GL_NV_vertex_array_range,GL_NV_vertex_array_range2,GL_NV_vertex_attrib_integer_64bit,GL_NV_vertex_buffer_unified_memory,GL_NV_vertex_program,GL_NV_vertex_program1_1,GL_NV_vertex_program2,GL_NV_vertex_program2_option,GL_NV_vertex_program3,GL_NV_vertex_program4,GL_NV_video_capture,GL_NV_viewport_array2,GL_NV_viewport_swizzle,GL_OES_byte_coordinates,GL_OES_compressed_paletted_texture,GL_OES_fixed_point,GL_OES_query_matrix,GL_OES_read_format,GL_OES_single_precision,GL_OML_interlace,GL_OML_resample,GL_OML_subsample,GL_OVR_multiview,GL_OVR_multiview2,GL_PGI_misc_hints,GL_PGI_vertex_hints,GL_REND_screen_coordinates,GL_S3_s3tc,GL_SGIS_detail_texture,GL_SGIS_fog_function,GL_SGIS_generate_mipmap,GL_SGIS_multisample,GL_SGIS_pixel_texture,GL_SGIS_point_line_texgen,GL_SGIS_point_parameters,GL_SGIS_sharpen_texture,GL_SGIS_texture4D,GL_SGIS_texture_border_clamp,GL_SGIS_texture_color_mask,GL_SGIS_texture_edge_clamp,GL_SGIS_texture_filter4,GL_SGIS_texture_lod,GL_SGIS_texture_select,GL_SGIX_async,GL_SGIX_async_histogram,GL_SGIX_async_pixel,GL_SGIX_blend_alpha_minmax,GL_SGIX_calligraphic_fragment,GL_SGIX_clipmap,GL_SGIX_convolution_accuracy,GL_SGIX_depth_pass_instrument,GL_SGIX_depth_texture,GL_SGIX_flush_raster,GL_SGIX_fog_offset,GL_SGIX_fragment_lighting,GL_SGIX_framezoom,GL_SGIX_igloo_interface,GL_SGIX_instruments,GL_SGIX_interlace,GL_SGIX_ir_instrument1,GL_SGIX_list_priority,GL_SGIX_pixel_texture,GL_SGIX_pixel_tiles,GL_SGIX_polynomial_ffd,GL_SGIX_reference_plane,GL_SGIX_resample,GL_SGIX_scalebias_hint,GL_SGIX_shadow,GL_SGIX_shadow_ambient,GL_SGIX_sprite,GL_SGIX_subsample,GL_SGIX_tag_sample_buffer,GL_SGIX_texture_add_env,GL_SGIX_texture_coordinate_clamp,GL_SGIX_texture_lod_bias,GL_SGIX_texture_multi_buffer,GL_SGIX_texture_scale_bias,GL_SGIX_vertex_preclip,GL_SGIX_ycrcb,GL_SGIX_ycrcb_subsample,GL_SGIX_ycrcba,GL_SGI_color_matrix,GL_SGI_color_table,GL_SGI_texture_color_table,GL_SUNX_constant_data,GL_SUN_convolution_border_modes,GL_SUN_global_alpha,GL_SUN_mesh_array,GL_SUN_slice_accum,GL_SUN_triangle_list,GL_SUN_vertex,GL_WIN_phong_shading,GL_WIN_specular_fog,GL_AMD_compressed_3DC_texture,GL_AMD_compressed_ATC_texture,GL_AMD_program_binary_Z400,GL_ANDROID_extension_pack_es31a,GL_ANGLE_depth_texture,GL_ANGLE_framebuffer_blit,GL_ANGLE_framebuffer_multisample,GL_ANGLE_instanced_arrays,GL_ANGLE_pack_reverse_row_order,GL_ANGLE_program_binary,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ANGLE_texture_usage,GL_ANGLE_translated_shader_source,GL_APPLE_clip_distance,GL_APPLE_color_buffer_packed_float,GL_APPLE_copy_texture_levels,GL_APPLE_framebuffer_multisample,GL_APPLE_sync,GL_APPLE_texture_format_BGRA8888,GL_APPLE_texture_max_level,GL_APPLE_texture_packed_float,GL_ARM_mali_program_binary,GL_ARM_mali_shader_binary,GL_ARM_rgba8,GL_ARM_shader_core_properties,GL_ARM_shader_framebuffer_fetch,GL_ARM_shader_framebuffer_fetch_depth_stencil,GL_ARM_texture_unnormalized_coordinates,GL_DMP_program_binary,GL_DMP_shader_binary,GL_EXT_EGL_image_array,GL_EXT_EGL_image_storage_compression,GL_EXT_YUV_target,GL_EXT_base_instance,GL_EXT_blend_func_extended,GL_EXT_buffer_storage,GL_EXT_clear_texture,GL_EXT_clip_control,GL_EXT_clip_cull_distance,GL_EXT_color_buffer_float,GL_EXT_color_buffer_half_float,GL_EXT_conservative_depth,GL_EXT_copy_image,GL_EXT_depth_clamp,GL_EXT_discard_framebuffer,GL_EXT_disjoint_timer_query,GL_EXT_draw_buffers,GL_EXT_draw_buffers_indexed,GL_EXT_draw_elements_base_vertex,GL_EXT_draw_transform_feedback,GL_EXT_float_blend,GL_EXT_geometry_point_size,GL_EXT_geometry_shader,GL_EXT_gpu_shader5,GL_EXT_instanced_arrays,GL_EXT_map_buffer_range,GL_EXT_multi_draw_indirect,GL_EXT_multisampled_compatibility,GL_EXT_multisampled_render_to_texture,GL_EXT_multisampled_render_to_texture2,GL_EXT_multiview_draw_buffers,GL_EXT_occlusion_query_boolean,GL_EXT_primitive_bounding_box,GL_EXT_protected_textures,GL_EXT_pvrtc_sRGB,GL_EXT_read_format_bgra,GL_EXT_render_snorm,GL_EXT_robustness,GL_EXT_sRGB,GL_EXT_sRGB_write_control,GL_EXT_separate_depth_stencil,GL_EXT_shader_group_vote,GL_EXT_shader_implicit_conversions,GL_EXT_shader_io_blocks,GL_EXT_shader_non_constant_global_initializers,GL_EXT_shader_pixel_local_storage,GL_EXT_shader_pixel_local_storage2,GL_EXT_shader_texture_lod,GL_EXT_shader_texture_samples,GL_EXT_shadow_samplers,GL_EXT_sparse_texture,GL_EXT_tessellation_point_size,GL_EXT_tessellation_shader,GL_EXT_texture_border_clamp,GL_EXT_texture_buffer,GL_EXT_texture_compression_astc_decode_mode,GL_EXT_texture_compression_bptc,GL_EXT_texture_compression_dxt1,GL_EXT_texture_compression_s3tc_srgb,GL_EXT_texture_cube_map_array,GL_EXT_texture_format_BGRA8888,GL_EXT_texture_format_sRGB_override,GL_EXT_texture_mirror_clamp_to_edge,GL_EXT_texture_norm16,GL_EXT_texture_query_lod,GL_EXT_texture_rg,GL_EXT_texture_storage_compression,GL_EXT_texture_type_2_10_10_10_REV,GL_EXT_texture_view,GL_EXT_unpack_subimage,GL_FJ_shader_binary_GCCSO,GL_HUAWEI_program_binary,GL_HUAWEI_shader_binary,GL_IMG_bindless_texture,GL_IMG_framebuffer_downsample,GL_IMG_multisampled_render_to_texture,GL_IMG_program_binary,GL_IMG_read_format,GL_IMG_shader_binary,GL_IMG_texture_compression_pvrtc,GL_IMG_texture_compression_pvrtc2,GL_IMG_texture_filter_cubic,GL_MESA_bgra,GL_MESA_sampler_objects,GL_NV_copy_buffer,GL_NV_coverage_sample,GL_NV_depth_nonlinear,GL_NV_draw_buffers,GL_NV_draw_instanced,GL_NV_explicit_attrib_location,GL_NV_fbo_color_attachments,GL_NV_framebuffer_blit,GL_NV_framebuffer_multisample,GL_NV_generate_mipmap_sRGB,GL_NV_image_formats,GL_NV_instanced_arrays,GL_NV_non_square_matrices,GL_NV_pack_subimage,GL_NV_pixel_buffer_object,GL_NV_polygon_mode,GL_NV_read_buffer,GL_NV_read_buffer_front,GL_NV_read_depth,GL_NV_read_depth_stencil,GL_NV_read_stencil,GL_NV_sRGB_formats,GL_NV_shader_noperspective_interpolation,GL_NV_shadow_samplers_array,GL_NV_shadow_samplers_cube,GL_NV_texture_border_clamp,GL_NV_texture_compression_s3tc_update,GL_NV_texture_npot_2D_mipmap,GL_NV_viewport_array,GL_OES_EGL_image,GL_OES_EGL_image_external,GL_OES_EGL_image_external_essl3,GL_OES_compressed_ETC1_RGB8_sub_texture,GL_OES_compressed_ETC1_RGB8_texture,GL_OES_copy_image,GL_OES_depth24,GL_OES_depth32,GL_OES_depth_texture,GL_OES_draw_buffers_indexed,GL_OES_draw_elements_base_vertex,GL_OES_element_index_uint,GL_OES_fbo_render_mipmap,GL_OES_fragment_precision_high,GL_OES_geometry_point_size,GL_OES_geometry_shader,GL_OES_get_program_binary,GL_OES_gpu_shader5,GL_OES_mapbuffer,GL_OES_packed_depth_stencil,GL_OES_primitive_bounding_box,GL_OES_required_internalformat,GL_OES_rgb8_rgba8,GL_OES_sample_shading,GL_OES_sample_variables,GL_OES_shader_image_atomic,GL_OES_shader_io_blocks,GL_OES_shader_multisample_interpolation,GL_OES_standard_derivatives,GL_OES_stencil1,GL_OES_stencil4,GL_OES_surfaceless_context,GL_OES_tessellation_point_size,GL_OES_tessellation_shader,GL_OES_texture_3D,GL_OES_texture_border_clamp,GL_OES_texture_buffer,GL_OES_texture_compression_astc,GL_OES_texture_cube_map_array,GL_OES_texture_float,GL_OES_texture_float_linear,GL_OES_texture_half_float,GL_OES_texture_half_float_linear,GL_OES_texture_npot,GL_OES_texture_stencil8,GL_OES_texture_storage_multisample_2d_array,GL_OES_texture_view,GL_OES_vertex_array_object,GL_OES_vertex_half_float,GL_OES_vertex_type_10_10_10_2,GL_OES_viewport_array,GL_OVR_multiview_multisampled_render_to_texture,GL_QCOM_YUV_texture_gather,GL_QCOM_alpha_test,GL_QCOM_binning_control,GL_QCOM_driver_control,GL_QCOM_extended_get,GL_QCOM_extended_get2,GL_QCOM_frame_extrapolation,GL_QCOM_framebuffer_foveated,GL_QCOM_motion_estimation,GL_QCOM_perfmon_global_mode,GL_QCOM_render_sRGB_R8_RG8,GL_QCOM_render_shared_exponent,GL_QCOM_shader_framebuffer_fetch_noncoherent,GL_QCOM_shader_framebuffer_fetch_rate,GL_QCOM_shading_rate,GL_QCOM_texture_foveated,GL_QCOM_texture_foveated2,GL_QCOM_texture_foveated_subsampled_layout,GL_QCOM_texture_lod_bias,GL_QCOM_tiled_rendering,GL_QCOM_writeonly_rendering,GL_QCOM_ycbcr_degamma,GL_VIV_shader_binary' c --alias --loader * * Online: * http://glad.sh/#api=gl%3Acore%3D3.3%2Cgles2%3D3.0&generator=c&options=MERGE%2CALIAS%2CLOADER @@ -320,7 +320,9 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_EXT 0x959E #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_EXT 0x959F #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 @@ -734,6 +736,7 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_CONSTANT_COLOR1_NV 0x852B #define GL_CONSTANT_COLOR_EXT 0x8001 #define GL_CONSTANT_EXT 0x8576 +#define GL_CONST_BW_TILING_MESA 0x8BBE #define GL_CONST_EYE_NV 0x86E5 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 @@ -1353,6 +1356,16 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 #define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 #define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 +#define GL_FRAGMENT_SHADING_RATE_ATTACHMENT_WITH_DEFAULT_FRAMEBUFFER_SUPPORTED_EXT 0x96DF +#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_EXT 0x96D2 +#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_EXT 0x96D5 +#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_EXT 0x96D4 +#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_EXT 0x96D6 +#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_EXT 0x96D3 +#define GL_FRAGMENT_SHADING_RATE_NON_TRIVIAL_COMBINERS_SUPPORTED_EXT 0x8F6F +#define GL_FRAGMENT_SHADING_RATE_PRIMITIVE_RATE_WITH_MULTI_VIEWPORT_SUPPORTED_EXT 0x9780 +#define GL_FRAGMENT_SHADING_RATE_WITH_SAMPLE_MASK_SUPPORTED_EXT 0x96DE +#define GL_FRAGMENT_SHADING_RATE_WITH_SHADER_DEPTH_STENCIL_WRITES_SUPPORTED_EXT 0x96DD #define GL_FRAGMENT_SUBROUTINE 0x92EC #define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 #define GL_FRAGMENT_TEXTURE 0x829F @@ -2043,9 +2056,11 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_EXT 0x8E67 #define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 #define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 #define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_EXT 0x8E6F #define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F #define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E #define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F @@ -2111,6 +2126,10 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 #define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 #define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_LAYERS_EXT 0x96DC +#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_ASPECT_RATIO_EXT 0x96DB +#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT 0x96DA +#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT 0x96D8 #define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 @@ -2156,19 +2175,39 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_MAX_LGPU_GPUS_NVX 0x92BA #define GL_MAX_MAP_TESSELLATION_NV 0x86D6 #define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_MESH_ATOMIC_COUNTERS_EXT 0x8E65 #define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 +#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_EXT 0x8E64 #define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 +#define GL_MAX_MESH_IMAGE_UNIFORMS_EXT 0x8E62 #define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 +#define GL_MAX_MESH_MULTIVIEW_VIEW_COUNT_EXT 0x9557 +#define GL_MAX_MESH_OUTPUT_COMPONENTS_EXT 0x9749 +#define GL_MAX_MESH_OUTPUT_LAYERS_EXT 0x974A +#define GL_MAX_MESH_OUTPUT_MEMORY_SIZE_EXT 0x9747 +#define GL_MAX_MESH_OUTPUT_PRIMITIVES_EXT 0x9756 #define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 +#define GL_MAX_MESH_OUTPUT_VERTICES_EXT 0x9538 #define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 +#define GL_MAX_MESH_PAYLOAD_AND_OUTPUT_MEMORY_SIZE_EXT 0x9748 +#define GL_MAX_MESH_PAYLOAD_AND_SHARED_MEMORY_SIZE_EXT 0x9746 +#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_EXT 0x8E66 #define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 +#define GL_MAX_MESH_SHARED_MEMORY_SIZE_EXT 0x9744 +#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_EXT 0x8E61 #define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 #define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 +#define GL_MAX_MESH_UNIFORM_BLOCKS_EXT 0x8E60 #define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 +#define GL_MAX_MESH_UNIFORM_COMPONENTS_EXT 0x8E63 #define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 #define GL_MAX_MESH_VIEWS_NV 0x9557 +#define GL_MAX_MESH_WORK_GROUP_COUNT_EXT 0x9752 +#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_EXT 0x9757 #define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 +#define GL_MAX_MESH_WORK_GROUP_SIZE_EXT 0x9758 #define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B +#define GL_MAX_MESH_WORK_GROUP_TOTAL_COUNT_EXT 0x9741 #define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 #define GL_MAX_NAME_LENGTH 0x92F6 #define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 @@ -2182,6 +2221,8 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_MAX_PATCH_VERTICES 0x8E7D #define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 #define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_MAX_PREFERRED_MESH_WORK_GROUP_INVOCATIONS_EXT 0x974C +#define GL_MAX_PREFERRED_TASK_WORK_GROUP_INVOCATIONS_EXT 0x974B #define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 #define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B #define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD @@ -2252,17 +2293,31 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 #define GL_MAX_SUBROUTINES 0x8DE7 #define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_MAX_TASK_ATOMIC_COUNTERS_EXT 0x8E6D #define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D +#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_EXT 0x8E6C #define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C +#define GL_MAX_TASK_IMAGE_UNIFORMS_EXT 0x8E6A #define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A #define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A +#define GL_MAX_TASK_PAYLOAD_AND_SHARED_MEMORY_SIZE_EXT 0x9745 +#define GL_MAX_TASK_PAYLOAD_SIZE_EXT 0x9742 +#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_EXT 0x8E6E #define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E +#define GL_MAX_TASK_SHARED_MEMORY_SIZE_EXT 0x9743 +#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_EXT 0x8E69 #define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 #define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 +#define GL_MAX_TASK_UNIFORM_BLOCKS_EXT 0x8E68 #define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 +#define GL_MAX_TASK_UNIFORM_COMPONENTS_EXT 0x8E6B #define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B +#define GL_MAX_TASK_WORK_GROUP_COUNT_EXT 0x9751 +#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_EXT 0x9759 #define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 +#define GL_MAX_TASK_WORK_GROUP_SIZE_EXT 0x975A #define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C +#define GL_MAX_TASK_WORK_GROUP_TOTAL_COUNT_EXT 0x9740 #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD #define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB @@ -2357,15 +2412,31 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 #define GL_MEMORY_ATTACHABLE_NV 0x95A8 #define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 +#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_EXT 0x9543 #define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 +#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_EXT 0x92DF #define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF +#define GL_MESH_OUTPUT_TYPE_EXT 0x957B #define GL_MESH_OUTPUT_TYPE_NV 0x957B +#define GL_MESH_PREFERS_COMPACT_PRIMITIVE_OUTPUT_EXT 0x9750 +#define GL_MESH_PREFERS_COMPACT_VERTEX_OUTPUT_EXT 0x974F +#define GL_MESH_PREFERS_LOCAL_INVOCATION_PRIMITIVE_OUTPUT_EXT 0x974E +#define GL_MESH_PREFERS_LOCAL_INVOCATION_VERTEX_OUTPUT_EXT 0x974D +#define GL_MESH_PRIMITIVES_GENERATED_EXT 0x9755 +#define GL_MESH_PRIMITIVES_OUT_EXT 0x957A #define GL_MESH_PRIMITIVES_OUT_NV 0x957A +#define GL_MESH_SHADER_BIT_EXT 0x00000040 #define GL_MESH_SHADER_BIT_NV 0x00000040 +#define GL_MESH_SHADER_EXT 0x9559 +#define GL_MESH_SHADER_INVOCATIONS_EXT 0x9754 #define GL_MESH_SHADER_NV 0x9559 +#define GL_MESH_SUBROUTINE_EXT 0x957C #define GL_MESH_SUBROUTINE_NV 0x957C +#define GL_MESH_SUBROUTINE_UNIFORM_EXT 0x957E #define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E +#define GL_MESH_VERTICES_OUT_EXT 0x9579 #define GL_MESH_VERTICES_OUT_NV 0x9579 +#define GL_MESH_WORK_GROUP_SIZE_EXT 0x953E #define GL_MESH_WORK_GROUP_SIZE_NV 0x953E #define GL_MIN 0x8007 #define GL_MINMAX_EXT 0x802E @@ -2377,6 +2448,8 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_MIN_EXT 0x8007 #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT 0x96D9 +#define GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT 0x96D7 #define GL_MIN_LOD_WARNING_AMD 0x919C #define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 @@ -3129,7 +3202,9 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B #define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A #define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_MESH_SHADER_EXT 0x95A0 #define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 +#define GL_REFERENCED_BY_TASK_SHADER_EXT 0x95A1 #define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 #define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 #define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 @@ -3526,6 +3601,12 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C #define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F +#define GL_SHADING_RATE_1X1_PIXELS_EXT 0x96A6 +#define GL_SHADING_RATE_1X1_PIXELS_QCOM 0x96A6 +#define GL_SHADING_RATE_1X2_PIXELS_EXT 0x96A7 +#define GL_SHADING_RATE_1X2_PIXELS_QCOM 0x96A7 +#define GL_SHADING_RATE_1X4_PIXELS_EXT 0x96AA +#define GL_SHADING_RATE_1X4_PIXELS_QCOM 0x96AA #define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 #define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 #define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 @@ -3533,9 +3614,23 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A #define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B #define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 +#define GL_SHADING_RATE_2X1_PIXELS_EXT 0x96A8 +#define GL_SHADING_RATE_2X1_PIXELS_QCOM 0x96A8 +#define GL_SHADING_RATE_2X2_PIXELS_EXT 0x96A9 +#define GL_SHADING_RATE_2X2_PIXELS_QCOM 0x96A9 +#define GL_SHADING_RATE_2X4_PIXELS_EXT 0x96AD +#define GL_SHADING_RATE_2X4_PIXELS_QCOM 0x96AD #define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C +#define GL_SHADING_RATE_4X1_PIXELS_EXT 0x96AB +#define GL_SHADING_RATE_4X1_PIXELS_QCOM 0x96AB +#define GL_SHADING_RATE_4X2_PIXELS_EXT 0x96AC +#define GL_SHADING_RATE_4X2_PIXELS_QCOM 0x96AC +#define GL_SHADING_RATE_4X4_PIXELS_EXT 0x96AE +#define GL_SHADING_RATE_4X4_PIXELS_QCOM 0x96AE #define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D #define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E +#define GL_SHADING_RATE_ATTACHMENT_EXT 0x96D1 +#define GL_SHADING_RATE_EXT 0x96D0 #define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B #define GL_SHADING_RATE_IMAGE_NV 0x9563 #define GL_SHADING_RATE_IMAGE_PALETTE_COUNT_NV 0x95B2 @@ -3776,10 +3871,16 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 #define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F #define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TASK_SHADER_BIT_EXT 0x00000080 #define GL_TASK_SHADER_BIT_NV 0x00000080 +#define GL_TASK_SHADER_EXT 0x955A +#define GL_TASK_SHADER_INVOCATIONS_EXT 0x9753 #define GL_TASK_SHADER_NV 0x955A +#define GL_TASK_SUBROUTINE_EXT 0x957D #define GL_TASK_SUBROUTINE_NV 0x957D +#define GL_TASK_SUBROUTINE_UNIFORM_EXT 0x957F #define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F +#define GL_TASK_WORK_GROUP_SIZE_EXT 0x953F #define GL_TASK_WORK_GROUP_SIZE_NV 0x953F #define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 #define GL_TESSELLATION_FACTOR_AMD 0x9005 @@ -4230,7 +4331,9 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC #define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 #define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_EXT 0x959C #define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_EXT 0x959D #define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 @@ -4922,15 +5025,6 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B #define GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM 0x8F66 -#define GL_FRAGMENT_SHADING_RATE_ATTACHMENT_WITH_DEFAULT_FRAMEBUFFER_SUPPORTED_EXT 0x96DF -#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_EXT 0x96D2 -#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_EXT 0x96D5 -#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_EXT 0x96D4 -#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_EXT 0x96D6 -#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_EXT 0x96D3 -#define GL_FRAGMENT_SHADING_RATE_NON_TRIVIAL_COMBINERS_SUPPORTED_EXT 0x8F6F -#define GL_FRAGMENT_SHADING_RATE_WITH_SAMPLE_MASK_SUPPORTED_EXT 0x96DE -#define GL_FRAGMENT_SHADING_RATE_WITH_SHADER_DEPTH_STENCIL_WRITES_SUPPORTED_EXT 0x96DD #define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 @@ -4970,6 +5064,8 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 #define GL_GUILTY_CONTEXT_RESET_KHR 0x8253 #define GL_HALF_FLOAT_OES 0x8D61 +#define GL_HUAWEI_PROGRAM_BINARY 0x9771 +#define GL_HUAWEI_SHADER_BINARY 0x9770 #define GL_IMAGE_BUFFER_OES 0x9051 #define GL_IMAGE_CUBE_MAP_ARRAY_OES 0x9054 #define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 @@ -5030,10 +5126,6 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_MAX_DRAW_BUFFERS_NV 0x8824 #define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5C -#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_LAYERS_EXT 0x96DC -#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_ASPECT_RATIO_EXT 0x96DB -#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT 0x96DA -#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT 0x96D8 #define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317 #define GL_MAX_FRAMEBUFFER_LAYERS_OES 0x9317 #define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5 @@ -5119,8 +5211,6 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_MAX_VIEWPORTS_NV 0x825B #define GL_MAX_VIEWPORTS_OES 0x825B #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5B -#define GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT 0x96D9 -#define GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT 0x96D7 #define GL_MIN_SAMPLE_SHADING_VALUE_OES 0x8C37 #define GL_MOTION_ESTIMATION_SEARCH_BLOCK_X_QCOM 0x8C90 #define GL_MOTION_ESTIMATION_SEARCH_BLOCK_Y_QCOM 0x8C91 @@ -5244,26 +5334,6 @@ typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apipro #define GL_SHADER_CORE_TEXEL_RATE_ARM 0x96F5 #define GL_SHADER_KHR 0x82E1 #define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT 0x8F64 -#define GL_SHADING_RATE_1X1_PIXELS_EXT 0x96A6 -#define GL_SHADING_RATE_1X1_PIXELS_QCOM 0x96A6 -#define GL_SHADING_RATE_1X2_PIXELS_EXT 0x96A7 -#define GL_SHADING_RATE_1X2_PIXELS_QCOM 0x96A7 -#define GL_SHADING_RATE_1X4_PIXELS_EXT 0x96AA -#define GL_SHADING_RATE_1X4_PIXELS_QCOM 0x96AA -#define GL_SHADING_RATE_2X1_PIXELS_EXT 0x96A8 -#define GL_SHADING_RATE_2X1_PIXELS_QCOM 0x96A8 -#define GL_SHADING_RATE_2X2_PIXELS_EXT 0x96A9 -#define GL_SHADING_RATE_2X2_PIXELS_QCOM 0x96A9 -#define GL_SHADING_RATE_2X4_PIXELS_EXT 0x96AD -#define GL_SHADING_RATE_2X4_PIXELS_QCOM 0x96AD -#define GL_SHADING_RATE_4X1_PIXELS_EXT 0x96AB -#define GL_SHADING_RATE_4X1_PIXELS_QCOM 0x96AB -#define GL_SHADING_RATE_4X2_PIXELS_EXT 0x96AC -#define GL_SHADING_RATE_4X2_PIXELS_QCOM 0x96AC -#define GL_SHADING_RATE_4X4_PIXELS_EXT 0x96AE -#define GL_SHADING_RATE_4X4_PIXELS_QCOM 0x96AE -#define GL_SHADING_RATE_ATTACHMENT_EXT 0x96D1 -#define GL_SHADING_RATE_EXT 0x96D0 #define GL_SHADING_RATE_PRESERVE_ASPECT_RATIO_QCOM 0x96A5 #define GL_SHADING_RATE_QCOM 0x96A4 #define GL_SIGNALED_APPLE 0x9119 @@ -6086,6 +6156,8 @@ GLAD_API_CALL int GLAD_GL_EXT_draw_range_elements; GLAD_API_CALL int GLAD_GL_EXT_external_buffer; #define GL_EXT_fog_coord 1 GLAD_API_CALL int GLAD_GL_EXT_fog_coord; +#define GL_EXT_fragment_shading_rate 1 +GLAD_API_CALL int GLAD_GL_EXT_fragment_shading_rate; #define GL_EXT_framebuffer_blit 1 GLAD_API_CALL int GLAD_GL_EXT_framebuffer_blit; #define GL_EXT_framebuffer_blit_layers 1 @@ -6122,6 +6194,8 @@ GLAD_API_CALL int GLAD_GL_EXT_memory_object; GLAD_API_CALL int GLAD_GL_EXT_memory_object_fd; #define GL_EXT_memory_object_win32 1 GLAD_API_CALL int GLAD_GL_EXT_memory_object_win32; +#define GL_EXT_mesh_shader 1 +GLAD_API_CALL int GLAD_GL_EXT_mesh_shader; #define GL_EXT_misc_attribute 1 GLAD_API_CALL int GLAD_GL_EXT_misc_attribute; #define GL_EXT_multi_draw_arrays 1 @@ -6358,6 +6432,8 @@ GLAD_API_CALL int GLAD_GL_MESA_program_binary_formats; GLAD_API_CALL int GLAD_GL_MESA_resize_buffers; #define GL_MESA_shader_integer_functions 1 GLAD_API_CALL int GLAD_GL_MESA_shader_integer_functions; +#define GL_MESA_texture_const_bandwidth 1 +GLAD_API_CALL int GLAD_GL_MESA_texture_const_bandwidth; #define GL_MESA_tile_raster_order 1 GLAD_API_CALL int GLAD_GL_MESA_tile_raster_order; #define GL_MESA_window_pos 1 @@ -6886,8 +6962,6 @@ GLAD_API_CALL int GLAD_GL_EXT_draw_elements_base_vertex; GLAD_API_CALL int GLAD_GL_EXT_draw_transform_feedback; #define GL_EXT_float_blend 1 GLAD_API_CALL int GLAD_GL_EXT_float_blend; -#define GL_EXT_fragment_shading_rate 1 -GLAD_API_CALL int GLAD_GL_EXT_fragment_shading_rate; #define GL_EXT_geometry_point_size 1 GLAD_API_CALL int GLAD_GL_EXT_geometry_point_size; #define GL_EXT_geometry_shader 1 @@ -6942,6 +7016,8 @@ GLAD_API_CALL int GLAD_GL_EXT_shader_pixel_local_storage; GLAD_API_CALL int GLAD_GL_EXT_shader_pixel_local_storage2; #define GL_EXT_shader_texture_lod 1 GLAD_API_CALL int GLAD_GL_EXT_shader_texture_lod; +#define GL_EXT_shader_texture_samples 1 +GLAD_API_CALL int GLAD_GL_EXT_shader_texture_samples; #define GL_EXT_shadow_samplers 1 GLAD_API_CALL int GLAD_GL_EXT_shadow_samplers; #define GL_EXT_sparse_texture 1 @@ -6986,6 +7062,10 @@ GLAD_API_CALL int GLAD_GL_EXT_texture_view; GLAD_API_CALL int GLAD_GL_EXT_unpack_subimage; #define GL_FJ_shader_binary_GCCSO 1 GLAD_API_CALL int GLAD_GL_FJ_shader_binary_GCCSO; +#define GL_HUAWEI_program_binary 1 +GLAD_API_CALL int GLAD_GL_HUAWEI_program_binary; +#define GL_HUAWEI_shader_binary 1 +GLAD_API_CALL int GLAD_GL_HUAWEI_shader_binary; #define GL_IMG_bindless_texture 1 GLAD_API_CALL int GLAD_GL_IMG_bindless_texture; #define GL_IMG_framebuffer_downsample 1 @@ -7653,6 +7733,8 @@ typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mod typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); typedef void (GLAD_API_PTR *PFNGLDRAWMESHARRAYSSUNPROC)(GLenum mode, GLint first, GLsizei count, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLDRAWMESHTASKSEXTPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +typedef void (GLAD_API_PTR *PFNGLDRAWMESHTASKSINDIRECTEXTPROC)(GLintptr indirect); typedef void (GLAD_API_PTR *PFNGLDRAWMESHTASKSINDIRECTNVPROC)(GLintptr indirect); typedef void (GLAD_API_PTR *PFNGLDRAWMESHTASKSNVPROC)(GLuint first, GLuint count); typedef void (GLAD_API_PTR *PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); @@ -7767,6 +7849,7 @@ typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC)(GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat * values); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERSHADINGRATEEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint baseLayer, GLsizei numLayers, GLsizei texelWidth, GLsizei texelHeight); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); @@ -7902,6 +7985,7 @@ typedef void (GLAD_API_PTR *PFNGLGETFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenu typedef void (GLAD_API_PTR *PFNGLGETFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, GLfloat * params); typedef void (GLAD_API_PTR *PFNGLGETFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETFRAGMENTSHADINGRATESEXTPROC)(GLsizei samples, GLsizei maxCount, GLsizei * count, GLenum * shadingRates); typedef void (GLAD_API_PTR *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC)(GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat * values); @@ -8421,7 +8505,9 @@ typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)(GLenum mode, typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC)(GLenum mode, GLenum type, const void * indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTEXTPROC)(GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); typedef void (GLAD_API_PTR *PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC)(GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWMESHTASKSINDIRECTEXTPROC)(GLintptr indirect, GLsizei drawcount, GLsizei stride); typedef void (GLAD_API_PTR *PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC)(GLintptr indirect, GLsizei drawcount, GLsizei stride); typedef void (GLAD_API_PTR *PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount); typedef void (GLAD_API_PTR *PFNGLMULTIMODEDRAWARRAYSIBMPROC)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); @@ -8982,6 +9068,8 @@ typedef void (GLAD_API_PTR *PFNGLSHADEROP3EXTPROC)(GLenum op, GLuint res, GLuint typedef void (GLAD_API_PTR *PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length); typedef void (GLAD_API_PTR *PFNGLSHADERSOURCEARBPROC)(GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint * length); typedef void (GLAD_API_PTR *PFNGLSHADERSTORAGEBLOCKBINDINGPROC)(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +typedef void (GLAD_API_PTR *PFNGLSHADINGRATECOMBINEROPSEXTPROC)(GLenum combinerOp0, GLenum combinerOp1); +typedef void (GLAD_API_PTR *PFNGLSHADINGRATEEXTPROC)(GLenum rate); typedef void (GLAD_API_PTR *PFNGLSHADINGRATEIMAGEBARRIERNVPROC)(GLboolean synchronize); typedef void (GLAD_API_PTR *PFNGLSHADINGRATEIMAGEPALETTENVPROC)(GLuint viewport, GLuint first, GLsizei count, const GLenum * rates); typedef void (GLAD_API_PTR *PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC)(GLenum rate, GLuint samples, const GLint * locations); @@ -9835,7 +9923,6 @@ typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC)(void); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC)(GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint * providedFeatures); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC)(GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC)(GLuint target, GLsizei size); -typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERSHADINGRATEEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint baseLayer, GLsizei numLayers, GLsizei texelWidth, GLsizei texelHeight); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE2DDOWNSAMPLEIMGPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); @@ -9853,7 +9940,6 @@ typedef void (GLAD_API_PTR *PFNGLGETDRIVERCONTROLSQCOMPROC)(GLint * num, GLsizei typedef void (GLAD_API_PTR *PFNGLGETFLOATI_VNVPROC)(GLenum target, GLuint index, GLfloat * data); typedef void (GLAD_API_PTR *PFNGLGETFLOATI_VOESPROC)(GLenum target, GLuint index, GLfloat * data); typedef GLint (GLAD_API_PTR *PFNGLGETFRAGDATAINDEXEXTPROC)(GLuint program, const GLchar * name); -typedef void (GLAD_API_PTR *PFNGLGETFRAGMENTSHADINGRATESEXTPROC)(GLsizei samples, GLsizei maxCount, GLsizei * count, GLenum * shadingRates); typedef GLsizei (GLAD_API_PTR *PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC)(GLuint target); typedef GLenum (GLAD_API_PTR *PFNGLGETGRAPHICSRESETSTATUSEXTPROC)(void); typedef GLenum (GLAD_API_PTR *PFNGLGETGRAPHICSRESETSTATUSKHRPROC)(void); @@ -9931,8 +10017,6 @@ typedef void (GLAD_API_PTR *PFNGLSCISSORINDEXEDNVPROC)(GLuint index, GLint left, typedef void (GLAD_API_PTR *PFNGLSCISSORINDEXEDOESPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); typedef void (GLAD_API_PTR *PFNGLSCISSORINDEXEDVNVPROC)(GLuint index, const GLint * v); typedef void (GLAD_API_PTR *PFNGLSCISSORINDEXEDVOESPROC)(GLuint index, const GLint * v); -typedef void (GLAD_API_PTR *PFNGLSHADINGRATECOMBINEROPSEXTPROC)(GLenum combinerOp0, GLenum combinerOp1); -typedef void (GLAD_API_PTR *PFNGLSHADINGRATEEXTPROC)(GLenum rate); typedef void (GLAD_API_PTR *PFNGLSHADINGRATEQCOMPROC)(GLenum rate); typedef void (GLAD_API_PTR *PFNGLSTARTTILINGQCOMPROC)(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); typedef void (GLAD_API_PTR *PFNGLTEXBUFFEROESPROC)(GLenum target, GLenum internalformat, GLuint buffer); @@ -10843,6 +10927,10 @@ GLAD_API_CALL PFNGLDRAWELEMENTSINSTANCEDEXTPROC glad_glDrawElementsInstancedEXT; #define glDrawElementsInstancedEXT glad_glDrawElementsInstancedEXT GLAD_API_CALL PFNGLDRAWMESHARRAYSSUNPROC glad_glDrawMeshArraysSUN; #define glDrawMeshArraysSUN glad_glDrawMeshArraysSUN +GLAD_API_CALL PFNGLDRAWMESHTASKSEXTPROC glad_glDrawMeshTasksEXT; +#define glDrawMeshTasksEXT glad_glDrawMeshTasksEXT +GLAD_API_CALL PFNGLDRAWMESHTASKSINDIRECTEXTPROC glad_glDrawMeshTasksIndirectEXT; +#define glDrawMeshTasksIndirectEXT glad_glDrawMeshTasksIndirectEXT GLAD_API_CALL PFNGLDRAWMESHTASKSINDIRECTNVPROC glad_glDrawMeshTasksIndirectNV; #define glDrawMeshTasksIndirectNV glad_glDrawMeshTasksIndirectNV GLAD_API_CALL PFNGLDRAWMESHTASKSNVPROC glad_glDrawMeshTasksNV; @@ -11071,6 +11159,8 @@ GLAD_API_CALL PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glFramebufferSampleLo #define glFramebufferSampleLocationsfvNV glad_glFramebufferSampleLocationsfvNV GLAD_API_CALL PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC glad_glFramebufferSamplePositionsfvAMD; #define glFramebufferSamplePositionsfvAMD glad_glFramebufferSamplePositionsfvAMD +GLAD_API_CALL PFNGLFRAMEBUFFERSHADINGRATEEXTPROC glad_glFramebufferShadingRateEXT; +#define glFramebufferShadingRateEXT glad_glFramebufferShadingRateEXT GLAD_API_CALL PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; #define glFramebufferTexture glad_glFramebufferTexture GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; @@ -11341,6 +11431,8 @@ GLAD_API_CALL PFNGLGETFRAGMENTMATERIALFVSGIXPROC glad_glGetFragmentMaterialfvSGI #define glGetFragmentMaterialfvSGIX glad_glGetFragmentMaterialfvSGIX GLAD_API_CALL PFNGLGETFRAGMENTMATERIALIVSGIXPROC glad_glGetFragmentMaterialivSGIX; #define glGetFragmentMaterialivSGIX glad_glGetFragmentMaterialivSGIX +GLAD_API_CALL PFNGLGETFRAGMENTSHADINGRATESEXTPROC glad_glGetFragmentShadingRatesEXT; +#define glGetFragmentShadingRatesEXT glad_glGetFragmentShadingRatesEXT GLAD_API_CALL PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; #define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv GLAD_API_CALL PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT; @@ -12379,8 +12471,12 @@ GLAD_API_CALL PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC glad_glMultiDrawEleme #define glMultiDrawElementsIndirectBindlessNV glad_glMultiDrawElementsIndirectBindlessNV GLAD_API_CALL PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glad_glMultiDrawElementsIndirectCountARB; #define glMultiDrawElementsIndirectCountARB glad_glMultiDrawElementsIndirectCountARB +GLAD_API_CALL PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTEXTPROC glad_glMultiDrawMeshTasksIndirectCountEXT; +#define glMultiDrawMeshTasksIndirectCountEXT glad_glMultiDrawMeshTasksIndirectCountEXT GLAD_API_CALL PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC glad_glMultiDrawMeshTasksIndirectCountNV; #define glMultiDrawMeshTasksIndirectCountNV glad_glMultiDrawMeshTasksIndirectCountNV +GLAD_API_CALL PFNGLMULTIDRAWMESHTASKSINDIRECTEXTPROC glad_glMultiDrawMeshTasksIndirectEXT; +#define glMultiDrawMeshTasksIndirectEXT glad_glMultiDrawMeshTasksIndirectEXT GLAD_API_CALL PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC glad_glMultiDrawMeshTasksIndirectNV; #define glMultiDrawMeshTasksIndirectNV glad_glMultiDrawMeshTasksIndirectNV GLAD_API_CALL PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC glad_glMultiDrawRangeElementArrayAPPLE; @@ -13501,6 +13597,10 @@ GLAD_API_CALL PFNGLSHADERSOURCEARBPROC glad_glShaderSourceARB; #define glShaderSourceARB glad_glShaderSourceARB GLAD_API_CALL PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding; #define glShaderStorageBlockBinding glad_glShaderStorageBlockBinding +GLAD_API_CALL PFNGLSHADINGRATECOMBINEROPSEXTPROC glad_glShadingRateCombinerOpsEXT; +#define glShadingRateCombinerOpsEXT glad_glShadingRateCombinerOpsEXT +GLAD_API_CALL PFNGLSHADINGRATEEXTPROC glad_glShadingRateEXT; +#define glShadingRateEXT glad_glShadingRateEXT GLAD_API_CALL PFNGLSHADINGRATEIMAGEBARRIERNVPROC glad_glShadingRateImageBarrierNV; #define glShadingRateImageBarrierNV glad_glShadingRateImageBarrierNV GLAD_API_CALL PFNGLSHADINGRATEIMAGEPALETTENVPROC glad_glShadingRateImagePaletteNV; @@ -15207,8 +15307,6 @@ GLAD_API_CALL PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC glad_glFramebufferFove #define glFramebufferFoveationParametersQCOM glad_glFramebufferFoveationParametersQCOM GLAD_API_CALL PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC glad_glFramebufferPixelLocalStorageSizeEXT; #define glFramebufferPixelLocalStorageSizeEXT glad_glFramebufferPixelLocalStorageSizeEXT -GLAD_API_CALL PFNGLFRAMEBUFFERSHADINGRATEEXTPROC glad_glFramebufferShadingRateEXT; -#define glFramebufferShadingRateEXT glad_glFramebufferShadingRateEXT GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE2DDOWNSAMPLEIMGPROC glad_glFramebufferTexture2DDownsampleIMG; #define glFramebufferTexture2DDownsampleIMG glad_glFramebufferTexture2DDownsampleIMG GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC glad_glFramebufferTexture2DMultisampleEXT; @@ -15243,8 +15341,6 @@ GLAD_API_CALL PFNGLGETFLOATI_VOESPROC glad_glGetFloati_vOES; #define glGetFloati_vOES glad_glGetFloati_vOES GLAD_API_CALL PFNGLGETFRAGDATAINDEXEXTPROC glad_glGetFragDataIndexEXT; #define glGetFragDataIndexEXT glad_glGetFragDataIndexEXT -GLAD_API_CALL PFNGLGETFRAGMENTSHADINGRATESEXTPROC glad_glGetFragmentShadingRatesEXT; -#define glGetFragmentShadingRatesEXT glad_glGetFragmentShadingRatesEXT GLAD_API_CALL PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC glad_glGetFramebufferPixelLocalStorageSizeEXT; #define glGetFramebufferPixelLocalStorageSizeEXT glad_glGetFramebufferPixelLocalStorageSizeEXT GLAD_API_CALL PFNGLGETGRAPHICSRESETSTATUSEXTPROC glad_glGetGraphicsResetStatusEXT; @@ -15399,10 +15495,6 @@ GLAD_API_CALL PFNGLSCISSORINDEXEDVNVPROC glad_glScissorIndexedvNV; #define glScissorIndexedvNV glad_glScissorIndexedvNV GLAD_API_CALL PFNGLSCISSORINDEXEDVOESPROC glad_glScissorIndexedvOES; #define glScissorIndexedvOES glad_glScissorIndexedvOES -GLAD_API_CALL PFNGLSHADINGRATECOMBINEROPSEXTPROC glad_glShadingRateCombinerOpsEXT; -#define glShadingRateCombinerOpsEXT glad_glShadingRateCombinerOpsEXT -GLAD_API_CALL PFNGLSHADINGRATEEXTPROC glad_glShadingRateEXT; -#define glShadingRateEXT glad_glShadingRateEXT GLAD_API_CALL PFNGLSHADINGRATEQCOMPROC glad_glShadingRateQCOM; #define glShadingRateQCOM glad_glShadingRateQCOM GLAD_API_CALL PFNGLSTARTTILINGQCOMPROC glad_glStartTilingQCOM; diff --git a/3rdparty/glad/include/glad/vulkan.h b/3rdparty/glad/include/glad/vulkan.h new file mode 100644 index 000000000000..b6a145447be5 --- /dev/null +++ b/3rdparty/glad/include/glad/vulkan.h @@ -0,0 +1,22075 @@ +/** + * Loader generated by glad 2.0.8 on Sat Nov 8 08:58:00 2025 + * + * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 + * + * Generator: C/C++ + * Specification: vk + * Extensions: 426 + * + * APIs: + * - vulkan=1.4 + * + * Options: + * - ALIAS = True + * - DEBUG = False + * - HEADER_ONLY = False + * - LOADER = True + * - MX = False + * - ON_DEMAND = False + * + * Commandline: + * --api='vulkan=1.4' --extensions='VK_AMDX_dense_geometry_format,VK_AMDX_shader_enqueue,VK_AMD_anti_lag,VK_AMD_buffer_marker,VK_AMD_device_coherent_memory,VK_AMD_display_native_hdr,VK_AMD_draw_indirect_count,VK_AMD_gcn_shader,VK_AMD_gpu_shader_half_float,VK_AMD_gpu_shader_int16,VK_AMD_memory_overallocation_behavior,VK_AMD_mixed_attachment_samples,VK_AMD_negative_viewport_height,VK_AMD_pipeline_compiler_control,VK_AMD_rasterization_order,VK_AMD_shader_ballot,VK_AMD_shader_core_properties,VK_AMD_shader_core_properties2,VK_AMD_shader_early_and_late_fragment_tests,VK_AMD_shader_explicit_vertex_parameter,VK_AMD_shader_fragment_mask,VK_AMD_shader_image_load_store_lod,VK_AMD_shader_info,VK_AMD_shader_trinary_minmax,VK_AMD_texture_gather_bias_lod,VK_ANDROID_external_format_resolve,VK_ANDROID_external_memory_android_hardware_buffer,VK_ARM_data_graph,VK_ARM_format_pack,VK_ARM_pipeline_opacity_micromap,VK_ARM_rasterization_order_attachment_access,VK_ARM_render_pass_striped,VK_ARM_scheduling_controls,VK_ARM_shader_core_builtins,VK_ARM_shader_core_properties,VK_ARM_tensors,VK_EXT_4444_formats,VK_EXT_acquire_drm_display,VK_EXT_acquire_xlib_display,VK_EXT_astc_decode_mode,VK_EXT_attachment_feedback_loop_dynamic_state,VK_EXT_attachment_feedback_loop_layout,VK_EXT_blend_operation_advanced,VK_EXT_border_color_swizzle,VK_EXT_buffer_device_address,VK_EXT_calibrated_timestamps,VK_EXT_color_write_enable,VK_EXT_conditional_rendering,VK_EXT_conservative_rasterization,VK_EXT_custom_border_color,VK_EXT_debug_marker,VK_EXT_debug_report,VK_EXT_debug_utils,VK_EXT_depth_bias_control,VK_EXT_depth_clamp_control,VK_EXT_depth_clamp_zero_one,VK_EXT_depth_clip_control,VK_EXT_depth_clip_enable,VK_EXT_depth_range_unrestricted,VK_EXT_descriptor_buffer,VK_EXT_descriptor_indexing,VK_EXT_device_address_binding_report,VK_EXT_device_fault,VK_EXT_device_generated_commands,VK_EXT_device_memory_report,VK_EXT_direct_mode_display,VK_EXT_directfb_surface,VK_EXT_discard_rectangles,VK_EXT_display_control,VK_EXT_display_surface_counter,VK_EXT_dynamic_rendering_unused_attachments,VK_EXT_extended_dynamic_state,VK_EXT_extended_dynamic_state2,VK_EXT_extended_dynamic_state3,VK_EXT_external_memory_acquire_unmodified,VK_EXT_external_memory_dma_buf,VK_EXT_external_memory_host,VK_EXT_external_memory_metal,VK_EXT_filter_cubic,VK_EXT_fragment_density_map,VK_EXT_fragment_density_map2,VK_EXT_fragment_density_map_offset,VK_EXT_fragment_shader_interlock,VK_EXT_frame_boundary,VK_EXT_full_screen_exclusive,VK_EXT_global_priority,VK_EXT_global_priority_query,VK_EXT_graphics_pipeline_library,VK_EXT_hdr_metadata,VK_EXT_headless_surface,VK_EXT_host_image_copy,VK_EXT_host_query_reset,VK_EXT_image_2d_view_of_3d,VK_EXT_image_compression_control,VK_EXT_image_compression_control_swapchain,VK_EXT_image_drm_format_modifier,VK_EXT_image_robustness,VK_EXT_image_sliced_view_of_3d,VK_EXT_image_view_min_lod,VK_EXT_index_type_uint8,VK_EXT_inline_uniform_block,VK_EXT_layer_settings,VK_EXT_legacy_dithering,VK_EXT_legacy_vertex_attributes,VK_EXT_line_rasterization,VK_EXT_load_store_op_none,VK_EXT_map_memory_placed,VK_EXT_memory_budget,VK_EXT_memory_priority,VK_EXT_mesh_shader,VK_EXT_metal_objects,VK_EXT_metal_surface,VK_EXT_multi_draw,VK_EXT_multisampled_render_to_single_sampled,VK_EXT_mutable_descriptor_type,VK_EXT_nested_command_buffer,VK_EXT_non_seamless_cube_map,VK_EXT_opacity_micromap,VK_EXT_pageable_device_local_memory,VK_EXT_pci_bus_info,VK_EXT_physical_device_drm,VK_EXT_pipeline_creation_cache_control,VK_EXT_pipeline_creation_feedback,VK_EXT_pipeline_library_group_handles,VK_EXT_pipeline_properties,VK_EXT_pipeline_protected_access,VK_EXT_pipeline_robustness,VK_EXT_post_depth_coverage,VK_EXT_present_mode_fifo_latest_ready,VK_EXT_primitive_topology_list_restart,VK_EXT_primitives_generated_query,VK_EXT_private_data,VK_EXT_provoking_vertex,VK_EXT_queue_family_foreign,VK_EXT_rasterization_order_attachment_access,VK_EXT_rgba10x6_formats,VK_EXT_robustness2,VK_EXT_sample_locations,VK_EXT_sampler_filter_minmax,VK_EXT_scalar_block_layout,VK_EXT_separate_stencil_usage,VK_EXT_shader_atomic_float,VK_EXT_shader_atomic_float2,VK_EXT_shader_demote_to_helper_invocation,VK_EXT_shader_float8,VK_EXT_shader_image_atomic_int64,VK_EXT_shader_module_identifier,VK_EXT_shader_object,VK_EXT_shader_replicated_composites,VK_EXT_shader_stencil_export,VK_EXT_shader_subgroup_ballot,VK_EXT_shader_subgroup_vote,VK_EXT_shader_tile_image,VK_EXT_shader_viewport_index_layer,VK_EXT_subgroup_size_control,VK_EXT_subpass_merge_feedback,VK_EXT_surface_maintenance1,VK_EXT_swapchain_colorspace,VK_EXT_swapchain_maintenance1,VK_EXT_texel_buffer_alignment,VK_EXT_texture_compression_astc_hdr,VK_EXT_tooling_info,VK_EXT_transform_feedback,VK_EXT_validation_cache,VK_EXT_validation_features,VK_EXT_validation_flags,VK_EXT_vertex_attribute_divisor,VK_EXT_vertex_attribute_robustness,VK_EXT_vertex_input_dynamic_state,VK_EXT_ycbcr_2plane_444_formats,VK_EXT_ycbcr_image_arrays,VK_EXT_zero_initialize_device_memory,VK_FUCHSIA_buffer_collection,VK_FUCHSIA_external_memory,VK_FUCHSIA_external_semaphore,VK_FUCHSIA_imagepipe_surface,VK_GGP_frame_token,VK_GGP_stream_descriptor_surface,VK_GOOGLE_decorate_string,VK_GOOGLE_display_timing,VK_GOOGLE_hlsl_functionality1,VK_GOOGLE_surfaceless_query,VK_GOOGLE_user_type,VK_HUAWEI_cluster_culling_shader,VK_HUAWEI_hdr_vivid,VK_HUAWEI_invocation_mask,VK_HUAWEI_subpass_shading,VK_IMG_filter_cubic,VK_IMG_format_pvrtc,VK_IMG_relaxed_line_rasterization,VK_INTEL_performance_query,VK_INTEL_shader_integer_functions2,VK_KHR_16bit_storage,VK_KHR_8bit_storage,VK_KHR_acceleration_structure,VK_KHR_android_surface,VK_KHR_bind_memory2,VK_KHR_buffer_device_address,VK_KHR_calibrated_timestamps,VK_KHR_compute_shader_derivatives,VK_KHR_cooperative_matrix,VK_KHR_copy_commands2,VK_KHR_copy_memory_indirect,VK_KHR_create_renderpass2,VK_KHR_dedicated_allocation,VK_KHR_deferred_host_operations,VK_KHR_depth_clamp_zero_one,VK_KHR_depth_stencil_resolve,VK_KHR_descriptor_update_template,VK_KHR_device_group,VK_KHR_device_group_creation,VK_KHR_display,VK_KHR_display_swapchain,VK_KHR_draw_indirect_count,VK_KHR_driver_properties,VK_KHR_dynamic_rendering,VK_KHR_dynamic_rendering_local_read,VK_KHR_external_fence,VK_KHR_external_fence_capabilities,VK_KHR_external_fence_fd,VK_KHR_external_fence_win32,VK_KHR_external_memory,VK_KHR_external_memory_capabilities,VK_KHR_external_memory_fd,VK_KHR_external_memory_win32,VK_KHR_external_semaphore,VK_KHR_external_semaphore_capabilities,VK_KHR_external_semaphore_fd,VK_KHR_external_semaphore_win32,VK_KHR_format_feature_flags2,VK_KHR_fragment_shader_barycentric,VK_KHR_fragment_shading_rate,VK_KHR_get_display_properties2,VK_KHR_get_memory_requirements2,VK_KHR_get_physical_device_properties2,VK_KHR_get_surface_capabilities2,VK_KHR_global_priority,VK_KHR_image_format_list,VK_KHR_imageless_framebuffer,VK_KHR_incremental_present,VK_KHR_index_type_uint8,VK_KHR_line_rasterization,VK_KHR_load_store_op_none,VK_KHR_maintenance1,VK_KHR_maintenance2,VK_KHR_maintenance3,VK_KHR_maintenance4,VK_KHR_maintenance5,VK_KHR_maintenance6,VK_KHR_maintenance7,VK_KHR_maintenance8,VK_KHR_maintenance9,VK_KHR_map_memory2,VK_KHR_multiview,VK_KHR_performance_query,VK_KHR_pipeline_binary,VK_KHR_pipeline_executable_properties,VK_KHR_pipeline_library,VK_KHR_portability_enumeration,VK_KHR_portability_subset,VK_KHR_present_id,VK_KHR_present_id2,VK_KHR_present_mode_fifo_latest_ready,VK_KHR_present_wait,VK_KHR_present_wait2,VK_KHR_push_descriptor,VK_KHR_ray_query,VK_KHR_ray_tracing_maintenance1,VK_KHR_ray_tracing_pipeline,VK_KHR_ray_tracing_position_fetch,VK_KHR_relaxed_block_layout,VK_KHR_robustness2,VK_KHR_sampler_mirror_clamp_to_edge,VK_KHR_sampler_ycbcr_conversion,VK_KHR_separate_depth_stencil_layouts,VK_KHR_shader_atomic_int64,VK_KHR_shader_bfloat16,VK_KHR_shader_clock,VK_KHR_shader_draw_parameters,VK_KHR_shader_expect_assume,VK_KHR_shader_float16_int8,VK_KHR_shader_float_controls,VK_KHR_shader_float_controls2,VK_KHR_shader_fma,VK_KHR_shader_integer_dot_product,VK_KHR_shader_maximal_reconvergence,VK_KHR_shader_non_semantic_info,VK_KHR_shader_quad_control,VK_KHR_shader_relaxed_extended_instruction,VK_KHR_shader_subgroup_extended_types,VK_KHR_shader_subgroup_rotate,VK_KHR_shader_subgroup_uniform_control_flow,VK_KHR_shader_terminate_invocation,VK_KHR_shader_untyped_pointers,VK_KHR_shared_presentable_image,VK_KHR_spirv_1_4,VK_KHR_storage_buffer_storage_class,VK_KHR_surface,VK_KHR_surface_maintenance1,VK_KHR_surface_protected_capabilities,VK_KHR_swapchain,VK_KHR_swapchain_maintenance1,VK_KHR_swapchain_mutable_format,VK_KHR_synchronization2,VK_KHR_timeline_semaphore,VK_KHR_unified_image_layouts,VK_KHR_uniform_buffer_standard_layout,VK_KHR_variable_pointers,VK_KHR_vertex_attribute_divisor,VK_KHR_video_decode_av1,VK_KHR_video_decode_h264,VK_KHR_video_decode_h265,VK_KHR_video_decode_queue,VK_KHR_video_decode_vp9,VK_KHR_video_encode_av1,VK_KHR_video_encode_h264,VK_KHR_video_encode_h265,VK_KHR_video_encode_intra_refresh,VK_KHR_video_encode_quantization_map,VK_KHR_video_encode_queue,VK_KHR_video_maintenance1,VK_KHR_video_maintenance2,VK_KHR_video_queue,VK_KHR_vulkan_memory_model,VK_KHR_wayland_surface,VK_KHR_win32_keyed_mutex,VK_KHR_win32_surface,VK_KHR_workgroup_memory_explicit_layout,VK_KHR_xcb_surface,VK_KHR_xlib_surface,VK_KHR_zero_initialize_workgroup_memory,VK_LUNARG_direct_driver_loading,VK_MESA_image_alignment_control,VK_MSFT_layered_driver,VK_MVK_ios_surface,VK_MVK_macos_surface,VK_NN_vi_surface,VK_NVX_binary_import,VK_NVX_image_view_handle,VK_NVX_multiview_per_view_attributes,VK_NV_acquire_winrt_display,VK_NV_clip_space_w_scaling,VK_NV_cluster_acceleration_structure,VK_NV_command_buffer_inheritance,VK_NV_compute_shader_derivatives,VK_NV_cooperative_matrix,VK_NV_cooperative_matrix2,VK_NV_cooperative_vector,VK_NV_copy_memory_indirect,VK_NV_corner_sampled_image,VK_NV_coverage_reduction_mode,VK_NV_cuda_kernel_launch,VK_NV_dedicated_allocation,VK_NV_dedicated_allocation_image_aliasing,VK_NV_descriptor_pool_overallocation,VK_NV_device_diagnostic_checkpoints,VK_NV_device_diagnostics_config,VK_NV_device_generated_commands,VK_NV_device_generated_commands_compute,VK_NV_displacement_micromap,VK_NV_display_stereo,VK_NV_extended_sparse_address_space,VK_NV_external_compute_queue,VK_NV_external_memory,VK_NV_external_memory_capabilities,VK_NV_external_memory_rdma,VK_NV_external_memory_win32,VK_NV_fill_rectangle,VK_NV_fragment_coverage_to_color,VK_NV_fragment_shader_barycentric,VK_NV_fragment_shading_rate_enums,VK_NV_framebuffer_mixed_samples,VK_NV_geometry_shader_passthrough,VK_NV_glsl_shader,VK_NV_inherited_viewport_scissor,VK_NV_linear_color_attachment,VK_NV_low_latency,VK_NV_low_latency2,VK_NV_memory_decompression,VK_NV_mesh_shader,VK_NV_optical_flow,VK_NV_partitioned_acceleration_structure,VK_NV_per_stage_descriptor_set,VK_NV_present_barrier,VK_NV_present_metering,VK_NV_raw_access_chains,VK_NV_ray_tracing,VK_NV_ray_tracing_invocation_reorder,VK_NV_ray_tracing_linear_swept_spheres,VK_NV_ray_tracing_motion_blur,VK_NV_ray_tracing_validation,VK_NV_representative_fragment_test,VK_NV_sample_mask_override_coverage,VK_NV_scissor_exclusive,VK_NV_shader_atomic_float16_vector,VK_NV_shader_image_footprint,VK_NV_shader_sm_builtins,VK_NV_shader_subgroup_partitioned,VK_NV_shading_rate_image,VK_NV_viewport_array2,VK_NV_viewport_swizzle,VK_NV_win32_keyed_mutex,VK_OHOS_surface,VK_QCOM_filter_cubic_clamp,VK_QCOM_filter_cubic_weights,VK_QCOM_fragment_density_map_offset,VK_QCOM_image_processing,VK_QCOM_image_processing2,VK_QCOM_multiview_per_view_render_areas,VK_QCOM_multiview_per_view_viewports,VK_QCOM_render_pass_shader_resolve,VK_QCOM_render_pass_store_ops,VK_QCOM_render_pass_transform,VK_QCOM_rotated_copy_commands,VK_QCOM_tile_memory_heap,VK_QCOM_tile_properties,VK_QCOM_tile_shading,VK_QCOM_ycbcr_degamma,VK_QNX_external_memory_screen_buffer,VK_QNX_screen_surface,VK_SEC_amigo_profiling,VK_SEC_pipeline_cache_incremental_mode,VK_VALVE_descriptor_set_host_mapping,VK_VALVE_fragment_density_map_layered,VK_VALVE_mutable_descriptor_type,VK_VALVE_video_encode_rgb_conversion' c --alias --loader + * + * Online: + * http://glad.sh/#api=vulkan%3D1.4&generator=c&options=ALIAS%2CLOADER + * + */ + +#ifndef GLAD_VULKAN_H_ +#define GLAD_VULKAN_H_ + +#ifdef VULKAN_H_ + #error header already included (API: vulkan), remove previous include! +#endif +#define VULKAN_H_ 1 + +#ifdef VULKAN_CORE_H_ + #error header already included (API: vulkan), remove previous include! +#endif +#define VULKAN_CORE_H_ 1 + + +#define GLAD_VULKAN +#define GLAD_OPTION_VULKAN_ALIAS +#define GLAD_OPTION_VULKAN_LOADER + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef GLAD_PLATFORM_H_ +#define GLAD_PLATFORM_H_ + +#ifndef GLAD_PLATFORM_WIN32 + #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__) + #define GLAD_PLATFORM_WIN32 1 + #else + #define GLAD_PLATFORM_WIN32 0 + #endif +#endif + +#ifndef GLAD_PLATFORM_APPLE + #ifdef __APPLE__ + #define GLAD_PLATFORM_APPLE 1 + #else + #define GLAD_PLATFORM_APPLE 0 + #endif +#endif + +#ifndef GLAD_PLATFORM_EMSCRIPTEN + #ifdef __EMSCRIPTEN__ + #define GLAD_PLATFORM_EMSCRIPTEN 1 + #else + #define GLAD_PLATFORM_EMSCRIPTEN 0 + #endif +#endif + +#ifndef GLAD_PLATFORM_UWP + #if defined(_MSC_VER) && !defined(GLAD_INTERNAL_HAVE_WINAPIFAMILY) + #ifdef __has_include + #if __has_include() + #define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 + #endif + #elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ + #define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 + #endif + #endif + + #ifdef GLAD_INTERNAL_HAVE_WINAPIFAMILY + #include + #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) + #define GLAD_PLATFORM_UWP 1 + #endif + #endif + + #ifndef GLAD_PLATFORM_UWP + #define GLAD_PLATFORM_UWP 0 + #endif +#endif + +#ifdef __GNUC__ + #define GLAD_GNUC_EXTENSION __extension__ +#else + #define GLAD_GNUC_EXTENSION +#endif + +#define GLAD_UNUSED(x) (void)(x) + +#ifndef GLAD_API_CALL + #if defined(GLAD_API_CALL_EXPORT) + #if GLAD_PLATFORM_WIN32 || defined(__CYGWIN__) + #if defined(GLAD_API_CALL_EXPORT_BUILD) + #if defined(__GNUC__) + #define GLAD_API_CALL __attribute__ ((dllexport)) extern + #else + #define GLAD_API_CALL __declspec(dllexport) extern + #endif + #else + #if defined(__GNUC__) + #define GLAD_API_CALL __attribute__ ((dllimport)) extern + #else + #define GLAD_API_CALL __declspec(dllimport) extern + #endif + #endif + #elif defined(__GNUC__) && defined(GLAD_API_CALL_EXPORT_BUILD) + #define GLAD_API_CALL __attribute__ ((visibility ("default"))) extern + #else + #define GLAD_API_CALL extern + #endif + #else + #define GLAD_API_CALL extern + #endif +#endif + +#ifdef APIENTRY + #define GLAD_API_PTR APIENTRY +#elif GLAD_PLATFORM_WIN32 + #define GLAD_API_PTR __stdcall +#else + #define GLAD_API_PTR +#endif + +#ifndef GLAPI +#define GLAPI GLAD_API_CALL +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY GLAD_API_PTR +#endif + +#define GLAD_MAKE_VERSION(major, minor) (major * 10000 + minor) +#define GLAD_VERSION_MAJOR(version) (version / 10000) +#define GLAD_VERSION_MINOR(version) (version % 10000) + +#define GLAD_GENERATOR_VERSION "2.0.8" + +typedef void (*GLADapiproc)(void); + +typedef GLADapiproc (*GLADloadfunc)(const char *name); +typedef GLADapiproc (*GLADuserptrloadfunc)(void *userptr, const char *name); + +typedef void (*GLADprecallback)(const char *name, GLADapiproc apiproc, int len_args, ...); +typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apiproc, int len_args, ...); + +#endif /* GLAD_PLATFORM_H_ */ + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_AMDX_DENSE_GEOMETRY_FORMAT_EXTENSION_NAME "VK_AMDX_dense_geometry_format" + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_AMDX_DENSE_GEOMETRY_FORMAT_SPEC_VERSION 1 + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_AMDX_SHADER_ENQUEUE_EXTENSION_NAME "VK_AMDX_shader_enqueue" + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_AMDX_SHADER_ENQUEUE_SPEC_VERSION 2 + +#endif +#define VK_AMD_ANTI_LAG_EXTENSION_NAME "VK_AMD_anti_lag" +#define VK_AMD_ANTI_LAG_SPEC_VERSION 1 +#define VK_AMD_BUFFER_MARKER_EXTENSION_NAME "VK_AMD_buffer_marker" +#define VK_AMD_BUFFER_MARKER_SPEC_VERSION 1 +#define VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME "VK_AMD_device_coherent_memory" +#define VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION 1 +#define VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME "VK_AMD_display_native_hdr" +#define VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION 1 +#define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count" +#define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 2 +#define VK_AMD_GCN_SHADER_EXTENSION_NAME "VK_AMD_gcn_shader" +#define VK_AMD_GCN_SHADER_SPEC_VERSION 1 +#define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float" +#define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 2 +#define VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME "VK_AMD_gpu_shader_int16" +#define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 2 +#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME "VK_AMD_memory_overallocation_behavior" +#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION 1 +#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME "VK_AMD_mixed_attachment_samples" +#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION 1 +#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height" +#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1 +#define VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME "VK_AMD_pipeline_compiler_control" +#define VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION 1 +#define VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME "VK_AMD_rasterization_order" +#define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1 +#define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot" +#define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1 +#define VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME "VK_AMD_shader_core_properties2" +#define VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION 1 +#define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_AMD_shader_core_properties" +#define VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION 2 +#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_EXTENSION_NAME "VK_AMD_shader_early_and_late_fragment_tests" +#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_SPEC_VERSION 1 +#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter" +#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1 +#define VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME "VK_AMD_shader_fragment_mask" +#define VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION 1 +#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME "VK_AMD_shader_image_load_store_lod" +#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION 1 +#define VK_AMD_SHADER_INFO_EXTENSION_NAME "VK_AMD_shader_info" +#define VK_AMD_SHADER_INFO_SPEC_VERSION 1 +#define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax" +#define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1 +#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME "VK_AMD_texture_gather_bias_lod" +#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +#define VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME "VK_ANDROID_external_format_resolve" + +#endif +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +#define VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION 1 + +#endif +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer" + +#endif +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 5 + +#endif +#define VK_ARM_DATA_GRAPH_EXTENSION_NAME "VK_ARM_data_graph" +#define VK_ARM_DATA_GRAPH_SPEC_VERSION 1 +#define VK_ARM_FORMAT_PACK_EXTENSION_NAME "VK_ARM_format_pack" +#define VK_ARM_FORMAT_PACK_SPEC_VERSION 1 +#define VK_ARM_PIPELINE_OPACITY_MICROMAP_EXTENSION_NAME "VK_ARM_pipeline_opacity_micromap" +#define VK_ARM_PIPELINE_OPACITY_MICROMAP_SPEC_VERSION 1 +#define VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME "VK_ARM_rasterization_order_attachment_access" +#define VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION 1 +#define VK_ARM_RENDER_PASS_STRIPED_EXTENSION_NAME "VK_ARM_render_pass_striped" +#define VK_ARM_RENDER_PASS_STRIPED_SPEC_VERSION 1 +#define VK_ARM_SCHEDULING_CONTROLS_EXTENSION_NAME "VK_ARM_scheduling_controls" +#define VK_ARM_SCHEDULING_CONTROLS_SPEC_VERSION 1 +#define VK_ARM_SHADER_CORE_BUILTINS_EXTENSION_NAME "VK_ARM_shader_core_builtins" +#define VK_ARM_SHADER_CORE_BUILTINS_SPEC_VERSION 2 +#define VK_ARM_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_ARM_shader_core_properties" +#define VK_ARM_SHADER_CORE_PROPERTIES_SPEC_VERSION 1 +#define VK_ARM_TENSORS_EXTENSION_NAME "VK_ARM_tensors" +#define VK_ARM_TENSORS_SPEC_VERSION 1 +#define VK_ATTACHMENT_UNUSED (~0U) +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_COMPRESSED_TRIANGLE_FORMAT_DGF1_BYTE_ALIGNMENT_AMDX 128 + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_COMPRESSED_TRIANGLE_FORMAT_DGF1_BYTE_STRIDE_AMDX 128 + +#endif +#define VK_EXT_4444_FORMATS_EXTENSION_NAME "VK_EXT_4444_formats" +#define VK_EXT_4444_FORMATS_SPEC_VERSION 1 +#define VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_drm_display" +#define VK_EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display" + +#endif +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1 + +#endif +#define VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME "VK_EXT_astc_decode_mode" +#define VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION 1 +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_attachment_feedback_loop_dynamic_state" +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_SPEC_VERSION 1 +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME "VK_EXT_attachment_feedback_loop_layout" +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_SPEC_VERSION 2 +#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced" +#define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2 +#define VK_EXT_BORDER_COLOR_SWIZZLE_EXTENSION_NAME "VK_EXT_border_color_swizzle" +#define VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION 1 +#define VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_EXT_buffer_device_address" +#define VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 2 +#define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps" +#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 2 +#define VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME "VK_EXT_color_write_enable" +#define VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION 1 +#define VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME "VK_EXT_conditional_rendering" +#define VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION 2 +#define VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME "VK_EXT_conservative_rasterization" +#define VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION 1 +#define VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME "VK_EXT_custom_border_color" +#define VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION 12 +#define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker" +#define VK_EXT_DEBUG_MARKER_SPEC_VERSION 4 +#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report" +#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 10 +#define VK_EXT_DEBUG_UTILS_EXTENSION_NAME "VK_EXT_debug_utils" +#define VK_EXT_DEBUG_UTILS_SPEC_VERSION 2 +#define VK_EXT_DEPTH_BIAS_CONTROL_EXTENSION_NAME "VK_EXT_depth_bias_control" +#define VK_EXT_DEPTH_BIAS_CONTROL_SPEC_VERSION 1 +#define VK_EXT_DEPTH_CLAMP_CONTROL_EXTENSION_NAME "VK_EXT_depth_clamp_control" +#define VK_EXT_DEPTH_CLAMP_CONTROL_SPEC_VERSION 1 +#define VK_EXT_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME "VK_EXT_depth_clamp_zero_one" +#define VK_EXT_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION 1 +#define VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME "VK_EXT_depth_clip_control" +#define VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION 1 +#define VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME "VK_EXT_depth_clip_enable" +#define VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION 1 +#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME "VK_EXT_depth_range_unrestricted" +#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1 +#define VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME "VK_EXT_descriptor_buffer" +#define VK_EXT_DESCRIPTOR_BUFFER_SPEC_VERSION 1 +#define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing" +#define VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION 2 +#define VK_EXT_DEVICE_ADDRESS_BINDING_REPORT_EXTENSION_NAME "VK_EXT_device_address_binding_report" +#define VK_EXT_DEVICE_ADDRESS_BINDING_REPORT_SPEC_VERSION 1 +#define VK_EXT_DEVICE_FAULT_EXTENSION_NAME "VK_EXT_device_fault" +#define VK_EXT_DEVICE_FAULT_SPEC_VERSION 2 +#define VK_EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_EXT_device_generated_commands" +#define VK_EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 1 +#define VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME "VK_EXT_device_memory_report" +#define VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION 2 +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +#define VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME "VK_EXT_directfb_surface" + +#endif +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +#define VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION 1 + +#endif +#define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display" +#define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1 +#define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles" +#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 2 +#define VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME "VK_EXT_display_control" +#define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1 +#define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter" +#define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1 +#define VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_EXTENSION_NAME "VK_EXT_dynamic_rendering_unused_attachments" +#define VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_SPEC_VERSION 1 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME "VK_EXT_extended_dynamic_state2" +#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME "VK_EXT_extended_dynamic_state3" +#define VK_EXT_EXTENDED_DYNAMIC_STATE_3_SPEC_VERSION 2 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_extended_dynamic_state" +#define VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION 1 +#define VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXTENSION_NAME "VK_EXT_external_memory_acquire_unmodified" +#define VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_SPEC_VERSION 1 +#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME "VK_EXT_external_memory_dma_buf" +#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1 +#define VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME "VK_EXT_external_memory_host" +#define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_METAL_EXT) +#define VK_EXT_EXTERNAL_MEMORY_METAL_EXTENSION_NAME "VK_EXT_external_memory_metal" + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +#define VK_EXT_EXTERNAL_MEMORY_METAL_SPEC_VERSION 1 + +#endif +#define VK_EXT_FILTER_CUBIC_EXTENSION_NAME "VK_EXT_filter_cubic" +#define VK_EXT_FILTER_CUBIC_SPEC_VERSION 3 +#define VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME "VK_EXT_fragment_density_map2" +#define VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME "VK_EXT_fragment_density_map" +#define VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME "VK_EXT_fragment_density_map_offset" +#define VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION 2 +#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME "VK_EXT_fragment_shader_interlock" +#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION 1 +#define VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME "VK_EXT_frame_boundary" +#define VK_EXT_FRAME_BOUNDARY_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME "VK_EXT_full_screen_exclusive" + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION 4 + +#endif +#define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority" +#define VK_EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME "VK_EXT_global_priority_query" +#define VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION 1 +#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2 +#define VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME "VK_EXT_graphics_pipeline_library" +#define VK_EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION 1 +#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata" +#define VK_EXT_HDR_METADATA_SPEC_VERSION 3 +#define VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME "VK_EXT_headless_surface" +#define VK_EXT_HEADLESS_SURFACE_SPEC_VERSION 1 +#define VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME "VK_EXT_host_image_copy" +#define VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION 1 +#define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset" +#define VK_EXT_HOST_QUERY_RESET_SPEC_VERSION 1 +#define VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME "VK_EXT_image_2d_view_of_3d" +#define VK_EXT_IMAGE_2D_VIEW_OF_3D_SPEC_VERSION 1 +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME "VK_EXT_image_compression_control" +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION 1 +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME "VK_EXT_image_compression_control_swapchain" +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION 1 +#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME "VK_EXT_image_drm_format_modifier" +#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 2 +#define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness" +#define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1 +#define VK_EXT_IMAGE_SLICED_VIEW_OF_3D_EXTENSION_NAME "VK_EXT_image_sliced_view_of_3d" +#define VK_EXT_IMAGE_SLICED_VIEW_OF_3D_SPEC_VERSION 1 +#define VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME "VK_EXT_image_view_min_lod" +#define VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION 1 +#define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8" +#define VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION 1 +#define VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME "VK_EXT_inline_uniform_block" +#define VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION 1 +#define VK_EXT_LAYER_SETTINGS_EXTENSION_NAME "VK_EXT_layer_settings" +#define VK_EXT_LAYER_SETTINGS_SPEC_VERSION 2 +#define VK_EXT_LEGACY_DITHERING_EXTENSION_NAME "VK_EXT_legacy_dithering" +#define VK_EXT_LEGACY_DITHERING_SPEC_VERSION 2 +#define VK_EXT_LEGACY_VERTEX_ATTRIBUTES_EXTENSION_NAME "VK_EXT_legacy_vertex_attributes" +#define VK_EXT_LEGACY_VERTEX_ATTRIBUTES_SPEC_VERSION 1 +#define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization" +#define VK_EXT_LINE_RASTERIZATION_SPEC_VERSION 1 +#define VK_EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME "VK_EXT_load_store_op_none" +#define VK_EXT_LOAD_STORE_OP_NONE_SPEC_VERSION 1 +#define VK_EXT_MAP_MEMORY_PLACED_EXTENSION_NAME "VK_EXT_map_memory_placed" +#define VK_EXT_MAP_MEMORY_PLACED_SPEC_VERSION 1 +#define VK_EXT_MEMORY_BUDGET_EXTENSION_NAME "VK_EXT_memory_budget" +#define VK_EXT_MEMORY_BUDGET_SPEC_VERSION 1 +#define VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME "VK_EXT_memory_priority" +#define VK_EXT_MEMORY_PRIORITY_SPEC_VERSION 1 +#define VK_EXT_MESH_SHADER_EXTENSION_NAME "VK_EXT_mesh_shader" +#define VK_EXT_MESH_SHADER_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_METAL_EXT) +#define VK_EXT_METAL_OBJECTS_EXTENSION_NAME "VK_EXT_metal_objects" + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +#define VK_EXT_METAL_OBJECTS_SPEC_VERSION 2 + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +#define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface" + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +#define VK_EXT_METAL_SURFACE_SPEC_VERSION 1 + +#endif +#define VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_EXTENSION_NAME "VK_EXT_multisampled_render_to_single_sampled" +#define VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_SPEC_VERSION 1 +#define VK_EXT_MULTI_DRAW_EXTENSION_NAME "VK_EXT_multi_draw" +#define VK_EXT_MULTI_DRAW_SPEC_VERSION 1 +#define VK_EXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME "VK_EXT_mutable_descriptor_type" +#define VK_EXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION 1 +#define VK_EXT_NESTED_COMMAND_BUFFER_EXTENSION_NAME "VK_EXT_nested_command_buffer" +#define VK_EXT_NESTED_COMMAND_BUFFER_SPEC_VERSION 1 +#define VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME "VK_EXT_non_seamless_cube_map" +#define VK_EXT_NON_SEAMLESS_CUBE_MAP_SPEC_VERSION 1 +#define VK_EXT_OPACITY_MICROMAP_EXTENSION_NAME "VK_EXT_opacity_micromap" +#define VK_EXT_OPACITY_MICROMAP_SPEC_VERSION 2 +#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_EXTENSION_NAME "VK_EXT_pageable_device_local_memory" +#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_SPEC_VERSION 1 +#define VK_EXT_PCI_BUS_INFO_EXTENSION_NAME "VK_EXT_pci_bus_info" +#define VK_EXT_PCI_BUS_INFO_SPEC_VERSION 2 +#define VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME "VK_EXT_physical_device_drm" +#define VK_EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME "VK_EXT_pipeline_creation_cache_control" +#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION 3 +#define VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME "VK_EXT_pipeline_creation_feedback" +#define VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_LIBRARY_GROUP_HANDLES_EXTENSION_NAME "VK_EXT_pipeline_library_group_handles" +#define VK_EXT_PIPELINE_LIBRARY_GROUP_HANDLES_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME "VK_EXT_pipeline_properties" +#define VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_PROTECTED_ACCESS_EXTENSION_NAME "VK_EXT_pipeline_protected_access" +#define VK_EXT_PIPELINE_PROTECTED_ACCESS_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_pipeline_robustness" +#define VK_EXT_PIPELINE_ROBUSTNESS_SPEC_VERSION 1 +#define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage" +#define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1 +#define VK_EXT_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME "VK_EXT_present_mode_fifo_latest_ready" +#define VK_EXT_PRESENT_MODE_FIFO_LATEST_READY_SPEC_VERSION 1 +#define VK_EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME "VK_EXT_primitives_generated_query" +#define VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION 1 +#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME "VK_EXT_primitive_topology_list_restart" +#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION 1 +#define VK_EXT_PRIVATE_DATA_EXTENSION_NAME "VK_EXT_private_data" +#define VK_EXT_PRIVATE_DATA_SPEC_VERSION 1 +#define VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME "VK_EXT_provoking_vertex" +#define VK_EXT_PROVOKING_VERTEX_SPEC_VERSION 1 +#define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign" +#define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1 +#define VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME "VK_EXT_rasterization_order_attachment_access" +#define VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION 1 +#define VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME "VK_EXT_rgba10x6_formats" +#define VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION 1 +#define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2" +#define VK_EXT_ROBUSTNESS_2_SPEC_VERSION 1 +#define VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "VK_EXT_sampler_filter_minmax" +#define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 2 +#define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations" +#define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1 +#define VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME "VK_EXT_scalar_block_layout" +#define VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION 1 +#define VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME "VK_EXT_separate_stencil_usage" +#define VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION 1 +#define VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME "VK_EXT_shader_atomic_float2" +#define VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION 1 +#define VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME "VK_EXT_shader_atomic_float" +#define VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION 1 +#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation" +#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1 +#define VK_EXT_SHADER_FLOAT8_EXTENSION_NAME "VK_EXT_shader_float8" +#define VK_EXT_SHADER_FLOAT8_SPEC_VERSION 1 +#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME "VK_EXT_shader_image_atomic_int64" +#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION 1 +#define VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME "VK_EXT_shader_module_identifier" +#define VK_EXT_SHADER_MODULE_IDENTIFIER_SPEC_VERSION 1 +#define VK_EXT_SHADER_OBJECT_EXTENSION_NAME "VK_EXT_shader_object" +#define VK_EXT_SHADER_OBJECT_SPEC_VERSION 1 +#define VK_EXT_SHADER_REPLICATED_COMPOSITES_EXTENSION_NAME "VK_EXT_shader_replicated_composites" +#define VK_EXT_SHADER_REPLICATED_COMPOSITES_SPEC_VERSION 1 +#define VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME "VK_EXT_shader_stencil_export" +#define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1 +#define VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME "VK_EXT_shader_subgroup_ballot" +#define VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION 1 +#define VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME "VK_EXT_shader_subgroup_vote" +#define VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION 1 +#define VK_EXT_SHADER_TILE_IMAGE_EXTENSION_NAME "VK_EXT_shader_tile_image" +#define VK_EXT_SHADER_TILE_IMAGE_SPEC_VERSION 1 +#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer" +#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1 +#define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control" +#define VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION 2 +#define VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME "VK_EXT_subpass_merge_feedback" +#define VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION 2 +#define VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME "VK_EXT_surface_maintenance1" +#define VK_EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace" +#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 5 +#define VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME "VK_EXT_swapchain_maintenance1" +#define VK_EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment" +#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1 +#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME "VK_EXT_texture_compression_astc_hdr" +#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION 1 +#define VK_EXT_TOOLING_INFO_EXTENSION_NAME "VK_EXT_tooling_info" +#define VK_EXT_TOOLING_INFO_SPEC_VERSION 1 +#define VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME "VK_EXT_transform_feedback" +#define VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION 1 +#define VK_EXT_VALIDATION_CACHE_EXTENSION_NAME "VK_EXT_validation_cache" +#define VK_EXT_VALIDATION_CACHE_SPEC_VERSION 1 +#define VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME "VK_EXT_validation_features" +#define VK_EXT_VALIDATION_FEATURES_SPEC_VERSION 6 +#define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags" +#define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 3 +#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor" +#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 3 +#define VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_vertex_attribute_robustness" +#define VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_SPEC_VERSION 1 +#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_vertex_input_dynamic_state" +#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION 2 +#define VK_EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME "VK_EXT_ycbcr_2plane_444_formats" +#define VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION 1 +#define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays" +#define VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION 1 +#define VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_EXTENSION_NAME "VK_EXT_zero_initialize_device_memory" +#define VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_SPEC_VERSION 1 +#define VK_FALSE 0 +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME "VK_FUCHSIA_buffer_collection" + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION 2 + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME "VK_FUCHSIA_external_memory" + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION 1 + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_FUCHSIA_external_semaphore" + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME "VK_FUCHSIA_imagepipe_surface" + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1 + +#endif +#if defined(VK_USE_PLATFORM_GGP) +#define VK_GGP_FRAME_TOKEN_EXTENSION_NAME "VK_GGP_frame_token" + +#endif +#if defined(VK_USE_PLATFORM_GGP) +#define VK_GGP_FRAME_TOKEN_SPEC_VERSION 1 + +#endif +#if defined(VK_USE_PLATFORM_GGP) +#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME "VK_GGP_stream_descriptor_surface" + +#endif +#if defined(VK_USE_PLATFORM_GGP) +#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION 1 + +#endif +#define VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME "VK_GOOGLE_decorate_string" +#define VK_GOOGLE_DECORATE_STRING_SPEC_VERSION 1 +#define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing" +#define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1 +#define VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME "VK_GOOGLE_hlsl_functionality1" +#define VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION 1 +#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME "VK_GOOGLE_hlsl_functionality1" +#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION 1 +#define VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME "VK_GOOGLE_surfaceless_query" +#define VK_GOOGLE_SURFACELESS_QUERY_SPEC_VERSION 2 +#define VK_GOOGLE_USER_TYPE_EXTENSION_NAME "VK_GOOGLE_user_type" +#define VK_GOOGLE_USER_TYPE_SPEC_VERSION 1 +#define VK_HUAWEI_CLUSTER_CULLING_SHADER_EXTENSION_NAME "VK_HUAWEI_cluster_culling_shader" +#define VK_HUAWEI_CLUSTER_CULLING_SHADER_SPEC_VERSION 3 +#define VK_HUAWEI_HDR_VIVID_EXTENSION_NAME "VK_HUAWEI_hdr_vivid" +#define VK_HUAWEI_HDR_VIVID_SPEC_VERSION 1 +#define VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME "VK_HUAWEI_invocation_mask" +#define VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION 1 +#define VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME "VK_HUAWEI_subpass_shading" +#define VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION 3 +#define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic" +#define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1 +#define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc" +#define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1 +#define VK_IMG_RELAXED_LINE_RASTERIZATION_EXTENSION_NAME "VK_IMG_relaxed_line_rasterization" +#define VK_IMG_RELAXED_LINE_RASTERIZATION_SPEC_VERSION 1 +#define VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME "VK_INTEL_performance_query" +#define VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION 2 +#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME "VK_INTEL_shader_integer_functions2" +#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION 1 +#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage" +#define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1 +#define VK_KHR_8BIT_STORAGE_EXTENSION_NAME "VK_KHR_8bit_storage" +#define VK_KHR_8BIT_STORAGE_SPEC_VERSION 1 +#define VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_KHR_acceleration_structure" +#define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 13 +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface" + +#endif +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +#define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6 + +#endif +#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2" +#define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1 +#define VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_KHR_buffer_device_address" +#define VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 1 +#define VK_KHR_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_KHR_calibrated_timestamps" +#define VK_KHR_CALIBRATED_TIMESTAMPS_SPEC_VERSION 1 +#define VK_KHR_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_KHR_compute_shader_derivatives" +#define VK_KHR_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION 1 +#define VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_KHR_cooperative_matrix" +#define VK_KHR_COOPERATIVE_MATRIX_SPEC_VERSION 2 +#define VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME "VK_KHR_copy_commands2" +#define VK_KHR_COPY_COMMANDS_2_SPEC_VERSION 1 +#define VK_KHR_COPY_MEMORY_INDIRECT_EXTENSION_NAME "VK_KHR_copy_memory_indirect" +#define VK_KHR_COPY_MEMORY_INDIRECT_SPEC_VERSION 1 +#define VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME "VK_KHR_create_renderpass2" +#define VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION 1 +#define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation" +#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3 +#define VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME "VK_KHR_deferred_host_operations" +#define VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION 4 +#define VK_KHR_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME "VK_KHR_depth_clamp_zero_one" +#define VK_KHR_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION 1 +#define VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME "VK_KHR_depth_stencil_resolve" +#define VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION 1 +#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template" +#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1 +#define VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHR_device_group_creation" +#define VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION 1 +#define VK_KHR_DEVICE_GROUP_EXTENSION_NAME "VK_KHR_device_group" +#define VK_KHR_DEVICE_GROUP_SPEC_VERSION 4 +#define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display" +#define VK_KHR_DISPLAY_SPEC_VERSION 23 +#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain" +#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 10 +#define VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_KHR_draw_indirect_count" +#define VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION 1 +#define VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME "VK_KHR_driver_properties" +#define VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION 1 +#define VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME "VK_KHR_dynamic_rendering" +#define VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_EXTENSION_NAME "VK_KHR_dynamic_rendering_local_read" +#define VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_SPEC_VERSION 1 +#define VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities" +#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence" +#define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd" +#define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32" + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1 + +#endif +#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities" +#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory" +#define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd" +#define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32" + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 + +#endif +#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities" +#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore" +#define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd" +#define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32" + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1 + +#endif +#define VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME "VK_KHR_format_feature_flags2" +#define VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION 2 +#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_KHR_fragment_shader_barycentric" +#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1 +#define VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME "VK_KHR_fragment_shading_rate" +#define VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION 2 +#define VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_display_properties2" +#define VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION 1 +#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2" +#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1 +#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2" +#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 2 +#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2" +#define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1 +#define VK_KHR_GLOBAL_PRIORITY_EXTENSION_NAME "VK_KHR_global_priority" +#define VK_KHR_GLOBAL_PRIORITY_SPEC_VERSION 1 +#define VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME "VK_KHR_imageless_framebuffer" +#define VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION 1 +#define VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME "VK_KHR_image_format_list" +#define VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION 1 +#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present" +#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 2 +#define VK_KHR_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_KHR_index_type_uint8" +#define VK_KHR_INDEX_TYPE_UINT8_SPEC_VERSION 1 +#define VK_KHR_LINE_RASTERIZATION_EXTENSION_NAME "VK_KHR_line_rasterization" +#define VK_KHR_LINE_RASTERIZATION_SPEC_VERSION 1 +#define VK_KHR_LOAD_STORE_OP_NONE_EXTENSION_NAME "VK_KHR_load_store_op_none" +#define VK_KHR_LOAD_STORE_OP_NONE_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE1_EXTENSION_NAME "VK_KHR_maintenance1" +#define VK_KHR_MAINTENANCE1_SPEC_VERSION 2 +#define VK_KHR_MAINTENANCE2_EXTENSION_NAME "VK_KHR_maintenance2" +#define VK_KHR_MAINTENANCE2_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE3_EXTENSION_NAME "VK_KHR_maintenance3" +#define VK_KHR_MAINTENANCE3_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_maintenance1" +#define VK_KHR_MAINTENANCE_1_SPEC_VERSION 2 +#define VK_KHR_MAINTENANCE_2_EXTENSION_NAME "VK_KHR_maintenance2" +#define VK_KHR_MAINTENANCE_2_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_3_EXTENSION_NAME "VK_KHR_maintenance3" +#define VK_KHR_MAINTENANCE_3_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_4_EXTENSION_NAME "VK_KHR_maintenance4" +#define VK_KHR_MAINTENANCE_4_SPEC_VERSION 2 +#define VK_KHR_MAINTENANCE_5_EXTENSION_NAME "VK_KHR_maintenance5" +#define VK_KHR_MAINTENANCE_5_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_6_EXTENSION_NAME "VK_KHR_maintenance6" +#define VK_KHR_MAINTENANCE_6_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_7_EXTENSION_NAME "VK_KHR_maintenance7" +#define VK_KHR_MAINTENANCE_7_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_8_EXTENSION_NAME "VK_KHR_maintenance8" +#define VK_KHR_MAINTENANCE_8_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_9_EXTENSION_NAME "VK_KHR_maintenance9" +#define VK_KHR_MAINTENANCE_9_SPEC_VERSION 1 +#define VK_KHR_MAP_MEMORY_2_EXTENSION_NAME "VK_KHR_map_memory2" +#define VK_KHR_MAP_MEMORY_2_SPEC_VERSION 1 +#define VK_KHR_MULTIVIEW_EXTENSION_NAME "VK_KHR_multiview" +#define VK_KHR_MULTIVIEW_SPEC_VERSION 1 +#define VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME "VK_KHR_performance_query" +#define VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION 1 +#define VK_KHR_PIPELINE_BINARY_EXTENSION_NAME "VK_KHR_pipeline_binary" +#define VK_KHR_PIPELINE_BINARY_SPEC_VERSION 1 +#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties" +#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION 1 +#define VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME "VK_KHR_pipeline_library" +#define VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION 1 +#define VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME "VK_KHR_portability_enumeration" +#define VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION 1 +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset" + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1 + +#endif +#define VK_KHR_PRESENT_ID_2_EXTENSION_NAME "VK_KHR_present_id2" +#define VK_KHR_PRESENT_ID_2_SPEC_VERSION 1 +#define VK_KHR_PRESENT_ID_EXTENSION_NAME "VK_KHR_present_id" +#define VK_KHR_PRESENT_ID_SPEC_VERSION 1 +#define VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME "VK_KHR_present_mode_fifo_latest_ready" +#define VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_SPEC_VERSION 1 +#define VK_KHR_PRESENT_WAIT_2_EXTENSION_NAME "VK_KHR_present_wait2" +#define VK_KHR_PRESENT_WAIT_2_SPEC_VERSION 1 +#define VK_KHR_PRESENT_WAIT_EXTENSION_NAME "VK_KHR_present_wait" +#define VK_KHR_PRESENT_WAIT_SPEC_VERSION 1 +#define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor" +#define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 2 +#define VK_KHR_RAY_QUERY_EXTENSION_NAME "VK_KHR_ray_query" +#define VK_KHR_RAY_QUERY_SPEC_VERSION 1 +#define VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_ray_tracing_maintenance1" +#define VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME "VK_KHR_ray_tracing_pipeline" +#define VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION 1 +#define VK_KHR_RAY_TRACING_POSITION_FETCH_EXTENSION_NAME "VK_KHR_ray_tracing_position_fetch" +#define VK_KHR_RAY_TRACING_POSITION_FETCH_SPEC_VERSION 1 +#define VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME "VK_KHR_relaxed_block_layout" +#define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1 +#define VK_KHR_ROBUSTNESS_2_EXTENSION_NAME "VK_KHR_robustness2" +#define VK_KHR_ROBUSTNESS_2_SPEC_VERSION 1 +#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge" +#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION 3 +#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion" +#define VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION 14 +#define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME "VK_KHR_separate_depth_stencil_layouts" +#define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION 1 +#define VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME "VK_KHR_shader_atomic_int64" +#define VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION 1 +#define VK_KHR_SHADER_BFLOAT16_EXTENSION_NAME "VK_KHR_shader_bfloat16" +#define VK_KHR_SHADER_BFLOAT16_SPEC_VERSION 1 +#define VK_KHR_SHADER_CLOCK_EXTENSION_NAME "VK_KHR_shader_clock" +#define VK_KHR_SHADER_CLOCK_SPEC_VERSION 1 +#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters" +#define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1 +#define VK_KHR_SHADER_EXPECT_ASSUME_EXTENSION_NAME "VK_KHR_shader_expect_assume" +#define VK_KHR_SHADER_EXPECT_ASSUME_SPEC_VERSION 1 +#define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8" +#define VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION 1 +#define VK_KHR_SHADER_FLOAT_CONTROLS_2_EXTENSION_NAME "VK_KHR_shader_float_controls2" +#define VK_KHR_SHADER_FLOAT_CONTROLS_2_SPEC_VERSION 1 +#define VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME "VK_KHR_shader_float_controls" +#define VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION 4 +#define VK_KHR_SHADER_FMA_EXTENSION_NAME "VK_KHR_shader_fma" +#define VK_KHR_SHADER_FMA_SPEC_VERSION 1 +#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME "VK_KHR_shader_integer_dot_product" +#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION 1 +#define VK_KHR_SHADER_MAXIMAL_RECONVERGENCE_EXTENSION_NAME "VK_KHR_shader_maximal_reconvergence" +#define VK_KHR_SHADER_MAXIMAL_RECONVERGENCE_SPEC_VERSION 1 +#define VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME "VK_KHR_shader_non_semantic_info" +#define VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION 1 +#define VK_KHR_SHADER_QUAD_CONTROL_EXTENSION_NAME "VK_KHR_shader_quad_control" +#define VK_KHR_SHADER_QUAD_CONTROL_SPEC_VERSION 1 +#define VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_EXTENSION_NAME "VK_KHR_shader_relaxed_extended_instruction" +#define VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_SPEC_VERSION 1 +#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME "VK_KHR_shader_subgroup_extended_types" +#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION 1 +#define VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME "VK_KHR_shader_subgroup_rotate" +#define VK_KHR_SHADER_SUBGROUP_ROTATE_SPEC_VERSION 2 +#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME "VK_KHR_shader_subgroup_uniform_control_flow" +#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION 1 +#define VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME "VK_KHR_shader_terminate_invocation" +#define VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION 1 +#define VK_KHR_SHADER_UNTYPED_POINTERS_EXTENSION_NAME "VK_KHR_shader_untyped_pointers" +#define VK_KHR_SHADER_UNTYPED_POINTERS_SPEC_VERSION 1 +#define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image" +#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1 +#define VK_KHR_SPIRV_1_4_EXTENSION_NAME "VK_KHR_spirv_1_4" +#define VK_KHR_SPIRV_1_4_SPEC_VERSION 1 +#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class" +#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1 +#define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface" +#define VK_KHR_SURFACE_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_surface_maintenance1" +#define VK_KHR_SURFACE_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME "VK_KHR_surface_protected_capabilities" +#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_SURFACE_SPEC_VERSION 25 +#define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain" +#define VK_KHR_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_swapchain_maintenance1" +#define VK_KHR_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME "VK_KHR_swapchain_mutable_format" +#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION 1 +#define VK_KHR_SWAPCHAIN_SPEC_VERSION 70 +#define VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME "VK_KHR_synchronization2" +#define VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION 1 +#define VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME "VK_KHR_timeline_semaphore" +#define VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION 2 +#define VK_KHR_UNIFIED_IMAGE_LAYOUTS_EXTENSION_NAME "VK_KHR_unified_image_layouts" +#define VK_KHR_UNIFIED_IMAGE_LAYOUTS_SPEC_VERSION 1 +#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME "VK_KHR_uniform_buffer_standard_layout" +#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION 1 +#define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers" +#define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1 +#define VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_KHR_vertex_attribute_divisor" +#define VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 1 +#define VK_KHR_VIDEO_DECODE_AV1_EXTENSION_NAME "VK_KHR_video_decode_av1" +#define VK_KHR_VIDEO_DECODE_AV1_SPEC_VERSION 1 +#define VK_KHR_VIDEO_DECODE_H264_EXTENSION_NAME "VK_KHR_video_decode_h264" +#define VK_KHR_VIDEO_DECODE_H264_SPEC_VERSION 9 +#define VK_KHR_VIDEO_DECODE_H265_EXTENSION_NAME "VK_KHR_video_decode_h265" +#define VK_KHR_VIDEO_DECODE_H265_SPEC_VERSION 8 +#define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue" +#define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 8 +#define VK_KHR_VIDEO_DECODE_VP9_EXTENSION_NAME "VK_KHR_video_decode_vp9" +#define VK_KHR_VIDEO_DECODE_VP9_SPEC_VERSION 1 +#define VK_KHR_VIDEO_ENCODE_AV1_EXTENSION_NAME "VK_KHR_video_encode_av1" +#define VK_KHR_VIDEO_ENCODE_AV1_SPEC_VERSION 1 +#define VK_KHR_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_KHR_video_encode_h264" +#define VK_KHR_VIDEO_ENCODE_H264_SPEC_VERSION 14 +#define VK_KHR_VIDEO_ENCODE_H265_EXTENSION_NAME "VK_KHR_video_encode_h265" +#define VK_KHR_VIDEO_ENCODE_H265_SPEC_VERSION 14 +#define VK_KHR_VIDEO_ENCODE_INTRA_REFRESH_EXTENSION_NAME "VK_KHR_video_encode_intra_refresh" +#define VK_KHR_VIDEO_ENCODE_INTRA_REFRESH_SPEC_VERSION 1 +#define VK_KHR_VIDEO_ENCODE_QUANTIZATION_MAP_EXTENSION_NAME "VK_KHR_video_encode_quantization_map" +#define VK_KHR_VIDEO_ENCODE_QUANTIZATION_MAP_SPEC_VERSION 2 +#define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue" +#define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 12 +#define VK_KHR_VIDEO_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_video_maintenance1" +#define VK_KHR_VIDEO_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_VIDEO_MAINTENANCE_2_EXTENSION_NAME "VK_KHR_video_maintenance2" +#define VK_KHR_VIDEO_MAINTENANCE_2_SPEC_VERSION 1 +#define VK_KHR_VIDEO_QUEUE_EXTENSION_NAME "VK_KHR_video_queue" +#define VK_KHR_VIDEO_QUEUE_SPEC_VERSION 8 +#define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model" +#define VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION 3 +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface" + +#endif +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6 + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex" + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1 + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface" + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6 + +#endif +#define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME "VK_KHR_workgroup_memory_explicit_layout" +#define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_XCB_KHR) +#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface" + +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) +#define VK_KHR_XCB_SURFACE_SPEC_VERSION 6 + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface" + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +#define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6 + +#endif +#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME "VK_KHR_zero_initialize_workgroup_memory" +#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION 1 +#define VK_LOD_CLAMP_NONE 1000.0F +#define VK_LUID_SIZE 8 +#define VK_LUID_SIZE_KHR 8 +#define VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME "VK_LUNARG_direct_driver_loading" +#define VK_LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION 1 +#define VK_MAX_DESCRIPTION_SIZE 256 +#define VK_MAX_DEVICE_GROUP_SIZE 32 +#define VK_MAX_DEVICE_GROUP_SIZE_KHR 32 +#define VK_MAX_DRIVER_INFO_SIZE 256 +#define VK_MAX_DRIVER_INFO_SIZE_KHR 256 +#define VK_MAX_DRIVER_NAME_SIZE 256 +#define VK_MAX_DRIVER_NAME_SIZE_KHR 256 +#define VK_MAX_EXTENSION_NAME_SIZE 256 +#define VK_MAX_GLOBAL_PRIORITY_SIZE 16 +#define VK_MAX_GLOBAL_PRIORITY_SIZE_EXT 16 +#define VK_MAX_GLOBAL_PRIORITY_SIZE_KHR 16 +#define VK_MAX_MEMORY_HEAPS 16 +#define VK_MAX_MEMORY_TYPES 32 +#define VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM 128 +#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256 +#define VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR 32 +#define VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT 32 +#define VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR 7 +#define VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR 3 +#define VK_MESA_IMAGE_ALIGNMENT_CONTROL_EXTENSION_NAME "VK_MESA_image_alignment_control" +#define VK_MESA_IMAGE_ALIGNMENT_CONTROL_SPEC_VERSION 1 +#define VK_MSFT_LAYERED_DRIVER_EXTENSION_NAME "VK_MSFT_layered_driver" +#define VK_MSFT_LAYERED_DRIVER_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_IOS_MVK) +#define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface" + +#endif +#if defined(VK_USE_PLATFORM_IOS_MVK) +#define VK_MVK_IOS_SURFACE_SPEC_VERSION 3 + +#endif +#if defined(VK_USE_PLATFORM_MACOS_MVK) +#define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface" + +#endif +#if defined(VK_USE_PLATFORM_MACOS_MVK) +#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 3 + +#endif +#if defined(VK_USE_PLATFORM_VI_NN) +#define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface" + +#endif +#if defined(VK_USE_PLATFORM_VI_NN) +#define VK_NN_VI_SURFACE_SPEC_VERSION 1 + +#endif +#define VK_NVX_BINARY_IMPORT_EXTENSION_NAME "VK_NVX_binary_import" +#define VK_NVX_BINARY_IMPORT_SPEC_VERSION 2 +#define VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME "VK_NVX_image_view_handle" +#define VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION 3 +#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME "VK_NVX_multiview_per_view_attributes" +#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME "VK_NV_acquire_winrt_display" + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_NV_ACQUIRE_WINRT_DISPLAY_SPEC_VERSION 1 + +#endif +#define VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME "VK_NV_clip_space_w_scaling" +#define VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION 1 +#define VK_NV_CLUSTER_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_NV_cluster_acceleration_structure" +#define VK_NV_CLUSTER_ACCELERATION_STRUCTURE_SPEC_VERSION 4 +#define VK_NV_COMMAND_BUFFER_INHERITANCE_EXTENSION_NAME "VK_NV_command_buffer_inheritance" +#define VK_NV_COMMAND_BUFFER_INHERITANCE_SPEC_VERSION 1 +#define VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_NV_compute_shader_derivatives" +#define VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION 1 +#define VK_NV_COOPERATIVE_MATRIX_2_EXTENSION_NAME "VK_NV_cooperative_matrix2" +#define VK_NV_COOPERATIVE_MATRIX_2_SPEC_VERSION 1 +#define VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_NV_cooperative_matrix" +#define VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION 1 +#define VK_NV_COOPERATIVE_VECTOR_EXTENSION_NAME "VK_NV_cooperative_vector" +#define VK_NV_COOPERATIVE_VECTOR_SPEC_VERSION 4 +#define VK_NV_COPY_MEMORY_INDIRECT_EXTENSION_NAME "VK_NV_copy_memory_indirect" +#define VK_NV_COPY_MEMORY_INDIRECT_SPEC_VERSION 1 +#define VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME "VK_NV_corner_sampled_image" +#define VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION 2 +#define VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME "VK_NV_coverage_reduction_mode" +#define VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION 1 +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_NV_CUDA_KERNEL_LAUNCH_EXTENSION_NAME "VK_NV_cuda_kernel_launch" + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_NV_CUDA_KERNEL_LAUNCH_SPEC_VERSION 2 + +#endif +#define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation" +#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME "VK_NV_dedicated_allocation_image_aliasing" +#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION 1 +#define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1 +#define VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_EXTENSION_NAME "VK_NV_descriptor_pool_overallocation" +#define VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_SPEC_VERSION 1 +#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME "VK_NV_device_diagnostics_config" +#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION 2 +#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME "VK_NV_device_diagnostic_checkpoints" +#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION 2 +#define VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME "VK_NV_device_generated_commands_compute" +#define VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSION 2 +#define VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NV_device_generated_commands" +#define VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3 +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_NV_DISPLACEMENT_MICROMAP_EXTENSION_NAME "VK_NV_displacement_micromap" + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_NV_DISPLACEMENT_MICROMAP_SPEC_VERSION 2 + +#endif +#define VK_NV_DISPLAY_STEREO_EXTENSION_NAME "VK_NV_display_stereo" +#define VK_NV_DISPLAY_STEREO_SPEC_VERSION 1 +#define VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_EXTENSION_NAME "VK_NV_extended_sparse_address_space" +#define VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_COMPUTE_QUEUE_EXTENSION_NAME "VK_NV_external_compute_queue" +#define VK_NV_EXTERNAL_COMPUTE_QUEUE_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities" +#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory" +#define VK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME "VK_NV_external_memory_rdma" +#define VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32" + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 + +#endif +#define VK_NV_FILL_RECTANGLE_EXTENSION_NAME "VK_NV_fill_rectangle" +#define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1 +#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME "VK_NV_fragment_coverage_to_color" +#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1 +#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_NV_fragment_shader_barycentric" +#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1 +#define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME "VK_NV_fragment_shading_rate_enums" +#define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION 1 +#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME "VK_NV_framebuffer_mixed_samples" +#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1 +#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME "VK_NV_geometry_shader_passthrough" +#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION 1 +#define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader" +#define VK_NV_GLSL_SHADER_SPEC_VERSION 1 +#define VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME "VK_NV_inherited_viewport_scissor" +#define VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION 1 +#define VK_NV_LINEAR_COLOR_ATTACHMENT_EXTENSION_NAME "VK_NV_linear_color_attachment" +#define VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION 1 +#define VK_NV_LOW_LATENCY_2_EXTENSION_NAME "VK_NV_low_latency2" +#define VK_NV_LOW_LATENCY_2_SPEC_VERSION 2 +#define VK_NV_LOW_LATENCY_EXTENSION_NAME "VK_NV_low_latency" +#define VK_NV_LOW_LATENCY_SPEC_VERSION 1 +#define VK_NV_MEMORY_DECOMPRESSION_EXTENSION_NAME "VK_NV_memory_decompression" +#define VK_NV_MEMORY_DECOMPRESSION_SPEC_VERSION 1 +#define VK_NV_MESH_SHADER_EXTENSION_NAME "VK_NV_mesh_shader" +#define VK_NV_MESH_SHADER_SPEC_VERSION 1 +#define VK_NV_OPTICAL_FLOW_EXTENSION_NAME "VK_NV_optical_flow" +#define VK_NV_OPTICAL_FLOW_SPEC_VERSION 1 +#define VK_NV_PARTITIONED_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_NV_partitioned_acceleration_structure" +#define VK_NV_PARTITIONED_ACCELERATION_STRUCTURE_SPEC_VERSION 1 +#define VK_NV_PER_STAGE_DESCRIPTOR_SET_EXTENSION_NAME "VK_NV_per_stage_descriptor_set" +#define VK_NV_PER_STAGE_DESCRIPTOR_SET_SPEC_VERSION 1 +#define VK_NV_PRESENT_BARRIER_EXTENSION_NAME "VK_NV_present_barrier" +#define VK_NV_PRESENT_BARRIER_SPEC_VERSION 1 +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_NV_PRESENT_METERING_EXTENSION_NAME "VK_NV_present_metering" + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_NV_PRESENT_METERING_SPEC_VERSION 1 + +#endif +#define VK_NV_RAW_ACCESS_CHAINS_EXTENSION_NAME "VK_NV_raw_access_chains" +#define VK_NV_RAW_ACCESS_CHAINS_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_EXTENSION_NAME "VK_NV_ray_tracing" +#define VK_NV_RAY_TRACING_INVOCATION_REORDER_EXTENSION_NAME "VK_NV_ray_tracing_invocation_reorder" +#define VK_NV_RAY_TRACING_INVOCATION_REORDER_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_LINEAR_SWEPT_SPHERES_EXTENSION_NAME "VK_NV_ray_tracing_linear_swept_spheres" +#define VK_NV_RAY_TRACING_LINEAR_SWEPT_SPHERES_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME "VK_NV_ray_tracing_motion_blur" +#define VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_SPEC_VERSION 3 +#define VK_NV_RAY_TRACING_VALIDATION_EXTENSION_NAME "VK_NV_ray_tracing_validation" +#define VK_NV_RAY_TRACING_VALIDATION_SPEC_VERSION 1 +#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME "VK_NV_representative_fragment_test" +#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION 2 +#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage" +#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1 +#define VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME "VK_NV_scissor_exclusive" +#define VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION 2 +#define VK_NV_SHADER_ATOMIC_FLOAT16_VECTOR_EXTENSION_NAME "VK_NV_shader_atomic_float16_vector" +#define VK_NV_SHADER_ATOMIC_FLOAT16_VECTOR_SPEC_VERSION 1 +#define VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME "VK_NV_shader_image_footprint" +#define VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION 2 +#define VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME "VK_NV_shader_sm_builtins" +#define VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION 1 +#define VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME "VK_NV_shader_subgroup_partitioned" +#define VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION 1 +#define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image" +#define VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION 3 +#define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME "VK_NV_viewport_array2" +#define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION 1 +#define VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME "VK_NV_viewport_array2" +#define VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION 1 +#define VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME "VK_NV_viewport_swizzle" +#define VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex" + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 2 + +#endif +#if defined(VK_USE_PLATFORM_OHOS) +#define VK_OHOS_SURFACE_EXTENSION_NAME "VK_OHOS_surface" + +#endif +#if defined(VK_USE_PLATFORM_OHOS) +#define VK_OHOS_SURFACE_SPEC_VERSION 1 + +#endif +#define VK_PARTITIONED_ACCELERATION_STRUCTURE_PARTITION_INDEX_GLOBAL_NV (~0U) +#define VK_QCOM_FILTER_CUBIC_CLAMP_EXTENSION_NAME "VK_QCOM_filter_cubic_clamp" +#define VK_QCOM_FILTER_CUBIC_CLAMP_SPEC_VERSION 1 +#define VK_QCOM_FILTER_CUBIC_WEIGHTS_EXTENSION_NAME "VK_QCOM_filter_cubic_weights" +#define VK_QCOM_FILTER_CUBIC_WEIGHTS_SPEC_VERSION 1 +#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME "VK_QCOM_fragment_density_map_offset" +#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 3 +#define VK_QCOM_IMAGE_PROCESSING_2_EXTENSION_NAME "VK_QCOM_image_processing2" +#define VK_QCOM_IMAGE_PROCESSING_2_SPEC_VERSION 1 +#define VK_QCOM_IMAGE_PROCESSING_EXTENSION_NAME "VK_QCOM_image_processing" +#define VK_QCOM_IMAGE_PROCESSING_SPEC_VERSION 1 +#define VK_QCOM_MULTIVIEW_PER_VIEW_RENDER_AREAS_EXTENSION_NAME "VK_QCOM_multiview_per_view_render_areas" +#define VK_QCOM_MULTIVIEW_PER_VIEW_RENDER_AREAS_SPEC_VERSION 1 +#define VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_EXTENSION_NAME "VK_QCOM_multiview_per_view_viewports" +#define VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_SPEC_VERSION 1 +#define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME "VK_QCOM_render_pass_shader_resolve" +#define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION 4 +#define VK_QCOM_RENDER_PASS_STORE_OPS_EXTENSION_NAME "VK_QCOM_render_pass_store_ops" +#define VK_QCOM_RENDER_PASS_STORE_OPS_SPEC_VERSION 2 +#define VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME "VK_QCOM_render_pass_transform" +#define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 5 +#define VK_QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME "VK_QCOM_rotated_copy_commands" +#define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 2 +#define VK_QCOM_TILE_MEMORY_HEAP_EXTENSION_NAME "VK_QCOM_tile_memory_heap" +#define VK_QCOM_TILE_MEMORY_HEAP_SPEC_VERSION 1 +#define VK_QCOM_TILE_PROPERTIES_EXTENSION_NAME "VK_QCOM_tile_properties" +#define VK_QCOM_TILE_PROPERTIES_SPEC_VERSION 1 +#define VK_QCOM_TILE_SHADING_EXTENSION_NAME "VK_QCOM_tile_shading" +#define VK_QCOM_TILE_SHADING_SPEC_VERSION 2 +#define VK_QCOM_YCBCR_DEGAMMA_EXTENSION_NAME "VK_QCOM_ycbcr_degamma" +#define VK_QCOM_YCBCR_DEGAMMA_SPEC_VERSION 1 +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +#define VK_QNX_EXTERNAL_MEMORY_SCREEN_BUFFER_EXTENSION_NAME "VK_QNX_external_memory_screen_buffer" + +#endif +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +#define VK_QNX_EXTERNAL_MEMORY_SCREEN_BUFFER_SPEC_VERSION 1 + +#endif +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +#define VK_QNX_SCREEN_SURFACE_EXTENSION_NAME "VK_QNX_screen_surface" + +#endif +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +#define VK_QNX_SCREEN_SURFACE_SPEC_VERSION 1 + +#endif +#define VK_QUEUE_FAMILY_EXTERNAL (~1U) +#define VK_QUEUE_FAMILY_EXTERNAL_KHR (~1U) +#define VK_QUEUE_FAMILY_FOREIGN_EXT (~2U) +#define VK_QUEUE_FAMILY_IGNORED (~0U) +#define VK_REMAINING_3D_SLICES_EXT (~0U) +#define VK_REMAINING_ARRAY_LAYERS (~0U) +#define VK_REMAINING_MIP_LEVELS (~0U) +#define VK_SEC_AMIGO_PROFILING_EXTENSION_NAME "VK_SEC_amigo_profiling" +#define VK_SEC_AMIGO_PROFILING_SPEC_VERSION 1 +#define VK_SEC_PIPELINE_CACHE_INCREMENTAL_MODE_EXTENSION_NAME "VK_SEC_pipeline_cache_incremental_mode" +#define VK_SEC_PIPELINE_CACHE_INCREMENTAL_MODE_SPEC_VERSION 1 +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_SHADER_INDEX_UNUSED_AMDX (~0U) + +#endif +#define VK_SHADER_UNUSED_KHR (~0U) +#define VK_SHADER_UNUSED_NV (~0U) +#define VK_SUBPASS_EXTERNAL (~0U) +#define VK_TRUE 1 +#define VK_UUID_SIZE 16 +#define VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME "VK_VALVE_descriptor_set_host_mapping" +#define VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION 1 +#define VK_VALVE_FRAGMENT_DENSITY_MAP_LAYERED_EXTENSION_NAME "VK_VALVE_fragment_density_map_layered" +#define VK_VALVE_FRAGMENT_DENSITY_MAP_LAYERED_SPEC_VERSION 1 +#define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME "VK_VALVE_mutable_descriptor_type" +#define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION 1 +#define VK_VALVE_VIDEO_ENCODE_RGB_CONVERSION_EXTENSION_NAME "VK_VALVE_video_encode_rgb_conversion" +#define VK_VALVE_VIDEO_ENCODE_RGB_CONVERSION_SPEC_VERSION 1 +#define VK_WHOLE_SIZE (~0ULL) + + +#include "vk_video/vulkan_video_codecs_common.h" +#include "vk_platform.h" +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) || defined(VK_USE_PLATFORM_XLIB_KHR) +#include +#endif + +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +#include +#endif + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +#include +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) +#include +#endif + +#if defined(VK_USE_PLATFORM_XCB_KHR) +#include +#endif + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +#include +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) || defined(VK_USE_PLATFORM_FUCHSIA) || defined(VK_USE_PLATFORM_FUCHSIA) || defined(VK_USE_PLATFORM_FUCHSIA) +#include +#endif + +#if defined(VK_USE_PLATFORM_GGP) || defined(VK_USE_PLATFORM_GGP) +#include +#endif + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) || defined(VK_USE_PLATFORM_SCREEN_QNX) +#include +#endif + +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) || defined(VK_USE_PLATFORM_XLIB_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_XLIB_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_XLIB_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + +#endif + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_XCB_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_XCB_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_XCB_KHR) + +#endif + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + +#endif + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) || defined(VK_USE_PLATFORM_FUCHSIA) || defined(VK_USE_PLATFORM_FUCHSIA) || defined(VK_USE_PLATFORM_FUCHSIA) + +#endif + +#if defined(VK_USE_PLATFORM_GGP) + +#endif + +#if defined(VK_USE_PLATFORM_GGP) + +#endif + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + +#endif + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + +#endif + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + +#endif + +#define VK_MAKE_VERSION(major, minor, patch) \ + ((((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) +#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22U) +#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) +#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) +#define VK_MAKE_API_VERSION(variant, major, minor, patch) \ + ((((uint32_t)(variant)) << 29U) | (((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) +#define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29U) +#define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22U) & 0x7FU) +#define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) +#define VK_API_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) +/*#define VK_API_VERSION VK_MAKE_API_VERSION(0, 1, 0, 0) // Patch version should always be set to 0 */ +/* Vulkan 1.0 version number */ +#define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)/* Patch version should always be set to 0 */ +/* Vulkan 1.1 version number */ +#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)/* Patch version should always be set to 0 */ +/* Vulkan 1.2 version number */ +#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)/* Patch version should always be set to 0 */ +/* Vulkan 1.3 version number */ +#define VK_API_VERSION_1_3 VK_MAKE_API_VERSION(0, 1, 3, 0)/* Patch version should always be set to 0 */ +/* Vulkan 1.4 version number */ +#define VK_API_VERSION_1_4 VK_MAKE_API_VERSION(0, 1, 4, 0)/* Patch version should always be set to 0 */ +/* Version of this file */ +#define VK_HEADER_VERSION 329 +#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; +#ifndef VK_USE_64_BIT_PTR_DEFINES + #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) || (defined(__riscv) && __riscv_xlen == 64) + #define VK_USE_64_BIT_PTR_DEFINES 1 + #else + #define VK_USE_64_BIT_PTR_DEFINES 0 + #endif +#endif +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #if (defined(__cplusplus) && (__cplusplus >= 201103L)) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201103L)) + #define VK_NULL_HANDLE nullptr + #else + #define VK_NULL_HANDLE ((void*)0) + #endif + #else + #define VK_NULL_HANDLE 0ULL + #endif +#endif +#ifndef VK_NULL_HANDLE + #define VK_NULL_HANDLE 0 +#endif +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; + #else + #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; + #endif +#endif +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +struct ANativeWindow; +#endif + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +struct AHardwareBuffer; +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +#ifdef __OBJC__ +@class CAMetalLayer; +#else +typedef void CAMetalLayer; +#endif +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +#ifdef __OBJC__ +@protocol MTLDevice; +typedef __unsafe_unretained id MTLDevice_id; +#else +typedef void* MTLDevice_id; +#endif +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +#ifdef __OBJC__ +@protocol MTLCommandQueue; +typedef __unsafe_unretained id MTLCommandQueue_id; +#else +typedef void* MTLCommandQueue_id; +#endif +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +#ifdef __OBJC__ +@protocol MTLBuffer; +typedef __unsafe_unretained id MTLBuffer_id; +#else +typedef void* MTLBuffer_id; +#endif +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +#ifdef __OBJC__ +@protocol MTLTexture; +typedef __unsafe_unretained id MTLTexture_id; +#else +typedef void* MTLTexture_id; +#endif +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +#ifdef __OBJC__ +@protocol MTLSharedEvent; +typedef __unsafe_unretained id MTLSharedEvent_id; +#else +typedef void* MTLSharedEvent_id; +#endif +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct __IOSurface* IOSurfaceRef; +#endif + +#if defined(VK_USE_PLATFORM_OHOS) +typedef struct NativeWindow OHNativeWindow; +#endif + + + + + + + + + + + + + +VK_DEFINE_HANDLE(VkInstance) +VK_DEFINE_HANDLE(VkPhysicalDevice) +VK_DEFINE_HANDLE(VkDevice) +VK_DEFINE_HANDLE(VkQueue) +VK_DEFINE_HANDLE(VkCommandBuffer) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineBinaryKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNV) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutEXT) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectExecutionSetEXT) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplate) +#define VkDescriptorUpdateTemplateKHR VkDescriptorUpdateTemplate +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion) +#define VkSamplerYcbcrConversionKHR VkSamplerYcbcrConversion +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkValidationCacheEXT) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureNV) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPerformanceConfigurationINTEL) +#if defined(VK_USE_PLATFORM_FUCHSIA) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIA) +#endif + +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeferredOperationKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPrivateDataSlot) +#define VkPrivateDataSlotEXT VkPrivateDataSlot +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuModuleNVX) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuFunctionNVX) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkOpticalFlowSessionNV) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkMicromapEXT) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderEXT) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorARM) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorViewARM) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDataGraphPipelineSessionARM) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR) +typedef enum VkAttachmentLoadOp { + VK_ATTACHMENT_LOAD_OP_LOAD = 0, + VK_ATTACHMENT_LOAD_OP_CLEAR = 1, + VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2, + VK_ATTACHMENT_LOAD_OP_NONE = 1000400000, + VK_ATTACHMENT_LOAD_OP_NONE_EXT = VK_ATTACHMENT_LOAD_OP_NONE, + VK_ATTACHMENT_LOAD_OP_NONE_KHR = VK_ATTACHMENT_LOAD_OP_NONE, + VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF +} VkAttachmentLoadOp; +typedef enum VkAttachmentStoreOp { + VK_ATTACHMENT_STORE_OP_STORE = 0, + VK_ATTACHMENT_STORE_OP_DONT_CARE = 1, + VK_ATTACHMENT_STORE_OP_NONE = 1000301000, + VK_ATTACHMENT_STORE_OP_NONE_KHR = VK_ATTACHMENT_STORE_OP_NONE, + VK_ATTACHMENT_STORE_OP_NONE_QCOM = VK_ATTACHMENT_STORE_OP_NONE, + VK_ATTACHMENT_STORE_OP_NONE_EXT = VK_ATTACHMENT_STORE_OP_NONE, + VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF +} VkAttachmentStoreOp; +typedef enum VkBlendFactor { + VK_BLEND_FACTOR_ZERO = 0, + VK_BLEND_FACTOR_ONE = 1, + VK_BLEND_FACTOR_SRC_COLOR = 2, + VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3, + VK_BLEND_FACTOR_DST_COLOR = 4, + VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5, + VK_BLEND_FACTOR_SRC_ALPHA = 6, + VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7, + VK_BLEND_FACTOR_DST_ALPHA = 8, + VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9, + VK_BLEND_FACTOR_CONSTANT_COLOR = 10, + VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11, + VK_BLEND_FACTOR_CONSTANT_ALPHA = 12, + VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13, + VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14, + VK_BLEND_FACTOR_SRC1_COLOR = 15, + VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16, + VK_BLEND_FACTOR_SRC1_ALPHA = 17, + VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18, + VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF +} VkBlendFactor; +typedef enum VkBlendOp { + VK_BLEND_OP_ADD = 0, + VK_BLEND_OP_SUBTRACT = 1, + VK_BLEND_OP_REVERSE_SUBTRACT = 2, + VK_BLEND_OP_MIN = 3, + VK_BLEND_OP_MAX = 4, + VK_BLEND_OP_ZERO_EXT = 1000148000, + VK_BLEND_OP_SRC_EXT = 1000148001, + VK_BLEND_OP_DST_EXT = 1000148002, + VK_BLEND_OP_SRC_OVER_EXT = 1000148003, + VK_BLEND_OP_DST_OVER_EXT = 1000148004, + VK_BLEND_OP_SRC_IN_EXT = 1000148005, + VK_BLEND_OP_DST_IN_EXT = 1000148006, + VK_BLEND_OP_SRC_OUT_EXT = 1000148007, + VK_BLEND_OP_DST_OUT_EXT = 1000148008, + VK_BLEND_OP_SRC_ATOP_EXT = 1000148009, + VK_BLEND_OP_DST_ATOP_EXT = 1000148010, + VK_BLEND_OP_XOR_EXT = 1000148011, + VK_BLEND_OP_MULTIPLY_EXT = 1000148012, + VK_BLEND_OP_SCREEN_EXT = 1000148013, + VK_BLEND_OP_OVERLAY_EXT = 1000148014, + VK_BLEND_OP_DARKEN_EXT = 1000148015, + VK_BLEND_OP_LIGHTEN_EXT = 1000148016, + VK_BLEND_OP_COLORDODGE_EXT = 1000148017, + VK_BLEND_OP_COLORBURN_EXT = 1000148018, + VK_BLEND_OP_HARDLIGHT_EXT = 1000148019, + VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020, + VK_BLEND_OP_DIFFERENCE_EXT = 1000148021, + VK_BLEND_OP_EXCLUSION_EXT = 1000148022, + VK_BLEND_OP_INVERT_EXT = 1000148023, + VK_BLEND_OP_INVERT_RGB_EXT = 1000148024, + VK_BLEND_OP_LINEARDODGE_EXT = 1000148025, + VK_BLEND_OP_LINEARBURN_EXT = 1000148026, + VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027, + VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028, + VK_BLEND_OP_PINLIGHT_EXT = 1000148029, + VK_BLEND_OP_HARDMIX_EXT = 1000148030, + VK_BLEND_OP_HSL_HUE_EXT = 1000148031, + VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032, + VK_BLEND_OP_HSL_COLOR_EXT = 1000148033, + VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034, + VK_BLEND_OP_PLUS_EXT = 1000148035, + VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036, + VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037, + VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038, + VK_BLEND_OP_MINUS_EXT = 1000148039, + VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040, + VK_BLEND_OP_CONTRAST_EXT = 1000148041, + VK_BLEND_OP_INVERT_OVG_EXT = 1000148042, + VK_BLEND_OP_RED_EXT = 1000148043, + VK_BLEND_OP_GREEN_EXT = 1000148044, + VK_BLEND_OP_BLUE_EXT = 1000148045, + VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF +} VkBlendOp; +typedef enum VkBorderColor { + VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0, + VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1, + VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2, + VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3, + VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4, + VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5, + VK_BORDER_COLOR_FLOAT_CUSTOM_EXT = 1000287003, + VK_BORDER_COLOR_INT_CUSTOM_EXT = 1000287004, + VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF +} VkBorderColor; +typedef enum VkFramebufferCreateFlagBits { + VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT = 1, + VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, + VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkFramebufferCreateFlagBits; +typedef enum VkQueryPoolCreateFlagBits { + VK_QUERY_POOL_CREATE_RESET_BIT_KHR = 1, + VK_QUERY_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueryPoolCreateFlagBits; +typedef enum VkRenderPassCreateFlagBits { + VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM = 2, + VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE = 4, + VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkRenderPassCreateFlagBits; +typedef enum VkSamplerCreateFlagBits { + VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT = 1, + VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT = 2, + VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 8, + VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT = 4, + VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM = 16, + VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSamplerCreateFlagBits; +typedef enum VkPipelineCacheHeaderVersion { + VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1, + VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF +} VkPipelineCacheHeaderVersion; +typedef enum VkPipelineCacheCreateFlagBits { + VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT = 1, + VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, + VK_PIPELINE_CACHE_CREATE_INTERNALLY_SYNCHRONIZED_MERGE_BIT_KHR = 8, + VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineCacheCreateFlagBits; +typedef enum VkPipelineShaderStageCreateFlagBits { + VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT = 1, + VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT = 2, + VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT, + VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT, + VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineShaderStageCreateFlagBits; +typedef enum VkDescriptorSetLayoutCreateFlagBits { + VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = 2, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT = 1, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 16, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT = 32, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE = 4, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV = 128, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT = 4, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV = 64, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorSetLayoutCreateFlagBits; +typedef enum VkInstanceCreateFlagBits { + VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR = 1, + VK_INSTANCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkInstanceCreateFlagBits; +typedef enum VkDeviceQueueCreateFlagBits { + VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT = 1, + VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDeviceQueueCreateFlagBits; +typedef enum VkBufferCreateFlagBits { + VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 1, + VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 2, + VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 4, + VK_BUFFER_CREATE_PROTECTED_BIT = 8, + VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 16, + VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, + VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, + VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 32, + VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR = 64, + VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkBufferCreateFlagBits; +typedef enum VkBufferUsageFlagBits { + VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 1, + VK_BUFFER_USAGE_TRANSFER_DST_BIT = 2, + VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 4, + VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 8, + VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 16, + VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 32, + VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 64, + VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 128, + VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 256, + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = 131072, + VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 8192, + VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR = 16384, + VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 2048, + VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 4096, + VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = 512, + VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX = 33554432, + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 524288, + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 1048576, + VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR = 1024, + VK_BUFFER_USAGE_RAY_TRACING_BIT_NV = VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR, + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, + VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 32768, + VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 65536, + VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT = 2097152, + VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT = 4194304, + VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = 67108864, + VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT = 8388608, + VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT = 16777216, + VK_BUFFER_USAGE_TILE_MEMORY_BIT_QCOM = 134217728, + VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkBufferUsageFlagBits; +typedef enum VkColorComponentFlagBits { + VK_COLOR_COMPONENT_R_BIT = 1, + VK_COLOR_COMPONENT_G_BIT = 2, + VK_COLOR_COMPONENT_B_BIT = 4, + VK_COLOR_COMPONENT_A_BIT = 8, + VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkColorComponentFlagBits; +typedef enum VkComponentSwizzle { + VK_COMPONENT_SWIZZLE_IDENTITY = 0, + VK_COMPONENT_SWIZZLE_ZERO = 1, + VK_COMPONENT_SWIZZLE_ONE = 2, + VK_COMPONENT_SWIZZLE_R = 3, + VK_COMPONENT_SWIZZLE_G = 4, + VK_COMPONENT_SWIZZLE_B = 5, + VK_COMPONENT_SWIZZLE_A = 6, + VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF +} VkComponentSwizzle; +typedef enum VkCommandPoolCreateFlagBits { + VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 1, + VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 2, + VK_COMMAND_POOL_CREATE_PROTECTED_BIT = 4, + VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkCommandPoolCreateFlagBits; +typedef enum VkCommandPoolResetFlagBits { + VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 1, + VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkCommandPoolResetFlagBits; +typedef enum VkCommandBufferResetFlagBits { + VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 1, + VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkCommandBufferResetFlagBits; +typedef enum VkCommandBufferLevel { + VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0, + VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1, + VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF +} VkCommandBufferLevel; +typedef enum VkCommandBufferUsageFlagBits { + VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 1, + VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 2, + VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 4, + VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkCommandBufferUsageFlagBits; +typedef enum VkCompareOp { + VK_COMPARE_OP_NEVER = 0, + VK_COMPARE_OP_LESS = 1, + VK_COMPARE_OP_EQUAL = 2, + VK_COMPARE_OP_LESS_OR_EQUAL = 3, + VK_COMPARE_OP_GREATER = 4, + VK_COMPARE_OP_NOT_EQUAL = 5, + VK_COMPARE_OP_GREATER_OR_EQUAL = 6, + VK_COMPARE_OP_ALWAYS = 7, + VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF +} VkCompareOp; +typedef enum VkCullModeFlagBits { + VK_CULL_MODE_NONE = 0, + VK_CULL_MODE_FRONT_BIT = 1, + VK_CULL_MODE_BACK_BIT = 2, + VK_CULL_MODE_FRONT_AND_BACK = 0x00000003, + VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkCullModeFlagBits; +typedef enum VkDescriptorType { + VK_DESCRIPTOR_TYPE_SAMPLER = 0, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1, + VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2, + VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3, + VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4, + VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6, + VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8, + VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9, + VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10, + VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK = 1000138000, + VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, + VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000, + VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000, + VK_DESCRIPTOR_TYPE_MUTABLE_VALVE = 1000351000, + VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM = 1000440000, + VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM = 1000440001, + VK_DESCRIPTOR_TYPE_TENSOR_ARM = 1000460000, + VK_DESCRIPTOR_TYPE_MUTABLE_EXT = 1000351000, + VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV = 1000570000, + VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorType; +typedef enum VkDynamicState { + VK_DYNAMIC_STATE_VIEWPORT = 0, + VK_DYNAMIC_STATE_SCISSOR = 1, + VK_DYNAMIC_STATE_LINE_WIDTH = 2, + VK_DYNAMIC_STATE_DEPTH_BIAS = 3, + VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4, + VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5, + VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6, + VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7, + VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8, + VK_DYNAMIC_STATE_CULL_MODE = 1000267000, + VK_DYNAMIC_STATE_FRONT_FACE = 1000267001, + VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY = 1000267002, + VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT = 1000267003, + VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT = 1000267004, + VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE = 1000267005, + VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE = 1000267006, + VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE = 1000267007, + VK_DYNAMIC_STATE_DEPTH_COMPARE_OP = 1000267008, + VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE = 1000267009, + VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE = 1000267010, + VK_DYNAMIC_STATE_STENCIL_OP = 1000267011, + VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE = 1000377001, + VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE = 1000377002, + VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE = 1000377004, + VK_DYNAMIC_STATE_LINE_STIPPLE = 1000259000, + VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000, + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000, + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT = 1000099001, + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT = 1000099002, + VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000, + VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR = 1000347000, + VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV = 1000164004, + VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV = 1000164006, + VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV = 1000205000, + VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = 1000205001, + VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR = 1000226000, + VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = VK_DYNAMIC_STATE_LINE_STIPPLE, + VK_DYNAMIC_STATE_CULL_MODE_EXT = VK_DYNAMIC_STATE_CULL_MODE, + VK_DYNAMIC_STATE_FRONT_FACE_EXT = VK_DYNAMIC_STATE_FRONT_FACE, + VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY, + VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, + VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT, + VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE, + VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE, + VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE, + VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP, + VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE, + VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, + VK_DYNAMIC_STATE_STENCIL_OP_EXT = VK_DYNAMIC_STATE_STENCIL_OP, + VK_DYNAMIC_STATE_VERTEX_INPUT_EXT = 1000352000, + VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT = 1000377000, + VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE, + VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE, + VK_DYNAMIC_STATE_LOGIC_OP_EXT = 1000377003, + VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, + VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT = 1000381000, + VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT = 1000455003, + VK_DYNAMIC_STATE_POLYGON_MODE_EXT = 1000455004, + VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT = 1000455005, + VK_DYNAMIC_STATE_SAMPLE_MASK_EXT = 1000455006, + VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT = 1000455007, + VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT = 1000455008, + VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT = 1000455009, + VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT = 1000455010, + VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT = 1000455011, + VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT = 1000455012, + VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT = 1000455002, + VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT = 1000455013, + VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT = 1000455014, + VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT = 1000455015, + VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT = 1000455016, + VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT = 1000455017, + VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT = 1000455018, + VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT = 1000455019, + VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT = 1000455020, + VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT = 1000455021, + VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT = 1000455022, + VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV = 1000455023, + VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV = 1000455024, + VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV = 1000455025, + VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV = 1000455026, + VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV = 1000455027, + VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV = 1000455028, + VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV = 1000455029, + VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV = 1000455030, + VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV = 1000455031, + VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV = 1000455032, + VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT = 1000524000, + VK_DYNAMIC_STATE_LINE_STIPPLE_KHR = VK_DYNAMIC_STATE_LINE_STIPPLE, + VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT = 1000582000, + VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF +} VkDynamicState; +typedef enum VkFenceCreateFlagBits { + VK_FENCE_CREATE_SIGNALED_BIT = 1, + VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkFenceCreateFlagBits; +typedef enum VkPolygonMode { + VK_POLYGON_MODE_FILL = 0, + VK_POLYGON_MODE_LINE = 1, + VK_POLYGON_MODE_POINT = 2, + VK_POLYGON_MODE_FILL_RECTANGLE_NV = 1000153000, + VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF +} VkPolygonMode; +typedef enum VkFormat { + VK_FORMAT_UNDEFINED = 0, + VK_FORMAT_R4G4_UNORM_PACK8 = 1, + VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2, + VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3, + VK_FORMAT_R5G6B5_UNORM_PACK16 = 4, + VK_FORMAT_B5G6R5_UNORM_PACK16 = 5, + VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6, + VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7, + VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8, + VK_FORMAT_R8_UNORM = 9, + VK_FORMAT_R8_SNORM = 10, + VK_FORMAT_R8_USCALED = 11, + VK_FORMAT_R8_SSCALED = 12, + VK_FORMAT_R8_UINT = 13, + VK_FORMAT_R8_SINT = 14, + VK_FORMAT_R8_SRGB = 15, + VK_FORMAT_R8G8_UNORM = 16, + VK_FORMAT_R8G8_SNORM = 17, + VK_FORMAT_R8G8_USCALED = 18, + VK_FORMAT_R8G8_SSCALED = 19, + VK_FORMAT_R8G8_UINT = 20, + VK_FORMAT_R8G8_SINT = 21, + VK_FORMAT_R8G8_SRGB = 22, + VK_FORMAT_R8G8B8_UNORM = 23, + VK_FORMAT_R8G8B8_SNORM = 24, + VK_FORMAT_R8G8B8_USCALED = 25, + VK_FORMAT_R8G8B8_SSCALED = 26, + VK_FORMAT_R8G8B8_UINT = 27, + VK_FORMAT_R8G8B8_SINT = 28, + VK_FORMAT_R8G8B8_SRGB = 29, + VK_FORMAT_B8G8R8_UNORM = 30, + VK_FORMAT_B8G8R8_SNORM = 31, + VK_FORMAT_B8G8R8_USCALED = 32, + VK_FORMAT_B8G8R8_SSCALED = 33, + VK_FORMAT_B8G8R8_UINT = 34, + VK_FORMAT_B8G8R8_SINT = 35, + VK_FORMAT_B8G8R8_SRGB = 36, + VK_FORMAT_R8G8B8A8_UNORM = 37, + VK_FORMAT_R8G8B8A8_SNORM = 38, + VK_FORMAT_R8G8B8A8_USCALED = 39, + VK_FORMAT_R8G8B8A8_SSCALED = 40, + VK_FORMAT_R8G8B8A8_UINT = 41, + VK_FORMAT_R8G8B8A8_SINT = 42, + VK_FORMAT_R8G8B8A8_SRGB = 43, + VK_FORMAT_B8G8R8A8_UNORM = 44, + VK_FORMAT_B8G8R8A8_SNORM = 45, + VK_FORMAT_B8G8R8A8_USCALED = 46, + VK_FORMAT_B8G8R8A8_SSCALED = 47, + VK_FORMAT_B8G8R8A8_UINT = 48, + VK_FORMAT_B8G8R8A8_SINT = 49, + VK_FORMAT_B8G8R8A8_SRGB = 50, + VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51, + VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52, + VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53, + VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54, + VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55, + VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56, + VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57, + VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58, + VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59, + VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60, + VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61, + VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62, + VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63, + VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64, + VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65, + VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66, + VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67, + VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68, + VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69, + VK_FORMAT_R16_UNORM = 70, + VK_FORMAT_R16_SNORM = 71, + VK_FORMAT_R16_USCALED = 72, + VK_FORMAT_R16_SSCALED = 73, + VK_FORMAT_R16_UINT = 74, + VK_FORMAT_R16_SINT = 75, + VK_FORMAT_R16_SFLOAT = 76, + VK_FORMAT_R16G16_UNORM = 77, + VK_FORMAT_R16G16_SNORM = 78, + VK_FORMAT_R16G16_USCALED = 79, + VK_FORMAT_R16G16_SSCALED = 80, + VK_FORMAT_R16G16_UINT = 81, + VK_FORMAT_R16G16_SINT = 82, + VK_FORMAT_R16G16_SFLOAT = 83, + VK_FORMAT_R16G16B16_UNORM = 84, + VK_FORMAT_R16G16B16_SNORM = 85, + VK_FORMAT_R16G16B16_USCALED = 86, + VK_FORMAT_R16G16B16_SSCALED = 87, + VK_FORMAT_R16G16B16_UINT = 88, + VK_FORMAT_R16G16B16_SINT = 89, + VK_FORMAT_R16G16B16_SFLOAT = 90, + VK_FORMAT_R16G16B16A16_UNORM = 91, + VK_FORMAT_R16G16B16A16_SNORM = 92, + VK_FORMAT_R16G16B16A16_USCALED = 93, + VK_FORMAT_R16G16B16A16_SSCALED = 94, + VK_FORMAT_R16G16B16A16_UINT = 95, + VK_FORMAT_R16G16B16A16_SINT = 96, + VK_FORMAT_R16G16B16A16_SFLOAT = 97, + VK_FORMAT_R32_UINT = 98, + VK_FORMAT_R32_SINT = 99, + VK_FORMAT_R32_SFLOAT = 100, + VK_FORMAT_R32G32_UINT = 101, + VK_FORMAT_R32G32_SINT = 102, + VK_FORMAT_R32G32_SFLOAT = 103, + VK_FORMAT_R32G32B32_UINT = 104, + VK_FORMAT_R32G32B32_SINT = 105, + VK_FORMAT_R32G32B32_SFLOAT = 106, + VK_FORMAT_R32G32B32A32_UINT = 107, + VK_FORMAT_R32G32B32A32_SINT = 108, + VK_FORMAT_R32G32B32A32_SFLOAT = 109, + VK_FORMAT_R64_UINT = 110, + VK_FORMAT_R64_SINT = 111, + VK_FORMAT_R64_SFLOAT = 112, + VK_FORMAT_R64G64_UINT = 113, + VK_FORMAT_R64G64_SINT = 114, + VK_FORMAT_R64G64_SFLOAT = 115, + VK_FORMAT_R64G64B64_UINT = 116, + VK_FORMAT_R64G64B64_SINT = 117, + VK_FORMAT_R64G64B64_SFLOAT = 118, + VK_FORMAT_R64G64B64A64_UINT = 119, + VK_FORMAT_R64G64B64A64_SINT = 120, + VK_FORMAT_R64G64B64A64_SFLOAT = 121, + VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122, + VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123, + VK_FORMAT_D16_UNORM = 124, + VK_FORMAT_X8_D24_UNORM_PACK32 = 125, + VK_FORMAT_D32_SFLOAT = 126, + VK_FORMAT_S8_UINT = 127, + VK_FORMAT_D16_UNORM_S8_UINT = 128, + VK_FORMAT_D24_UNORM_S8_UINT = 129, + VK_FORMAT_D32_SFLOAT_S8_UINT = 130, + VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131, + VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132, + VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133, + VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134, + VK_FORMAT_BC2_UNORM_BLOCK = 135, + VK_FORMAT_BC2_SRGB_BLOCK = 136, + VK_FORMAT_BC3_UNORM_BLOCK = 137, + VK_FORMAT_BC3_SRGB_BLOCK = 138, + VK_FORMAT_BC4_UNORM_BLOCK = 139, + VK_FORMAT_BC4_SNORM_BLOCK = 140, + VK_FORMAT_BC5_UNORM_BLOCK = 141, + VK_FORMAT_BC5_SNORM_BLOCK = 142, + VK_FORMAT_BC6H_UFLOAT_BLOCK = 143, + VK_FORMAT_BC6H_SFLOAT_BLOCK = 144, + VK_FORMAT_BC7_UNORM_BLOCK = 145, + VK_FORMAT_BC7_SRGB_BLOCK = 146, + VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147, + VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148, + VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149, + VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150, + VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151, + VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152, + VK_FORMAT_EAC_R11_UNORM_BLOCK = 153, + VK_FORMAT_EAC_R11_SNORM_BLOCK = 154, + VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155, + VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156, + VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157, + VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158, + VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159, + VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160, + VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161, + VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162, + VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163, + VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164, + VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165, + VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166, + VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167, + VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168, + VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169, + VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170, + VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171, + VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172, + VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173, + VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174, + VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175, + VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176, + VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177, + VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178, + VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179, + VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180, + VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181, + VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182, + VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183, + VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184, + VK_FORMAT_G8B8G8R8_422_UNORM = 1000156000, + VK_FORMAT_B8G8R8G8_422_UNORM = 1000156001, + VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002, + VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003, + VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004, + VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005, + VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006, + VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007, + VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008, + VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009, + VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010, + VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016, + VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017, + VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018, + VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019, + VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020, + VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026, + VK_FORMAT_G16B16G16R16_422_UNORM = 1000156027, + VK_FORMAT_B16G16R16G16_422_UNORM = 1000156028, + VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029, + VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030, + VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031, + VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032, + VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033, + VK_FORMAT_G8_B8R8_2PLANE_444_UNORM = 1000330000, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16 = 1000330001, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16 = 1000330002, + VK_FORMAT_G16_B16R16_2PLANE_444_UNORM = 1000330003, + VK_FORMAT_A4R4G4B4_UNORM_PACK16 = 1000340000, + VK_FORMAT_A4B4G4R4_UNORM_PACK16 = 1000340001, + VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK = 1000066000, + VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK = 1000066001, + VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK = 1000066002, + VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK = 1000066003, + VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK = 1000066004, + VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK = 1000066005, + VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK = 1000066006, + VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK = 1000066007, + VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK = 1000066008, + VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK = 1000066009, + VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK = 1000066010, + VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK = 1000066011, + VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK = 1000066012, + VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK = 1000066013, + VK_FORMAT_A1B5G5R5_UNORM_PACK16 = 1000470000, + VK_FORMAT_A8_UNORM = 1000470001, + VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000, + VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001, + VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002, + VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003, + VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004, + VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005, + VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006, + VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007, + VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK, + VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK, + VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK, + VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK, + VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK, + VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK, + VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK, + VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM, + VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM, + VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, + VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, + VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM, + VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM, + VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM, + VK_FORMAT_R10X6_UNORM_PACK16_KHR = VK_FORMAT_R10X6_UNORM_PACK16, + VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16, + VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, + VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, + VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, + VK_FORMAT_R12X4_UNORM_PACK16_KHR = VK_FORMAT_R12X4_UNORM_PACK16, + VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16, + VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, + VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, + VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, + VK_FORMAT_G16B16G16R16_422_UNORM_KHR = VK_FORMAT_G16B16G16R16_422_UNORM, + VK_FORMAT_B16G16R16G16_422_UNORM_KHR = VK_FORMAT_B16G16R16G16_422_UNORM, + VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, + VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM, + VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, + VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM, + VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, + VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16, + VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM, + VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = VK_FORMAT_A4R4G4B4_UNORM_PACK16, + VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16, + VK_FORMAT_R8_BOOL_ARM = 1000460000, + VK_FORMAT_R16G16_SFIXED5_NV = 1000464000, + VK_FORMAT_R16G16_S10_5_NV = VK_FORMAT_R16G16_SFIXED5_NV, + VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR = VK_FORMAT_A1B5G5R5_UNORM_PACK16, + VK_FORMAT_A8_UNORM_KHR = VK_FORMAT_A8_UNORM, + VK_FORMAT_R10X6_UINT_PACK16_ARM = 1000609000, + VK_FORMAT_R10X6G10X6_UINT_2PACK16_ARM = 1000609001, + VK_FORMAT_R10X6G10X6B10X6A10X6_UINT_4PACK16_ARM = 1000609002, + VK_FORMAT_R12X4_UINT_PACK16_ARM = 1000609003, + VK_FORMAT_R12X4G12X4_UINT_2PACK16_ARM = 1000609004, + VK_FORMAT_R12X4G12X4B12X4A12X4_UINT_4PACK16_ARM = 1000609005, + VK_FORMAT_R14X2_UINT_PACK16_ARM = 1000609006, + VK_FORMAT_R14X2G14X2_UINT_2PACK16_ARM = 1000609007, + VK_FORMAT_R14X2G14X2B14X2A14X2_UINT_4PACK16_ARM = 1000609008, + VK_FORMAT_R14X2_UNORM_PACK16_ARM = 1000609009, + VK_FORMAT_R14X2G14X2_UNORM_2PACK16_ARM = 1000609010, + VK_FORMAT_R14X2G14X2B14X2A14X2_UNORM_4PACK16_ARM = 1000609011, + VK_FORMAT_G14X2_B14X2R14X2_2PLANE_420_UNORM_3PACK16_ARM = 1000609012, + VK_FORMAT_G14X2_B14X2R14X2_2PLANE_422_UNORM_3PACK16_ARM = 1000609013, + VK_FORMAT_MAX_ENUM = 0x7FFFFFFF +} VkFormat; +typedef enum VkFormatFeatureFlagBits { + VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 1, + VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 2, + VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 4, + VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 8, + VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 16, + VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 32, + VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 64, + VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 128, + VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 256, + VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 512, + VK_FORMAT_FEATURE_BLIT_SRC_BIT = 1024, + VK_FORMAT_FEATURE_BLIT_DST_BIT = 2048, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 4096, + VK_FORMAT_FEATURE_TRANSFER_SRC_BIT = 16384, + VK_FORMAT_FEATURE_TRANSFER_DST_BIT = 32768, + VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = 131072, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 262144, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 524288, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 1048576, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 2097152, + VK_FORMAT_FEATURE_DISJOINT_BIT = 4194304, + VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 8388608, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 65536, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 8192, + VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR = 33554432, + VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR = 67108864, + VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, + VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT, + VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 536870912, + VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT, + VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = VK_FORMAT_FEATURE_DISJOINT_BIT, + VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 8192, + VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = 16777216, + VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 1073741824, + VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR = 134217728, + VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR = 268435456, + VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkFormatFeatureFlagBits; +typedef enum VkFrontFace { + VK_FRONT_FACE_COUNTER_CLOCKWISE = 0, + VK_FRONT_FACE_CLOCKWISE = 1, + VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF +} VkFrontFace; +typedef enum VkMemoryMapFlagBits { + VK_MEMORY_MAP_PLACED_BIT_EXT = 1, + VK_MEMORY_MAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryMapFlagBits; +typedef enum VkImageAspectFlagBits { + VK_IMAGE_ASPECT_COLOR_BIT = 1, + VK_IMAGE_ASPECT_DEPTH_BIT = 2, + VK_IMAGE_ASPECT_STENCIL_BIT = 4, + VK_IMAGE_ASPECT_METADATA_BIT = 8, + VK_IMAGE_ASPECT_PLANE_0_BIT = 16, + VK_IMAGE_ASPECT_PLANE_1_BIT = 32, + VK_IMAGE_ASPECT_PLANE_2_BIT = 64, + VK_IMAGE_ASPECT_NONE = 0, + VK_IMAGE_ASPECT_PLANE_0_BIT_KHR = VK_IMAGE_ASPECT_PLANE_0_BIT, + VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = VK_IMAGE_ASPECT_PLANE_1_BIT, + VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = VK_IMAGE_ASPECT_PLANE_2_BIT, + VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT = 128, + VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT = 256, + VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT = 512, + VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT = 1024, + VK_IMAGE_ASPECT_NONE_KHR = VK_IMAGE_ASPECT_NONE, + VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkImageAspectFlagBits; +typedef enum VkImageCreateFlagBits { + VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 1, + VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 2, + VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 4, + VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 8, + VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 16, + VK_IMAGE_CREATE_ALIAS_BIT = 1024, + VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = 64, + VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT = 32, + VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT = 128, + VK_IMAGE_CREATE_EXTENDED_USAGE_BIT = 256, + VK_IMAGE_CREATE_PROTECTED_BIT = 2048, + VK_IMAGE_CREATE_DISJOINT_BIT = 512, + VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV = 8192, + VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT, + VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, + VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, + VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT, + VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 4096, + VK_IMAGE_CREATE_DISJOINT_BIT_KHR = VK_IMAGE_CREATE_DISJOINT_BIT, + VK_IMAGE_CREATE_ALIAS_BIT_KHR = VK_IMAGE_CREATE_ALIAS_BIT, + VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT = 16384, + VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 65536, + VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT = 262144, + VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT = 131072, + VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM = 32768, + VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR = 1048576, + VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT = 32768, + VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkImageCreateFlagBits; +typedef enum VkImageLayout { + VK_IMAGE_LAYOUT_UNDEFINED = 0, + VK_IMAGE_LAYOUT_GENERAL = 1, + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2, + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3, + VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7, + VK_IMAGE_LAYOUT_PREINITIALIZED = 8, + VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = 1000117000, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = 1000117001, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL = 1000241000, + VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL = 1000241001, + VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = 1000241002, + VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = 1000241003, + VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL = 1000314000, + VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL = 1000314001, + VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ = 1000232000, + VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002, + VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR = 1000024000, + VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR = 1000024001, + VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR = 1000024002, + VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000, + VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = 1000164003, + VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = 1000218000, + VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR = 1000164003, + VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ_KHR = VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR = 1000299000, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR = 1000299001, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR = 1000299002, + VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT = 1000339000, + VK_IMAGE_LAYOUT_TENSOR_ALIASING_ARM = 1000460000, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_QUANTIZATION_MAP_KHR = 1000553000, + VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT = 1000620000, + VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF +} VkImageLayout; +typedef enum VkImageTiling { + VK_IMAGE_TILING_OPTIMAL = 0, + VK_IMAGE_TILING_LINEAR = 1, + VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = 1000158000, + VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF +} VkImageTiling; +typedef enum VkImageType { + VK_IMAGE_TYPE_1D = 0, + VK_IMAGE_TYPE_2D = 1, + VK_IMAGE_TYPE_3D = 2, + VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkImageType; +typedef enum VkImageUsageFlagBits { + VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 1, + VK_IMAGE_USAGE_TRANSFER_DST_BIT = 2, + VK_IMAGE_USAGE_SAMPLED_BIT = 4, + VK_IMAGE_USAGE_STORAGE_BIT = 8, + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 16, + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 32, + VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 64, + VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 128, + VK_IMAGE_USAGE_HOST_TRANSFER_BIT = 4194304, + VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR = 1024, + VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 2048, + VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR = 4096, + VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = 256, + VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 512, + VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 256, + VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT = VK_IMAGE_USAGE_HOST_TRANSFER_BIT, + VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 8192, + VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 16384, + VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR = 32768, + VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 524288, + VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI = 262144, + VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM = 1048576, + VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM = 2097152, + VK_IMAGE_USAGE_TENSOR_ALIASING_BIT_ARM = 8388608, + VK_IMAGE_USAGE_TILE_MEMORY_BIT_QCOM = 134217728, + VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 33554432, + VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR = 67108864, + VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkImageUsageFlagBits; +typedef enum VkImageViewCreateFlagBits { + VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT = 1, + VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 4, + VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT = 2, + VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkImageViewCreateFlagBits; +typedef enum VkImageViewType { + VK_IMAGE_VIEW_TYPE_1D = 0, + VK_IMAGE_VIEW_TYPE_2D = 1, + VK_IMAGE_VIEW_TYPE_3D = 2, + VK_IMAGE_VIEW_TYPE_CUBE = 3, + VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4, + VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5, + VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6, + VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkImageViewType; +typedef enum VkIndirectCommandsTokenTypeEXT { + VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT = 0, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT = 1, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT = 2, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT = 3, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT = 4, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT = 5, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT = 6, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT = 7, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT = 8, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT = 9, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT = 1000202002, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT = 1000202003, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT = 1000328000, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT = 1000328001, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT = 1000386004, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectCommandsTokenTypeEXT; +typedef enum VkSharingMode { + VK_SHARING_MODE_EXCLUSIVE = 0, + VK_SHARING_MODE_CONCURRENT = 1, + VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF +} VkSharingMode; +typedef enum VkIndexType { + VK_INDEX_TYPE_UINT16 = 0, + VK_INDEX_TYPE_UINT32 = 1, + VK_INDEX_TYPE_UINT8 = 1000265000, + VK_INDEX_TYPE_NONE_KHR = 1000165000, + VK_INDEX_TYPE_NONE_NV = VK_INDEX_TYPE_NONE_KHR, + VK_INDEX_TYPE_UINT8_EXT = VK_INDEX_TYPE_UINT8, + VK_INDEX_TYPE_UINT8_KHR = VK_INDEX_TYPE_UINT8, + VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkIndexType; +typedef enum VkLogicOp { + VK_LOGIC_OP_CLEAR = 0, + VK_LOGIC_OP_AND = 1, + VK_LOGIC_OP_AND_REVERSE = 2, + VK_LOGIC_OP_COPY = 3, + VK_LOGIC_OP_AND_INVERTED = 4, + VK_LOGIC_OP_NO_OP = 5, + VK_LOGIC_OP_XOR = 6, + VK_LOGIC_OP_OR = 7, + VK_LOGIC_OP_NOR = 8, + VK_LOGIC_OP_EQUIVALENT = 9, + VK_LOGIC_OP_INVERT = 10, + VK_LOGIC_OP_OR_REVERSE = 11, + VK_LOGIC_OP_COPY_INVERTED = 12, + VK_LOGIC_OP_OR_INVERTED = 13, + VK_LOGIC_OP_NAND = 14, + VK_LOGIC_OP_SET = 15, + VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF +} VkLogicOp; +typedef enum VkMemoryHeapFlagBits { + VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 1, + VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 2, + VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT, + VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM = 8, + VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryHeapFlagBits; +typedef enum VkAccessFlagBits { + VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 1, + VK_ACCESS_INDEX_READ_BIT = 2, + VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 4, + VK_ACCESS_UNIFORM_READ_BIT = 8, + VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 16, + VK_ACCESS_SHADER_READ_BIT = 32, + VK_ACCESS_SHADER_WRITE_BIT = 64, + VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 128, + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 256, + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 512, + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 1024, + VK_ACCESS_TRANSFER_READ_BIT = 2048, + VK_ACCESS_TRANSFER_WRITE_BIT = 4096, + VK_ACCESS_HOST_READ_BIT = 8192, + VK_ACCESS_HOST_WRITE_BIT = 16384, + VK_ACCESS_MEMORY_READ_BIT = 32768, + VK_ACCESS_MEMORY_WRITE_BIT = 65536, + VK_ACCESS_NONE = 0, + VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 33554432, + VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 67108864, + VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 134217728, + VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT = 1048576, + VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 524288, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR = 2097152, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 4194304, + VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = 8388608, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, + VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 16777216, + VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 8388608, + VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV = 131072, + VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV = 262144, + VK_ACCESS_NONE_KHR = VK_ACCESS_NONE, + VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT = 131072, + VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT = 262144, + VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkAccessFlagBits; +typedef enum VkMemoryPropertyFlagBits { + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 1, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 2, + VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 4, + VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 8, + VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 16, + VK_MEMORY_PROPERTY_PROTECTED_BIT = 32, + VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD = 64, + VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD = 128, + VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV = 256, + VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryPropertyFlagBits; +typedef enum VkPhysicalDeviceType { + VK_PHYSICAL_DEVICE_TYPE_OTHER = 0, + VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1, + VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2, + VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3, + VK_PHYSICAL_DEVICE_TYPE_CPU = 4, + VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkPhysicalDeviceType; +typedef enum VkPipelineBindPoint { + VK_PIPELINE_BIND_POINT_GRAPHICS = 0, + VK_PIPELINE_BIND_POINT_COMPUTE = 1, + VK_PIPELINE_BIND_POINT_EXECUTION_GRAPH_AMDX = 1000134000, + VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR = 1000165000, + VK_PIPELINE_BIND_POINT_RAY_TRACING_NV = VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, + VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI = 1000369003, + VK_PIPELINE_BIND_POINT_DATA_GRAPH_ARM = 1000507000, + VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF +} VkPipelineBindPoint; +typedef enum VkPipelineCreateFlagBits { + VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 1, + VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 2, + VK_PIPELINE_CREATE_DERIVATIVE_BIT = 4, + VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 8, + VK_PIPELINE_CREATE_DISPATCH_BASE_BIT = 16, + VK_PIPELINE_CREATE_DISPATCH_BASE = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, + VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT = 256, + VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT = 512, + VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT = 134217728, + VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT = 1073741824, + VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT, + VK_PIPELINE_CREATE_DISPATCH_BASE_BIT_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, + VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 16384, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 32768, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 65536, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 131072, + VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 4096, + VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR = 8192, + VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 524288, + VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV = 32, + VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 4194304, + VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT, + VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 2097152, + VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR = 64, + VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 128, + VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV = 262144, + VK_PIPELINE_CREATE_LIBRARY_BIT_KHR = 2048, + VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT, + VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT, + VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 536870912, + VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT = 8388608, + VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT = 1024, + VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV = 1048576, + VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 33554432, + VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 67108864, + VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT = 16777216, + VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV = 268435456, + VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT = VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT, + VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT = VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT, + VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineCreateFlagBits; +typedef enum VkPrimitiveTopology { + VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0, + VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1, + VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2, + VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3, + VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4, + VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5, + VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6, + VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7, + VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8, + VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9, + VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10, + VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF +} VkPrimitiveTopology; +typedef enum VkQueryControlFlagBits { + VK_QUERY_CONTROL_PRECISE_BIT = 1, + VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueryControlFlagBits; +typedef enum VkQueryPipelineStatisticFlagBits { + VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 1, + VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 2, + VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 4, + VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 8, + VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 16, + VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 32, + VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 64, + VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 128, + VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 256, + VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 512, + VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 1024, + VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT = 2048, + VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT = 4096, + VK_QUERY_PIPELINE_STATISTIC_CLUSTER_CULLING_SHADER_INVOCATIONS_BIT_HUAWEI = 8192, + VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueryPipelineStatisticFlagBits; +typedef enum VkQueryResultFlagBits { + VK_QUERY_RESULT_64_BIT = 1, + VK_QUERY_RESULT_WAIT_BIT = 2, + VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 4, + VK_QUERY_RESULT_PARTIAL_BIT = 8, + VK_QUERY_RESULT_WITH_STATUS_BIT_KHR = 16, + VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueryResultFlagBits; +typedef enum VkQueryType { + VK_QUERY_TYPE_OCCLUSION = 0, + VK_QUERY_TYPE_PIPELINE_STATISTICS = 1, + VK_QUERY_TYPE_TIMESTAMP = 2, + VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR = 1000023000, + VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT = 1000028004, + VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR = 1000116000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = 1000150000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR = 1000150001, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV = 1000165000, + VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL = 1000210000, + VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR = 1000299000, + VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT = 1000328000, + VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT = 1000382000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR = 1000386000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR = 1000386001, + VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT = 1000396000, + VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT = 1000396001, + VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkQueryType; +typedef enum VkQueueFlagBits { + VK_QUEUE_GRAPHICS_BIT = 1, + VK_QUEUE_COMPUTE_BIT = 2, + VK_QUEUE_TRANSFER_BIT = 4, + VK_QUEUE_SPARSE_BINDING_BIT = 8, + VK_QUEUE_PROTECTED_BIT = 16, + VK_QUEUE_VIDEO_DECODE_BIT_KHR = 32, + VK_QUEUE_VIDEO_ENCODE_BIT_KHR = 64, + VK_QUEUE_OPTICAL_FLOW_BIT_NV = 256, + VK_QUEUE_DATA_GRAPH_BIT_ARM = 1024, + VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueueFlagBits; +typedef enum VkSubpassContents { + VK_SUBPASS_CONTENTS_INLINE = 0, + VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1, + VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT = 1000451000, + VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHR = 1000451000, + VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF +} VkSubpassContents; +typedef enum VkResult { + VK_SUCCESS = 0, + VK_NOT_READY = 1, + VK_TIMEOUT = 2, + VK_EVENT_SET = 3, + VK_EVENT_RESET = 4, + VK_INCOMPLETE = 5, + VK_ERROR_OUT_OF_HOST_MEMORY = -1, + VK_ERROR_OUT_OF_DEVICE_MEMORY = -2, + VK_ERROR_INITIALIZATION_FAILED = -3, + VK_ERROR_DEVICE_LOST = -4, + VK_ERROR_MEMORY_MAP_FAILED = -5, + VK_ERROR_LAYER_NOT_PRESENT = -6, + VK_ERROR_EXTENSION_NOT_PRESENT = -7, + VK_ERROR_FEATURE_NOT_PRESENT = -8, + VK_ERROR_INCOMPATIBLE_DRIVER = -9, + VK_ERROR_TOO_MANY_OBJECTS = -10, + VK_ERROR_FORMAT_NOT_SUPPORTED = -11, + VK_ERROR_FRAGMENTED_POOL = -12, + VK_ERROR_UNKNOWN = -13, + VK_ERROR_VALIDATION_FAILED = -1000011001, + VK_ERROR_OUT_OF_POOL_MEMORY = -1000069000, + VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003, + VK_ERROR_FRAGMENTATION = -1000161000, + VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000, + VK_PIPELINE_COMPILE_REQUIRED = 1000297000, + VK_ERROR_NOT_PERMITTED = -1000174001, + VK_ERROR_SURFACE_LOST_KHR = -1000000000, + VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001, + VK_SUBOPTIMAL_KHR = 1000001003, + VK_ERROR_OUT_OF_DATE_KHR = -1000001004, + VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001, + VK_ERROR_VALIDATION_FAILED_EXT = VK_ERROR_VALIDATION_FAILED, + VK_ERROR_INVALID_SHADER_NV = -1000012000, + VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR = -1000023000, + VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR = -1000023001, + VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR = -1000023002, + VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR = -1000023003, + VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR = -1000023004, + VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR = -1000023005, + VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY, + VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE, + VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000, + VK_ERROR_FRAGMENTATION_EXT = VK_ERROR_FRAGMENTATION, + VK_ERROR_NOT_PERMITTED_EXT = VK_ERROR_NOT_PERMITTED, + VK_ERROR_NOT_PERMITTED_KHR = VK_ERROR_NOT_PERMITTED, + VK_ERROR_INVALID_DEVICE_ADDRESS_EXT = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, + VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = -1000255000, + VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, + VK_THREAD_IDLE_KHR = 1000268000, + VK_THREAD_DONE_KHR = 1000268001, + VK_OPERATION_DEFERRED_KHR = 1000268002, + VK_OPERATION_NOT_DEFERRED_KHR = 1000268003, + VK_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED, + VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED, + VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR = -1000299000, + VK_ERROR_COMPRESSION_EXHAUSTED_EXT = -1000338000, + VK_INCOMPATIBLE_SHADER_BINARY_EXT = 1000482000, + VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT = VK_INCOMPATIBLE_SHADER_BINARY_EXT, + VK_PIPELINE_BINARY_MISSING_KHR = 1000483000, + VK_ERROR_NOT_ENOUGH_SPACE_KHR = -1000483000, + VK_RESULT_MAX_ENUM = 0x7FFFFFFF +} VkResult; +typedef enum VkShaderStageFlagBits { + VK_SHADER_STAGE_VERTEX_BIT = 1, + VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 2, + VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 4, + VK_SHADER_STAGE_GEOMETRY_BIT = 8, + VK_SHADER_STAGE_FRAGMENT_BIT = 16, + VK_SHADER_STAGE_COMPUTE_BIT = 32, + VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F, + VK_SHADER_STAGE_ALL = 0x7FFFFFFF, + VK_SHADER_STAGE_RAYGEN_BIT_KHR = 256, + VK_SHADER_STAGE_ANY_HIT_BIT_KHR = 512, + VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 1024, + VK_SHADER_STAGE_MISS_BIT_KHR = 2048, + VK_SHADER_STAGE_INTERSECTION_BIT_KHR = 4096, + VK_SHADER_STAGE_CALLABLE_BIT_KHR = 8192, + VK_SHADER_STAGE_RAYGEN_BIT_NV = VK_SHADER_STAGE_RAYGEN_BIT_KHR, + VK_SHADER_STAGE_ANY_HIT_BIT_NV = VK_SHADER_STAGE_ANY_HIT_BIT_KHR, + VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, + VK_SHADER_STAGE_MISS_BIT_NV = VK_SHADER_STAGE_MISS_BIT_KHR, + VK_SHADER_STAGE_INTERSECTION_BIT_NV = VK_SHADER_STAGE_INTERSECTION_BIT_KHR, + VK_SHADER_STAGE_CALLABLE_BIT_NV = VK_SHADER_STAGE_CALLABLE_BIT_KHR, + VK_SHADER_STAGE_TASK_BIT_NV = 64, + VK_SHADER_STAGE_MESH_BIT_NV = 128, + VK_SHADER_STAGE_TASK_BIT_EXT = 64, + VK_SHADER_STAGE_MESH_BIT_EXT = 128, + VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI = 16384, + VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI = 524288, + VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkShaderStageFlagBits; +typedef enum VkSparseMemoryBindFlagBits { + VK_SPARSE_MEMORY_BIND_METADATA_BIT = 1, + VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSparseMemoryBindFlagBits; +typedef enum VkStencilFaceFlagBits { + VK_STENCIL_FACE_FRONT_BIT = 1, + VK_STENCIL_FACE_BACK_BIT = 2, + VK_STENCIL_FACE_FRONT_AND_BACK = 0x00000003, + VK_STENCIL_FRONT_AND_BACK = VK_STENCIL_FACE_FRONT_AND_BACK, + VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkStencilFaceFlagBits; +typedef enum VkStencilOp { + VK_STENCIL_OP_KEEP = 0, + VK_STENCIL_OP_ZERO = 1, + VK_STENCIL_OP_REPLACE = 2, + VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3, + VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4, + VK_STENCIL_OP_INVERT = 5, + VK_STENCIL_OP_INCREMENT_AND_WRAP = 6, + VK_STENCIL_OP_DECREMENT_AND_WRAP = 7, + VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF +} VkStencilOp; +typedef enum VkStructureType { + VK_STRUCTURE_TYPE_APPLICATION_INFO = 0, + VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2, + VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3, + VK_STRUCTURE_TYPE_SUBMIT_INFO = 4, + VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5, + VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6, + VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7, + VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8, + VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9, + VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10, + VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11, + VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12, + VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13, + VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14, + VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15, + VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16, + VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19, + VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20, + VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23, + VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24, + VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25, + VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26, + VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27, + VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28, + VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29, + VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30, + VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32, + VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35, + VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36, + VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38, + VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42, + VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45, + VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46, + VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47, + VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = 1000094000, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = 1000157000, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = 1000157001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = 1000083000, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = 1000127000, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = 1000127001, + VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = 1000060000, + VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = 1000060003, + VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = 1000060004, + VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = 1000060005, + VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = 1000060006, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = 1000060013, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = 1000060014, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = 1000070000, + VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = 1000070001, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = 1000146000, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = 1000146001, + VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = 1000146002, + VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = 1000146003, + VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = 1000146004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = 1000059000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = 1000059001, + VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = 1000059002, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = 1000059003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = 1000059004, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = 1000059005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = 1000059006, + VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = 1000059007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = 1000059008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = 1000117000, + VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = 1000117001, + VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = 1000117002, + VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = 1000117003, + VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = 1000053000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = 1000053001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = 1000053002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES = 1000120000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, + VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = 1000145000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = 1000145001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = 1000145002, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = 1000145003, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = 1000156000, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = 1000156001, + VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = 1000156002, + VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = 1000156003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = 1000156004, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = 1000156005, + VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO = 1000085000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = 1000071000, + VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = 1000071001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = 1000071002, + VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = 1000071003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = 1000071004, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = 1000072000, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = 1000072001, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = 1000072002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = 1000112000, + VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = 1000112001, + VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = 1000113000, + VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = 1000077000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = 1000076000, + VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = 1000076001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = 1000168000, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = 1000168001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES = 1000063000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES = 49, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES = 50, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES = 51, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES = 52, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO = 1000147000, + VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2 = 1000109000, + VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2 = 1000109001, + VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2 = 1000109002, + VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2 = 1000109003, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 = 1000109004, + VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO = 1000109005, + VK_STRUCTURE_TYPE_SUBPASS_END_INFO = 1000109006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES = 1000177000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES = 1000196000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES = 1000180000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES = 1000082000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES = 1000197000, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO = 1000161000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES = 1000161001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES = 1000161002, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO = 1000161003, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT = 1000161004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES = 1000199000, + VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE = 1000199001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES = 1000221000, + VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO = 1000246000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES = 1000130000, + VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO = 1000130001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES = 1000211000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES = 1000108000, + VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO = 1000108001, + VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO = 1000108002, + VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO = 1000108003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES = 1000253000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES = 1000175000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES = 1000241000, + VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT = 1000241001, + VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT = 1000241002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES = 1000261000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES = 1000207000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES = 1000207001, + VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO = 1000207002, + VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO = 1000207003, + VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO = 1000207004, + VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO = 1000207005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES = 1000257000, + VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO = 1000244001, + VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO = 1000257002, + VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO = 1000257003, + VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO = 1000257004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES = 53, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES = 54, + VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO = 1000192000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES = 1000215000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES = 1000245000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES = 1000276000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES = 1000295000, + VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO = 1000295001, + VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO = 1000295002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES = 1000297000, + VK_STRUCTURE_TYPE_MEMORY_BARRIER_2 = 1000314000, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2 = 1000314001, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2 = 1000314002, + VK_STRUCTURE_TYPE_DEPENDENCY_INFO = 1000314003, + VK_STRUCTURE_TYPE_SUBMIT_INFO_2 = 1000314004, + VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO = 1000314005, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO = 1000314006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES = 1000314007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES = 1000325000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES = 1000335000, + VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2 = 1000337000, + VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2 = 1000337001, + VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2 = 1000337002, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2 = 1000337003, + VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2 = 1000337004, + VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2 = 1000337005, + VK_STRUCTURE_TYPE_BUFFER_COPY_2 = 1000337006, + VK_STRUCTURE_TYPE_IMAGE_COPY_2 = 1000337007, + VK_STRUCTURE_TYPE_IMAGE_BLIT_2 = 1000337008, + VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2 = 1000337009, + VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2 = 1000337010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES = 1000225000, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO = 1000225001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES = 1000225002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES = 1000138000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES = 1000138001, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK = 1000138002, + VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO = 1000138003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES = 1000066000, + VK_STRUCTURE_TYPE_RENDERING_INFO = 1000044000, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO = 1000044001, + VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO = 1000044002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES = 1000044003, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO = 1000044004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES = 1000280000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES = 1000280001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES = 1000281001, + VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3 = 1000360000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES = 1000413000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES = 1000413001, + VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS = 1000413002, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS = 1000413003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES = 55, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES = 56, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO = 1000174000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES = 1000388000, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES = 1000388001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES = 1000416000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES = 1000528000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES = 1000544000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES = 1000259000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO = 1000259001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES = 1000259002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES = 1000525000, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO = 1000190001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES = 1000190002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES = 1000265000, + VK_STRUCTURE_TYPE_MEMORY_MAP_INFO = 1000271000, + VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO = 1000271001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES = 1000470000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES = 1000470001, + VK_STRUCTURE_TYPE_RENDERING_AREA_INFO = 1000470003, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO = 1000470004, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2 = 1000338002, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2 = 1000338003, + VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO = 1000470005, + VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO = 1000470006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES = 1000080000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES = 1000232000, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO = 1000232001, + VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO = 1000232002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES = 1000545000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES = 1000545001, + VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS = 1000545002, + VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO = 1000545003, + VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO = 1000545004, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO = 1000545005, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO = 1000545006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES = 1000466000, + VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO = 1000068000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES = 1000068001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES = 1000068002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES = 1000270000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES = 1000270001, + VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY = 1000270002, + VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY = 1000270003, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO = 1000270004, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO = 1000270005, + VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO = 1000270006, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO = 1000270007, + VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE = 1000270008, + VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY = 1000270009, + VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000, + VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001, + VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = 1000060007, + VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = 1000060008, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = 1000060009, + VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = 1000060010, + VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = 1000060011, + VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = 1000060012, + VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000, + VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001, + VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000, + VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000, + VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000, + VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000, + VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000, + VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000, + VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000, + VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000, + VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000, + VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001, + VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002, + VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR = 1000023000, + VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR = 1000023001, + VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR = 1000023002, + VK_STRUCTURE_TYPE_VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR = 1000023003, + VK_STRUCTURE_TYPE_BIND_VIDEO_SESSION_MEMORY_INFO_KHR = 1000023004, + VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR = 1000023005, + VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000023006, + VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR = 1000023007, + VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR = 1000023008, + VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR = 1000023009, + VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR = 1000023010, + VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR = 1000023011, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR = 1000023012, + VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR = 1000023013, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR = 1000023014, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR = 1000023015, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_KHR = 1000023016, + VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR = 1000024000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR = 1000024001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR = 1000024002, + VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000, + VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001, + VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT = 1000028000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT = 1000028001, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT = 1000028002, + VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX = 1000029000, + VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX = 1000029001, + VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX = 1000029002, + VK_STRUCTURE_TYPE_CU_MODULE_TEXTURING_MODE_CREATE_INFO_NVX = 1000029004, + VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = 1000030000, + VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX = 1000030001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_KHR = 1000038000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000038001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR = 1000038002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PICTURE_INFO_KHR = 1000038003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_KHR = 1000038004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_INFO_KHR = 1000038005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_GOP_REMAINING_FRAME_INFO_KHR = 1000038006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_INFO_KHR = 1000038007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_KHR = 1000038008, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_KHR = 1000038009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_KHR = 1000038010, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUALITY_LEVEL_PROPERTIES_KHR = 1000038011, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_GET_INFO_KHR = 1000038012, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_FEEDBACK_INFO_KHR = 1000038013, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR = 1000039000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000039001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR = 1000039002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR = 1000039003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR = 1000039004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_KHR = 1000039005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR = 1000039006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR = 1000039007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR = 1000039009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR = 1000039010, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR = 1000039011, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR = 1000039012, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR = 1000039013, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR = 1000039014, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR = 1000040000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR = 1000040001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR = 1000040003, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000040004, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR = 1000040005, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR = 1000040006, + VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000, + VK_STRUCTURE_TYPE_RENDERING_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_INFO, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, + VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO, + VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = 1000049000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = 1000050000, + VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001, + VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, + VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, + VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, + VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO, + VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000, + VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES, + VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = 1000067000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = 1000067001, + VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES, + VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001, + VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002, + VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = 1000073003, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000, + VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001, + VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002, + VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = 1000075000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES, + VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO, + VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078000, + VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078001, + VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = 1000078002, + VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003, + VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000, + VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT = 1000081000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT = 1000081001, + VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT = 1000081002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, + VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000, + VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = 1000090000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT, + VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000, + VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001, + VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002, + VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003, + VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = 1000092000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000, + VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX = 1000044009, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000, + VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = 1000101000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = 1000101001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT = 1000102000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT = 1000102001, + VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, + VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO, + VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, + VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO, + VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, + VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, + VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, + VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, + VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO, + VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_END_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG = 1000110000, + VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES, + VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO, + VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114000, + VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114001, + VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = 1000114002, + VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000, + VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR = 1000116000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR = 1000116001, + VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR = 1000116002, + VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR = 1000116003, + VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR = 1000116004, + VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR = 1000116005, + VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR = 1000116006, + VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_RESERVATION_INFO_KHR = 1000116007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, + VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO, + VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO, + VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001, + VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR, + VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR = 1000121000, + VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR = 1000121001, + VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR = 1000121002, + VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR = 1000121003, + VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR = 1000121004, + VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000, + VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000128000, + VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = 1000128001, + VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = 1000128002, + VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000128003, + VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000128004, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID = 1000129000, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID = 1000129001, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = 1000129002, + VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129003, + VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129004, + VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = 1000129005, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID = 1000129006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES, + VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX = 1000134000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX = 1000134001, + VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX = 1000134002, + VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX = 1000134003, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX = 1000134004, + VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD = 1000044008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK, + VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR = 1000141000, + VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000, + VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001, + VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = 1000143003, + VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = 1000143004, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2, + VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2, + VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, + VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001, + VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002, + VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR = 1000150007, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR = 1000150000, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR = 1000150002, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR = 1000150003, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR = 1000150004, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR = 1000150005, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR = 1000150006, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR = 1000150009, + VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR = 1000150010, + VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR = 1000150011, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR = 1000150012, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR = 1000150013, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR = 1000150014, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR = 1000150017, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR = 1000150020, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR = 1000347000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR = 1000347001, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR = 1000150015, + VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR = 1000150016, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR = 1000150018, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR = 1000348013, + VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000, + VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV = 1000154000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV = 1000154001, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO, + VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO, + VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO, + VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT = 1000158000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT = 1000158002, + VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT = 1000158003, + VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT = 1000158004, + VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158005, + VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT = 1000158006, + VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000, + VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR = 1000163000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR = 1000163001, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = 1000164000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = 1000164001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV = 1000164002, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV = 1000164005, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV = 1000165000, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV = 1000165001, + VK_STRUCTURE_TYPE_GEOMETRY_NV = 1000165003, + VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV = 1000165004, + VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV = 1000165005, + VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV = 1000165006, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV = 1000165007, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV = 1000165008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV = 1000165009, + VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV = 1000165011, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV = 1000165012, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV = 1000166000, + VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV = 1000166001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = 1000170000, + VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = 1000170001, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000, + VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR = 1000181000, + VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = 1000183000, + VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = 1000184000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR = 1000187000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000187001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR = 1000187002, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR = 1000187003, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR = 1000187004, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR = 1000187005, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES, + VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, + VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP = 1000191000, + VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES, + VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = 1000201000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = 1000202000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = 1000202001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV = 1000203000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV = 1000204000, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV = 1000205000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = 1000205002, + VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV = 1000206000, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = 1000206001, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV = 1000314008, + VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV = 1000314009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES, + VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO, + VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO, + VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO, + VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = 1000209000, + VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL = 1000210000, + VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL, + VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = 1000210001, + VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL = 1000210002, + VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL = 1000210003, + VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL = 1000210004, + VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL = 1000210005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = 1000212000, + VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = 1000213000, + VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD = 1000213001, + VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA = 1000214000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, + VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT = 1000218000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT = 1000218001, + VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT = 1000218002, + VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT = 1000044007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES, + VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000226000, + VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR = 1000226001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR = 1000226002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR = 1000226003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR = 1000226004, + VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000044006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD = 1000227000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD = 1000229000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO, + VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT = 1000234000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR = 1000235000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT = 1000238000, + VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT = 1000238001, + VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR = 1000239000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV = 1000240000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, + VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT, + VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = 1000244000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, + VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, + VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = 1000244002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES, + VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO, + VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR = 1000248000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = 1000249000, + VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV = 1000250000, + VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV = 1000250001, + VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV = 1000250002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT = 1000251000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT = 1000252000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT = 1000254000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT = 1000254001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT = 1000254002, + VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT = 1000255000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT = 1000255002, + VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT = 1000255001, + VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, + VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, + VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO, + VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT = 1000260000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT = 1000267000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000, + VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = 1000269003, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = 1000269004, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES, + VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT = VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY, + VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT = VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO, + VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT = VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO, + VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT = VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE, + VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT = VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY, + VK_STRUCTURE_TYPE_MEMORY_MAP_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_MAP_INFO, + VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT = 1000272000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_PROPERTIES_EXT = 1000272001, + VK_STRUCTURE_TYPE_MEMORY_MAP_PLACED_INFO_EXT = 1000272002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT = 1000273000, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT = 1000274000, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT = 1000274001, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT = 1000274002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT = 1000275000, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT = 1000275001, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT = 1000275002, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT = 1000275003, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT = 1000275004, + VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT = 1000275005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV = 1000277000, + VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV = 1000277001, + VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV = 1000277002, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV = 1000277003, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV = 1000277004, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV = 1000277005, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV = 1000277006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV = 1000277007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV = 1000278000, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV = 1000278001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM = 1000282000, + VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM = 1000282001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT = 1000283000, + VK_STRUCTURE_TYPE_DEPTH_BIAS_INFO_EXT = 1000283001, + VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT = 1000283002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT = 1000284000, + VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT = 1000284001, + VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT = 1000284002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = 1000286000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = 1000286001, + VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT = 1000287000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT = 1000287001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT = 1000287002, + VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR = 1000290000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV = 1000292000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV = 1000292001, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_BARRIER_CREATE_INFO_NV = 1000292002, + VK_STRUCTURE_TYPE_PRESENT_ID_KHR = 1000294000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR = 1000294001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, + VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO, + VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR = 1000299000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR = 1000299001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR = 1000299002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR = 1000299003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_USAGE_INFO_KHR = 1000299004, + VK_STRUCTURE_TYPE_QUERY_POOL_VIDEO_ENCODE_FEEDBACK_CREATE_INFO_KHR = 1000299005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR = 1000299006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_PROPERTIES_KHR = 1000299007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR = 1000299008, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_GET_INFO_KHR = 1000299009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR = 1000299010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV = 1000300000, + VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = 1000300001, + VK_STRUCTURE_TYPE_CUDA_MODULE_CREATE_INFO_NV = 1000307000, + VK_STRUCTURE_TYPE_CUDA_FUNCTION_CREATE_INFO_NV = 1000307001, + VK_STRUCTURE_TYPE_CUDA_LAUNCH_INFO_NV = 1000307002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV = 1000307003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_PROPERTIES_NV = 1000307004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_FEATURES_QCOM = 1000309000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_PROPERTIES_QCOM = 1000309001, + VK_STRUCTURE_TYPE_RENDER_PASS_TILE_SHADING_CREATE_INFO_QCOM = 1000309002, + VK_STRUCTURE_TYPE_PER_TILE_BEGIN_INFO_QCOM = 1000309003, + VK_STRUCTURE_TYPE_PER_TILE_END_INFO_QCOM = 1000309004, + VK_STRUCTURE_TYPE_DISPATCH_TILE_INFO_QCOM = 1000309005, + VK_STRUCTURE_TYPE_QUERY_LOW_LATENCY_SUPPORT_NV = 1000310000, + VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT = 1000311000, + VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT = 1000311001, + VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT = 1000311002, + VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT = 1000311003, + VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT = 1000311004, + VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT = 1000311005, + VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT = 1000311006, + VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT = 1000311007, + VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT = 1000311008, + VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT = 1000311009, + VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT = 1000311010, + VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT = 1000311011, + VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2, + VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR = VK_STRUCTURE_TYPE_DEPENDENCY_INFO, + VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR = VK_STRUCTURE_TYPE_SUBMIT_INFO_2, + VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT = 1000316000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT = 1000316001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT = 1000316002, + VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT = 1000316003, + VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT = 1000316004, + VK_STRUCTURE_TYPE_BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316005, + VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316006, + VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316007, + VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316008, + VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT = 1000316010, + VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT = 1000316011, + VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT = 1000316012, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT = 1000320000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT = 1000320001, + VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT = 1000320002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD = 1000321000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR = 1000203000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR = 1000322000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR = 1000323000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = 1000326000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = 1000326001, + VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = 1000326002, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV = 1000327000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV = 1000327001, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV = 1000327002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT = 1000328000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_EXT = 1000328001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT = 1000330000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = 1000332000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = 1000332001, + VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM = 1000333000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR = 1000336000, + VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2, + VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2, + VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_COPY_2, + VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_IMAGE_COPY_2, + VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = VK_STRUCTURE_TYPE_IMAGE_BLIT_2, + VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2, + VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT = 1000338000, + VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT = 1000338001, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2, + VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT = 1000338004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT = 1000339000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = 1000340000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT = 1000341000, + VK_STRUCTURE_TYPE_DEVICE_FAULT_COUNTS_EXT = 1000341001, + VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT = 1000341002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM = 1000342000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT = 1000344000, + VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT = 1000346000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE = 1000351000, + VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE = 1000351002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT = 1000352000, + VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT = 1000352001, + VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT = 1000352002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT = 1000353000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT = 1000354000, + VK_STRUCTURE_TYPE_DEVICE_ADDRESS_BINDING_CALLBACK_DATA_EXT = 1000354001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT = 1000355000, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT = 1000355001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT = 1000356000, + VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_EXT = 1000361000, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364000, + VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA = 1000364001, + VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364002, + VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365000, + VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365001, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA = 1000366000, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA = 1000366001, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA = 1000366002, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA = 1000366003, + VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA = 1000366004, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA = 1000366005, + VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA = 1000366006, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA = 1000366007, + VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA = 1000366008, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA = 1000366009, + VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI = 1000369000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI = 1000369001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI = 1000369002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI = 1000370000, + VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV = 1000371000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV = 1000371001, + VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT = 1000372000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT = 1000372001, + VK_STRUCTURE_TYPE_PIPELINE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT = 1000375000, + VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT = 1000375001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT = 1000376000, + VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT = 1000376001, + VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT = 1000376002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT = 1000377000, + VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX = 1000378000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT = 1000381000, + VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT = 1000381001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT = 1000382000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR = 1000386000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR = 1000387000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE = 1000390000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE = 1000390001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE = 1000390002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE = 1000390003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT = 1000391000, + VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT = 1000391001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT = 1000392000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT = 1000392001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT = 1000393000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT = 1000395000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT = 1000395001, + VK_STRUCTURE_TYPE_MICROMAP_BUILD_INFO_EXT = 1000396000, + VK_STRUCTURE_TYPE_MICROMAP_VERSION_INFO_EXT = 1000396001, + VK_STRUCTURE_TYPE_COPY_MICROMAP_INFO_EXT = 1000396002, + VK_STRUCTURE_TYPE_COPY_MICROMAP_TO_MEMORY_INFO_EXT = 1000396003, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_MICROMAP_INFO_EXT = 1000396004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT = 1000396005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_PROPERTIES_EXT = 1000396006, + VK_STRUCTURE_TYPE_MICROMAP_CREATE_INFO_EXT = 1000396007, + VK_STRUCTURE_TYPE_MICROMAP_BUILD_SIZES_INFO_EXT = 1000396008, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT = 1000396009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV = 1000397000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_PROPERTIES_NV = 1000397001, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_DISPLACEMENT_MICROMAP_NV = 1000397002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI = 1000404000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_PROPERTIES_HUAWEI = 1000404001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_VRS_FEATURES_HUAWEI = 1000404002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT = 1000411000, + VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT = 1000411001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT = 1000412000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES, + VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM = 1000415000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM = 1000417000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM = 1000417001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM = 1000417002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT = 1000418000, + VK_STRUCTURE_TYPE_IMAGE_VIEW_SLICED_CREATE_INFO_EXT = 1000418001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE = 1000420000, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE = 1000420001, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE = 1000420002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT = 1000421000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT = 1000422000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM = 1000424000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM = 1000424001, + VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM = 1000424002, + VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM = 1000424003, + VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM = 1000424004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM = 1000425000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM = 1000425001, + VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM = 1000425002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV = 1000426000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV = 1000426001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV = 1000427000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV = 1000427001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV = 1000428000, + VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV = 1000428001, + VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV = 1000428002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_LINEAR_SWEPT_SPHERES_FEATURES_NV = 1000429008, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_LINEAR_SWEPT_SPHERES_DATA_NV = 1000429009, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_SPHERES_DATA_NV = 1000429010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV = 1000430000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR = 1000434000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT = 1000437000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM = 1000440000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM = 1000440001, + VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM = 1000440002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT = 1000451000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT = 1000451001, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT = 1000453000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT = 1000455000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT = 1000455001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT = 1000458000, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT = 1000458001, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT = 1000458002, + VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT = 1000458003, + VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG = 1000459000, + VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG = 1000459001, + VK_STRUCTURE_TYPE_TENSOR_CREATE_INFO_ARM = 1000460000, + VK_STRUCTURE_TYPE_TENSOR_VIEW_CREATE_INFO_ARM = 1000460001, + VK_STRUCTURE_TYPE_BIND_TENSOR_MEMORY_INFO_ARM = 1000460002, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_TENSOR_ARM = 1000460003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_PROPERTIES_ARM = 1000460004, + VK_STRUCTURE_TYPE_TENSOR_FORMAT_PROPERTIES_ARM = 1000460005, + VK_STRUCTURE_TYPE_TENSOR_DESCRIPTION_ARM = 1000460006, + VK_STRUCTURE_TYPE_TENSOR_MEMORY_REQUIREMENTS_INFO_ARM = 1000460007, + VK_STRUCTURE_TYPE_TENSOR_MEMORY_BARRIER_ARM = 1000460008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_FEATURES_ARM = 1000460009, + VK_STRUCTURE_TYPE_DEVICE_TENSOR_MEMORY_REQUIREMENTS_ARM = 1000460010, + VK_STRUCTURE_TYPE_COPY_TENSOR_INFO_ARM = 1000460011, + VK_STRUCTURE_TYPE_TENSOR_COPY_ARM = 1000460012, + VK_STRUCTURE_TYPE_TENSOR_DEPENDENCY_INFO_ARM = 1000460013, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_TENSOR_ARM = 1000460014, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_TENSOR_INFO_ARM = 1000460015, + VK_STRUCTURE_TYPE_EXTERNAL_TENSOR_PROPERTIES_ARM = 1000460016, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_TENSOR_CREATE_INFO_ARM = 1000460017, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_FEATURES_ARM = 1000460018, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_PROPERTIES_ARM = 1000460019, + VK_STRUCTURE_TYPE_DESCRIPTOR_GET_TENSOR_INFO_ARM = 1000460020, + VK_STRUCTURE_TYPE_TENSOR_CAPTURE_DESCRIPTOR_DATA_INFO_ARM = 1000460021, + VK_STRUCTURE_TYPE_TENSOR_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_ARM = 1000460022, + VK_STRUCTURE_TYPE_FRAME_BOUNDARY_TENSORS_ARM = 1000460023, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT = 1000462000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT = 1000462001, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT = 1000462002, + VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT = 1000462003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT = 1000342000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV = 1000464000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV = 1000464001, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV = 1000464002, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV = 1000464003, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV = 1000464004, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV = 1000464005, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV = 1000464010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT = 1000465000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID = 1000468000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID = 1000468001, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID = 1000468002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES, + VK_STRUCTURE_TYPE_RENDERING_AREA_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_AREA_INFO, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_KHR = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2, + VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO, + VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD = 1000476000, + VK_STRUCTURE_TYPE_ANTI_LAG_DATA_AMD = 1000476001, + VK_STRUCTURE_TYPE_ANTI_LAG_PRESENTATION_INFO_AMD = 1000476002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DENSE_GEOMETRY_FORMAT_FEATURES_AMDX = 1000478000, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DENSE_GEOMETRY_FORMAT_TRIANGLES_DATA_AMDX = 1000478001, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR = 1000479000, + VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR = 1000479001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR = 1000479002, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_WAIT_2_KHR = 1000480000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR = 1000480001, + VK_STRUCTURE_TYPE_PRESENT_WAIT_2_INFO_KHR = 1000480002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR = 1000481000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT = 1000482000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT = 1000482001, + VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT = 1000482002, + VK_STRUCTURE_TYPE_SHADER_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_FEATURES_KHR = 1000483000, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_CREATE_INFO_KHR = 1000483001, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_INFO_KHR = 1000483002, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_KEY_KHR = 1000483003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_PROPERTIES_KHR = 1000483004, + VK_STRUCTURE_TYPE_RELEASE_CAPTURED_PIPELINE_DATA_INFO_KHR = 1000483005, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_DATA_INFO_KHR = 1000483006, + VK_STRUCTURE_TYPE_PIPELINE_CREATE_INFO_KHR = 1000483007, + VK_STRUCTURE_TYPE_DEVICE_PIPELINE_BINARY_INTERNAL_CACHE_CONTROL_KHR = 1000483008, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_HANDLES_INFO_KHR = 1000483009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM = 1000484000, + VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM = 1000484001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC = 1000485000, + VK_STRUCTURE_TYPE_AMIGO_PROFILING_SUBMIT_INFO_SEC = 1000485001, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_KHR = 1000274000, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR = 1000274001, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR = 1000274002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_KHR = 1000275000, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_KHR = 1000275001, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_KHR = 1000275002, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_KHR = 1000275003, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_KHR = 1000275004, + VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_KHR = 1000275005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM = 1000488000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV = 1000490000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV = 1000490001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_FEATURES_NV = 1000491000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_PROPERTIES_NV = 1000491001, + VK_STRUCTURE_TYPE_COOPERATIVE_VECTOR_PROPERTIES_NV = 1000491002, + VK_STRUCTURE_TYPE_CONVERT_COOPERATIVE_VECTOR_MATRIX_INFO_NV = 1000491004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV = 1000492000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_PROPERTIES_NV = 1000492001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT = 1000351000, + VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT = 1000351002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT = 1000495000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_PROPERTIES_EXT = 1000495001, + VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT = 1000496000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM = 1000497000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM = 1000497001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT = 1000498000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT = 1000499000, + VK_STRUCTURE_TYPE_LATENCY_SLEEP_MODE_INFO_NV = 1000505000, + VK_STRUCTURE_TYPE_LATENCY_SLEEP_INFO_NV = 1000505001, + VK_STRUCTURE_TYPE_SET_LATENCY_MARKER_INFO_NV = 1000505002, + VK_STRUCTURE_TYPE_GET_LATENCY_MARKER_INFO_NV = 1000505003, + VK_STRUCTURE_TYPE_LATENCY_TIMINGS_FRAME_REPORT_NV = 1000505004, + VK_STRUCTURE_TYPE_LATENCY_SUBMISSION_PRESENT_ID_NV = 1000505005, + VK_STRUCTURE_TYPE_OUT_OF_BAND_QUEUE_TYPE_INFO_NV = 1000505006, + VK_STRUCTURE_TYPE_SWAPCHAIN_LATENCY_CREATE_INFO_NV = 1000505007, + VK_STRUCTURE_TYPE_LATENCY_SURFACE_CAPABILITIES_NV = 1000505008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR = 1000506000, + VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR = 1000506001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR = 1000506002, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM = 1000507000, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_CREATE_INFO_ARM = 1000507001, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM = 1000507002, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM = 1000507003, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM = 1000507004, + VK_STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM = 1000507005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM = 1000507006, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM = 1000507007, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM = 1000507008, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_INFO_ARM = 1000507009, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM = 1000507010, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENTS_INFO_ARM = 1000507011, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM = 1000507012, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM = 1000507013, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM = 1000507014, + VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM = 1000507016, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM = 1000507017, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM = 1000507018, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM = 1000507019, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM = 1000507015, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM = 1000510000, + VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM = 1000510001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR = 1000201000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_PROPERTIES_KHR = 1000511000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_CAPABILITIES_KHR = 1000512000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR = 1000512001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_KHR = 1000512003, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000512004, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR = 1000512005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_CAPABILITIES_KHR = 1000513000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000513001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PICTURE_INFO_KHR = 1000513002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_DPB_SLOT_INFO_KHR = 1000513003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_AV1_FEATURES_KHR = 1000513004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PROFILE_INFO_KHR = 1000513005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_INFO_KHR = 1000513006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_LAYER_INFO_KHR = 1000513007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUALITY_LEVEL_PROPERTIES_KHR = 1000513008, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_CREATE_INFO_KHR = 1000513009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_GOP_REMAINING_FRAME_INFO_KHR = 1000513010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_DECODE_VP9_FEATURES_KHR = 1000514000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_CAPABILITIES_KHR = 1000514001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PICTURE_INFO_KHR = 1000514002, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PROFILE_INFO_KHR = 1000514003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR = 1000515000, + VK_STRUCTURE_TYPE_VIDEO_INLINE_QUERY_INFO_KHR = 1000515001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV = 1000516000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM = 1000518000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM = 1000518001, + VK_STRUCTURE_TYPE_SAMPLER_BLOCK_MATCH_WINDOW_CREATE_INFO_QCOM = 1000518002, + VK_STRUCTURE_TYPE_SAMPLER_CUBIC_WEIGHTS_CREATE_INFO_QCOM = 1000519000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM = 1000519001, + VK_STRUCTURE_TYPE_BLIT_IMAGE_CUBIC_WEIGHTS_INFO_QCOM = 1000519002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM = 1000520000, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_YCBCR_DEGAMMA_CREATE_INFO_QCOM = 1000520001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM = 1000521000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT = 1000524000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR = 1000527000, + VK_STRUCTURE_TYPE_ATTACHMENT_FEEDBACK_LOOP_INFO_EXT = 1000527001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES, + VK_STRUCTURE_TYPE_SCREEN_BUFFER_PROPERTIES_QNX = 1000529000, + VK_STRUCTURE_TYPE_SCREEN_BUFFER_FORMAT_PROPERTIES_QNX = 1000529001, + VK_STRUCTURE_TYPE_IMPORT_SCREEN_BUFFER_INFO_QNX = 1000529002, + VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_QNX = 1000529003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX = 1000529004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT = 1000530000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES, + VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR = 1000184000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES, + VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS_KHR = VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS, + VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO_KHR = VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO, + VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO, + VK_STRUCTURE_TYPE_SET_DESCRIPTOR_BUFFER_OFFSETS_INFO_EXT = 1000545007, + VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_INFO_EXT = 1000545008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV = 1000546000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_FEATURES_QCOM = 1000547000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_PROPERTIES_QCOM = 1000547001, + VK_STRUCTURE_TYPE_TILE_MEMORY_REQUIREMENTS_QCOM = 1000547002, + VK_STRUCTURE_TYPE_TILE_MEMORY_BIND_INFO_QCOM = 1000547003, + VK_STRUCTURE_TYPE_TILE_MEMORY_SIZE_INFO_QCOM = 1000547004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR = 1000549000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR = 1000426001, + VK_STRUCTURE_TYPE_COPY_MEMORY_INDIRECT_INFO_KHR = 1000549002, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INDIRECT_INFO_KHR = 1000549003, + VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV = 1000551000, + VK_STRUCTURE_TYPE_DISPLAY_MODE_STEREO_PROPERTIES_NV = 1000551001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR = 1000552000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_INTRA_REFRESH_CREATE_INFO_KHR = 1000552001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_INFO_KHR = 1000552002, + VK_STRUCTURE_TYPE_VIDEO_REFERENCE_INTRA_REFRESH_INFO_KHR = 1000552003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_INTRA_REFRESH_FEATURES_KHR = 1000552004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553000, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_INFO_KHR = 1000553002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000553005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUANTIZATION_MAP_FEATURES_KHR = 1000553009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553004, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_H265_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553007, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_AV1_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV = 1000555000, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DEVICE_CREATE_INFO_NV = 1000556000, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_CREATE_INFO_NV = 1000556001, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DATA_PARAMS_NV = 1000556002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_COMPUTE_QUEUE_PROPERTIES_NV = 1000556003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR = 1000558000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV = 1000559000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR = 1000562000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_PROPERTIES_KHR = 1000562001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_LIST_KHR = 1000562002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR = 1000562003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_VULKAN_PROPERTIES_KHR = 1000562004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV = 1000563000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT = 1000564000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT = 1000567000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV = 1000568000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_FEATURES_NV = 1000569000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_PROPERTIES_NV = 1000569001, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_CLUSTERS_BOTTOM_LEVEL_INPUT_NV = 1000569002, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_TRIANGLE_CLUSTER_INPUT_NV = 1000569003, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_MOVE_OBJECTS_INPUT_NV = 1000569004, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_INPUT_INFO_NV = 1000569005, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_COMMANDS_INFO_NV = 1000569006, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CLUSTER_ACCELERATION_STRUCTURE_CREATE_INFO_NV = 1000569007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_FEATURES_NV = 1000570000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_PROPERTIES_NV = 1000570001, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_PARTITIONED_ACCELERATION_STRUCTURE_NV = 1000570002, + VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCES_INPUT_NV = 1000570003, + VK_STRUCTURE_TYPE_BUILD_PARTITIONED_ACCELERATION_STRUCTURE_INFO_NV = 1000570004, + VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_FLAGS_NV = 1000570005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT = 1000572000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT = 1000572001, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT = 1000572002, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT = 1000572003, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT = 1000572004, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT = 1000572006, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT = 1000572007, + VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT = 1000572008, + VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT = 1000572009, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT = 1000572010, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT = 1000572011, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT = 1000572012, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT = 1000572013, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT = 1000572014, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR = 1000574000, + VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR = 1000574002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA = 1000575000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA = 1000575001, + VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA = 1000575002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR = 1000579000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT = 1000582000, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT = 1000582001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR = 1000584000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_PROPERTIES_KHR = 1000584001, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR = 1000584002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR = 1000586000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586002, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586003, + VK_STRUCTURE_TYPE_SURFACE_CREATE_INFO_OHOS = 1000685000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI = 1000590000, + VK_STRUCTURE_TYPE_HDR_VIVID_DYNAMIC_METADATA_HUAWEI = 1000590001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV = 1000593000, + VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_NV = 1000593001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_NV = 1000593002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_OPACITY_MICROMAP_FEATURES_ARM = 1000596000, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_METAL_HANDLE_INFO_EXT = 1000602000, + VK_STRUCTURE_TYPE_MEMORY_METAL_HANDLE_PROPERTIES_EXT = 1000602001, + VK_STRUCTURE_TYPE_MEMORY_GET_METAL_HANDLE_INFO_EXT = 1000602002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR = 1000421000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT = 1000608000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM = 1000609000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE = 1000611000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_PROPERTIES_VALVE = 1000611001, + VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_DENSITY_MAP_LAYERED_CREATE_INFO_VALVE = 1000611002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR = 1000286000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR = 1000286001, + VK_STRUCTURE_TYPE_SET_PRESENT_CONFIG_NV = 1000613000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_METERING_FEATURES_NV = 1000613001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT = 1000425000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_EXT = 1000425001, + VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT = 1000425002, + VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT = 1000619003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT = 1000620000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR = 1000361000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC = 1000637000, + VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkStructureType; +typedef enum VkSystemAllocationScope { + VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1, + VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2, + VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4, + VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF +} VkSystemAllocationScope; +typedef enum VkInternalAllocationType { + VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0, + VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkInternalAllocationType; +typedef enum VkSamplerAddressMode { + VK_SAMPLER_ADDRESS_MODE_REPEAT = 0, + VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1, + VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2, + VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3, + VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4, + VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, + VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF +} VkSamplerAddressMode; +typedef enum VkFilter { + VK_FILTER_NEAREST = 0, + VK_FILTER_LINEAR = 1, + VK_FILTER_CUBIC_IMG = 1000015000, + VK_FILTER_CUBIC_EXT = 1000015000, + VK_FILTER_MAX_ENUM = 0x7FFFFFFF +} VkFilter; +typedef enum VkSamplerMipmapMode { + VK_SAMPLER_MIPMAP_MODE_NEAREST = 0, + VK_SAMPLER_MIPMAP_MODE_LINEAR = 1, + VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF +} VkSamplerMipmapMode; +typedef enum VkVertexInputRate { + VK_VERTEX_INPUT_RATE_VERTEX = 0, + VK_VERTEX_INPUT_RATE_INSTANCE = 1, + VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF +} VkVertexInputRate; +typedef enum VkPipelineStageFlagBits { + VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 1, + VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 2, + VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 4, + VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 8, + VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 16, + VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 32, + VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 64, + VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 128, + VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 256, + VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 512, + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 1024, + VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 2048, + VK_PIPELINE_STAGE_TRANSFER_BIT = 4096, + VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 8192, + VK_PIPELINE_STAGE_HOST_BIT = 16384, + VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 32768, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 65536, + VK_PIPELINE_STAGE_NONE = 0, + VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT = 16777216, + VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT = 262144, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 33554432, + VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR = 2097152, + VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = 4194304, + VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, + VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV = 524288, + VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV = 1048576, + VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 8388608, + VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 4194304, + VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV = 131072, + VK_PIPELINE_STAGE_NONE_KHR = VK_PIPELINE_STAGE_NONE, + VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT = 524288, + VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT = 1048576, + VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT = 131072, + VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineStageFlagBits; +typedef enum VkSparseImageFormatFlagBits { + VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 1, + VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 2, + VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 4, + VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSparseImageFormatFlagBits; +typedef enum VkClusterAccelerationStructureIndexFormatFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_8BIT_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_16BIT_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_32BIT_NV = 4, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureIndexFormatFlagBitsNV; +typedef enum VkClusterAccelerationStructureTypeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_CLUSTERS_BOTTOM_LEVEL_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_TRIANGLE_CLUSTER_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_TRIANGLE_CLUSTER_TEMPLATE_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureTypeNV; +typedef enum VkClusterAccelerationStructureOpTypeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MOVE_OBJECTS_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_CLUSTERS_BOTTOM_LEVEL_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_TEMPLATE_NV = 3, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_INSTANTIATE_TRIANGLE_CLUSTER_NV = 4, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_GET_CLUSTER_TEMPLATE_INDICES_NV = 5, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureOpTypeNV; +typedef enum VkClusterAccelerationStructureOpModeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_IMPLICIT_DESTINATIONS_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_EXPLICIT_DESTINATIONS_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_COMPUTE_SIZES_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureOpModeNV; +typedef enum VkSampleCountFlagBits { + VK_SAMPLE_COUNT_1_BIT = 1, + VK_SAMPLE_COUNT_2_BIT = 2, + VK_SAMPLE_COUNT_4_BIT = 4, + VK_SAMPLE_COUNT_8_BIT = 8, + VK_SAMPLE_COUNT_16_BIT = 16, + VK_SAMPLE_COUNT_32_BIT = 32, + VK_SAMPLE_COUNT_64_BIT = 64, + VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSampleCountFlagBits; +typedef enum VkAttachmentDescriptionFlagBits { + VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 1, + VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkAttachmentDescriptionFlagBits; +typedef enum VkDescriptorPoolCreateFlagBits { + VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 1, + VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT = 2, + VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT, + VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE = 4, + VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT = 4, + VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV = 8, + VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV = 16, + VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorPoolCreateFlagBits; +typedef enum VkDependencyFlagBits { + VK_DEPENDENCY_BY_REGION_BIT = 1, + VK_DEPENDENCY_DEVICE_GROUP_BIT = 4, + VK_DEPENDENCY_VIEW_LOCAL_BIT = 2, + VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR = VK_DEPENDENCY_VIEW_LOCAL_BIT, + VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR = VK_DEPENDENCY_DEVICE_GROUP_BIT, + VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT = 8, + VK_DEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR = 32, + VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR = 64, + VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDependencyFlagBits; +typedef enum VkObjectType { + VK_OBJECT_TYPE_UNKNOWN = 0, + VK_OBJECT_TYPE_INSTANCE = 1, + VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2, + VK_OBJECT_TYPE_DEVICE = 3, + VK_OBJECT_TYPE_QUEUE = 4, + VK_OBJECT_TYPE_SEMAPHORE = 5, + VK_OBJECT_TYPE_COMMAND_BUFFER = 6, + VK_OBJECT_TYPE_FENCE = 7, + VK_OBJECT_TYPE_DEVICE_MEMORY = 8, + VK_OBJECT_TYPE_BUFFER = 9, + VK_OBJECT_TYPE_IMAGE = 10, + VK_OBJECT_TYPE_EVENT = 11, + VK_OBJECT_TYPE_QUERY_POOL = 12, + VK_OBJECT_TYPE_BUFFER_VIEW = 13, + VK_OBJECT_TYPE_IMAGE_VIEW = 14, + VK_OBJECT_TYPE_SHADER_MODULE = 15, + VK_OBJECT_TYPE_PIPELINE_CACHE = 16, + VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17, + VK_OBJECT_TYPE_RENDER_PASS = 18, + VK_OBJECT_TYPE_PIPELINE = 19, + VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20, + VK_OBJECT_TYPE_SAMPLER = 21, + VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22, + VK_OBJECT_TYPE_DESCRIPTOR_SET = 23, + VK_OBJECT_TYPE_FRAMEBUFFER = 24, + VK_OBJECT_TYPE_COMMAND_POOL = 25, + VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000, + VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = 1000085000, + VK_OBJECT_TYPE_PRIVATE_DATA_SLOT = 1000295000, + VK_OBJECT_TYPE_SURFACE_KHR = 1000000000, + VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000, + VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000, + VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001, + VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000, + VK_OBJECT_TYPE_VIDEO_SESSION_KHR = 1000023000, + VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR = 1000023001, + VK_OBJECT_TYPE_CU_MODULE_NVX = 1000029000, + VK_OBJECT_TYPE_CU_FUNCTION_NVX = 1000029001, + VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, + VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000, + VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000, + VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, + VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000, + VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000, + VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL = 1000210000, + VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR = 1000268000, + VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV = 1000277000, + VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT, + VK_OBJECT_TYPE_CUDA_MODULE_NV = 1000307000, + VK_OBJECT_TYPE_CUDA_FUNCTION_NV = 1000307001, + VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA = 1000366000, + VK_OBJECT_TYPE_MICROMAP_EXT = 1000396000, + VK_OBJECT_TYPE_TENSOR_ARM = 1000460000, + VK_OBJECT_TYPE_TENSOR_VIEW_ARM = 1000460001, + VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV = 1000464000, + VK_OBJECT_TYPE_SHADER_EXT = 1000482000, + VK_OBJECT_TYPE_PIPELINE_BINARY_KHR = 1000483000, + VK_OBJECT_TYPE_DATA_GRAPH_PIPELINE_SESSION_ARM = 1000507000, + VK_OBJECT_TYPE_EXTERNAL_COMPUTE_QUEUE_NV = 1000556000, + VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_EXT = 1000572000, + VK_OBJECT_TYPE_INDIRECT_EXECUTION_SET_EXT = 1000572001, + VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkObjectType; +typedef enum VkEventCreateFlagBits { + VK_EVENT_CREATE_DEVICE_ONLY_BIT = 1, + VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR = VK_EVENT_CREATE_DEVICE_ONLY_BIT, + VK_EVENT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkEventCreateFlagBits; +typedef enum VkPipelineLayoutCreateFlagBits { + VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT = 2, + VK_PIPELINE_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineLayoutCreateFlagBits; +typedef enum VkRayTracingInvocationReorderModeNV { + VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV = 0, + VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV = 1, + VK_RAY_TRACING_INVOCATION_REORDER_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkRayTracingInvocationReorderModeNV; +typedef enum VkIndirectCommandsLayoutUsageFlagBitsNV { + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV = 1, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV = 2, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV = 4, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkIndirectCommandsLayoutUsageFlagBitsNV; +typedef enum VkIndirectCommandsTokenTypeNV { + VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV = 0, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV = 1, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV = 2, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV = 3, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV = 4, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV = 5, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV = 6, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV = 7, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV = 1000328000, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV = 1000428003, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV = 1000428004, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkIndirectCommandsTokenTypeNV; +typedef enum VkIndirectStateFlagBitsNV { + VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV = 1, + VK_INDIRECT_STATE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkIndirectStateFlagBitsNV; +typedef enum VkDescriptorUpdateTemplateType { + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS = 1, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorUpdateTemplateType; +typedef enum VkDescriptorUpdateTemplateType VkDescriptorUpdateTemplateTypeKHR; + +typedef enum VkViewportCoordinateSwizzleNV { + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1, + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = 3, + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = 4, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = 5, + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = 6, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = 7, + VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV = 0x7FFFFFFF +} VkViewportCoordinateSwizzleNV; +typedef enum VkDiscardRectangleModeEXT { + VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0, + VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1, + VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDiscardRectangleModeEXT; +typedef enum VkSubpassDescriptionFlagBits { + VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 1, + VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 2, + VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM = 4, + VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM = 8, + VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM = 256, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM = 16, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM = 32, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM = 64, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT = 16, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT = 32, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT = 64, + VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT = 128, + VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSubpassDescriptionFlagBits; +typedef enum VkPointClippingBehavior { + VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0, + VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = 1, + VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES, + VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY, + VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF +} VkPointClippingBehavior; +typedef enum VkPointClippingBehavior VkPointClippingBehaviorKHR; + +typedef enum VkCoverageModulationModeNV { + VK_COVERAGE_MODULATION_MODE_NONE_NV = 0, + VK_COVERAGE_MODULATION_MODE_RGB_NV = 1, + VK_COVERAGE_MODULATION_MODE_ALPHA_NV = 2, + VK_COVERAGE_MODULATION_MODE_RGBA_NV = 3, + VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkCoverageModulationModeNV; +typedef enum VkCoverageReductionModeNV { + VK_COVERAGE_REDUCTION_MODE_MERGE_NV = 0, + VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV = 1, + VK_COVERAGE_REDUCTION_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkCoverageReductionModeNV; +typedef enum VkValidationCacheHeaderVersionEXT { + VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = 1, + VK_VALIDATION_CACHE_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationCacheHeaderVersionEXT; +typedef enum VkShaderInfoTypeAMD { + VK_SHADER_INFO_TYPE_STATISTICS_AMD = 0, + VK_SHADER_INFO_TYPE_BINARY_AMD = 1, + VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = 2, + VK_SHADER_INFO_TYPE_MAX_ENUM_AMD = 0x7FFFFFFF +} VkShaderInfoTypeAMD; +typedef enum VkQueueGlobalPriority { + VK_QUEUE_GLOBAL_PRIORITY_LOW = 128, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM = 256, + VK_QUEUE_GLOBAL_PRIORITY_HIGH = 512, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME = 1024, + VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = VK_QUEUE_GLOBAL_PRIORITY_LOW, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM, + VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = VK_QUEUE_GLOBAL_PRIORITY_HIGH, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = VK_QUEUE_GLOBAL_PRIORITY_REALTIME, + VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR = VK_QUEUE_GLOBAL_PRIORITY_LOW, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM, + VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR = VK_QUEUE_GLOBAL_PRIORITY_HIGH, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR = VK_QUEUE_GLOBAL_PRIORITY_REALTIME, + VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM = 0x7FFFFFFF +} VkQueueGlobalPriority; +typedef enum VkQueueGlobalPriority VkQueueGlobalPriorityKHR; + +typedef enum VkQueueGlobalPriority VkQueueGlobalPriorityEXT; + +typedef enum VkTimeDomainKHR { + VK_TIME_DOMAIN_DEVICE_KHR = 0, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_KHR = 1, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_KHR = 2, + VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_KHR = 3, + VK_TIME_DOMAIN_DEVICE_EXT = VK_TIME_DOMAIN_DEVICE_KHR, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = VK_TIME_DOMAIN_CLOCK_MONOTONIC_KHR, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_KHR, + VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_KHR, + VK_TIME_DOMAIN_MAX_ENUM_KHR = 0x7FFFFFFF +} VkTimeDomainKHR; +typedef enum VkTimeDomainKHR VkTimeDomainEXT; + +typedef enum VkConservativeRasterizationModeEXT { + VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = 0, + VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = 1, + VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = 2, + VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkConservativeRasterizationModeEXT; +typedef enum VkResolveModeFlagBits { + VK_RESOLVE_MODE_NONE = 0, + VK_RESOLVE_MODE_SAMPLE_ZERO_BIT = 1, + VK_RESOLVE_MODE_AVERAGE_BIT = 2, + VK_RESOLVE_MODE_MIN_BIT = 4, + VK_RESOLVE_MODE_MAX_BIT = 8, + VK_RESOLVE_MODE_NONE_KHR = VK_RESOLVE_MODE_NONE, + VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT, + VK_RESOLVE_MODE_AVERAGE_BIT_KHR = VK_RESOLVE_MODE_AVERAGE_BIT, + VK_RESOLVE_MODE_MIN_BIT_KHR = VK_RESOLVE_MODE_MIN_BIT, + VK_RESOLVE_MODE_MAX_BIT_KHR = VK_RESOLVE_MODE_MAX_BIT, + VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID = 16, + VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID = VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, + VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkResolveModeFlagBits; +typedef enum VkResolveModeFlagBits VkResolveModeFlagBitsKHR; + +typedef enum VkDescriptorBindingFlagBits { + VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT = 1, + VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT = 2, + VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT = 4, + VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = 8, + VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT, + VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT, + VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT, + VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, + VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorBindingFlagBits; +typedef enum VkDescriptorBindingFlagBits VkDescriptorBindingFlagBitsEXT; + +typedef enum VkConditionalRenderingFlagBitsEXT { + VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT = 1, + VK_CONDITIONAL_RENDERING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkConditionalRenderingFlagBitsEXT; +typedef enum VkSemaphoreType { + VK_SEMAPHORE_TYPE_BINARY = 0, + VK_SEMAPHORE_TYPE_TIMELINE = 1, + VK_SEMAPHORE_TYPE_BINARY_KHR = VK_SEMAPHORE_TYPE_BINARY, + VK_SEMAPHORE_TYPE_TIMELINE_KHR = VK_SEMAPHORE_TYPE_TIMELINE, + VK_SEMAPHORE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkSemaphoreType; +typedef enum VkSemaphoreType VkSemaphoreTypeKHR; + +typedef enum VkGeometryFlagBitsKHR { + VK_GEOMETRY_OPAQUE_BIT_KHR = 1, + VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = 2, + VK_GEOMETRY_OPAQUE_BIT_NV = VK_GEOMETRY_OPAQUE_BIT_KHR, + VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV = VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR, + VK_GEOMETRY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkGeometryFlagBitsKHR; +typedef enum VkGeometryFlagBitsKHR VkGeometryFlagBitsNV; + +typedef enum VkGeometryInstanceFlagBitsKHR { + VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR = 1, + VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR = 2, + VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR = 4, + VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR = 8, + VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR = VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR, + VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR, + VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR, + VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR, + VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR, + VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_BIT_EXT = 16, + VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_EXT = VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_BIT_EXT, + VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_EXT = 32, + VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT = VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_EXT, + VK_GEOMETRY_INSTANCE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkGeometryInstanceFlagBitsKHR; +typedef enum VkGeometryInstanceFlagBitsKHR VkGeometryInstanceFlagBitsNV; + +typedef enum VkClusterAccelerationStructureAddressResolutionFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_NONE_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_IMPLICIT_DATA_BIT_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SCRATCH_DATA_BIT_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_ADDRESS_ARRAY_BIT_NV = 4, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_SIZES_ARRAY_BIT_NV = 8, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SRC_INFOS_ARRAY_BIT_NV = 16, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SRC_INFOS_COUNT_BIT_NV = 32, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureAddressResolutionFlagBitsNV; +typedef enum VkClusterAccelerationStructureGeometryFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_CULL_DISABLE_BIT_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_NO_DUPLICATE_ANYHIT_INVOCATION_BIT_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_OPAQUE_BIT_NV = 4, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureGeometryFlagBitsNV; +typedef enum VkClusterAccelerationStructureClusterFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_CLUSTER_ALLOW_DISABLE_OPACITY_MICROMAPS_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_CLUSTER_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureClusterFlagBitsNV; +typedef enum VkBuildAccelerationStructureFlagBitsKHR { + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR = 1, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR = 2, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR = 4, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = 8, + VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = 16, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV = 32, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_EXT = 64, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_EXT, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_EXT = 128, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_EXT, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT = 256, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV = 512, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR = 2048, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_CLUSTER_OPACITY_MICROMAPS_BIT_NV = 4096, + VK_BUILD_ACCELERATION_STRUCTURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkBuildAccelerationStructureFlagBitsKHR; +typedef enum VkBuildAccelerationStructureFlagBitsKHR VkBuildAccelerationStructureFlagBitsNV; + +typedef enum VkAccelerationStructureCreateFlagBitsKHR { + VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = 1, + VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 8, + VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV = 4, + VK_ACCELERATION_STRUCTURE_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureCreateFlagBitsKHR; +typedef enum VkBuildAccelerationStructureModeKHR { + VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR = 0, + VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR = 1, + VK_BUILD_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkBuildAccelerationStructureModeKHR; +typedef enum VkCopyAccelerationStructureModeKHR { + VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR = 0, + VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR = 1, + VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR = 2, + VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR = 3, + VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR, + VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR, + VK_COPY_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkCopyAccelerationStructureModeKHR; +typedef enum VkCopyAccelerationStructureModeKHR VkCopyAccelerationStructureModeNV; + +typedef enum VkAccelerationStructureTypeKHR { + VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR = 0, + VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = 1, + VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR = 2, + VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, + VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, + VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureTypeKHR; +typedef enum VkAccelerationStructureTypeKHR VkAccelerationStructureTypeNV; + +typedef enum VkGeometryTypeKHR { + VK_GEOMETRY_TYPE_TRIANGLES_KHR = 0, + VK_GEOMETRY_TYPE_AABBS_KHR = 1, + VK_GEOMETRY_TYPE_INSTANCES_KHR = 2, + VK_GEOMETRY_TYPE_TRIANGLES_NV = VK_GEOMETRY_TYPE_TRIANGLES_KHR, + VK_GEOMETRY_TYPE_AABBS_NV = VK_GEOMETRY_TYPE_AABBS_KHR, + VK_GEOMETRY_TYPE_SPHERES_NV = 1000429004, + VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV = 1000429005, + VK_GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX = 1000478000, + VK_GEOMETRY_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkGeometryTypeKHR; +typedef enum VkGeometryTypeKHR VkGeometryTypeNV; + +typedef enum VkRayTracingShaderGroupTypeKHR { + VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR = 0, + VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR = 1, + VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR = 2, + VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, + VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR, + VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, + VK_RAY_TRACING_SHADER_GROUP_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkRayTracingShaderGroupTypeKHR; +typedef enum VkRayTracingShaderGroupTypeKHR VkRayTracingShaderGroupTypeNV; + +typedef enum VkAccelerationStructureMemoryRequirementsTypeNV { + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV = 0, + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV = 1, + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV = 2, + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkAccelerationStructureMemoryRequirementsTypeNV; +typedef enum VkAccelerationStructureBuildTypeKHR { + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = 0, + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = 1, + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = 2, + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureBuildTypeKHR; +typedef enum VkAccelerationStructureCompatibilityKHR { + VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR = 0, + VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR = 1, + VK_ACCELERATION_STRUCTURE_COMPATIBILITY_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureCompatibilityKHR; +typedef enum VkRayTracingLssIndexingModeNV { + VK_RAY_TRACING_LSS_INDEXING_MODE_LIST_NV = 0, + VK_RAY_TRACING_LSS_INDEXING_MODE_SUCCESSIVE_NV = 1, + VK_RAY_TRACING_LSS_INDEXING_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkRayTracingLssIndexingModeNV; +typedef enum VkRayTracingLssPrimitiveEndCapsModeNV { + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_NONE_NV = 0, + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_CHAINED_NV = 1, + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkRayTracingLssPrimitiveEndCapsModeNV; +typedef enum VkShaderGroupShaderKHR { + VK_SHADER_GROUP_SHADER_GENERAL_KHR = 0, + VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR = 1, + VK_SHADER_GROUP_SHADER_ANY_HIT_KHR = 2, + VK_SHADER_GROUP_SHADER_INTERSECTION_KHR = 3, + VK_SHADER_GROUP_SHADER_MAX_ENUM_KHR = 0x7FFFFFFF +} VkShaderGroupShaderKHR; +typedef enum VkMemoryOverallocationBehaviorAMD { + VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD = 0, + VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD = 1, + VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD = 2, + VK_MEMORY_OVERALLOCATION_BEHAVIOR_MAX_ENUM_AMD = 0x7FFFFFFF +} VkMemoryOverallocationBehaviorAMD; +typedef enum VkDeviceDiagnosticsConfigFlagBitsNV { + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV = 1, + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV = 2, + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV = 4, + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV = 8, + VK_DEVICE_DIAGNOSTICS_CONFIG_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkDeviceDiagnosticsConfigFlagBitsNV; +typedef enum VkPipelineCreationFeedbackFlagBits { + VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT = 1, + VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT = 2, + VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT = 4, + VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT, + VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT, + VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT, + VK_PIPELINE_CREATION_FEEDBACK_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineCreationFeedbackFlagBits; +typedef enum VkPipelineCreationFeedbackFlagBits VkPipelineCreationFeedbackFlagBitsEXT; + +typedef enum VkPerformanceCounterScopeKHR { + VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR = 0, + VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR = 1, + VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR = 2, + VK_QUERY_SCOPE_COMMAND_BUFFER_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, + VK_QUERY_SCOPE_RENDER_PASS_KHR = VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, + VK_QUERY_SCOPE_COMMAND_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR, + VK_PERFORMANCE_COUNTER_SCOPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterScopeKHR; +typedef enum VkPerformanceCounterUnitKHR { + VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR = 0, + VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR = 1, + VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR = 2, + VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR = 3, + VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR = 4, + VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR = 5, + VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR = 6, + VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR = 7, + VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR = 8, + VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR = 9, + VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR = 10, + VK_PERFORMANCE_COUNTER_UNIT_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterUnitKHR; +typedef enum VkPerformanceCounterStorageKHR { + VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR = 0, + VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR = 1, + VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR = 2, + VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR = 3, + VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR = 4, + VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR = 5, + VK_PERFORMANCE_COUNTER_STORAGE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterStorageKHR; +typedef enum VkPerformanceCounterDescriptionFlagBitsKHR { + VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR = 1, + VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR, + VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR = 2, + VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR, + VK_PERFORMANCE_COUNTER_DESCRIPTION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterDescriptionFlagBitsKHR; +typedef enum VkSemaphoreWaitFlagBits { + VK_SEMAPHORE_WAIT_ANY_BIT = 1, + VK_SEMAPHORE_WAIT_ANY_BIT_KHR = VK_SEMAPHORE_WAIT_ANY_BIT, + VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSemaphoreWaitFlagBits; +typedef enum VkSemaphoreWaitFlagBits VkSemaphoreWaitFlagBitsKHR; + +typedef enum VkPerformanceConfigurationTypeINTEL { + VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL = 0, + VK_PERFORMANCE_CONFIGURATION_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceConfigurationTypeINTEL; +typedef enum VkQueryPoolSamplingModeINTEL { + VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL = 0, + VK_QUERY_POOL_SAMPLING_MODE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkQueryPoolSamplingModeINTEL; +typedef enum VkPerformanceOverrideTypeINTEL { + VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL = 0, + VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL = 1, + VK_PERFORMANCE_OVERRIDE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceOverrideTypeINTEL; +typedef enum VkPerformanceParameterTypeINTEL { + VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL = 0, + VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL = 1, + VK_PERFORMANCE_PARAMETER_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceParameterTypeINTEL; +typedef enum VkPerformanceValueTypeINTEL { + VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL = 0, + VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL = 1, + VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL = 2, + VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL = 3, + VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL = 4, + VK_PERFORMANCE_VALUE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceValueTypeINTEL; +typedef enum VkLineRasterizationMode { + VK_LINE_RASTERIZATION_MODE_DEFAULT = 0, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR = 1, + VK_LINE_RASTERIZATION_MODE_BRESENHAM = 2, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH = 3, + VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = VK_LINE_RASTERIZATION_MODE_DEFAULT, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = VK_LINE_RASTERIZATION_MODE_RECTANGULAR, + VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = VK_LINE_RASTERIZATION_MODE_BRESENHAM, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, + VK_LINE_RASTERIZATION_MODE_DEFAULT_KHR = VK_LINE_RASTERIZATION_MODE_DEFAULT, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_KHR = VK_LINE_RASTERIZATION_MODE_RECTANGULAR, + VK_LINE_RASTERIZATION_MODE_BRESENHAM_KHR = VK_LINE_RASTERIZATION_MODE_BRESENHAM, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_KHR = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, + VK_LINE_RASTERIZATION_MODE_MAX_ENUM = 0x7FFFFFFF +} VkLineRasterizationMode; +typedef enum VkLineRasterizationMode VkLineRasterizationModeKHR; + +typedef enum VkLineRasterizationMode VkLineRasterizationModeEXT; + +typedef enum VkToolPurposeFlagBits { + VK_TOOL_PURPOSE_VALIDATION_BIT = 1, + VK_TOOL_PURPOSE_PROFILING_BIT = 2, + VK_TOOL_PURPOSE_TRACING_BIT = 4, + VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT = 8, + VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT = 16, + VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = VK_TOOL_PURPOSE_VALIDATION_BIT, + VK_TOOL_PURPOSE_PROFILING_BIT_EXT = VK_TOOL_PURPOSE_PROFILING_BIT, + VK_TOOL_PURPOSE_TRACING_BIT_EXT = VK_TOOL_PURPOSE_TRACING_BIT, + VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT, + VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT, + VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = 32, + VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = 64, + VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkToolPurposeFlagBits; +typedef enum VkToolPurposeFlagBits VkToolPurposeFlagBitsEXT; + +typedef enum VkFragmentShadingRateNV { + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV = 0, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV = 1, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV = 4, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV = 5, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV = 6, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV = 9, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV = 10, + VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV = 11, + VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV = 12, + VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV = 13, + VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV = 14, + VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV = 15, + VK_FRAGMENT_SHADING_RATE_MAX_ENUM_NV = 0x7FFFFFFF +} VkFragmentShadingRateNV; +typedef enum VkFragmentShadingRateTypeNV { + VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV = 0, + VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV = 1, + VK_FRAGMENT_SHADING_RATE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkFragmentShadingRateTypeNV; +typedef enum VkSubpassMergeStatusEXT { + VK_SUBPASS_MERGE_STATUS_MERGED_EXT = 0, + VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT = 1, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT = 2, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT = 3, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT = 4, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT = 5, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT = 6, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT = 7, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT = 8, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT = 9, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT = 10, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT = 11, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT = 12, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT = 13, + VK_SUBPASS_MERGE_STATUS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkSubpassMergeStatusEXT; +typedef uint64_t VkAccessFlagBits2; +static const VkAccessFlagBits2 VK_ACCESS_2_NONE = 0; +static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT = 1; +static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT = 2; +static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT = 4; +static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT = 8; +static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT = 16; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT = 32; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT = 64; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT = 128; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT = 256; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 512; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 1024; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT = 2048; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT = 4096; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT = 8192; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT = 16384; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT = 32768; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT = 65536; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT = 4294967296; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT = 8589934592; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT = 17179869184; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR = 34359738368; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR = 68719476736; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR = 137438953472; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR = 274877906944; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_TILE_ATTACHMENT_READ_BIT_QCOM = 2251799813685248; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_TILE_ATTACHMENT_WRITE_BIT_QCOM = 4503599627370496; +static const VkAccessFlagBits2 VK_ACCESS_2_NONE_KHR = 0; +static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 1; +static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT_KHR = 2; +static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 4; +static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 8; +static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 16; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT_KHR = 32; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 64; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 128; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 256; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 512; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 1024; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 2048; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 4096; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT_KHR = 8192; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT_KHR = 16384; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT_KHR = 32768; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 65536; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 4294967296; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 8589934592; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 17179869184; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 33554432; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 67108864; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 134217728; +static const VkAccessFlagBits2 VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 1048576; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 131072; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 262144; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_EXT = 131072; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_EXT = 262144; +static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 8388608; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 8388608; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 2097152; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 4194304; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 2097152; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 4194304; +static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 16777216; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 524288; +static const VkAccessFlagBits2 VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT = 2199023255552; +static const VkAccessFlagBits2 VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI = 549755813888; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR = 1099511627776; +static const VkAccessFlagBits2 VK_ACCESS_2_MICROMAP_READ_BIT_EXT = 17592186044416; +static const VkAccessFlagBits2 VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT = 35184372088832; +static const VkAccessFlagBits2 VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV = 4398046511104; +static const VkAccessFlagBits2 VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV = 8796093022208; +static const VkAccessFlagBits2 VK_ACCESS_2_DATA_GRAPH_READ_BIT_ARM = 140737488355328; +static const VkAccessFlagBits2 VK_ACCESS_2_DATA_GRAPH_WRITE_BIT_ARM = 281474976710656; + +typedef VkAccessFlagBits2 VkAccessFlagBits2KHR; + +typedef uint64_t VkPipelineStageFlagBits2; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE = 0; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT = 1; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT = 2; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT = 4; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT = 8; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT = 16; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT = 32; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT = 64; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT = 128; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT = 256; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT = 512; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT = 1024; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT = 2048; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT = 4096; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT = 4096; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT = 8192; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT = 16384; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT = 32768; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT = 65536; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT = 4294967296; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT = 8589934592; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT = 17179869184; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT = 34359738368; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT = 68719476736; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT = 137438953472; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT = 274877906944; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR = 67108864; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR = 134217728; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE_KHR = 0; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 1; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 2; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 4; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 8; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 16; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 32; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 64; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 128; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 256; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 512; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 1024; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 2048; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 4096; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 4096; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 8192; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 16384; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 32768; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 65536; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 4294967296; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 8589934592; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 17179869184; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 34359738368; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 68719476736; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 137438953472; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 274877906944; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 16777216; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 262144; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 131072; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_EXT = 131072; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 4194304; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 4194304; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 33554432; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 2097152; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 2097152; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 33554432; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 8388608; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 524288; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 1048576; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT = 524288; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT = 1048576; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI = 549755813888; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI = 549755813888; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI = 1099511627776; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR = 268435456; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT = 1073741824; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI = 2199023255552; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV = 536870912; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV = 17592186044416; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM = 4398046511104; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_INDIRECT_BIT_KHR = 70368744177664; + +typedef VkPipelineStageFlagBits2 VkPipelineStageFlagBits2KHR; + +typedef enum VkProvokingVertexModeEXT { + VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT = 0, + VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT = 1, + VK_PROVOKING_VERTEX_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkProvokingVertexModeEXT; +typedef enum VkHostImageCopyFlagBits { + VK_HOST_IMAGE_COPY_MEMCPY_BIT = 1, + VK_HOST_IMAGE_COPY_MEMCPY = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + VK_HOST_IMAGE_COPY_MEMCPY_BIT_EXT = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + VK_HOST_IMAGE_COPY_MEMCPY_EXT = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + VK_HOST_IMAGE_COPY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkHostImageCopyFlagBits; +typedef enum VkHostImageCopyFlagBits VkHostImageCopyFlagBitsEXT; + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef enum VkImageConstraintsInfoFlagBitsFUCHSIA { + VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA = 1, + VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA = 2, + VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA = 4, + VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA = 8, + VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA = 16, + VK_IMAGE_CONSTRAINTS_INFO_FLAG_BITS_MAX_ENUM_FUCHSIA = 0x7FFFFFFF +} VkImageConstraintsInfoFlagBitsFUCHSIA; +#endif + +typedef uint64_t VkFormatFeatureFlagBits2; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT = 1; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT = 2; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT = 4; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT = 8; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT = 16; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 32; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT = 64; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT = 128; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT = 256; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT = 512; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT = 1024; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT = 2048; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 4096; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT = 16384; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT = 32768; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 65536; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT = 131072; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 262144; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 524288; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 1048576; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 2097152; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT = 4194304; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT = 8388608; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT = 2147483648; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT = 4294967296; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT = 8589934592; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT = 8192; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT = 70368744177664; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR = 33554432; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR = 67108864; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 536870912; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT = 16777216; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 1073741824; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT = 70368744177664; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR = 134217728; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR = 268435456; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR = 1; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR = 2; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR = 4; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 8; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 16; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR = 32; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR = 64; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR = 128; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR = 256; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR = 512; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR = 1024; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR = 2048; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR = 4096; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR = 16384; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR = 32768; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = 131072; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 262144; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 524288; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 1048576; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = 2097152; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR = 4194304; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR = 8388608; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR = 2147483648; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR = 4294967296; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR = 8589934592; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR = 65536; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 8192; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_RADIUS_BUFFER_BIT_NV = 2251799813685248; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV = 274877906944; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM = 17179869184; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM = 34359738368; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM = 68719476736; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM = 137438953472; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TENSOR_SHADER_BIT_ARM = 549755813888; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TENSOR_IMAGE_ALIASING_BIT_ARM = 8796093022208; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV = 1099511627776; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV = 2199023255552; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV = 4398046511104; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM = 281474976710656; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR = 576460752303423488; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 562949953421312; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR = 1125899906842624; + +typedef VkFormatFeatureFlagBits2 VkFormatFeatureFlagBits2KHR; + +typedef enum VkRenderingFlagBits { + VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT = 1, + VK_RENDERING_SUSPENDING_BIT = 2, + VK_RENDERING_RESUMING_BIT = 4, + VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR = VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT, + VK_RENDERING_SUSPENDING_BIT_KHR = VK_RENDERING_SUSPENDING_BIT, + VK_RENDERING_RESUMING_BIT_KHR = VK_RENDERING_RESUMING_BIT, + VK_RENDERING_CONTENTS_INLINE_BIT_EXT = 16, + VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT = 8, + VK_RENDERING_CONTENTS_INLINE_BIT_KHR = 16, + VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE = 32, + VK_RENDERING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkRenderingFlagBits; +typedef enum VkRenderingFlagBits VkRenderingFlagBitsKHR; + +typedef enum VkPipelineDepthStencilStateCreateFlagBits { + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM = 1, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM = 2, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT = 1, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT = 2, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineDepthStencilStateCreateFlagBits; +typedef enum VkPipelineColorBlendStateCreateFlagBits { + VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM = 1, + VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT = 1, + VK_PIPELINE_COLOR_BLEND_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineColorBlendStateCreateFlagBits; +typedef enum VkImageCompressionFlagBitsEXT { + VK_IMAGE_COMPRESSION_DEFAULT_EXT = 0, + VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT = 1, + VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT = 2, + VK_IMAGE_COMPRESSION_DISABLED_EXT = 4, + VK_IMAGE_COMPRESSION_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkImageCompressionFlagBitsEXT; +typedef enum VkImageCompressionFixedRateFlagBitsEXT { + VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT = 0, + VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT = 1, + VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT = 2, + VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT = 4, + VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT = 8, + VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT = 16, + VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT = 32, + VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT = 64, + VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT = 128, + VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT = 256, + VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT = 512, + VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT = 1024, + VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT = 2048, + VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT = 4096, + VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT = 8192, + VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT = 16384, + VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT = 32768, + VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT = 65536, + VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT = 131072, + VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT = 262144, + VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT = 524288, + VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT = 1048576, + VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT = 2097152, + VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT = 4194304, + VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT = 8388608, + VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkImageCompressionFixedRateFlagBitsEXT; +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef enum VkExportMetalObjectTypeFlagBitsEXT { + VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT = 1, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT = 2, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT = 4, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT = 8, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT = 16, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT = 32, + VK_EXPORT_METAL_OBJECT_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkExportMetalObjectTypeFlagBitsEXT; +#endif + +typedef enum VkPipelineRobustnessBufferBehavior { + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT = 0, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED = 1, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS = 2, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 = 3, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF +} VkPipelineRobustnessBufferBehavior; +typedef enum VkPipelineRobustnessBufferBehavior VkPipelineRobustnessBufferBehaviorEXT; + +typedef enum VkPipelineRobustnessImageBehavior { + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT = 0, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED = 1, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS = 2, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2 = 3, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF +} VkPipelineRobustnessImageBehavior; +typedef enum VkPipelineRobustnessImageBehavior VkPipelineRobustnessImageBehaviorEXT; + +typedef enum VkDeviceAddressBindingFlagBitsEXT { + VK_DEVICE_ADDRESS_BINDING_INTERNAL_OBJECT_BIT_EXT = 1, + VK_DEVICE_ADDRESS_BINDING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceAddressBindingFlagBitsEXT; +typedef enum VkDeviceAddressBindingTypeEXT { + VK_DEVICE_ADDRESS_BINDING_TYPE_BIND_EXT = 0, + VK_DEVICE_ADDRESS_BINDING_TYPE_UNBIND_EXT = 1, + VK_DEVICE_ADDRESS_BINDING_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceAddressBindingTypeEXT; +typedef enum VkMicromapTypeEXT { + VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT = 0, + VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV = 1000397000, + VK_MICROMAP_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkMicromapTypeEXT; +typedef enum VkBuildMicromapModeEXT { + VK_BUILD_MICROMAP_MODE_BUILD_EXT = 0, + VK_BUILD_MICROMAP_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkBuildMicromapModeEXT; +typedef enum VkCopyMicromapModeEXT { + VK_COPY_MICROMAP_MODE_CLONE_EXT = 0, + VK_COPY_MICROMAP_MODE_SERIALIZE_EXT = 1, + VK_COPY_MICROMAP_MODE_DESERIALIZE_EXT = 2, + VK_COPY_MICROMAP_MODE_COMPACT_EXT = 3, + VK_COPY_MICROMAP_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkCopyMicromapModeEXT; +typedef enum VkBuildMicromapFlagBitsEXT { + VK_BUILD_MICROMAP_PREFER_FAST_TRACE_BIT_EXT = 1, + VK_BUILD_MICROMAP_PREFER_FAST_BUILD_BIT_EXT = 2, + VK_BUILD_MICROMAP_ALLOW_COMPACTION_BIT_EXT = 4, + VK_BUILD_MICROMAP_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkBuildMicromapFlagBitsEXT; +typedef enum VkMicromapCreateFlagBitsEXT { + VK_MICROMAP_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = 1, + VK_MICROMAP_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkMicromapCreateFlagBitsEXT; +typedef enum VkOpacityMicromapFormatEXT { + VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT = 1, + VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT = 2, + VK_OPACITY_MICROMAP_FORMAT_MAX_ENUM_EXT = 0x7FFFFFFF +} VkOpacityMicromapFormatEXT; +typedef enum VkOpacityMicromapSpecialIndexEXT { + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT_EXT = -1, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE_EXT = -2, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT_EXT = -3, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE_EXT = -4, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_CLUSTER_GEOMETRY_DISABLE_OPACITY_MICROMAP_NV = -5, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_MAX_ENUM_EXT = 0x7FFFFFFF +} VkOpacityMicromapSpecialIndexEXT; +typedef enum VkDeviceFaultVendorBinaryHeaderVersionEXT { + VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_ONE_EXT = 1, + VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceFaultVendorBinaryHeaderVersionEXT; +typedef enum VkIndirectCommandsLayoutUsageFlagBitsEXT { + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT = 1, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT = 2, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectCommandsLayoutUsageFlagBitsEXT; +typedef enum VkIndirectExecutionSetInfoTypeEXT { + VK_INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT = 0, + VK_INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT = 1, + VK_INDIRECT_EXECUTION_SET_INFO_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectExecutionSetInfoTypeEXT; +typedef enum VkIndirectCommandsInputModeFlagBitsEXT { + VK_INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT = 1, + VK_INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT = 2, + VK_INDIRECT_COMMANDS_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectCommandsInputModeFlagBitsEXT; +typedef enum VkFrameBoundaryFlagBitsEXT { + VK_FRAME_BOUNDARY_FRAME_END_BIT_EXT = 1, + VK_FRAME_BOUNDARY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkFrameBoundaryFlagBitsEXT; +typedef uint64_t VkMemoryDecompressionMethodFlagBitsNV; +static const VkMemoryDecompressionMethodFlagBitsNV VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV = 1; + +typedef enum VkDepthBiasRepresentationEXT { + VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT = 0, + VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT = 1, + VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT = 2, + VK_DEPTH_BIAS_REPRESENTATION_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDepthBiasRepresentationEXT; +typedef enum VkDirectDriverLoadingModeLUNARG { + VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG = 0, + VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG = 1, + VK_DIRECT_DRIVER_LOADING_MODE_MAX_ENUM_LUNARG = 0x7FFFFFFF +} VkDirectDriverLoadingModeLUNARG; +typedef uint64_t VkPipelineCreateFlagBits2; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT = 1; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT = 2; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DERIVATIVE_BIT = 4; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 8; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT = 16; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT = 256; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT = 512; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT = 134217728; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT = 1073741824; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX = 4294967296; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR = 4096; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_SPHERES_AND_LINEAR_SWEPT_SPHERES_BIT_NV = 8589934592; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT = 17179869184; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT_KHR = 1; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR = 2; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR = 4; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = 8; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT_KHR = 16; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DEFER_COMPILE_BIT_NV = 32; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_STATISTICS_BIT_KHR = 64; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 128; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR = 256; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR = 512; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT = 1024; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT = 8388608; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR = 2048; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 4096; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_AABBS_BIT_KHR = 8192; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 16384; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 32768; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 65536; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 131072; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 524288; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_NV = 262144; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_MOTION_BIT_NV = 1048576; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 2097152; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 4194304; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT = 16777216; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 33554432; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 67108864; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT = 134217728; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT = 1073741824; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV = 268435456; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT = 536870912; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISALLOW_OPACITY_MICROMAP_BIT_ARM = 137438953472; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR = 2147483648; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT = 274877906944; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE = 1099511627776; + +typedef VkPipelineCreateFlagBits2 VkPipelineCreateFlagBits2KHR; + +typedef uint64_t VkBufferUsageFlagBits2; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT = 1; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_DST_BIT = 2; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT = 4; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT = 8; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT = 16; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT = 32; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT = 64; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT = 128; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT = 256; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT = 131072; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX = 33554432; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR = 1; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR = 2; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 4; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 8; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR = 16; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR = 32; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR = 64; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR = 128; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR = 256; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 512; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR = 1024; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_RAY_TRACING_BIT_NV = 1024; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 2048; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 4096; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR = 8192; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR = 16384; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR = 32768; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR = 65536; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR = 131072; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 524288; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 1048576; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT = 2097152; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT = 4194304; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = 67108864; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT = 8388608; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT = 16777216; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_COMPRESSED_DATA_DGF1_BIT_AMDX = 8589934592; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM = 536870912; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TILE_MEMORY_BIT_QCOM = 134217728; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT = 2147483648; + +typedef VkBufferUsageFlagBits2 VkBufferUsageFlagBits2KHR; + +typedef enum VkPartitionedAccelerationStructureOpTypeNV { + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_WRITE_INSTANCE_NV = 0, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_UPDATE_INSTANCE_NV = 1, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_WRITE_PARTITION_TRANSLATION_NV = 2, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkPartitionedAccelerationStructureOpTypeNV; +typedef enum VkPartitionedAccelerationStructureInstanceFlagBitsNV { + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_TRIANGLE_FACING_CULL_DISABLE_BIT_NV = 1, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_TRIANGLE_FLIP_FACING_BIT_NV = 2, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_FORCE_OPAQUE_BIT_NV = 4, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_FORCE_NO_OPAQUE_BIT_NV = 8, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_ENABLE_EXPLICIT_BOUNDING_BOX_NV = 16, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkPartitionedAccelerationStructureInstanceFlagBitsNV; +typedef enum VkAntiLagModeAMD { + VK_ANTI_LAG_MODE_DRIVER_CONTROL_AMD = 0, + VK_ANTI_LAG_MODE_ON_AMD = 1, + VK_ANTI_LAG_MODE_OFF_AMD = 2, + VK_ANTI_LAG_MODE_MAX_ENUM_AMD = 0x7FFFFFFF +} VkAntiLagModeAMD; +typedef enum VkAntiLagStageAMD { + VK_ANTI_LAG_STAGE_INPUT_AMD = 0, + VK_ANTI_LAG_STAGE_PRESENT_AMD = 1, + VK_ANTI_LAG_STAGE_MAX_ENUM_AMD = 0x7FFFFFFF +} VkAntiLagStageAMD; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef enum VkDisplacementMicromapFormatNV { + VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV = 1, + VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV = 2, + VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV = 3, + VK_DISPLACEMENT_MICROMAP_FORMAT_MAX_ENUM_NV = 0x7FFFFFFF +} VkDisplacementMicromapFormatNV; +#endif + +typedef enum VkShaderCreateFlagBitsEXT { + VK_SHADER_CREATE_LINK_STAGE_BIT_EXT = 1, + VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = 2, + VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = 4, + VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT = 8, + VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT = 16, + VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT = 32, + VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 64, + VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT = 128, + VK_SHADER_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkShaderCreateFlagBitsEXT; +typedef enum VkShaderCodeTypeEXT { + VK_SHADER_CODE_TYPE_BINARY_EXT = 0, + VK_SHADER_CODE_TYPE_SPIRV_EXT = 1, + VK_SHADER_CODE_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkShaderCodeTypeEXT; +typedef enum VkScopeKHR { + VK_SCOPE_DEVICE_KHR = 1, + VK_SCOPE_WORKGROUP_KHR = 2, + VK_SCOPE_SUBGROUP_KHR = 3, + VK_SCOPE_QUEUE_FAMILY_KHR = 5, + VK_SCOPE_DEVICE_NV = VK_SCOPE_DEVICE_KHR, + VK_SCOPE_WORKGROUP_NV = VK_SCOPE_WORKGROUP_KHR, + VK_SCOPE_SUBGROUP_NV = VK_SCOPE_SUBGROUP_KHR, + VK_SCOPE_QUEUE_FAMILY_NV = VK_SCOPE_QUEUE_FAMILY_KHR, + VK_SCOPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkScopeKHR; +typedef enum VkComponentTypeKHR { + VK_COMPONENT_TYPE_FLOAT16_KHR = 0, + VK_COMPONENT_TYPE_FLOAT32_KHR = 1, + VK_COMPONENT_TYPE_FLOAT64_KHR = 2, + VK_COMPONENT_TYPE_SINT8_KHR = 3, + VK_COMPONENT_TYPE_SINT16_KHR = 4, + VK_COMPONENT_TYPE_SINT32_KHR = 5, + VK_COMPONENT_TYPE_SINT64_KHR = 6, + VK_COMPONENT_TYPE_UINT8_KHR = 7, + VK_COMPONENT_TYPE_UINT16_KHR = 8, + VK_COMPONENT_TYPE_UINT32_KHR = 9, + VK_COMPONENT_TYPE_UINT64_KHR = 10, + VK_COMPONENT_TYPE_BFLOAT16_KHR = 1000141000, + VK_COMPONENT_TYPE_FLOAT16_NV = VK_COMPONENT_TYPE_FLOAT16_KHR, + VK_COMPONENT_TYPE_FLOAT32_NV = VK_COMPONENT_TYPE_FLOAT32_KHR, + VK_COMPONENT_TYPE_FLOAT64_NV = VK_COMPONENT_TYPE_FLOAT64_KHR, + VK_COMPONENT_TYPE_SINT8_NV = VK_COMPONENT_TYPE_SINT8_KHR, + VK_COMPONENT_TYPE_SINT16_NV = VK_COMPONENT_TYPE_SINT16_KHR, + VK_COMPONENT_TYPE_SINT32_NV = VK_COMPONENT_TYPE_SINT32_KHR, + VK_COMPONENT_TYPE_SINT64_NV = VK_COMPONENT_TYPE_SINT64_KHR, + VK_COMPONENT_TYPE_UINT8_NV = VK_COMPONENT_TYPE_UINT8_KHR, + VK_COMPONENT_TYPE_UINT16_NV = VK_COMPONENT_TYPE_UINT16_KHR, + VK_COMPONENT_TYPE_UINT32_NV = VK_COMPONENT_TYPE_UINT32_KHR, + VK_COMPONENT_TYPE_UINT64_NV = VK_COMPONENT_TYPE_UINT64_KHR, + VK_COMPONENT_TYPE_SINT8_PACKED_NV = 1000491000, + VK_COMPONENT_TYPE_UINT8_PACKED_NV = 1000491001, + VK_COMPONENT_TYPE_FLOAT_E4M3_NV = 1000491002, + VK_COMPONENT_TYPE_FLOAT_E5M2_NV = 1000491003, + VK_COMPONENT_TYPE_FLOAT8_E4M3_EXT = 1000491002, + VK_COMPONENT_TYPE_FLOAT8_E5M2_EXT = 1000491003, + VK_COMPONENT_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkComponentTypeKHR; +typedef enum VkScopeKHR VkScopeNV; + +typedef enum VkComponentTypeKHR VkComponentTypeNV; + +typedef enum VkCubicFilterWeightsQCOM { + VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM = 0, + VK_CUBIC_FILTER_WEIGHTS_ZERO_TANGENT_CARDINAL_QCOM = 1, + VK_CUBIC_FILTER_WEIGHTS_B_SPLINE_QCOM = 2, + VK_CUBIC_FILTER_WEIGHTS_MITCHELL_NETRAVALI_QCOM = 3, + VK_CUBIC_FILTER_WEIGHTS_MAX_ENUM_QCOM = 0x7FFFFFFF +} VkCubicFilterWeightsQCOM; +typedef enum VkBlockMatchWindowCompareModeQCOM { + VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MIN_QCOM = 0, + VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_QCOM = 1, + VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_ENUM_QCOM = 0x7FFFFFFF +} VkBlockMatchWindowCompareModeQCOM; +typedef enum VkLayeredDriverUnderlyingApiMSFT { + VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT = 0, + VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT = 1, + VK_LAYERED_DRIVER_UNDERLYING_API_MAX_ENUM_MSFT = 0x7FFFFFFF +} VkLayeredDriverUnderlyingApiMSFT; +typedef enum VkPhysicalDeviceLayeredApiKHR { + VK_PHYSICAL_DEVICE_LAYERED_API_VULKAN_KHR = 0, + VK_PHYSICAL_DEVICE_LAYERED_API_D3D12_KHR = 1, + VK_PHYSICAL_DEVICE_LAYERED_API_METAL_KHR = 2, + VK_PHYSICAL_DEVICE_LAYERED_API_OPENGL_KHR = 3, + VK_PHYSICAL_DEVICE_LAYERED_API_OPENGLES_KHR = 4, + VK_PHYSICAL_DEVICE_LAYERED_API_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPhysicalDeviceLayeredApiKHR; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef enum VkCompressedTriangleFormatAMDX { + VK_COMPRESSED_TRIANGLE_FORMAT_DGF1_AMDX = 0, + VK_COMPRESSED_TRIANGLE_FORMAT_MAX_ENUM_AMDX = 0x7FFFFFFF +} VkCompressedTriangleFormatAMDX; +#endif + +typedef enum VkDepthClampModeEXT { + VK_DEPTH_CLAMP_MODE_VIEWPORT_RANGE_EXT = 0, + VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT = 1, + VK_DEPTH_CLAMP_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDepthClampModeEXT; +typedef enum VkTileShadingRenderPassFlagBitsQCOM { + VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM = 1, + VK_TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM = 2, + VK_TILE_SHADING_RENDER_PASS_FLAG_BITS_MAX_ENUM_QCOM = 0x7FFFFFFF +} VkTileShadingRenderPassFlagBitsQCOM; +typedef enum VkCooperativeVectorMatrixLayoutNV { + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_ROW_MAJOR_NV = 0, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_COLUMN_MAJOR_NV = 1, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_INFERENCING_OPTIMAL_NV = 2, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_TRAINING_OPTIMAL_NV = 3, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_MAX_ENUM_NV = 0x7FFFFFFF +} VkCooperativeVectorMatrixLayoutNV; +typedef enum VkAddressCopyFlagBitsKHR { + VK_ADDRESS_COPY_DEVICE_LOCAL_BIT_KHR = 1, + VK_ADDRESS_COPY_SPARSE_BIT_KHR = 2, + VK_ADDRESS_COPY_PROTECTED_BIT_KHR = 4, + VK_ADDRESS_COPY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAddressCopyFlagBitsKHR; +typedef uint64_t VkTensorCreateFlagBitsARM; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_MUTABLE_FORMAT_BIT_ARM = 1; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_PROTECTED_BIT_ARM = 2; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM = 4; + +typedef uint64_t VkTensorUsageFlagBitsARM; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_SHADER_BIT_ARM = 2; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_TRANSFER_SRC_BIT_ARM = 4; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_TRANSFER_DST_BIT_ARM = 8; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_IMAGE_ALIASING_BIT_ARM = 16; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_DATA_GRAPH_BIT_ARM = 32; + +typedef enum VkTensorTilingARM { + VK_TENSOR_TILING_OPTIMAL_ARM = 0, + VK_TENSOR_TILING_LINEAR_ARM = 1, + VK_TENSOR_TILING_MAX_ENUM_ARM = 0x7FFFFFFF +} VkTensorTilingARM; +typedef uint64_t VkTensorViewCreateFlagBitsARM; +static const VkTensorViewCreateFlagBitsARM VK_TENSOR_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM = 1; + +typedef uint64_t VkDataGraphPipelineSessionCreateFlagBitsARM; +static const VkDataGraphPipelineSessionCreateFlagBitsARM VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM = 1; + +typedef enum VkDataGraphPipelinePropertyARM { + VK_DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM = 0, + VK_DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM = 1, + VK_DATA_GRAPH_PIPELINE_PROPERTY_MAX_ENUM_ARM = 0x7FFFFFFF +} VkDataGraphPipelinePropertyARM; +typedef enum VkDataGraphPipelineSessionBindPointARM { + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM = 0, + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_MAX_ENUM_ARM = 0x7FFFFFFF +} VkDataGraphPipelineSessionBindPointARM; +typedef enum VkDataGraphPipelineSessionBindPointTypeARM { + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM = 0, + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MAX_ENUM_ARM = 0x7FFFFFFF +} VkDataGraphPipelineSessionBindPointTypeARM; +typedef enum VkPhysicalDeviceDataGraphProcessingEngineTypeARM { + VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM = 0, + VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_MAX_ENUM_ARM = 0x7FFFFFFF +} VkPhysicalDeviceDataGraphProcessingEngineTypeARM; +typedef enum VkPhysicalDeviceDataGraphOperationTypeARM { + VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM = 0, + VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_MAX_ENUM_ARM = 0x7FFFFFFF +} VkPhysicalDeviceDataGraphOperationTypeARM; +typedef enum VkVideoEncodeRgbModelConversionFlagBitsVALVE { + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_RGB_IDENTITY_BIT_VALVE = 1, + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_IDENTITY_BIT_VALVE = 2, + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_709_BIT_VALVE = 4, + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_601_BIT_VALVE = 8, + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_2020_BIT_VALVE = 16, + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_FLAG_BITS_MAX_ENUM_VALVE = 0x7FFFFFFF +} VkVideoEncodeRgbModelConversionFlagBitsVALVE; +typedef enum VkVideoEncodeRgbRangeCompressionFlagBitsVALVE { + VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_FULL_RANGE_BIT_VALVE = 1, + VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_NARROW_RANGE_BIT_VALVE = 2, + VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_FLAG_BITS_MAX_ENUM_VALVE = 0x7FFFFFFF +} VkVideoEncodeRgbRangeCompressionFlagBitsVALVE; +typedef enum VkVideoEncodeRgbChromaOffsetFlagBitsVALVE { + VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_COSITED_EVEN_BIT_VALVE = 1, + VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_MIDPOINT_BIT_VALVE = 2, + VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_FLAG_BITS_MAX_ENUM_VALVE = 0x7FFFFFFF +} VkVideoEncodeRgbChromaOffsetFlagBitsVALVE; +typedef enum VkColorSpaceKHR { + VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0, + VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, + VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001, + VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002, + VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = 1000104003, + VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004, + VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005, + VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006, + VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007, + VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008, + VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009, + VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010, + VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011, + VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012, + VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013, + VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014, + VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, + VK_COLOR_SPACE_DISPLAY_NATIVE_AMD = 1000213000, + VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkColorSpaceKHR; +typedef enum VkCompositeAlphaFlagBitsKHR { + VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 1, + VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 2, + VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 4, + VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 8, + VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkCompositeAlphaFlagBitsKHR; +typedef enum VkDisplayPlaneAlphaFlagBitsKHR { + VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 1, + VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 2, + VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 4, + VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 8, + VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkDisplayPlaneAlphaFlagBitsKHR; +typedef enum VkPresentModeKHR { + VK_PRESENT_MODE_IMMEDIATE_KHR = 0, + VK_PRESENT_MODE_MAILBOX_KHR = 1, + VK_PRESENT_MODE_FIFO_KHR = 2, + VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3, + VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000, + VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001, + VK_PRESENT_MODE_FIFO_LATEST_READY_EXT = 1000361000, + VK_PRESENT_MODE_FIFO_LATEST_READY_KHR = 1000361000, + VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPresentModeKHR; +typedef enum VkSurfaceTransformFlagBitsKHR { + VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 1, + VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 2, + VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 4, + VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 8, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 16, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 32, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 64, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 128, + VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 256, + VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkSurfaceTransformFlagBitsKHR; +typedef enum VkDisplaySurfaceStereoTypeNV { + VK_DISPLAY_SURFACE_STEREO_TYPE_NONE_NV = 0, + VK_DISPLAY_SURFACE_STEREO_TYPE_ONBOARD_DIN_NV = 1, + VK_DISPLAY_SURFACE_STEREO_TYPE_HDMI_3D_NV = 2, + VK_DISPLAY_SURFACE_STEREO_TYPE_INBAND_DISPLAYPORT_NV = 3, + VK_DISPLAY_SURFACE_STEREO_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkDisplaySurfaceStereoTypeNV; +typedef enum VkDebugReportFlagBitsEXT { + VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 1, + VK_DEBUG_REPORT_WARNING_BIT_EXT = 2, + VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 4, + VK_DEBUG_REPORT_ERROR_BIT_EXT = 8, + VK_DEBUG_REPORT_DEBUG_BIT_EXT = 16, + VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugReportFlagBitsEXT; +typedef enum VkDebugReportObjectTypeEXT { + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0, + VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1, + VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2, + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3, + VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4, + VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5, + VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6, + VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7, + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8, + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9, + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10, + VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11, + VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12, + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13, + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14, + VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15, + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16, + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17, + VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18, + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20, + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23, + VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24, + VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25, + VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26, + VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27, + VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28, + VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29, + VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30, + VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = 33, + VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT = 1000156000, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = 1000085000, + VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT = 1000029000, + VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT = 1000029001, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT = 1000150000, + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT = 1000165000, + VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_MODULE_NV_EXT = 1000307000, + VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_FUNCTION_NV_EXT = 1000307001, + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT = 1000366000, + VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugReportObjectTypeEXT; +typedef enum VkDeviceMemoryReportEventTypeEXT { + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT = 0, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT = 1, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT = 2, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT = 3, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT = 4, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceMemoryReportEventTypeEXT; +typedef enum VkRasterizationOrderAMD { + VK_RASTERIZATION_ORDER_STRICT_AMD = 0, + VK_RASTERIZATION_ORDER_RELAXED_AMD = 1, + VK_RASTERIZATION_ORDER_MAX_ENUM_AMD = 0x7FFFFFFF +} VkRasterizationOrderAMD; +typedef enum VkExternalMemoryHandleTypeFlagBitsNV { + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 1, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 2, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 4, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 8, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkExternalMemoryHandleTypeFlagBitsNV; +typedef enum VkExternalMemoryFeatureFlagBitsNV { + VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 1, + VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 2, + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 4, + VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkExternalMemoryFeatureFlagBitsNV; +typedef enum VkValidationCheckEXT { + VK_VALIDATION_CHECK_ALL_EXT = 0, + VK_VALIDATION_CHECK_SHADERS_EXT = 1, + VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationCheckEXT; +typedef enum VkValidationFeatureEnableEXT { + VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = 0, + VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = 1, + VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = 2, + VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = 3, + VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT = 4, + VK_VALIDATION_FEATURE_ENABLE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationFeatureEnableEXT; +typedef enum VkValidationFeatureDisableEXT { + VK_VALIDATION_FEATURE_DISABLE_ALL_EXT = 0, + VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT = 1, + VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = 2, + VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT = 3, + VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT = 4, + VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT = 5, + VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT = 6, + VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT = 7, + VK_VALIDATION_FEATURE_DISABLE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationFeatureDisableEXT; +typedef enum VkExternalMemoryHandleTypeFlagBits { + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 1, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 2, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 4, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = 8, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = 16, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = 32, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = 64, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = 512, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = 1024, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 128, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 256, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA = 2048, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV = 4096, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX = 16384, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT = 65536, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT = 131072, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLHEAP_BIT_EXT = 262144, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalMemoryHandleTypeFlagBits; +typedef enum VkExternalMemoryHandleTypeFlagBits VkExternalMemoryHandleTypeFlagBitsKHR; + +typedef enum VkExternalMemoryFeatureFlagBits { + VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = 1, + VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = 2, + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = 4, + VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT, + VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT, + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT, + VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalMemoryFeatureFlagBits; +typedef enum VkExternalMemoryFeatureFlagBits VkExternalMemoryFeatureFlagBitsKHR; + +typedef enum VkExternalSemaphoreHandleTypeFlagBits { + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = 1, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 2, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 4, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 8, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 16, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA = 128, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalSemaphoreHandleTypeFlagBits; +typedef enum VkExternalSemaphoreHandleTypeFlagBits VkExternalSemaphoreHandleTypeFlagBitsKHR; + +typedef enum VkExternalSemaphoreFeatureFlagBits { + VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 1, + VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 2, + VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT, + VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT, + VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalSemaphoreFeatureFlagBits; +typedef enum VkExternalSemaphoreFeatureFlagBits VkExternalSemaphoreFeatureFlagBitsKHR; + +typedef enum VkSemaphoreImportFlagBits { + VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = 1, + VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, + VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSemaphoreImportFlagBits; +typedef enum VkSemaphoreImportFlagBits VkSemaphoreImportFlagBitsKHR; + +typedef enum VkExternalFenceHandleTypeFlagBits { + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = 1, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 2, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 4, + VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = 8, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalFenceHandleTypeFlagBits; +typedef enum VkExternalFenceHandleTypeFlagBits VkExternalFenceHandleTypeFlagBitsKHR; + +typedef enum VkExternalFenceFeatureFlagBits { + VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 1, + VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 2, + VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT, + VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT, + VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalFenceFeatureFlagBits; +typedef enum VkExternalFenceFeatureFlagBits VkExternalFenceFeatureFlagBitsKHR; + +typedef enum VkFenceImportFlagBits { + VK_FENCE_IMPORT_TEMPORARY_BIT = 1, + VK_FENCE_IMPORT_TEMPORARY_BIT_KHR = VK_FENCE_IMPORT_TEMPORARY_BIT, + VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkFenceImportFlagBits; +typedef enum VkFenceImportFlagBits VkFenceImportFlagBitsKHR; + +typedef enum VkSurfaceCounterFlagBitsEXT { + VK_SURFACE_COUNTER_VBLANK_BIT_EXT = 1, + VK_SURFACE_COUNTER_VBLANK_EXT = VK_SURFACE_COUNTER_VBLANK_BIT_EXT, + VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkSurfaceCounterFlagBitsEXT; +typedef enum VkDisplayPowerStateEXT { + VK_DISPLAY_POWER_STATE_OFF_EXT = 0, + VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1, + VK_DISPLAY_POWER_STATE_ON_EXT = 2, + VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDisplayPowerStateEXT; +typedef enum VkDeviceEventTypeEXT { + VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0, + VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceEventTypeEXT; +typedef enum VkDisplayEventTypeEXT { + VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0, + VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDisplayEventTypeEXT; +typedef enum VkPeerMemoryFeatureFlagBits { + VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT = 1, + VK_PEER_MEMORY_FEATURE_COPY_DST_BIT = 2, + VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = 4, + VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT = 8, + VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT, + VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_DST_BIT, + VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT, + VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT, + VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPeerMemoryFeatureFlagBits; +typedef enum VkPeerMemoryFeatureFlagBits VkPeerMemoryFeatureFlagBitsKHR; + +typedef enum VkMemoryAllocateFlagBits { + VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 1, + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT = 2, + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 4, + VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT, + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, + VK_MEMORY_ALLOCATE_ZERO_INITIALIZE_BIT_EXT = 8, + VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryAllocateFlagBits; +typedef enum VkMemoryAllocateFlagBits VkMemoryAllocateFlagBitsKHR; + +typedef enum VkDeviceGroupPresentModeFlagBitsKHR { + VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = 1, + VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = 2, + VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = 4, + VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 8, + VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkDeviceGroupPresentModeFlagBitsKHR; +typedef enum VkSwapchainCreateFlagBitsKHR { + VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = 1, + VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = 2, + VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR = 4, + VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT = 8, + VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR = 64, + VK_SWAPCHAIN_CREATE_PRESENT_WAIT_2_BIT_KHR = 128, + VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_KHR = 8, + VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkSwapchainCreateFlagBitsKHR; +typedef enum VkSubgroupFeatureFlagBits { + VK_SUBGROUP_FEATURE_BASIC_BIT = 1, + VK_SUBGROUP_FEATURE_VOTE_BIT = 2, + VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 4, + VK_SUBGROUP_FEATURE_BALLOT_BIT = 8, + VK_SUBGROUP_FEATURE_SHUFFLE_BIT = 16, + VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 32, + VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 64, + VK_SUBGROUP_FEATURE_QUAD_BIT = 128, + VK_SUBGROUP_FEATURE_ROTATE_BIT = 512, + VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT = 1024, + VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV = 256, + VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR = VK_SUBGROUP_FEATURE_ROTATE_BIT, + VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR = VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT, + VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSubgroupFeatureFlagBits; +typedef enum VkTessellationDomainOrigin { + VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = 0, + VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = 1, + VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT, + VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT, + VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM = 0x7FFFFFFF +} VkTessellationDomainOrigin; +typedef enum VkTessellationDomainOrigin VkTessellationDomainOriginKHR; + +typedef enum VkSamplerYcbcrModelConversion { + VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = 1, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = 2, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = 3, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = 4, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM = 0x7FFFFFFF +} VkSamplerYcbcrModelConversion; +typedef enum VkSamplerYcbcrModelConversion VkSamplerYcbcrModelConversionKHR; + +typedef enum VkSamplerYcbcrRange { + VK_SAMPLER_YCBCR_RANGE_ITU_FULL = 0, + VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = 1, + VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_FULL, + VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW, + VK_SAMPLER_YCBCR_RANGE_MAX_ENUM = 0x7FFFFFFF +} VkSamplerYcbcrRange; +typedef enum VkSamplerYcbcrRange VkSamplerYcbcrRangeKHR; + +typedef enum VkChromaLocation { + VK_CHROMA_LOCATION_COSITED_EVEN = 0, + VK_CHROMA_LOCATION_MIDPOINT = 1, + VK_CHROMA_LOCATION_COSITED_EVEN_KHR = VK_CHROMA_LOCATION_COSITED_EVEN, + VK_CHROMA_LOCATION_MIDPOINT_KHR = VK_CHROMA_LOCATION_MIDPOINT, + VK_CHROMA_LOCATION_MAX_ENUM = 0x7FFFFFFF +} VkChromaLocation; +typedef enum VkChromaLocation VkChromaLocationKHR; + +typedef enum VkSamplerReductionMode { + VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE = 0, + VK_SAMPLER_REDUCTION_MODE_MIN = 1, + VK_SAMPLER_REDUCTION_MODE_MAX = 2, + VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, + VK_SAMPLER_REDUCTION_MODE_MIN_EXT = VK_SAMPLER_REDUCTION_MODE_MIN, + VK_SAMPLER_REDUCTION_MODE_MAX_EXT = VK_SAMPLER_REDUCTION_MODE_MAX, + VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM = 1000521000, + VK_SAMPLER_REDUCTION_MODE_MAX_ENUM = 0x7FFFFFFF +} VkSamplerReductionMode; +typedef enum VkSamplerReductionMode VkSamplerReductionModeEXT; + +typedef enum VkBlendOverlapEXT { + VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0, + VK_BLEND_OVERLAP_DISJOINT_EXT = 1, + VK_BLEND_OVERLAP_CONJOINT_EXT = 2, + VK_BLEND_OVERLAP_MAX_ENUM_EXT = 0x7FFFFFFF +} VkBlendOverlapEXT; +typedef enum VkDebugUtilsMessageSeverityFlagBitsEXT { + VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 1, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 16, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 256, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 4096, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugUtilsMessageSeverityFlagBitsEXT; +typedef enum VkDebugUtilsMessageTypeFlagBitsEXT { + VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 1, + VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 2, + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 4, + VK_DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT = 8, + VK_DEBUG_UTILS_MESSAGE_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugUtilsMessageTypeFlagBitsEXT; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef enum VkFullScreenExclusiveEXT { + VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = 0, + VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1, + VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2, + VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3, + VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkFullScreenExclusiveEXT; +#endif + +typedef enum VkShaderFloatControlsIndependence { + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = 0, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = 1, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = 2, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM = 0x7FFFFFFF +} VkShaderFloatControlsIndependence; +typedef enum VkShaderFloatControlsIndependence VkShaderFloatControlsIndependenceKHR; + +typedef enum VkFragmentShadingRateCombinerOpKHR { + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR = 0, + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR = 1, + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR = 2, + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR = 3, + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR = 4, + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_ENUM_KHR = 0x7FFFFFFF +} VkFragmentShadingRateCombinerOpKHR; +typedef enum VkSubmitFlagBits { + VK_SUBMIT_PROTECTED_BIT = 1, + VK_SUBMIT_PROTECTED_BIT_KHR = VK_SUBMIT_PROTECTED_BIT, + VK_SUBMIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSubmitFlagBits; +typedef enum VkSubmitFlagBits VkSubmitFlagBitsKHR; + +typedef enum VkGraphicsPipelineLibraryFlagBitsEXT { + VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT = 1, + VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT = 2, + VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT = 4, + VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT = 8, + VK_GRAPHICS_PIPELINE_LIBRARY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkGraphicsPipelineLibraryFlagBitsEXT; +typedef enum VkOpticalFlowGridSizeFlagBitsNV { + VK_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV = 1, + VK_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV = 2, + VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV = 4, + VK_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV = 8, + VK_OPTICAL_FLOW_GRID_SIZE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowGridSizeFlagBitsNV; +typedef enum VkOpticalFlowUsageFlagBitsNV { + VK_OPTICAL_FLOW_USAGE_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV = 1, + VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV = 2, + VK_OPTICAL_FLOW_USAGE_HINT_BIT_NV = 4, + VK_OPTICAL_FLOW_USAGE_COST_BIT_NV = 8, + VK_OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV = 16, + VK_OPTICAL_FLOW_USAGE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowUsageFlagBitsNV; +typedef enum VkOpticalFlowPerformanceLevelNV { + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV = 1, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV = 2, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV = 3, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowPerformanceLevelNV; +typedef enum VkOpticalFlowSessionBindingPointNV { + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV = 1, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV = 2, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV = 3, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV = 4, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV = 5, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV = 6, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV = 7, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV = 8, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowSessionBindingPointNV; +typedef enum VkOpticalFlowSessionCreateFlagBitsNV { + VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV = 1, + VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV = 2, + VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV = 4, + VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV = 8, + VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV = 16, + VK_OPTICAL_FLOW_SESSION_CREATE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowSessionCreateFlagBitsNV; +typedef enum VkOpticalFlowExecuteFlagBitsNV { + VK_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV = 1, + VK_OPTICAL_FLOW_EXECUTE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowExecuteFlagBitsNV; +typedef enum VkDeviceFaultAddressTypeEXT { + VK_DEVICE_FAULT_ADDRESS_TYPE_NONE_EXT = 0, + VK_DEVICE_FAULT_ADDRESS_TYPE_READ_INVALID_EXT = 1, + VK_DEVICE_FAULT_ADDRESS_TYPE_WRITE_INVALID_EXT = 2, + VK_DEVICE_FAULT_ADDRESS_TYPE_EXECUTE_INVALID_EXT = 3, + VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_UNKNOWN_EXT = 4, + VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_INVALID_EXT = 5, + VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_FAULT_EXT = 6, + VK_DEVICE_FAULT_ADDRESS_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceFaultAddressTypeEXT; +typedef enum VkPresentScalingFlagBitsKHR { + VK_PRESENT_SCALING_ONE_TO_ONE_BIT_KHR = 1, + VK_PRESENT_SCALING_ONE_TO_ONE_BIT_EXT = VK_PRESENT_SCALING_ONE_TO_ONE_BIT_KHR, + VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_KHR = 2, + VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT = VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_KHR, + VK_PRESENT_SCALING_STRETCH_BIT_KHR = 4, + VK_PRESENT_SCALING_STRETCH_BIT_EXT = VK_PRESENT_SCALING_STRETCH_BIT_KHR, + VK_PRESENT_SCALING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPresentScalingFlagBitsKHR; +typedef enum VkPresentScalingFlagBitsKHR VkPresentScalingFlagBitsEXT; + +typedef enum VkPresentGravityFlagBitsKHR { + VK_PRESENT_GRAVITY_MIN_BIT_KHR = 1, + VK_PRESENT_GRAVITY_MIN_BIT_EXT = VK_PRESENT_GRAVITY_MIN_BIT_KHR, + VK_PRESENT_GRAVITY_MAX_BIT_KHR = 2, + VK_PRESENT_GRAVITY_MAX_BIT_EXT = VK_PRESENT_GRAVITY_MAX_BIT_KHR, + VK_PRESENT_GRAVITY_CENTERED_BIT_KHR = 4, + VK_PRESENT_GRAVITY_CENTERED_BIT_EXT = VK_PRESENT_GRAVITY_CENTERED_BIT_KHR, + VK_PRESENT_GRAVITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPresentGravityFlagBitsKHR; +typedef enum VkPresentGravityFlagBitsKHR VkPresentGravityFlagBitsEXT; + +typedef enum VkLayerSettingTypeEXT { + VK_LAYER_SETTING_TYPE_BOOL32_EXT = 0, + VK_LAYER_SETTING_TYPE_INT32_EXT = 1, + VK_LAYER_SETTING_TYPE_INT64_EXT = 2, + VK_LAYER_SETTING_TYPE_UINT32_EXT = 3, + VK_LAYER_SETTING_TYPE_UINT64_EXT = 4, + VK_LAYER_SETTING_TYPE_FLOAT32_EXT = 5, + VK_LAYER_SETTING_TYPE_FLOAT64_EXT = 6, + VK_LAYER_SETTING_TYPE_STRING_EXT = 7, + VK_LAYER_SETTING_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkLayerSettingTypeEXT; +typedef enum VkLatencyMarkerNV { + VK_LATENCY_MARKER_SIMULATION_START_NV = 0, + VK_LATENCY_MARKER_SIMULATION_END_NV = 1, + VK_LATENCY_MARKER_RENDERSUBMIT_START_NV = 2, + VK_LATENCY_MARKER_RENDERSUBMIT_END_NV = 3, + VK_LATENCY_MARKER_PRESENT_START_NV = 4, + VK_LATENCY_MARKER_PRESENT_END_NV = 5, + VK_LATENCY_MARKER_INPUT_SAMPLE_NV = 6, + VK_LATENCY_MARKER_TRIGGER_FLASH_NV = 7, + VK_LATENCY_MARKER_OUT_OF_BAND_RENDERSUBMIT_START_NV = 8, + VK_LATENCY_MARKER_OUT_OF_BAND_RENDERSUBMIT_END_NV = 9, + VK_LATENCY_MARKER_OUT_OF_BAND_PRESENT_START_NV = 10, + VK_LATENCY_MARKER_OUT_OF_BAND_PRESENT_END_NV = 11, + VK_LATENCY_MARKER_MAX_ENUM_NV = 0x7FFFFFFF +} VkLatencyMarkerNV; +typedef enum VkOutOfBandQueueTypeNV { + VK_OUT_OF_BAND_QUEUE_TYPE_RENDER_NV = 0, + VK_OUT_OF_BAND_QUEUE_TYPE_PRESENT_NV = 1, + VK_OUT_OF_BAND_QUEUE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkOutOfBandQueueTypeNV; +typedef uint64_t VkPhysicalDeviceSchedulingControlsFlagBitsARM; +static const VkPhysicalDeviceSchedulingControlsFlagBitsARM VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM = 1; + +typedef enum VkMemoryUnmapFlagBits { + VK_MEMORY_UNMAP_RESERVE_BIT_EXT = 1, + VK_MEMORY_UNMAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryUnmapFlagBits; +typedef enum VkMemoryUnmapFlagBits VkMemoryUnmapFlagBitsKHR; + +typedef enum VkVendorId { + VK_VENDOR_ID_KHRONOS = 0x10000, + VK_VENDOR_ID_VIV = 0x10001, + VK_VENDOR_ID_VSI = 0x10002, + VK_VENDOR_ID_KAZAN = 0x10003, + VK_VENDOR_ID_CODEPLAY = 0x10004, + VK_VENDOR_ID_MESA = 0x10005, + VK_VENDOR_ID_POCL = 0x10006, + VK_VENDOR_ID_MOBILEYE = 0x10007, + VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF +} VkVendorId; +typedef enum VkDriverId { + VK_DRIVER_ID_AMD_PROPRIETARY = 1, + VK_DRIVER_ID_AMD_OPEN_SOURCE = 2, + VK_DRIVER_ID_MESA_RADV = 3, + VK_DRIVER_ID_NVIDIA_PROPRIETARY = 4, + VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS = 5, + VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA = 6, + VK_DRIVER_ID_IMAGINATION_PROPRIETARY = 7, + VK_DRIVER_ID_QUALCOMM_PROPRIETARY = 8, + VK_DRIVER_ID_ARM_PROPRIETARY = 9, + VK_DRIVER_ID_GOOGLE_SWIFTSHADER = 10, + VK_DRIVER_ID_GGP_PROPRIETARY = 11, + VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12, + VK_DRIVER_ID_MESA_LLVMPIPE = 13, + VK_DRIVER_ID_MOLTENVK = 14, + VK_DRIVER_ID_COREAVI_PROPRIETARY = 15, + VK_DRIVER_ID_JUICE_PROPRIETARY = 16, + VK_DRIVER_ID_VERISILICON_PROPRIETARY = 17, + VK_DRIVER_ID_MESA_TURNIP = 18, + VK_DRIVER_ID_MESA_V3DV = 19, + VK_DRIVER_ID_MESA_PANVK = 20, + VK_DRIVER_ID_SAMSUNG_PROPRIETARY = 21, + VK_DRIVER_ID_MESA_VENUS = 22, + VK_DRIVER_ID_MESA_DOZEN = 23, + VK_DRIVER_ID_MESA_NVK = 24, + VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA = 25, + VK_DRIVER_ID_MESA_HONEYKRISP = 26, + VK_DRIVER_ID_VULKAN_SC_EMULATION_ON_VULKAN = 27, + VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY, + VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE, + VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV, + VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR = VK_DRIVER_ID_NVIDIA_PROPRIETARY, + VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR = VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS, + VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR = VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA, + VK_DRIVER_ID_IMAGINATION_PROPRIETARY_KHR = VK_DRIVER_ID_IMAGINATION_PROPRIETARY, + VK_DRIVER_ID_QUALCOMM_PROPRIETARY_KHR = VK_DRIVER_ID_QUALCOMM_PROPRIETARY, + VK_DRIVER_ID_ARM_PROPRIETARY_KHR = VK_DRIVER_ID_ARM_PROPRIETARY, + VK_DRIVER_ID_GOOGLE_SWIFTSHADER_KHR = VK_DRIVER_ID_GOOGLE_SWIFTSHADER, + VK_DRIVER_ID_GGP_PROPRIETARY_KHR = VK_DRIVER_ID_GGP_PROPRIETARY, + VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR = VK_DRIVER_ID_BROADCOM_PROPRIETARY, + VK_DRIVER_ID_MAX_ENUM = 0x7FFFFFFF +} VkDriverId; +typedef enum VkDriverId VkDriverIdKHR; + +typedef enum VkShadingRatePaletteEntryNV { + VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV = 0, + VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV = 1, + VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV = 2, + VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV = 3, + VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV = 4, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV = 5, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV = 6, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV = 7, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV = 8, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV = 9, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV = 10, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV = 11, + VK_SHADING_RATE_PALETTE_ENTRY_MAX_ENUM_NV = 0x7FFFFFFF +} VkShadingRatePaletteEntryNV; +typedef enum VkCoarseSampleOrderTypeNV { + VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV = 0, + VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV = 1, + VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV = 2, + VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV = 3, + VK_COARSE_SAMPLE_ORDER_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkCoarseSampleOrderTypeNV; +typedef enum VkPipelineExecutableStatisticFormatKHR { + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = 0, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = 1, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = 2, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = 3, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPipelineExecutableStatisticFormatKHR; +typedef enum VkVideoCodecOperationFlagBitsKHR { + VK_VIDEO_CODEC_OPERATION_NONE_KHR = 0, + VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR = 65536, + VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR = 131072, + VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR = 1, + VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR = 2, + VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR = 4, + VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR = 262144, + VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR = 8, + VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoCodecOperationFlagBitsKHR; +typedef enum VkVideoChromaSubsamplingFlagBitsKHR { + VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_KHR = 0, + VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR = 1, + VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR = 2, + VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR = 4, + VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR = 8, + VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoChromaSubsamplingFlagBitsKHR; +typedef enum VkVideoComponentBitDepthFlagBitsKHR { + VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR = 0, + VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR = 1, + VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR = 4, + VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR = 16, + VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoComponentBitDepthFlagBitsKHR; +typedef enum VkVideoCapabilityFlagBitsKHR { + VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR = 1, + VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR = 2, + VK_VIDEO_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoCapabilityFlagBitsKHR; +typedef enum VkVideoSessionCreateFlagBitsKHR { + VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR = 1, + VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_PARAMETER_OPTIMIZATIONS_BIT_KHR = 2, + VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR = 4, + VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 8, + VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR = 16, + VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR = 32, + VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoSessionCreateFlagBitsKHR; +typedef enum VkVideoSessionParametersCreateFlagBitsKHR { + VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR = 1, + VK_VIDEO_SESSION_PARAMETERS_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoSessionParametersCreateFlagBitsKHR; +typedef enum VkVideoCodingControlFlagBitsKHR { + VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR = 1, + VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR = 2, + VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR = 4, + VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoCodingControlFlagBitsKHR; +typedef enum VkQueryResultStatusKHR { + VK_QUERY_RESULT_STATUS_ERROR_KHR = -1, + VK_QUERY_RESULT_STATUS_NOT_READY_KHR = 0, + VK_QUERY_RESULT_STATUS_COMPLETE_KHR = 1, + VK_QUERY_RESULT_STATUS_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_KHR = -1000299000, + VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkQueryResultStatusKHR; +typedef enum VkVideoDecodeUsageFlagBitsKHR { + VK_VIDEO_DECODE_USAGE_DEFAULT_KHR = 0, + VK_VIDEO_DECODE_USAGE_TRANSCODING_BIT_KHR = 1, + VK_VIDEO_DECODE_USAGE_OFFLINE_BIT_KHR = 2, + VK_VIDEO_DECODE_USAGE_STREAMING_BIT_KHR = 4, + VK_VIDEO_DECODE_USAGE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoDecodeUsageFlagBitsKHR; +typedef enum VkVideoDecodeCapabilityFlagBitsKHR { + VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR = 1, + VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR = 2, + VK_VIDEO_DECODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoDecodeCapabilityFlagBitsKHR; +typedef enum VkVideoDecodeH264PictureLayoutFlagBitsKHR { + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR = 0, + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR = 1, + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR = 2, + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoDecodeH264PictureLayoutFlagBitsKHR; +typedef enum VkVideoEncodeFlagBitsKHR { + VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR = 4, + VK_VIDEO_ENCODE_WITH_QUANTIZATION_DELTA_MAP_BIT_KHR = 1, + VK_VIDEO_ENCODE_WITH_EMPHASIS_MAP_BIT_KHR = 2, + VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeFlagBitsKHR; +typedef enum VkVideoEncodeUsageFlagBitsKHR { + VK_VIDEO_ENCODE_USAGE_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_USAGE_TRANSCODING_BIT_KHR = 1, + VK_VIDEO_ENCODE_USAGE_STREAMING_BIT_KHR = 2, + VK_VIDEO_ENCODE_USAGE_RECORDING_BIT_KHR = 4, + VK_VIDEO_ENCODE_USAGE_CONFERENCING_BIT_KHR = 8, + VK_VIDEO_ENCODE_USAGE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeUsageFlagBitsKHR; +typedef enum VkVideoEncodeContentFlagBitsKHR { + VK_VIDEO_ENCODE_CONTENT_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_CONTENT_CAMERA_BIT_KHR = 1, + VK_VIDEO_ENCODE_CONTENT_DESKTOP_BIT_KHR = 2, + VK_VIDEO_ENCODE_CONTENT_RENDERED_BIT_KHR = 4, + VK_VIDEO_ENCODE_CONTENT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeContentFlagBitsKHR; +typedef enum VkVideoEncodeTuningModeKHR { + VK_VIDEO_ENCODE_TUNING_MODE_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_TUNING_MODE_HIGH_QUALITY_KHR = 1, + VK_VIDEO_ENCODE_TUNING_MODE_LOW_LATENCY_KHR = 2, + VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR = 3, + VK_VIDEO_ENCODE_TUNING_MODE_LOSSLESS_KHR = 4, + VK_VIDEO_ENCODE_TUNING_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeTuningModeKHR; +typedef enum VkVideoEncodeCapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR = 1, + VK_VIDEO_ENCODE_CAPABILITY_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_DETECTION_BIT_KHR = 2, + VK_VIDEO_ENCODE_CAPABILITY_QUANTIZATION_DELTA_MAP_BIT_KHR = 4, + VK_VIDEO_ENCODE_CAPABILITY_EMPHASIS_MAP_BIT_KHR = 8, + VK_VIDEO_ENCODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeCapabilityFlagBitsKHR; +typedef enum VkVideoEncodeFeedbackFlagBitsKHR { + VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR = 1, + VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR = 2, + VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_HAS_OVERRIDES_BIT_KHR = 4, + VK_VIDEO_ENCODE_FEEDBACK_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeFeedbackFlagBitsKHR; +typedef enum VkVideoEncodeRateControlModeFlagBitsKHR { + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR = 1, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 2, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 4, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeRateControlModeFlagBitsKHR; +typedef enum VkVideoEncodeIntraRefreshModeFlagBitsKHR { + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR = 0, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR = 1, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR = 2, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR = 4, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR = 8, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeIntraRefreshModeFlagBitsKHR; +typedef enum VkVideoEncodeH264CapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_KHR = 1, + VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR = 2, + VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_KHR = 4, + VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_KHR = 8, + VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR = 16, + VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR = 32, + VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR = 64, + VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_KHR = 128, + VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_KHR = 256, + VK_VIDEO_ENCODE_H264_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR = 1024, + VK_VIDEO_ENCODE_H264_CAPABILITY_MB_QP_DIFF_WRAPAROUND_BIT_KHR = 512, + VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH264CapabilityFlagBitsKHR; +typedef enum VkVideoEncodeH264StdFlagBitsKHR { + VK_VIDEO_ENCODE_H264_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR = 1, + VK_VIDEO_ENCODE_H264_STD_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG_SET_BIT_KHR = 2, + VK_VIDEO_ENCODE_H264_STD_SCALING_MATRIX_PRESENT_FLAG_SET_BIT_KHR = 4, + VK_VIDEO_ENCODE_H264_STD_CHROMA_QP_INDEX_OFFSET_BIT_KHR = 8, + VK_VIDEO_ENCODE_H264_STD_SECOND_CHROMA_QP_INDEX_OFFSET_BIT_KHR = 16, + VK_VIDEO_ENCODE_H264_STD_PIC_INIT_QP_MINUS26_BIT_KHR = 32, + VK_VIDEO_ENCODE_H264_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR = 64, + VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_EXPLICIT_BIT_KHR = 128, + VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_IMPLICIT_BIT_KHR = 256, + VK_VIDEO_ENCODE_H264_STD_TRANSFORM_8X8_MODE_FLAG_SET_BIT_KHR = 512, + VK_VIDEO_ENCODE_H264_STD_DIRECT_SPATIAL_MV_PRED_FLAG_UNSET_BIT_KHR = 1024, + VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_UNSET_BIT_KHR = 2048, + VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_SET_BIT_KHR = 4096, + VK_VIDEO_ENCODE_H264_STD_DIRECT_8X8_INFERENCE_FLAG_UNSET_BIT_KHR = 8192, + VK_VIDEO_ENCODE_H264_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR = 16384, + VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_DISABLED_BIT_KHR = 32768, + VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_ENABLED_BIT_KHR = 65536, + VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_PARTIAL_BIT_KHR = 131072, + VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_KHR = 524288, + VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR = 1048576, + VK_VIDEO_ENCODE_H264_STD_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH264StdFlagBitsKHR; +typedef enum VkVideoEncodeH264RateControlFlagBitsKHR { + VK_VIDEO_ENCODE_H264_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR = 1, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_REGULAR_GOP_BIT_KHR = 2, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR = 4, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR = 8, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_KHR = 16, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH264RateControlFlagBitsKHR; +typedef enum VkVideoEncodeH265CapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR = 1, + VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR = 2, + VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR = 4, + VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR = 8, + VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR = 16, + VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR = 32, + VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR = 64, + VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR = 128, + VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR = 256, + VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR = 512, + VK_VIDEO_ENCODE_H265_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR = 2048, + VK_VIDEO_ENCODE_H265_CAPABILITY_CU_QP_DIFF_WRAPAROUND_BIT_KHR = 1024, + VK_VIDEO_ENCODE_H265_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265CapabilityFlagBitsKHR; +typedef enum VkVideoEncodeH265StdFlagBitsKHR { + VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR = 1, + VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR = 2, + VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR = 4, + VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR = 8, + VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR = 16, + VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR = 32, + VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR = 64, + VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR = 128, + VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR = 256, + VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR = 512, + VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR = 1024, + VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR = 2048, + VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR = 4096, + VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR = 8192, + VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR = 16384, + VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR = 32768, + VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_KHR = 65536, + VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR = 131072, + VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR = 262144, + VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR = 524288, + VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR = 1048576, + VK_VIDEO_ENCODE_H265_STD_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265StdFlagBitsKHR; +typedef enum VkVideoEncodeH265RateControlFlagBitsKHR { + VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR = 1, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR = 2, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR = 4, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR = 8, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_KHR = 16, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265RateControlFlagBitsKHR; +typedef enum VkVideoEncodeH265CtbSizeFlagBitsKHR { + VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_KHR = 1, + VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR = 2, + VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR = 4, + VK_VIDEO_ENCODE_H265_CTB_SIZE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265CtbSizeFlagBitsKHR; +typedef enum VkVideoEncodeH265TransformBlockSizeFlagBitsKHR { + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR = 1, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR = 2, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR = 4, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR = 8, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265TransformBlockSizeFlagBitsKHR; +typedef enum VkVideoEncodeAV1CapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_CAPABILITY_PER_RATE_CONTROL_GROUP_MIN_MAX_Q_INDEX_BIT_KHR = 1, + VK_VIDEO_ENCODE_AV1_CAPABILITY_GENERATE_OBU_EXTENSION_HEADER_BIT_KHR = 2, + VK_VIDEO_ENCODE_AV1_CAPABILITY_PRIMARY_REFERENCE_CDF_ONLY_BIT_KHR = 4, + VK_VIDEO_ENCODE_AV1_CAPABILITY_FRAME_SIZE_OVERRIDE_BIT_KHR = 8, + VK_VIDEO_ENCODE_AV1_CAPABILITY_MOTION_VECTOR_SCALING_BIT_KHR = 16, + VK_VIDEO_ENCODE_AV1_CAPABILITY_COMPOUND_PREDICTION_INTRA_REFRESH_BIT_KHR = 32, + VK_VIDEO_ENCODE_AV1_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1CapabilityFlagBitsKHR; +typedef enum VkVideoEncodeAV1StdFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_STD_UNIFORM_TILE_SPACING_FLAG_SET_BIT_KHR = 1, + VK_VIDEO_ENCODE_AV1_STD_SKIP_MODE_PRESENT_UNSET_BIT_KHR = 2, + VK_VIDEO_ENCODE_AV1_STD_PRIMARY_REF_FRAME_BIT_KHR = 4, + VK_VIDEO_ENCODE_AV1_STD_DELTA_Q_BIT_KHR = 8, + VK_VIDEO_ENCODE_AV1_STD_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1StdFlagBitsKHR; +typedef enum VkVideoEncodeAV1RateControlFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REGULAR_GOP_BIT_KHR = 1, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_KHR = 2, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR = 4, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR = 8, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1RateControlFlagBitsKHR; +typedef enum VkVideoEncodeAV1SuperblockSizeFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_64_BIT_KHR = 1, + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_128_BIT_KHR = 2, + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1SuperblockSizeFlagBitsKHR; +typedef enum VkVideoEncodeAV1PredictionModeKHR { + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_INTRA_ONLY_KHR = 0, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_SINGLE_REFERENCE_KHR = 1, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_UNIDIRECTIONAL_COMPOUND_KHR = 2, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_BIDIRECTIONAL_COMPOUND_KHR = 3, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1PredictionModeKHR; +typedef enum VkVideoEncodeAV1RateControlGroupKHR { + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_INTRA_KHR = 0, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_PREDICTIVE_KHR = 1, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_BIPREDICTIVE_KHR = 2, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1RateControlGroupKHR; +typedef uint64_t VkAccessFlagBits3KHR; +static const VkAccessFlagBits3KHR VK_ACCESS_3_NONE_KHR = 0; + +typedef enum VkDefaultVertexAttributeValueKHR { + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ZERO_KHR = 0, + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ONE_KHR = 1, + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkDefaultVertexAttributeValueKHR; +typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)( + void* pUserData, + size_t size, + VkInternalAllocationType allocationType, + VkSystemAllocationScope allocationScope); +typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)( + void* pUserData, + size_t size, + VkInternalAllocationType allocationType, + VkSystemAllocationScope allocationScope); +typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)( + void* pUserData, + void* pOriginal, + size_t size, + size_t alignment, + VkSystemAllocationScope allocationScope); +typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)( + void* pUserData, + size_t size, + size_t alignment, + VkSystemAllocationScope allocationScope); +typedef void (VKAPI_PTR *PFN_vkFreeFunction)( + void* pUserData, + void* pMemory); +typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void); +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddrLUNARG)( + VkInstance instance, const char* pName); +typedef struct VkBaseOutStructure { + VkStructureType sType; + struct VkBaseOutStructure * pNext; +} VkBaseOutStructure; + +typedef struct VkBaseInStructure { + VkStructureType sType; + const struct VkBaseInStructure * pNext; +} VkBaseInStructure; + +typedef struct VkOffset2D { + int32_t x; + int32_t y; +} VkOffset2D; + +typedef struct VkOffset3D { + int32_t x; + int32_t y; + int32_t z; +} VkOffset3D; + +typedef struct VkExtent2D { + uint32_t width; + uint32_t height; +} VkExtent2D; + +typedef struct VkExtent3D { + uint32_t width; + uint32_t height; + uint32_t depth; +} VkExtent3D; + +typedef struct VkViewport { + float x; + float y; + float width; + float height; + float minDepth; + float maxDepth; +} VkViewport; + +typedef struct VkRect2D { + VkOffset2D offset; + VkExtent2D extent; +} VkRect2D; + +typedef struct VkClearRect { + VkRect2D rect; + uint32_t baseArrayLayer; + uint32_t layerCount; +} VkClearRect; + +typedef struct VkComponentMapping { + VkComponentSwizzle r; + VkComponentSwizzle g; + VkComponentSwizzle b; + VkComponentSwizzle a; +} VkComponentMapping; + +typedef struct VkExtensionProperties { + char extensionName [ VK_MAX_EXTENSION_NAME_SIZE ]; + uint32_t specVersion; +} VkExtensionProperties; + +typedef struct VkLayerProperties { + char layerName [ VK_MAX_EXTENSION_NAME_SIZE ]; + uint32_t specVersion; + uint32_t implementationVersion; + char description [ VK_MAX_DESCRIPTION_SIZE ]; +} VkLayerProperties; + +typedef struct VkApplicationInfo { + VkStructureType sType; + const void * pNext; + const char * pApplicationName; + uint32_t applicationVersion; + const char * pEngineName; + uint32_t engineVersion; + uint32_t apiVersion; +} VkApplicationInfo; + +typedef struct VkAllocationCallbacks { + void * pUserData; + PFN_vkAllocationFunction pfnAllocation; + PFN_vkReallocationFunction pfnReallocation; + PFN_vkFreeFunction pfnFree; + PFN_vkInternalAllocationNotification pfnInternalAllocation; + PFN_vkInternalFreeNotification pfnInternalFree; +} VkAllocationCallbacks; + +typedef struct VkDescriptorImageInfo { + VkSampler sampler; + VkImageView imageView; + VkImageLayout imageLayout; +} VkDescriptorImageInfo; + +typedef struct VkCopyDescriptorSet { + VkStructureType sType; + const void * pNext; + VkDescriptorSet srcSet; + uint32_t srcBinding; + uint32_t srcArrayElement; + VkDescriptorSet dstSet; + uint32_t dstBinding; + uint32_t dstArrayElement; + uint32_t descriptorCount; +} VkCopyDescriptorSet; + +typedef struct VkDescriptorPoolSize { + VkDescriptorType type; + uint32_t descriptorCount; +} VkDescriptorPoolSize; + +typedef struct VkDescriptorSetAllocateInfo { + VkStructureType sType; + const void * pNext; + VkDescriptorPool descriptorPool; + uint32_t descriptorSetCount; + const VkDescriptorSetLayout * pSetLayouts; +} VkDescriptorSetAllocateInfo; + +typedef struct VkSpecializationMapEntry { + uint32_t constantID; + uint32_t offset; + size_t size; +} VkSpecializationMapEntry; + +typedef struct VkSpecializationInfo { + uint32_t mapEntryCount; + const VkSpecializationMapEntry * pMapEntries; + size_t dataSize; + const void * pData; +} VkSpecializationInfo; + +typedef struct VkVertexInputBindingDescription { + uint32_t binding; + uint32_t stride; + VkVertexInputRate inputRate; +} VkVertexInputBindingDescription; + +typedef struct VkVertexInputAttributeDescription { + uint32_t location; + uint32_t binding; + VkFormat format; + uint32_t offset; +} VkVertexInputAttributeDescription; + +typedef struct VkStencilOpState { + VkStencilOp failOp; + VkStencilOp passOp; + VkStencilOp depthFailOp; + VkCompareOp compareOp; + uint32_t compareMask; + uint32_t writeMask; + uint32_t reference; +} VkStencilOpState; + +typedef struct VkPipelineCacheHeaderVersionOne { + uint32_t headerSize; + VkPipelineCacheHeaderVersion headerVersion; + uint32_t vendorID; + uint32_t deviceID; + uint8_t pipelineCacheUUID [ VK_UUID_SIZE ]; +} VkPipelineCacheHeaderVersionOne; + +typedef struct VkPipelineBinaryHandlesInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t pipelineBinaryCount; + VkPipelineBinaryKHR * pPipelineBinaries; +} VkPipelineBinaryHandlesInfoKHR; + +typedef struct VkPipelineBinaryDataKHR { + size_t dataSize; + void * pData; +} VkPipelineBinaryDataKHR; + +typedef struct VkPipelineBinaryKeyKHR { + VkStructureType sType; + void * pNext; + uint32_t keySize; + uint8_t key [ VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR ]; +} VkPipelineBinaryKeyKHR; + +typedef struct VkPipelineBinaryInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t binaryCount; + const VkPipelineBinaryKHR * pPipelineBinaries; +} VkPipelineBinaryInfoKHR; + +typedef struct VkReleaseCapturedPipelineDataInfoKHR { + VkStructureType sType; + void * pNext; + VkPipeline pipeline; +} VkReleaseCapturedPipelineDataInfoKHR; + +typedef struct VkPipelineBinaryDataInfoKHR { + VkStructureType sType; + void * pNext; + VkPipelineBinaryKHR pipelineBinary; +} VkPipelineBinaryDataInfoKHR; + +typedef struct VkPipelineCreateInfoKHR { + VkStructureType sType; + void * pNext; +} VkPipelineCreateInfoKHR; + +typedef struct VkCommandBufferAllocateInfo { + VkStructureType sType; + const void * pNext; + VkCommandPool commandPool; + VkCommandBufferLevel level; + uint32_t commandBufferCount; +} VkCommandBufferAllocateInfo; + +typedef union VkClearColorValue { + float float32 [4]; + int32_t int32 [4]; + uint32_t uint32 [4]; +} VkClearColorValue; + +typedef struct VkClearDepthStencilValue { + float depth; + uint32_t stencil; +} VkClearDepthStencilValue; + +typedef union VkClearValue { + VkClearColorValue color; + VkClearDepthStencilValue depthStencil; +} VkClearValue; + +typedef struct VkAttachmentReference { + uint32_t attachment; + VkImageLayout layout; +} VkAttachmentReference; + +typedef struct VkDrawIndirectCommand { + uint32_t vertexCount; + uint32_t instanceCount; + uint32_t firstVertex; + uint32_t firstInstance; +} VkDrawIndirectCommand; + +typedef struct VkDrawIndexedIndirectCommand { + uint32_t indexCount; + uint32_t instanceCount; + uint32_t firstIndex; + int32_t vertexOffset; + uint32_t firstInstance; +} VkDrawIndexedIndirectCommand; + +typedef struct VkDispatchIndirectCommand { + uint32_t x; + uint32_t y; + uint32_t z; +} VkDispatchIndirectCommand; + +typedef struct VkMultiDrawInfoEXT { + uint32_t firstVertex; + uint32_t vertexCount; +} VkMultiDrawInfoEXT; + +typedef struct VkMultiDrawIndexedInfoEXT { + uint32_t firstIndex; + uint32_t indexCount; + int32_t vertexOffset; +} VkMultiDrawIndexedInfoEXT; + +typedef struct VkDisplayPlanePropertiesKHR { + VkDisplayKHR currentDisplay; + uint32_t currentStackIndex; +} VkDisplayPlanePropertiesKHR; + +typedef struct VkDisplayModeParametersKHR { + VkExtent2D visibleRegion; + uint32_t refreshRate; +} VkDisplayModeParametersKHR; + +typedef struct VkDisplayModePropertiesKHR { + VkDisplayModeKHR displayMode; + VkDisplayModeParametersKHR parameters; +} VkDisplayModePropertiesKHR; + +typedef struct VkDisplaySurfaceStereoCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkDisplaySurfaceStereoTypeNV stereoType; +} VkDisplaySurfaceStereoCreateInfoNV; + +typedef struct VkSurfaceFormatKHR { + VkFormat format; + VkColorSpaceKHR colorSpace; +} VkSurfaceFormatKHR; + +typedef struct VkPresentInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t waitSemaphoreCount; + const VkSemaphore * pWaitSemaphores; + uint32_t swapchainCount; + const VkSwapchainKHR * pSwapchains; + const uint32_t * pImageIndices; + VkResult * pResults; +} VkPresentInfoKHR; + +typedef struct VkValidationFlagsEXT { + VkStructureType sType; + const void * pNext; + uint32_t disabledValidationCheckCount; + const VkValidationCheckEXT * pDisabledValidationChecks; +} VkValidationFlagsEXT; + +typedef struct VkValidationFeaturesEXT { + VkStructureType sType; + const void * pNext; + uint32_t enabledValidationFeatureCount; + const VkValidationFeatureEnableEXT * pEnabledValidationFeatures; + uint32_t disabledValidationFeatureCount; + const VkValidationFeatureDisableEXT * pDisabledValidationFeatures; +} VkValidationFeaturesEXT; + +typedef struct VkLayerSettingEXT { + const char * pLayerName; + const char * pSettingName; + VkLayerSettingTypeEXT type; + uint32_t valueCount; + const void * pValues; +} VkLayerSettingEXT; + +typedef struct VkPipelineRasterizationStateRasterizationOrderAMD { + VkStructureType sType; + const void * pNext; + VkRasterizationOrderAMD rasterizationOrder; +} VkPipelineRasterizationStateRasterizationOrderAMD; + +typedef struct VkDebugMarkerObjectNameInfoEXT { + VkStructureType sType; + const void * pNext; + VkDebugReportObjectTypeEXT objectType; + uint64_t object; + const char * pObjectName; +} VkDebugMarkerObjectNameInfoEXT; + +typedef struct VkDebugMarkerObjectTagInfoEXT { + VkStructureType sType; + const void * pNext; + VkDebugReportObjectTypeEXT objectType; + uint64_t object; + uint64_t tagName; + size_t tagSize; + const void * pTag; +} VkDebugMarkerObjectTagInfoEXT; + +typedef struct VkDebugMarkerMarkerInfoEXT { + VkStructureType sType; + const void * pNext; + const char * pMarkerName; + float color [4]; +} VkDebugMarkerMarkerInfoEXT; + +typedef struct VkDedicatedAllocationMemoryAllocateInfoNV { + VkStructureType sType; + const void * pNext; + VkImage image; + VkBuffer buffer; +} VkDedicatedAllocationMemoryAllocateInfoNV; + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkExportMemoryWin32HandleInfoNV { + VkStructureType sType; + const void * pNext; + const SECURITY_ATTRIBUTES * pAttributes; + DWORD dwAccess; +} VkExportMemoryWin32HandleInfoNV; + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV { + VkStructureType sType; + const void * pNext; + uint32_t acquireCount; + const VkDeviceMemory * pAcquireSyncs; + const uint64_t * pAcquireKeys; + const uint32_t * pAcquireTimeoutMilliseconds; + uint32_t releaseCount; + const VkDeviceMemory * pReleaseSyncs; + const uint64_t * pReleaseKeys; +} VkWin32KeyedMutexAcquireReleaseInfoNV; + +#endif + +typedef struct VkDevicePrivateDataCreateInfo { + VkStructureType sType; + const void * pNext; + uint32_t privateDataSlotRequestCount; +} VkDevicePrivateDataCreateInfo; + +typedef struct VkDevicePrivateDataCreateInfo VkDevicePrivateDataCreateInfoEXT; + +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t maxGraphicsShaderGroupCount; + uint32_t maxIndirectSequenceCount; + uint32_t maxIndirectCommandsTokenCount; + uint32_t maxIndirectCommandsStreamCount; + uint32_t maxIndirectCommandsTokenOffset; + uint32_t maxIndirectCommandsStreamStride; + uint32_t minSequencesCountBufferOffsetAlignment; + uint32_t minSequencesIndexBufferOffsetAlignment; + uint32_t minIndirectCommandsBufferOffsetAlignment; +} VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV; + +typedef struct VkPhysicalDeviceClusterAccelerationStructurePropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t maxVerticesPerCluster; + uint32_t maxTrianglesPerCluster; + uint32_t clusterScratchByteAlignment; + uint32_t clusterByteAlignment; + uint32_t clusterTemplateByteAlignment; + uint32_t clusterBottomLevelByteAlignment; + uint32_t clusterTemplateBoundsByteAlignment; + uint32_t maxClusterGeometryIndex; +} VkPhysicalDeviceClusterAccelerationStructurePropertiesNV; + +typedef struct VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV { + uint32_t geometryIndex :24; + uint32_t reserved :5; + uint32_t geometryFlags :3; +} VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV; + +typedef struct VkClusterAccelerationStructureClustersBottomLevelInputNV { + VkStructureType sType; + void * pNext; + uint32_t maxTotalClusterCount; + uint32_t maxClusterCountPerAccelerationStructure; +} VkClusterAccelerationStructureClustersBottomLevelInputNV; + +typedef struct VkClusterAccelerationStructureTriangleClusterInputNV { + VkStructureType sType; + void * pNext; + VkFormat vertexFormat; + uint32_t maxGeometryIndexValue; + uint32_t maxClusterUniqueGeometryCount; + uint32_t maxClusterTriangleCount; + uint32_t maxClusterVertexCount; + uint32_t maxTotalTriangleCount; + uint32_t maxTotalVertexCount; + uint32_t minPositionTruncateBitCount; +} VkClusterAccelerationStructureTriangleClusterInputNV; + +typedef struct VkPhysicalDeviceMultiDrawPropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t maxMultiDrawCount; +} VkPhysicalDeviceMultiDrawPropertiesEXT; + +typedef struct VkBindShaderGroupIndirectCommandNV { + uint32_t groupIndex; +} VkBindShaderGroupIndirectCommandNV; + +typedef struct VkSetStateFlagsIndirectCommandNV { + uint32_t data; +} VkSetStateFlagsIndirectCommandNV; + +typedef struct VkGeneratedCommandsMemoryRequirementsInfoNV { + VkStructureType sType; + const void * pNext; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline pipeline; + VkIndirectCommandsLayoutNV indirectCommandsLayout; + uint32_t maxSequencesCount; +} VkGeneratedCommandsMemoryRequirementsInfoNV; + +typedef struct VkPipelineIndirectDeviceAddressInfoNV { + VkStructureType sType; + const void * pNext; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline pipeline; +} VkPipelineIndirectDeviceAddressInfoNV; + +typedef struct VkPhysicalDevicePushDescriptorProperties { + VkStructureType sType; + void * pNext; + uint32_t maxPushDescriptors; +} VkPhysicalDevicePushDescriptorProperties; + +typedef struct VkPhysicalDevicePushDescriptorProperties VkPhysicalDevicePushDescriptorPropertiesKHR; + +typedef struct VkConformanceVersion { + uint8_t major; + uint8_t minor; + uint8_t subminor; + uint8_t patch; +} VkConformanceVersion; + +typedef struct VkConformanceVersion VkConformanceVersionKHR; + +typedef struct VkPhysicalDeviceDriverProperties { + VkStructureType sType; + void * pNext; + VkDriverId driverID; + char driverName [ VK_MAX_DRIVER_NAME_SIZE ]; + char driverInfo [ VK_MAX_DRIVER_INFO_SIZE ]; + VkConformanceVersion conformanceVersion; +} VkPhysicalDeviceDriverProperties; + +typedef struct VkPhysicalDeviceDriverProperties VkPhysicalDeviceDriverPropertiesKHR; + +typedef struct VkRectLayerKHR { + VkOffset2D offset; + VkExtent2D extent; + uint32_t layer; +} VkRectLayerKHR; + +typedef struct VkPhysicalDeviceExternalImageFormatInfo { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalImageFormatInfo; + +typedef struct VkPhysicalDeviceExternalImageFormatInfo VkPhysicalDeviceExternalImageFormatInfoKHR; + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkImportMemoryWin32HandleInfoKHR { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + HANDLE handle; + LPCWSTR name; +} VkImportMemoryWin32HandleInfoKHR; + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkExportMemoryWin32HandleInfoKHR { + VkStructureType sType; + const void * pNext; + const SECURITY_ATTRIBUTES * pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportMemoryWin32HandleInfoKHR; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkImportMemoryZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + zx_handle_t handle; +} VkImportMemoryZirconHandleInfoFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkMemoryZirconHandlePropertiesFUCHSIA { + VkStructureType sType; + void * pNext; + uint32_t memoryTypeBits; +} VkMemoryZirconHandlePropertiesFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkMemoryGetZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetZirconHandleInfoFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkMemoryWin32HandlePropertiesKHR { + VkStructureType sType; + void * pNext; + uint32_t memoryTypeBits; +} VkMemoryWin32HandlePropertiesKHR; + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkMemoryGetWin32HandleInfoKHR { + VkStructureType sType; + const void * pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetWin32HandleInfoKHR; + +#endif + +typedef struct VkImportMemoryFdInfoKHR { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + int fd; +} VkImportMemoryFdInfoKHR; + +typedef struct VkMemoryFdPropertiesKHR { + VkStructureType sType; + void * pNext; + uint32_t memoryTypeBits; +} VkMemoryFdPropertiesKHR; + +typedef struct VkMemoryGetFdInfoKHR { + VkStructureType sType; + const void * pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetFdInfoKHR; + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t acquireCount; + const VkDeviceMemory * pAcquireSyncs; + const uint64_t * pAcquireKeys; + const uint32_t * pAcquireTimeouts; + uint32_t releaseCount; + const VkDeviceMemory * pReleaseSyncs; + const uint64_t * pReleaseKeys; +} VkWin32KeyedMutexAcquireReleaseInfoKHR; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkImportMemoryMetalHandleInfoEXT { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + void * handle; +} VkImportMemoryMetalHandleInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkMemoryMetalHandlePropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t memoryTypeBits; +} VkMemoryMetalHandlePropertiesEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkMemoryGetMetalHandleInfoEXT { + VkStructureType sType; + const void * pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetMetalHandleInfoEXT; + +#endif + +typedef struct VkPhysicalDeviceExternalSemaphoreInfo { + VkStructureType sType; + const void * pNext; + VkExternalSemaphoreHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalSemaphoreInfo; + +typedef struct VkPhysicalDeviceExternalSemaphoreInfo VkPhysicalDeviceExternalSemaphoreInfoKHR; + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkExportSemaphoreWin32HandleInfoKHR { + VkStructureType sType; + const void * pNext; + const SECURITY_ATTRIBUTES * pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportSemaphoreWin32HandleInfoKHR; + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkD3D12FenceSubmitInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t waitSemaphoreValuesCount; + const uint64_t * pWaitSemaphoreValues; + uint32_t signalSemaphoreValuesCount; + const uint64_t * pSignalSemaphoreValues; +} VkD3D12FenceSubmitInfoKHR; + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkSemaphoreGetWin32HandleInfoKHR { + VkStructureType sType; + const void * pNext; + VkSemaphore semaphore; + VkExternalSemaphoreHandleTypeFlagBits handleType; +} VkSemaphoreGetWin32HandleInfoKHR; + +#endif + +typedef struct VkSemaphoreGetFdInfoKHR { + VkStructureType sType; + const void * pNext; + VkSemaphore semaphore; + VkExternalSemaphoreHandleTypeFlagBits handleType; +} VkSemaphoreGetFdInfoKHR; + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkSemaphoreGetZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + VkSemaphore semaphore; + VkExternalSemaphoreHandleTypeFlagBits handleType; +} VkSemaphoreGetZirconHandleInfoFUCHSIA; + +#endif + +typedef struct VkPhysicalDeviceExternalFenceInfo { + VkStructureType sType; + const void * pNext; + VkExternalFenceHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalFenceInfo; + +typedef struct VkPhysicalDeviceExternalFenceInfo VkPhysicalDeviceExternalFenceInfoKHR; + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkExportFenceWin32HandleInfoKHR { + VkStructureType sType; + const void * pNext; + const SECURITY_ATTRIBUTES * pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportFenceWin32HandleInfoKHR; + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkFenceGetWin32HandleInfoKHR { + VkStructureType sType; + const void * pNext; + VkFence fence; + VkExternalFenceHandleTypeFlagBits handleType; +} VkFenceGetWin32HandleInfoKHR; + +#endif + +typedef struct VkFenceGetFdInfoKHR { + VkStructureType sType; + const void * pNext; + VkFence fence; + VkExternalFenceHandleTypeFlagBits handleType; +} VkFenceGetFdInfoKHR; + +typedef struct VkPhysicalDeviceMultiviewProperties { + VkStructureType sType; + void * pNext; + uint32_t maxMultiviewViewCount; + uint32_t maxMultiviewInstanceIndex; +} VkPhysicalDeviceMultiviewProperties; + +typedef struct VkPhysicalDeviceMultiviewProperties VkPhysicalDeviceMultiviewPropertiesKHR; + +typedef struct VkRenderPassMultiviewCreateInfo { + VkStructureType sType; + const void * pNext; + uint32_t subpassCount; + const uint32_t * pViewMasks; + uint32_t dependencyCount; + const int32_t * pViewOffsets; + uint32_t correlationMaskCount; + const uint32_t * pCorrelationMasks; +} VkRenderPassMultiviewCreateInfo; + +typedef struct VkRenderPassMultiviewCreateInfo VkRenderPassMultiviewCreateInfoKHR; + +typedef struct VkDisplayPowerInfoEXT { + VkStructureType sType; + const void * pNext; + VkDisplayPowerStateEXT powerState; +} VkDisplayPowerInfoEXT; + +typedef struct VkDeviceEventInfoEXT { + VkStructureType sType; + const void * pNext; + VkDeviceEventTypeEXT deviceEvent; +} VkDeviceEventInfoEXT; + +typedef struct VkDisplayEventInfoEXT { + VkStructureType sType; + const void * pNext; + VkDisplayEventTypeEXT displayEvent; +} VkDisplayEventInfoEXT; + +typedef struct VkBindBufferMemoryDeviceGroupInfo { + VkStructureType sType; + const void * pNext; + uint32_t deviceIndexCount; + const uint32_t * pDeviceIndices; +} VkBindBufferMemoryDeviceGroupInfo; + +typedef struct VkBindBufferMemoryDeviceGroupInfo VkBindBufferMemoryDeviceGroupInfoKHR; + +typedef struct VkBindImageMemoryDeviceGroupInfo { + VkStructureType sType; + const void * pNext; + uint32_t deviceIndexCount; + const uint32_t * pDeviceIndices; + uint32_t splitInstanceBindRegionCount; + const VkRect2D * pSplitInstanceBindRegions; +} VkBindImageMemoryDeviceGroupInfo; + +typedef struct VkBindImageMemoryDeviceGroupInfo VkBindImageMemoryDeviceGroupInfoKHR; + +typedef struct VkDeviceGroupRenderPassBeginInfo { + VkStructureType sType; + const void * pNext; + uint32_t deviceMask; + uint32_t deviceRenderAreaCount; + const VkRect2D * pDeviceRenderAreas; +} VkDeviceGroupRenderPassBeginInfo; + +typedef struct VkDeviceGroupRenderPassBeginInfo VkDeviceGroupRenderPassBeginInfoKHR; + +typedef struct VkDeviceGroupCommandBufferBeginInfo { + VkStructureType sType; + const void * pNext; + uint32_t deviceMask; +} VkDeviceGroupCommandBufferBeginInfo; + +typedef struct VkDeviceGroupCommandBufferBeginInfo VkDeviceGroupCommandBufferBeginInfoKHR; + +typedef struct VkDeviceGroupSubmitInfo { + VkStructureType sType; + const void * pNext; + uint32_t waitSemaphoreCount; + const uint32_t * pWaitSemaphoreDeviceIndices; + uint32_t commandBufferCount; + const uint32_t * pCommandBufferDeviceMasks; + uint32_t signalSemaphoreCount; + const uint32_t * pSignalSemaphoreDeviceIndices; +} VkDeviceGroupSubmitInfo; + +typedef struct VkDeviceGroupSubmitInfo VkDeviceGroupSubmitInfoKHR; + +typedef struct VkDeviceGroupBindSparseInfo { + VkStructureType sType; + const void * pNext; + uint32_t resourceDeviceIndex; + uint32_t memoryDeviceIndex; +} VkDeviceGroupBindSparseInfo; + +typedef struct VkDeviceGroupBindSparseInfo VkDeviceGroupBindSparseInfoKHR; + +typedef struct VkImageSwapchainCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkSwapchainKHR swapchain; +} VkImageSwapchainCreateInfoKHR; + +typedef struct VkBindImageMemorySwapchainInfoKHR { + VkStructureType sType; + const void * pNext; + VkSwapchainKHR swapchain; + uint32_t imageIndex; +} VkBindImageMemorySwapchainInfoKHR; + +typedef struct VkAcquireNextImageInfoKHR { + VkStructureType sType; + const void * pNext; + VkSwapchainKHR swapchain; + uint64_t timeout; + VkSemaphore semaphore; + VkFence fence; + uint32_t deviceMask; +} VkAcquireNextImageInfoKHR; + +typedef struct VkDeviceGroupPresentInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t swapchainCount; + const uint32_t * pDeviceMasks; + VkDeviceGroupPresentModeFlagBitsKHR mode; +} VkDeviceGroupPresentInfoKHR; + +typedef struct VkDeviceGroupDeviceCreateInfo { + VkStructureType sType; + const void * pNext; + uint32_t physicalDeviceCount; + const VkPhysicalDevice * pPhysicalDevices; +} VkDeviceGroupDeviceCreateInfo; + +typedef struct VkDeviceGroupDeviceCreateInfo VkDeviceGroupDeviceCreateInfoKHR; + +typedef struct VkDescriptorUpdateTemplateEntry { + uint32_t dstBinding; + uint32_t dstArrayElement; + uint32_t descriptorCount; + VkDescriptorType descriptorType; + size_t offset; + size_t stride; +} VkDescriptorUpdateTemplateEntry; + +typedef struct VkDescriptorUpdateTemplateEntry VkDescriptorUpdateTemplateEntryKHR; + +typedef struct VkXYColorEXT { + float x; + float y; +} VkXYColorEXT; + +typedef struct VkPresentIdKHR { + VkStructureType sType; + const void * pNext; + uint32_t swapchainCount; + const uint64_t * pPresentIds; +} VkPresentIdKHR; + +typedef struct VkPresentId2KHR { + VkStructureType sType; + const void * pNext; + uint32_t swapchainCount; + const uint64_t * pPresentIds; +} VkPresentId2KHR; + +typedef struct VkPresentWait2InfoKHR { + VkStructureType sType; + const void * pNext; + uint64_t presentId; + uint64_t timeout; +} VkPresentWait2InfoKHR; + +typedef struct VkHdrMetadataEXT { + VkStructureType sType; + const void * pNext; + VkXYColorEXT displayPrimaryRed; + VkXYColorEXT displayPrimaryGreen; + VkXYColorEXT displayPrimaryBlue; + VkXYColorEXT whitePoint; + float maxLuminance; + float minLuminance; + float maxContentLightLevel; + float maxFrameAverageLightLevel; +} VkHdrMetadataEXT; + +typedef struct VkHdrVividDynamicMetadataHUAWEI { + VkStructureType sType; + const void * pNext; + size_t dynamicMetadataSize; + const void * pDynamicMetadata; +} VkHdrVividDynamicMetadataHUAWEI; + +typedef struct VkRefreshCycleDurationGOOGLE { + uint64_t refreshDuration; +} VkRefreshCycleDurationGOOGLE; + +typedef struct VkPastPresentationTimingGOOGLE { + uint32_t presentID; + uint64_t desiredPresentTime; + uint64_t actualPresentTime; + uint64_t earliestPresentTime; + uint64_t presentMargin; +} VkPastPresentationTimingGOOGLE; + +typedef struct VkPresentTimeGOOGLE { + uint32_t presentID; + uint64_t desiredPresentTime; +} VkPresentTimeGOOGLE; + +typedef struct VkViewportWScalingNV { + float xcoeff; + float ycoeff; +} VkViewportWScalingNV; + +typedef struct VkViewportSwizzleNV { + VkViewportCoordinateSwizzleNV x; + VkViewportCoordinateSwizzleNV y; + VkViewportCoordinateSwizzleNV z; + VkViewportCoordinateSwizzleNV w; +} VkViewportSwizzleNV; + +typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t maxDiscardRectangles; +} VkPhysicalDeviceDiscardRectanglePropertiesEXT; + +typedef struct VkPhysicalDeviceSurfaceInfo2KHR { + VkStructureType sType; + const void * pNext; + VkSurfaceKHR surface; +} VkPhysicalDeviceSurfaceInfo2KHR; + +typedef struct VkSurfaceFormat2KHR { + VkStructureType sType; + void * pNext; + VkSurfaceFormatKHR surfaceFormat; +} VkSurfaceFormat2KHR; + +typedef struct VkDisplayPlaneProperties2KHR { + VkStructureType sType; + void * pNext; + VkDisplayPlanePropertiesKHR displayPlaneProperties; +} VkDisplayPlaneProperties2KHR; + +typedef struct VkDisplayModeProperties2KHR { + VkStructureType sType; + void * pNext; + VkDisplayModePropertiesKHR displayModeProperties; +} VkDisplayModeProperties2KHR; + +typedef struct VkDisplayPlaneInfo2KHR { + VkStructureType sType; + const void * pNext; + VkDisplayModeKHR mode; + uint32_t planeIndex; +} VkDisplayPlaneInfo2KHR; + +typedef struct VkBufferMemoryRequirementsInfo2 { + VkStructureType sType; + const void * pNext; + VkBuffer buffer; +} VkBufferMemoryRequirementsInfo2; + +typedef struct VkBufferMemoryRequirementsInfo2 VkBufferMemoryRequirementsInfo2KHR; + +typedef struct VkImageMemoryRequirementsInfo2 { + VkStructureType sType; + const void * pNext; + VkImage image; +} VkImageMemoryRequirementsInfo2; + +typedef struct VkImageMemoryRequirementsInfo2 VkImageMemoryRequirementsInfo2KHR; + +typedef struct VkImageSparseMemoryRequirementsInfo2 { + VkStructureType sType; + const void * pNext; + VkImage image; +} VkImageSparseMemoryRequirementsInfo2; + +typedef struct VkImageSparseMemoryRequirementsInfo2 VkImageSparseMemoryRequirementsInfo2KHR; + +typedef struct VkPhysicalDevicePointClippingProperties { + VkStructureType sType; + void * pNext; + VkPointClippingBehavior pointClippingBehavior; +} VkPhysicalDevicePointClippingProperties; + +typedef struct VkPhysicalDevicePointClippingProperties VkPhysicalDevicePointClippingPropertiesKHR; + +typedef struct VkMemoryDedicatedAllocateInfo { + VkStructureType sType; + const void * pNext; + VkImage image; + VkBuffer buffer; +} VkMemoryDedicatedAllocateInfo; + +typedef struct VkMemoryDedicatedAllocateInfo VkMemoryDedicatedAllocateInfoKHR; + +typedef struct VkImageViewSlicedCreateInfoEXT { + VkStructureType sType; + const void * pNext; + uint32_t sliceOffset; + uint32_t sliceCount; +} VkImageViewSlicedCreateInfoEXT; + +typedef struct VkPipelineTessellationDomainOriginStateCreateInfo { + VkStructureType sType; + const void * pNext; + VkTessellationDomainOrigin domainOrigin; +} VkPipelineTessellationDomainOriginStateCreateInfo; + +typedef struct VkPipelineTessellationDomainOriginStateCreateInfo VkPipelineTessellationDomainOriginStateCreateInfoKHR; + +typedef struct VkSamplerYcbcrConversionInfo { + VkStructureType sType; + const void * pNext; + VkSamplerYcbcrConversion conversion; +} VkSamplerYcbcrConversionInfo; + +typedef struct VkSamplerYcbcrConversionInfo VkSamplerYcbcrConversionInfoKHR; + +typedef struct VkBindImagePlaneMemoryInfo { + VkStructureType sType; + const void * pNext; + VkImageAspectFlagBits planeAspect; +} VkBindImagePlaneMemoryInfo; + +typedef struct VkBindImagePlaneMemoryInfo VkBindImagePlaneMemoryInfoKHR; + +typedef struct VkImagePlaneMemoryRequirementsInfo { + VkStructureType sType; + const void * pNext; + VkImageAspectFlagBits planeAspect; +} VkImagePlaneMemoryRequirementsInfo; + +typedef struct VkImagePlaneMemoryRequirementsInfo VkImagePlaneMemoryRequirementsInfoKHR; + +typedef struct VkSamplerYcbcrConversionImageFormatProperties { + VkStructureType sType; + void * pNext; + uint32_t combinedImageSamplerDescriptorCount; +} VkSamplerYcbcrConversionImageFormatProperties; + +typedef struct VkSamplerYcbcrConversionImageFormatProperties VkSamplerYcbcrConversionImageFormatPropertiesKHR; + +typedef struct VkSampleLocationEXT { + float x; + float y; +} VkSampleLocationEXT; + +typedef struct VkSampleLocationsInfoEXT { + VkStructureType sType; + const void * pNext; + VkSampleCountFlagBits sampleLocationsPerPixel; + VkExtent2D sampleLocationGridSize; + uint32_t sampleLocationsCount; + const VkSampleLocationEXT * pSampleLocations; +} VkSampleLocationsInfoEXT; + +typedef struct VkAttachmentSampleLocationsEXT { + uint32_t attachmentIndex; + VkSampleLocationsInfoEXT sampleLocationsInfo; +} VkAttachmentSampleLocationsEXT; + +typedef struct VkSubpassSampleLocationsEXT { + uint32_t subpassIndex; + VkSampleLocationsInfoEXT sampleLocationsInfo; +} VkSubpassSampleLocationsEXT; + +typedef struct VkRenderPassSampleLocationsBeginInfoEXT { + VkStructureType sType; + const void * pNext; + uint32_t attachmentInitialSampleLocationsCount; + const VkAttachmentSampleLocationsEXT * pAttachmentInitialSampleLocations; + uint32_t postSubpassSampleLocationsCount; + const VkSubpassSampleLocationsEXT * pPostSubpassSampleLocations; +} VkRenderPassSampleLocationsBeginInfoEXT; + +typedef struct VkMultisamplePropertiesEXT { + VkStructureType sType; + void * pNext; + VkExtent2D maxSampleLocationGridSize; +} VkMultisamplePropertiesEXT; + +typedef struct VkSamplerReductionModeCreateInfo { + VkStructureType sType; + const void * pNext; + VkSamplerReductionMode reductionMode; +} VkSamplerReductionModeCreateInfo; + +typedef struct VkSamplerReductionModeCreateInfo VkSamplerReductionModeCreateInfoEXT; + +typedef struct VkPhysicalDeviceInlineUniformBlockProperties { + VkStructureType sType; + void * pNext; + uint32_t maxInlineUniformBlockSize; + uint32_t maxPerStageDescriptorInlineUniformBlocks; + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks; + uint32_t maxDescriptorSetInlineUniformBlocks; + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks; +} VkPhysicalDeviceInlineUniformBlockProperties; + +typedef struct VkPhysicalDeviceInlineUniformBlockProperties VkPhysicalDeviceInlineUniformBlockPropertiesEXT; + +typedef struct VkWriteDescriptorSetInlineUniformBlock { + VkStructureType sType; + const void * pNext; + uint32_t dataSize; + const void * pData; +} VkWriteDescriptorSetInlineUniformBlock; + +typedef struct VkWriteDescriptorSetInlineUniformBlock VkWriteDescriptorSetInlineUniformBlockEXT; + +typedef struct VkDescriptorPoolInlineUniformBlockCreateInfo { + VkStructureType sType; + const void * pNext; + uint32_t maxInlineUniformBlockBindings; +} VkDescriptorPoolInlineUniformBlockCreateInfo; + +typedef struct VkDescriptorPoolInlineUniformBlockCreateInfo VkDescriptorPoolInlineUniformBlockCreateInfoEXT; + +typedef struct VkImageFormatListCreateInfo { + VkStructureType sType; + const void * pNext; + uint32_t viewFormatCount; + const VkFormat * pViewFormats; +} VkImageFormatListCreateInfo; + +typedef struct VkImageFormatListCreateInfo VkImageFormatListCreateInfoKHR; + +typedef struct VkShaderModuleValidationCacheCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkValidationCacheEXT validationCache; +} VkShaderModuleValidationCacheCreateInfoEXT; + +typedef struct VkPhysicalDeviceLayeredApiPropertiesKHR { + VkStructureType sType; + void * pNext; + uint32_t vendorID; + uint32_t deviceID; + VkPhysicalDeviceLayeredApiKHR layeredAPI; + char deviceName [ VK_MAX_PHYSICAL_DEVICE_NAME_SIZE ]; +} VkPhysicalDeviceLayeredApiPropertiesKHR; + +typedef struct VkQueueFamilyOwnershipTransferPropertiesKHR { + VkStructureType sType; + void * pNext; + uint32_t optimalImageTransferToQueueFamilies; +} VkQueueFamilyOwnershipTransferPropertiesKHR; + +typedef struct VkRenderingAreaInfo { + VkStructureType sType; + const void * pNext; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkFormat * pColorAttachmentFormats; + VkFormat depthAttachmentFormat; + VkFormat stencilAttachmentFormat; +} VkRenderingAreaInfo; + +typedef struct VkRenderingAreaInfo VkRenderingAreaInfoKHR; + +typedef struct VkShaderResourceUsageAMD { + uint32_t numUsedVgprs; + uint32_t numUsedSgprs; + uint32_t ldsSizePerLocalWorkGroup; + size_t ldsUsageSizeInBytes; + size_t scratchMemUsageInBytes; +} VkShaderResourceUsageAMD; + +typedef struct VkDeviceQueueGlobalPriorityCreateInfo { + VkStructureType sType; + const void * pNext; + VkQueueGlobalPriority globalPriority; +} VkDeviceQueueGlobalPriorityCreateInfo; + +typedef struct VkDeviceQueueGlobalPriorityCreateInfo VkDeviceQueueGlobalPriorityCreateInfoKHR; + +typedef struct VkDeviceQueueGlobalPriorityCreateInfo VkDeviceQueueGlobalPriorityCreateInfoEXT; + +typedef struct VkQueueFamilyGlobalPriorityProperties { + VkStructureType sType; + void * pNext; + uint32_t priorityCount; + VkQueueGlobalPriority priorities [ VK_MAX_GLOBAL_PRIORITY_SIZE ]; +} VkQueueFamilyGlobalPriorityProperties; + +typedef struct VkQueueFamilyGlobalPriorityProperties VkQueueFamilyGlobalPriorityPropertiesKHR; + +typedef struct VkQueueFamilyGlobalPriorityProperties VkQueueFamilyGlobalPriorityPropertiesEXT; + +typedef struct VkDebugUtilsObjectNameInfoEXT { + VkStructureType sType; + const void * pNext; + VkObjectType objectType; + uint64_t objectHandle; + const char * pObjectName; +} VkDebugUtilsObjectNameInfoEXT; + +typedef struct VkDebugUtilsObjectTagInfoEXT { + VkStructureType sType; + const void * pNext; + VkObjectType objectType; + uint64_t objectHandle; + uint64_t tagName; + size_t tagSize; + const void * pTag; +} VkDebugUtilsObjectTagInfoEXT; + +typedef struct VkDebugUtilsLabelEXT { + VkStructureType sType; + const void * pNext; + const char * pLabelName; + float color [4]; +} VkDebugUtilsLabelEXT; + +typedef struct VkImportMemoryHostPointerInfoEXT { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + void * pHostPointer; +} VkImportMemoryHostPointerInfoEXT; + +typedef struct VkMemoryHostPointerPropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t memoryTypeBits; +} VkMemoryHostPointerPropertiesEXT; + +typedef struct VkCalibratedTimestampInfoKHR { + VkStructureType sType; + const void * pNext; + VkTimeDomainKHR timeDomain; +} VkCalibratedTimestampInfoKHR; + +typedef struct VkCalibratedTimestampInfoKHR VkCalibratedTimestampInfoEXT; + +typedef struct VkPhysicalDeviceShaderCorePropertiesAMD { + VkStructureType sType; + void * pNext; + uint32_t shaderEngineCount; + uint32_t shaderArraysPerEngineCount; + uint32_t computeUnitsPerShaderArray; + uint32_t simdPerComputeUnit; + uint32_t wavefrontsPerSimd; + uint32_t wavefrontSize; + uint32_t sgprsPerSimd; + uint32_t minSgprAllocation; + uint32_t maxSgprAllocation; + uint32_t sgprAllocationGranularity; + uint32_t vgprsPerSimd; + uint32_t minVgprAllocation; + uint32_t maxVgprAllocation; + uint32_t vgprAllocationGranularity; +} VkPhysicalDeviceShaderCorePropertiesAMD; + +typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfo { + VkStructureType sType; + const void * pNext; + uint32_t descriptorSetCount; + const uint32_t * pDescriptorCounts; +} VkDescriptorSetVariableDescriptorCountAllocateInfo; + +typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfo VkDescriptorSetVariableDescriptorCountAllocateInfoEXT; + +typedef struct VkDescriptorSetVariableDescriptorCountLayoutSupport { + VkStructureType sType; + void * pNext; + uint32_t maxVariableDescriptorCount; +} VkDescriptorSetVariableDescriptorCountLayoutSupport; + +typedef struct VkDescriptorSetVariableDescriptorCountLayoutSupport VkDescriptorSetVariableDescriptorCountLayoutSupportEXT; + +typedef struct VkSubpassBeginInfo { + VkStructureType sType; + const void * pNext; + VkSubpassContents contents; +} VkSubpassBeginInfo; + +typedef struct VkSubpassBeginInfo VkSubpassBeginInfoKHR; + +typedef struct VkSubpassEndInfo { + VkStructureType sType; + const void * pNext; +} VkSubpassEndInfo; + +typedef struct VkSubpassEndInfo VkSubpassEndInfoKHR; + +typedef struct VkPhysicalDeviceTimelineSemaphoreProperties { + VkStructureType sType; + void * pNext; + uint64_t maxTimelineSemaphoreValueDifference; +} VkPhysicalDeviceTimelineSemaphoreProperties; + +typedef struct VkPhysicalDeviceTimelineSemaphoreProperties VkPhysicalDeviceTimelineSemaphorePropertiesKHR; + +typedef struct VkSemaphoreTypeCreateInfo { + VkStructureType sType; + const void * pNext; + VkSemaphoreType semaphoreType; + uint64_t initialValue; +} VkSemaphoreTypeCreateInfo; + +typedef struct VkSemaphoreTypeCreateInfo VkSemaphoreTypeCreateInfoKHR; + +typedef struct VkTimelineSemaphoreSubmitInfo { + VkStructureType sType; + const void * pNext; + uint32_t waitSemaphoreValueCount; + const uint64_t * pWaitSemaphoreValues; + uint32_t signalSemaphoreValueCount; + const uint64_t * pSignalSemaphoreValues; +} VkTimelineSemaphoreSubmitInfo; + +typedef struct VkTimelineSemaphoreSubmitInfo VkTimelineSemaphoreSubmitInfoKHR; + +typedef struct VkSemaphoreSignalInfo { + VkStructureType sType; + const void * pNext; + VkSemaphore semaphore; + uint64_t value; +} VkSemaphoreSignalInfo; + +typedef struct VkSemaphoreSignalInfo VkSemaphoreSignalInfoKHR; + +typedef struct VkVertexInputBindingDivisorDescription { + uint32_t binding; + uint32_t divisor; +} VkVertexInputBindingDivisorDescription; + +typedef struct VkVertexInputBindingDivisorDescription VkVertexInputBindingDivisorDescriptionKHR; + +typedef struct VkVertexInputBindingDivisorDescription VkVertexInputBindingDivisorDescriptionEXT; + +typedef struct VkPipelineVertexInputDivisorStateCreateInfo { + VkStructureType sType; + const void * pNext; + uint32_t vertexBindingDivisorCount; + const VkVertexInputBindingDivisorDescription * pVertexBindingDivisors; +} VkPipelineVertexInputDivisorStateCreateInfo; + +typedef struct VkPipelineVertexInputDivisorStateCreateInfo VkPipelineVertexInputDivisorStateCreateInfoKHR; + +typedef struct VkPipelineVertexInputDivisorStateCreateInfo VkPipelineVertexInputDivisorStateCreateInfoEXT; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t maxVertexAttribDivisor; +} VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT; + +typedef struct VkPhysicalDevicePCIBusInfoPropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t pciDomain; + uint32_t pciBus; + uint32_t pciDevice; + uint32_t pciFunction; +} VkPhysicalDevicePCIBusInfoPropertiesEXT; + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef struct VkImportAndroidHardwareBufferInfoANDROID { + VkStructureType sType; + const void * pNext; + struct AHardwareBuffer * buffer; +} VkImportAndroidHardwareBufferInfoANDROID; + +#endif + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef struct VkAndroidHardwareBufferUsageANDROID { + VkStructureType sType; + void * pNext; + uint64_t androidHardwareBufferUsage; +} VkAndroidHardwareBufferUsageANDROID; + +#endif + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID { + VkStructureType sType; + const void * pNext; + VkDeviceMemory memory; +} VkMemoryGetAndroidHardwareBufferInfoANDROID; + +#endif + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef struct VkExternalFormatANDROID { + VkStructureType sType; + void * pNext; + uint64_t externalFormat; +} VkExternalFormatANDROID; + +#endif + +typedef struct VkCheckpointDataNV { + VkStructureType sType; + void * pNext; + VkPipelineStageFlagBits stage; + void * pCheckpointMarker; +} VkCheckpointDataNV; + +typedef struct VkImageViewASTCDecodeModeEXT { + VkStructureType sType; + const void * pNext; + VkFormat decodeMode; +} VkImageViewASTCDecodeModeEXT; + +typedef struct VkPipelineViewportExclusiveScissorStateCreateInfoNV { + VkStructureType sType; + const void * pNext; + uint32_t exclusiveScissorCount; + const VkRect2D * pExclusiveScissors; +} VkPipelineViewportExclusiveScissorStateCreateInfoNV; + +typedef struct VkShadingRatePaletteNV { + uint32_t shadingRatePaletteEntryCount; + const VkShadingRatePaletteEntryNV * pShadingRatePaletteEntries; +} VkShadingRatePaletteNV; + +typedef struct VkPhysicalDeviceShadingRateImagePropertiesNV { + VkStructureType sType; + void * pNext; + VkExtent2D shadingRateTexelSize; + uint32_t shadingRatePaletteSize; + uint32_t shadingRateMaxCoarseSamples; +} VkPhysicalDeviceShadingRateImagePropertiesNV; + +typedef struct VkCoarseSampleLocationNV { + uint32_t pixelX; + uint32_t pixelY; + uint32_t sample; +} VkCoarseSampleLocationNV; + +typedef struct VkCoarseSampleOrderCustomNV { + VkShadingRatePaletteEntryNV shadingRate; + uint32_t sampleCount; + uint32_t sampleLocationCount; + const VkCoarseSampleLocationNV * pSampleLocations; +} VkCoarseSampleOrderCustomNV; + +typedef struct VkPipelineViewportCoarseSampleOrderStateCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkCoarseSampleOrderTypeNV sampleOrderType; + uint32_t customSampleOrderCount; + const VkCoarseSampleOrderCustomNV * pCustomSampleOrders; +} VkPipelineViewportCoarseSampleOrderStateCreateInfoNV; + +typedef struct VkPhysicalDeviceMeshShaderPropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t maxDrawMeshTasksCount; + uint32_t maxTaskWorkGroupInvocations; + uint32_t maxTaskWorkGroupSize [3]; + uint32_t maxTaskTotalMemorySize; + uint32_t maxTaskOutputCount; + uint32_t maxMeshWorkGroupInvocations; + uint32_t maxMeshWorkGroupSize [3]; + uint32_t maxMeshTotalMemorySize; + uint32_t maxMeshOutputVertices; + uint32_t maxMeshOutputPrimitives; + uint32_t maxMeshMultiviewViewCount; + uint32_t meshOutputPerVertexGranularity; + uint32_t meshOutputPerPrimitiveGranularity; +} VkPhysicalDeviceMeshShaderPropertiesNV; + +typedef struct VkDrawMeshTasksIndirectCommandNV { + uint32_t taskCount; + uint32_t firstTask; +} VkDrawMeshTasksIndirectCommandNV; + +typedef struct VkDrawMeshTasksIndirectCommandEXT { + uint32_t groupCountX; + uint32_t groupCountY; + uint32_t groupCountZ; +} VkDrawMeshTasksIndirectCommandEXT; + +typedef struct VkRayTracingShaderGroupCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkRayTracingShaderGroupTypeKHR type; + uint32_t generalShader; + uint32_t closestHitShader; + uint32_t anyHitShader; + uint32_t intersectionShader; +} VkRayTracingShaderGroupCreateInfoNV; + +typedef struct VkRayTracingShaderGroupCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkRayTracingShaderGroupTypeKHR type; + uint32_t generalShader; + uint32_t closestHitShader; + uint32_t anyHitShader; + uint32_t intersectionShader; + const void * pShaderGroupCaptureReplayHandle; +} VkRayTracingShaderGroupCreateInfoKHR; + +typedef struct VkWriteDescriptorSetAccelerationStructureKHR { + VkStructureType sType; + const void * pNext; + uint32_t accelerationStructureCount; + const VkAccelerationStructureKHR * pAccelerationStructures; +} VkWriteDescriptorSetAccelerationStructureKHR; + +typedef struct VkWriteDescriptorSetAccelerationStructureNV { + VkStructureType sType; + const void * pNext; + uint32_t accelerationStructureCount; + const VkAccelerationStructureNV * pAccelerationStructures; +} VkWriteDescriptorSetAccelerationStructureNV; + +typedef struct VkAccelerationStructureMemoryRequirementsInfoNV { + VkStructureType sType; + const void * pNext; + VkAccelerationStructureMemoryRequirementsTypeNV type; + VkAccelerationStructureNV accelerationStructure; +} VkAccelerationStructureMemoryRequirementsInfoNV; + +typedef struct VkPhysicalDeviceAccelerationStructurePropertiesKHR { + VkStructureType sType; + void * pNext; + uint64_t maxGeometryCount; + uint64_t maxInstanceCount; + uint64_t maxPrimitiveCount; + uint32_t maxPerStageDescriptorAccelerationStructures; + uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures; + uint32_t maxDescriptorSetAccelerationStructures; + uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures; + uint32_t minAccelerationStructureScratchOffsetAlignment; +} VkPhysicalDeviceAccelerationStructurePropertiesKHR; + +typedef struct VkPhysicalDeviceRayTracingPipelinePropertiesKHR { + VkStructureType sType; + void * pNext; + uint32_t shaderGroupHandleSize; + uint32_t maxRayRecursionDepth; + uint32_t maxShaderGroupStride; + uint32_t shaderGroupBaseAlignment; + uint32_t shaderGroupHandleCaptureReplaySize; + uint32_t maxRayDispatchInvocationCount; + uint32_t shaderGroupHandleAlignment; + uint32_t maxRayHitAttributeSize; +} VkPhysicalDeviceRayTracingPipelinePropertiesKHR; + +typedef struct VkPhysicalDeviceRayTracingPropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t shaderGroupHandleSize; + uint32_t maxRecursionDepth; + uint32_t maxShaderGroupStride; + uint32_t shaderGroupBaseAlignment; + uint64_t maxGeometryCount; + uint64_t maxInstanceCount; + uint64_t maxTriangleCount; + uint32_t maxDescriptorSetAccelerationStructures; +} VkPhysicalDeviceRayTracingPropertiesNV; + +typedef struct VkTraceRaysIndirectCommandKHR { + uint32_t width; + uint32_t height; + uint32_t depth; +} VkTraceRaysIndirectCommandKHR; + +typedef struct VkPhysicalDeviceImageDrmFormatModifierInfoEXT { + VkStructureType sType; + const void * pNext; + uint64_t drmFormatModifier; + VkSharingMode sharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t * pQueueFamilyIndices; +} VkPhysicalDeviceImageDrmFormatModifierInfoEXT; + +typedef struct VkImageDrmFormatModifierListCreateInfoEXT { + VkStructureType sType; + const void * pNext; + uint32_t drmFormatModifierCount; + const uint64_t * pDrmFormatModifiers; +} VkImageDrmFormatModifierListCreateInfoEXT; + +typedef struct VkImageDrmFormatModifierPropertiesEXT { + VkStructureType sType; + void * pNext; + uint64_t drmFormatModifier; +} VkImageDrmFormatModifierPropertiesEXT; + +typedef struct VkDeviceMemoryOverallocationCreateInfoAMD { + VkStructureType sType; + const void * pNext; + VkMemoryOverallocationBehaviorAMD overallocationBehavior; +} VkDeviceMemoryOverallocationCreateInfoAMD; + +typedef struct VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT { + VkStructureType sType; + void * pNext; + VkExtent2D fragmentDensityOffsetGranularity; +} VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + +typedef struct VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; + +typedef struct VkRenderPassFragmentDensityMapCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkAttachmentReference fragmentDensityMapAttachment; +} VkRenderPassFragmentDensityMapCreateInfoEXT; + +typedef struct VkRenderPassFragmentDensityMapOffsetEndInfoEXT { + VkStructureType sType; + const void * pNext; + uint32_t fragmentDensityOffsetCount; + const VkOffset2D * pFragmentDensityOffsets; +} VkRenderPassFragmentDensityMapOffsetEndInfoEXT; + +typedef struct VkRenderPassFragmentDensityMapOffsetEndInfoEXT VkSubpassFragmentDensityMapOffsetEndInfoQCOM; + +typedef struct VkMemoryPriorityAllocateInfoEXT { + VkStructureType sType; + const void * pNext; + float priority; +} VkMemoryPriorityAllocateInfoEXT; + +typedef struct VkBufferDeviceAddressInfo { + VkStructureType sType; + const void * pNext; + VkBuffer buffer; +} VkBufferDeviceAddressInfo; + +typedef struct VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoKHR; + +typedef struct VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoEXT; + +typedef struct VkBufferOpaqueCaptureAddressCreateInfo { + VkStructureType sType; + const void * pNext; + uint64_t opaqueCaptureAddress; +} VkBufferOpaqueCaptureAddressCreateInfo; + +typedef struct VkBufferOpaqueCaptureAddressCreateInfo VkBufferOpaqueCaptureAddressCreateInfoKHR; + +typedef struct VkPhysicalDeviceImageViewImageFormatInfoEXT { + VkStructureType sType; + void * pNext; + VkImageViewType imageViewType; +} VkPhysicalDeviceImageViewImageFormatInfoEXT; + +typedef struct VkRenderPassAttachmentBeginInfo { + VkStructureType sType; + const void * pNext; + uint32_t attachmentCount; + const VkImageView * pAttachments; +} VkRenderPassAttachmentBeginInfo; + +typedef struct VkRenderPassAttachmentBeginInfo VkRenderPassAttachmentBeginInfoKHR; + +typedef struct VkCooperativeMatrixPropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t MSize; + uint32_t NSize; + uint32_t KSize; + VkComponentTypeNV AType; + VkComponentTypeNV BType; + VkComponentTypeNV CType; + VkComponentTypeNV DType; + VkScopeNV scope; +} VkCooperativeMatrixPropertiesNV; + +typedef struct VkImageViewHandleInfoNVX { + VkStructureType sType; + const void * pNext; + VkImageView imageView; + VkDescriptorType descriptorType; + VkSampler sampler; +} VkImageViewHandleInfoNVX; + +#if defined(VK_USE_PLATFORM_GGP) +typedef struct VkPresentFrameTokenGGP { + VkStructureType sType; + const void * pNext; + GgpFrameToken frameToken; +} VkPresentFrameTokenGGP; + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkSurfaceFullScreenExclusiveInfoEXT { + VkStructureType sType; + void * pNext; + VkFullScreenExclusiveEXT fullScreenExclusive; +} VkSurfaceFullScreenExclusiveInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkSurfaceFullScreenExclusiveWin32InfoEXT { + VkStructureType sType; + const void * pNext; + HMONITOR hmonitor; +} VkSurfaceFullScreenExclusiveWin32InfoEXT; + +#endif + +typedef struct VkPerformanceCounterKHR { + VkStructureType sType; + void * pNext; + VkPerformanceCounterUnitKHR unit; + VkPerformanceCounterScopeKHR scope; + VkPerformanceCounterStorageKHR storage; + uint8_t uuid [ VK_UUID_SIZE ]; +} VkPerformanceCounterKHR; + +typedef struct VkQueryPoolPerformanceCreateInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t queueFamilyIndex; + uint32_t counterIndexCount; + const uint32_t * pCounterIndices; +} VkQueryPoolPerformanceCreateInfoKHR; + +typedef union VkPerformanceCounterResultKHR { + int32_t int32; + int64_t int64; + uint32_t uint32; + uint64_t uint64; + float float32; + double float64; +} VkPerformanceCounterResultKHR; + +typedef struct VkPerformanceQuerySubmitInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t counterPassIndex; +} VkPerformanceQuerySubmitInfoKHR; + +typedef struct VkInitializePerformanceApiInfoINTEL { + VkStructureType sType; + const void * pNext; + void * pUserData; +} VkInitializePerformanceApiInfoINTEL; + +typedef struct VkQueryPoolPerformanceQueryCreateInfoINTEL { + VkStructureType sType; + const void * pNext; + VkQueryPoolSamplingModeINTEL performanceCountersSampling; +} VkQueryPoolPerformanceQueryCreateInfoINTEL; + +typedef struct VkQueryPoolPerformanceQueryCreateInfoINTEL VkQueryPoolCreateInfoINTEL; + +typedef struct VkPerformanceMarkerInfoINTEL { + VkStructureType sType; + const void * pNext; + uint64_t marker; +} VkPerformanceMarkerInfoINTEL; + +typedef struct VkPerformanceStreamMarkerInfoINTEL { + VkStructureType sType; + const void * pNext; + uint32_t marker; +} VkPerformanceStreamMarkerInfoINTEL; + +typedef struct VkPerformanceConfigurationAcquireInfoINTEL { + VkStructureType sType; + const void * pNext; + VkPerformanceConfigurationTypeINTEL type; +} VkPerformanceConfigurationAcquireInfoINTEL; + +typedef struct VkPhysicalDeviceShaderSMBuiltinsPropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t shaderSMCount; + uint32_t shaderWarpsPerSM; +} VkPhysicalDeviceShaderSMBuiltinsPropertiesNV; + +typedef struct VkAttachmentReferenceStencilLayout { + VkStructureType sType; + void * pNext; + VkImageLayout stencilLayout; +} VkAttachmentReferenceStencilLayout; + +typedef struct VkAttachmentReferenceStencilLayout VkAttachmentReferenceStencilLayoutKHR; + +typedef struct VkAttachmentDescriptionStencilLayout { + VkStructureType sType; + void * pNext; + VkImageLayout stencilInitialLayout; + VkImageLayout stencilFinalLayout; +} VkAttachmentDescriptionStencilLayout; + +typedef struct VkAttachmentDescriptionStencilLayout VkAttachmentDescriptionStencilLayoutKHR; + +typedef struct VkPipelineInfoKHR { + VkStructureType sType; + const void * pNext; + VkPipeline pipeline; +} VkPipelineInfoKHR; + +typedef struct VkPipelineInfoKHR VkPipelineInfoEXT; + +typedef struct VkPipelineExecutableInfoKHR { + VkStructureType sType; + const void * pNext; + VkPipeline pipeline; + uint32_t executableIndex; +} VkPipelineExecutableInfoKHR; + +typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfo { + VkStructureType sType; + const void * pNext; + uint32_t requiredSubgroupSize; +} VkPipelineShaderStageRequiredSubgroupSizeCreateInfo; + +typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfo VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT; + +typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfo VkShaderRequiredSubgroupSizeCreateInfoEXT; + +typedef struct VkSubpassShadingPipelineCreateInfoHUAWEI { + VkStructureType sType; + void * pNext; + VkRenderPass renderPass; + uint32_t subpass; +} VkSubpassShadingPipelineCreateInfoHUAWEI; + +typedef struct VkPhysicalDeviceSubpassShadingPropertiesHUAWEI { + VkStructureType sType; + void * pNext; + uint32_t maxSubpassShadingWorkgroupSizeAspectRatio; +} VkPhysicalDeviceSubpassShadingPropertiesHUAWEI; + +typedef struct VkMemoryOpaqueCaptureAddressAllocateInfo { + VkStructureType sType; + const void * pNext; + uint64_t opaqueCaptureAddress; +} VkMemoryOpaqueCaptureAddressAllocateInfo; + +typedef struct VkMemoryOpaqueCaptureAddressAllocateInfo VkMemoryOpaqueCaptureAddressAllocateInfoKHR; + +typedef struct VkDeviceMemoryOpaqueCaptureAddressInfo { + VkStructureType sType; + const void * pNext; + VkDeviceMemory memory; +} VkDeviceMemoryOpaqueCaptureAddressInfo; + +typedef struct VkDeviceMemoryOpaqueCaptureAddressInfo VkDeviceMemoryOpaqueCaptureAddressInfoKHR; + +typedef struct VkPhysicalDeviceLineRasterizationProperties { + VkStructureType sType; + void * pNext; + uint32_t lineSubPixelPrecisionBits; +} VkPhysicalDeviceLineRasterizationProperties; + +typedef struct VkPhysicalDeviceLineRasterizationProperties VkPhysicalDeviceLineRasterizationPropertiesKHR; + +typedef struct VkPhysicalDeviceLineRasterizationProperties VkPhysicalDeviceLineRasterizationPropertiesEXT; + +typedef struct VkSamplerCustomBorderColorCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkClearColorValue customBorderColor; + VkFormat format; +} VkSamplerCustomBorderColorCreateInfoEXT; + +typedef struct VkPhysicalDeviceCustomBorderColorPropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t maxCustomBorderColorSamplers; +} VkPhysicalDeviceCustomBorderColorPropertiesEXT; + +typedef struct VkAccelerationStructureBuildRangeInfoKHR { + uint32_t primitiveCount; + uint32_t primitiveOffset; + uint32_t firstVertex; + uint32_t transformOffset; +} VkAccelerationStructureBuildRangeInfoKHR; + +typedef struct VkAabbPositionsKHR { + float minX; + float minY; + float minZ; + float maxX; + float maxY; + float maxZ; +} VkAabbPositionsKHR; + +typedef struct VkAabbPositionsKHR VkAabbPositionsNV; + +typedef struct VkTransformMatrixKHR { + float matrix [3][4]; +} VkTransformMatrixKHR; + +typedef struct VkTransformMatrixKHR VkTransformMatrixNV; + +typedef struct VkAccelerationStructureDeviceAddressInfoKHR { + VkStructureType sType; + const void * pNext; + VkAccelerationStructureKHR accelerationStructure; +} VkAccelerationStructureDeviceAddressInfoKHR; + +typedef struct VkAccelerationStructureVersionInfoKHR { + VkStructureType sType; + const void * pNext; + const uint8_t * pVersionData; +} VkAccelerationStructureVersionInfoKHR; + +typedef struct VkCopyAccelerationStructureInfoKHR { + VkStructureType sType; + const void * pNext; + VkAccelerationStructureKHR src; + VkAccelerationStructureKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyAccelerationStructureInfoKHR; + +typedef struct VkRayTracingPipelineInterfaceCreateInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t maxPipelineRayPayloadSize; + uint32_t maxPipelineRayHitAttributeSize; +} VkRayTracingPipelineInterfaceCreateInfoKHR; + +typedef struct VkPipelineLibraryCreateInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t libraryCount; + const VkPipeline * pLibraries; +} VkPipelineLibraryCreateInfoKHR; + +typedef struct VkColorBlendEquationEXT { + VkBlendFactor srcColorBlendFactor; + VkBlendFactor dstColorBlendFactor; + VkBlendOp colorBlendOp; + VkBlendFactor srcAlphaBlendFactor; + VkBlendFactor dstAlphaBlendFactor; + VkBlendOp alphaBlendOp; +} VkColorBlendEquationEXT; + +typedef struct VkRenderPassTransformBeginInfoQCOM { + VkStructureType sType; + const void * pNext; + VkSurfaceTransformFlagBitsKHR transform; +} VkRenderPassTransformBeginInfoQCOM; + +typedef struct VkCopyCommandTransformInfoQCOM { + VkStructureType sType; + const void * pNext; + VkSurfaceTransformFlagBitsKHR transform; +} VkCopyCommandTransformInfoQCOM; + +typedef struct VkCommandBufferInheritanceRenderPassTransformInfoQCOM { + VkStructureType sType; + const void * pNext; + VkSurfaceTransformFlagBitsKHR transform; + VkRect2D renderArea; +} VkCommandBufferInheritanceRenderPassTransformInfoQCOM; + +typedef struct VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t maxPartitionCount; +} VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV; + +typedef struct VkPartitionedAccelerationStructureWritePartitionTranslationDataNV { + uint32_t partitionIndex; + float partitionTranslation [3]; +} VkPartitionedAccelerationStructureWritePartitionTranslationDataNV; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR { + VkStructureType sType; + void * pNext; + uint32_t minVertexInputBindingStrideAlignment; +} VkPhysicalDevicePortabilitySubsetPropertiesKHR; + +#endif + +typedef struct VkPipelineFragmentShadingRateStateCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkExtent2D fragmentSize; + VkFragmentShadingRateCombinerOpKHR combinerOps [2]; +} VkPipelineFragmentShadingRateStateCreateInfoKHR; + +typedef struct VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV { + VkStructureType sType; + void * pNext; + VkSampleCountFlagBits maxFragmentShadingRateInvocationCount; +} VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV; + +typedef struct VkPipelineFragmentShadingRateEnumStateCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkFragmentShadingRateTypeNV shadingRateType; + VkFragmentShadingRateNV shadingRate; + VkFragmentShadingRateCombinerOpKHR combinerOps [2]; +} VkPipelineFragmentShadingRateEnumStateCreateInfoNV; + +typedef struct VkMutableDescriptorTypeListEXT { + uint32_t descriptorTypeCount; + const VkDescriptorType * pDescriptorTypes; +} VkMutableDescriptorTypeListEXT; + +typedef struct VkMutableDescriptorTypeListEXT VkMutableDescriptorTypeListVALVE; + +typedef struct VkMutableDescriptorTypeCreateInfoEXT { + VkStructureType sType; + const void * pNext; + uint32_t mutableDescriptorTypeListCount; + const VkMutableDescriptorTypeListEXT * pMutableDescriptorTypeLists; +} VkMutableDescriptorTypeCreateInfoEXT; + +typedef struct VkMutableDescriptorTypeCreateInfoEXT VkMutableDescriptorTypeCreateInfoVALVE; + +typedef struct VkGeneratedCommandsPipelineInfoEXT { + VkStructureType sType; + void * pNext; + VkPipeline pipeline; +} VkGeneratedCommandsPipelineInfoEXT; + +typedef struct VkGeneratedCommandsShaderInfoEXT { + VkStructureType sType; + void * pNext; + uint32_t shaderCount; + const VkShaderEXT * pShaders; +} VkGeneratedCommandsShaderInfoEXT; + +typedef struct VkGeneratedCommandsMemoryRequirementsInfoEXT { + VkStructureType sType; + const void * pNext; + VkIndirectExecutionSetEXT indirectExecutionSet; + VkIndirectCommandsLayoutEXT indirectCommandsLayout; + uint32_t maxSequenceCount; + uint32_t maxDrawCount; +} VkGeneratedCommandsMemoryRequirementsInfoEXT; + +typedef struct VkIndirectExecutionSetPipelineInfoEXT { + VkStructureType sType; + const void * pNext; + VkPipeline initialPipeline; + uint32_t maxPipelineCount; +} VkIndirectExecutionSetPipelineInfoEXT; + +typedef struct VkIndirectExecutionSetShaderLayoutInfoEXT { + VkStructureType sType; + const void * pNext; + uint32_t setLayoutCount; + const VkDescriptorSetLayout * pSetLayouts; +} VkIndirectExecutionSetShaderLayoutInfoEXT; + +typedef struct VkWriteIndirectExecutionSetPipelineEXT { + VkStructureType sType; + const void * pNext; + uint32_t index; + VkPipeline pipeline; +} VkWriteIndirectExecutionSetPipelineEXT; + +typedef struct VkWriteIndirectExecutionSetShaderEXT { + VkStructureType sType; + const void * pNext; + uint32_t index; + VkShaderEXT shader; +} VkWriteIndirectExecutionSetShaderEXT; + +typedef struct VkIndirectCommandsVertexBufferTokenEXT { + uint32_t vertexBindingUnit; +} VkIndirectCommandsVertexBufferTokenEXT; + +typedef struct VkIndirectCommandsIndexBufferTokenEXT { + VkIndirectCommandsInputModeFlagBitsEXT mode; +} VkIndirectCommandsIndexBufferTokenEXT; + +typedef struct VkVertexInputBindingDescription2EXT { + VkStructureType sType; + void * pNext; + uint32_t binding; + uint32_t stride; + VkVertexInputRate inputRate; + uint32_t divisor; +} VkVertexInputBindingDescription2EXT; + +typedef struct VkVertexInputAttributeDescription2EXT { + VkStructureType sType; + void * pNext; + uint32_t location; + uint32_t binding; + VkFormat format; + uint32_t offset; +} VkVertexInputAttributeDescription2EXT; + +typedef struct VkCommandBufferSubmitInfo { + VkStructureType sType; + const void * pNext; + VkCommandBuffer commandBuffer; + uint32_t deviceMask; +} VkCommandBufferSubmitInfo; + +typedef struct VkCommandBufferSubmitInfo VkCommandBufferSubmitInfoKHR; + +typedef struct VkVideoEncodeQuantizationMapCapabilitiesKHR { + VkStructureType sType; + void * pNext; + VkExtent2D maxQuantizationMapExtent; +} VkVideoEncodeQuantizationMapCapabilitiesKHR; + +typedef struct VkVideoEncodeH264QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void * pNext; + int32_t minQpDelta; + int32_t maxQpDelta; +} VkVideoEncodeH264QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoEncodeH265QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void * pNext; + int32_t minQpDelta; + int32_t maxQpDelta; +} VkVideoEncodeH265QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoEncodeAV1QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void * pNext; + int32_t minQIndexDelta; + int32_t maxQIndexDelta; +} VkVideoEncodeAV1QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoFormatQuantizationMapPropertiesKHR { + VkStructureType sType; + void * pNext; + VkExtent2D quantizationMapTexelSize; +} VkVideoFormatQuantizationMapPropertiesKHR; + +typedef struct VkVideoPictureResourceInfoKHR { + VkStructureType sType; + const void * pNext; + VkOffset2D codedOffset; + VkExtent2D codedExtent; + uint32_t baseArrayLayer; + VkImageView imageViewBinding; +} VkVideoPictureResourceInfoKHR; + +typedef struct VkVideoReferenceSlotInfoKHR { + VkStructureType sType; + const void * pNext; + int32_t slotIndex; + const VkVideoPictureResourceInfoKHR * pPictureResource; +} VkVideoReferenceSlotInfoKHR; + +typedef struct VkVideoInlineQueryInfoKHR { + VkStructureType sType; + const void * pNext; + VkQueryPool queryPool; + uint32_t firstQuery; + uint32_t queryCount; +} VkVideoInlineQueryInfoKHR; + +#include "vk_video/vulkan_video_codec_h264std.h" + + +#include "vk_video/vulkan_video_codec_h264std_decode.h" + + +typedef struct VkVideoDecodeH264ProfileInfoKHR { + VkStructureType sType; + const void * pNext; + StdVideoH264ProfileIdc stdProfileIdc; + VkVideoDecodeH264PictureLayoutFlagBitsKHR pictureLayout; +} VkVideoDecodeH264ProfileInfoKHR; + +typedef struct VkVideoDecodeH264CapabilitiesKHR { + VkStructureType sType; + void * pNext; + StdVideoH264LevelIdc maxLevelIdc; + VkOffset2D fieldOffsetGranularity; +} VkVideoDecodeH264CapabilitiesKHR; + + + +typedef struct VkVideoDecodeH264SessionParametersAddInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t stdSPSCount; + const StdVideoH264SequenceParameterSet * pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH264PictureParameterSet * pStdPPSs; +} VkVideoDecodeH264SessionParametersAddInfoKHR; + +typedef struct VkVideoDecodeH264SessionParametersCreateInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoDecodeH264SessionParametersAddInfoKHR * pParametersAddInfo; +} VkVideoDecodeH264SessionParametersCreateInfoKHR; + +typedef struct VkVideoDecodeH264InlineSessionParametersInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoH264SequenceParameterSet * pStdSPS; + const StdVideoH264PictureParameterSet * pStdPPS; +} VkVideoDecodeH264InlineSessionParametersInfoKHR; + +typedef struct VkVideoDecodeH264PictureInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoDecodeH264PictureInfo * pStdPictureInfo; + uint32_t sliceCount; + const uint32_t * pSliceOffsets; +} VkVideoDecodeH264PictureInfoKHR; + +typedef struct VkVideoDecodeH264DpbSlotInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoDecodeH264ReferenceInfo * pStdReferenceInfo; +} VkVideoDecodeH264DpbSlotInfoKHR; + +#include "vk_video/vulkan_video_codec_h265std.h" + + + + + +#include "vk_video/vulkan_video_codec_h265std_decode.h" + + +typedef struct VkVideoDecodeH265ProfileInfoKHR { + VkStructureType sType; + const void * pNext; + StdVideoH265ProfileIdc stdProfileIdc; +} VkVideoDecodeH265ProfileInfoKHR; + +typedef struct VkVideoDecodeH265CapabilitiesKHR { + VkStructureType sType; + void * pNext; + StdVideoH265LevelIdc maxLevelIdc; +} VkVideoDecodeH265CapabilitiesKHR; + +typedef struct VkVideoDecodeH265SessionParametersAddInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t stdVPSCount; + const StdVideoH265VideoParameterSet * pStdVPSs; + uint32_t stdSPSCount; + const StdVideoH265SequenceParameterSet * pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH265PictureParameterSet * pStdPPSs; +} VkVideoDecodeH265SessionParametersAddInfoKHR; + +typedef struct VkVideoDecodeH265SessionParametersCreateInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t maxStdVPSCount; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoDecodeH265SessionParametersAddInfoKHR * pParametersAddInfo; +} VkVideoDecodeH265SessionParametersCreateInfoKHR; + +typedef struct VkVideoDecodeH265InlineSessionParametersInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoH265VideoParameterSet * pStdVPS; + const StdVideoH265SequenceParameterSet * pStdSPS; + const StdVideoH265PictureParameterSet * pStdPPS; +} VkVideoDecodeH265InlineSessionParametersInfoKHR; + +typedef struct VkVideoDecodeH265PictureInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoDecodeH265PictureInfo * pStdPictureInfo; + uint32_t sliceSegmentCount; + const uint32_t * pSliceSegmentOffsets; +} VkVideoDecodeH265PictureInfoKHR; + +typedef struct VkVideoDecodeH265DpbSlotInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoDecodeH265ReferenceInfo * pStdReferenceInfo; +} VkVideoDecodeH265DpbSlotInfoKHR; + +#include "vk_video/vulkan_video_codec_vp9std.h" + + +#include "vk_video/vulkan_video_codec_vp9std_decode.h" + +typedef struct VkVideoDecodeVP9ProfileInfoKHR { + VkStructureType sType; + const void * pNext; + StdVideoVP9Profile stdProfile; +} VkVideoDecodeVP9ProfileInfoKHR; + +typedef struct VkVideoDecodeVP9CapabilitiesKHR { + VkStructureType sType; + void * pNext; + StdVideoVP9Level maxLevel; +} VkVideoDecodeVP9CapabilitiesKHR; + +typedef struct VkVideoDecodeVP9PictureInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoDecodeVP9PictureInfo * pStdPictureInfo; + int32_t referenceNameSlotIndices [ VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR ]; + uint32_t uncompressedHeaderOffset; + uint32_t compressedHeaderOffset; + uint32_t tilesOffset; +} VkVideoDecodeVP9PictureInfoKHR; + +#include "vk_video/vulkan_video_codec_av1std.h" + + + +#include "vk_video/vulkan_video_codec_av1std_decode.h" + + +typedef struct VkVideoDecodeAV1CapabilitiesKHR { + VkStructureType sType; + void * pNext; + StdVideoAV1Level maxLevel; +} VkVideoDecodeAV1CapabilitiesKHR; + +typedef struct VkVideoDecodeAV1SessionParametersCreateInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoAV1SequenceHeader * pStdSequenceHeader; +} VkVideoDecodeAV1SessionParametersCreateInfoKHR; + +typedef struct VkVideoDecodeAV1InlineSessionParametersInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoAV1SequenceHeader * pStdSequenceHeader; +} VkVideoDecodeAV1InlineSessionParametersInfoKHR; + +typedef struct VkVideoDecodeAV1PictureInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoDecodeAV1PictureInfo * pStdPictureInfo; + int32_t referenceNameSlotIndices [ VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR ]; + uint32_t frameHeaderOffset; + uint32_t tileCount; + const uint32_t * pTileOffsets; + const uint32_t * pTileSizes; +} VkVideoDecodeAV1PictureInfoKHR; + +typedef struct VkVideoDecodeAV1DpbSlotInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoDecodeAV1ReferenceInfo * pStdReferenceInfo; +} VkVideoDecodeAV1DpbSlotInfoKHR; + +typedef struct VkVideoSessionParametersUpdateInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t updateSequenceCount; +} VkVideoSessionParametersUpdateInfoKHR; + +typedef struct VkVideoEncodeSessionParametersGetInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoSessionParametersKHR videoSessionParameters; +} VkVideoEncodeSessionParametersGetInfoKHR; + +typedef struct VkVideoEncodeQuantizationMapInfoKHR { + VkStructureType sType; + const void * pNext; + VkImageView quantizationMap; + VkExtent2D quantizationMapExtent; +} VkVideoEncodeQuantizationMapInfoKHR; + +typedef struct VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkExtent2D quantizationMapTexelSize; +} VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeQualityLevelInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t qualityLevel; +} VkVideoEncodeQualityLevelInfoKHR; + +typedef struct VkVideoEncodeQualityLevelPropertiesKHR { + VkStructureType sType; + void * pNext; + VkVideoEncodeRateControlModeFlagBitsKHR preferredRateControlMode; + uint32_t preferredRateControlLayerCount; +} VkVideoEncodeQualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeRateControlLayerInfoKHR { + VkStructureType sType; + const void * pNext; + uint64_t averageBitrate; + uint64_t maxBitrate; + uint32_t frameRateNumerator; + uint32_t frameRateDenominator; +} VkVideoEncodeRateControlLayerInfoKHR; + +#include "vk_video/vulkan_video_codec_h264std_encode.h" + + + +typedef struct VkVideoEncodeH264SessionParametersAddInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t stdSPSCount; + const StdVideoH264SequenceParameterSet * pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH264PictureParameterSet * pStdPPSs; +} VkVideoEncodeH264SessionParametersAddInfoKHR; + +typedef struct VkVideoEncodeH264SessionParametersCreateInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoEncodeH264SessionParametersAddInfoKHR * pParametersAddInfo; +} VkVideoEncodeH264SessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeH264DpbSlotInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoEncodeH264ReferenceInfo * pStdReferenceInfo; +} VkVideoEncodeH264DpbSlotInfoKHR; + +typedef struct VkVideoEncodeH264ProfileInfoKHR { + VkStructureType sType; + const void * pNext; + StdVideoH264ProfileIdc stdProfileIdc; +} VkVideoEncodeH264ProfileInfoKHR; + +typedef struct VkVideoEncodeH264NaluSliceInfoKHR { + VkStructureType sType; + const void * pNext; + int32_t constantQp; + const StdVideoEncodeH264SliceHeader * pStdSliceHeader; +} VkVideoEncodeH264NaluSliceInfoKHR; + +typedef struct VkVideoEncodeH264QpKHR { + int32_t qpI; + int32_t qpP; + int32_t qpB; +} VkVideoEncodeH264QpKHR; + +typedef struct VkVideoEncodeH264FrameSizeKHR { + uint32_t frameISize; + uint32_t framePSize; + uint32_t frameBSize; +} VkVideoEncodeH264FrameSizeKHR; + +#include "vk_video/vulkan_video_codec_h265std_encode.h" + + + +typedef struct VkVideoEncodeH265SessionParametersAddInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t stdVPSCount; + const StdVideoH265VideoParameterSet * pStdVPSs; + uint32_t stdSPSCount; + const StdVideoH265SequenceParameterSet * pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH265PictureParameterSet * pStdPPSs; +} VkVideoEncodeH265SessionParametersAddInfoKHR; + +typedef struct VkVideoEncodeH265SessionParametersCreateInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t maxStdVPSCount; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoEncodeH265SessionParametersAddInfoKHR * pParametersAddInfo; +} VkVideoEncodeH265SessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeH265NaluSliceSegmentInfoKHR { + VkStructureType sType; + const void * pNext; + int32_t constantQp; + const StdVideoEncodeH265SliceSegmentHeader * pStdSliceSegmentHeader; +} VkVideoEncodeH265NaluSliceSegmentInfoKHR; + +typedef struct VkVideoEncodeH265QpKHR { + int32_t qpI; + int32_t qpP; + int32_t qpB; +} VkVideoEncodeH265QpKHR; + +typedef struct VkVideoEncodeH265FrameSizeKHR { + uint32_t frameISize; + uint32_t framePSize; + uint32_t frameBSize; +} VkVideoEncodeH265FrameSizeKHR; + +typedef struct VkVideoEncodeH265ProfileInfoKHR { + VkStructureType sType; + const void * pNext; + StdVideoH265ProfileIdc stdProfileIdc; +} VkVideoEncodeH265ProfileInfoKHR; + +typedef struct VkVideoEncodeH265DpbSlotInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoEncodeH265ReferenceInfo * pStdReferenceInfo; +} VkVideoEncodeH265DpbSlotInfoKHR; + +#include "vk_video/vulkan_video_codec_av1std_encode.h" + + + + +typedef struct VkVideoEncodeAV1SessionParametersCreateInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoAV1SequenceHeader * pStdSequenceHeader; + const StdVideoEncodeAV1DecoderModelInfo * pStdDecoderModelInfo; + uint32_t stdOperatingPointCount; + const StdVideoEncodeAV1OperatingPointInfo * pStdOperatingPoints; +} VkVideoEncodeAV1SessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeAV1DpbSlotInfoKHR { + VkStructureType sType; + const void * pNext; + const StdVideoEncodeAV1ReferenceInfo * pStdReferenceInfo; +} VkVideoEncodeAV1DpbSlotInfoKHR; + +typedef struct VkVideoEncodeAV1ProfileInfoKHR { + VkStructureType sType; + const void * pNext; + StdVideoAV1Profile stdProfile; +} VkVideoEncodeAV1ProfileInfoKHR; + +typedef struct VkVideoEncodeAV1QIndexKHR { + uint32_t intraQIndex; + uint32_t predictiveQIndex; + uint32_t bipredictiveQIndex; +} VkVideoEncodeAV1QIndexKHR; + +typedef struct VkVideoEncodeAV1FrameSizeKHR { + uint32_t intraFrameSize; + uint32_t predictiveFrameSize; + uint32_t bipredictiveFrameSize; +} VkVideoEncodeAV1FrameSizeKHR; + +typedef struct VkPipelineRasterizationProvokingVertexStateCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkProvokingVertexModeEXT provokingVertexMode; +} VkPipelineRasterizationProvokingVertexStateCreateInfoEXT; + +typedef struct VkVideoEncodeSessionIntraRefreshCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoEncodeIntraRefreshModeFlagBitsKHR intraRefreshMode; +} VkVideoEncodeSessionIntraRefreshCreateInfoKHR; + +typedef struct VkVideoEncodeIntraRefreshInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t intraRefreshCycleDuration; + uint32_t intraRefreshIndex; +} VkVideoEncodeIntraRefreshInfoKHR; + +typedef struct VkVideoReferenceIntraRefreshInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t dirtyIntraRefreshRegions; +} VkVideoReferenceIntraRefreshInfoKHR; + +typedef struct VkCuModuleCreateInfoNVX { + VkStructureType sType; + const void * pNext; + size_t dataSize; + const void * pData; +} VkCuModuleCreateInfoNVX; + +typedef struct VkCuFunctionCreateInfoNVX { + VkStructureType sType; + const void * pNext; + VkCuModuleNVX module; + const char * pName; +} VkCuFunctionCreateInfoNVX; + +typedef struct VkCuLaunchInfoNVX { + VkStructureType sType; + const void * pNext; + VkCuFunctionNVX function; + uint32_t gridDimX; + uint32_t gridDimY; + uint32_t gridDimZ; + uint32_t blockDimX; + uint32_t blockDimY; + uint32_t blockDimZ; + uint32_t sharedMemBytes; + size_t paramCount; + const void * const * pParams; + size_t extraCount; + const void * const * pExtras; +} VkCuLaunchInfoNVX; + +typedef struct VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT { + VkStructureType sType; + void * pNext; + size_t combinedImageSamplerDensityMapDescriptorSize; +} VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT; + +typedef struct VkDescriptorBufferBindingPushDescriptorBufferHandleEXT { + VkStructureType sType; + const void * pNext; + VkBuffer buffer; +} VkDescriptorBufferBindingPushDescriptorBufferHandleEXT; + +typedef struct VkBufferCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void * pNext; + VkBuffer buffer; +} VkBufferCaptureDescriptorDataInfoEXT; + +typedef struct VkImageCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void * pNext; + VkImage image; +} VkImageCaptureDescriptorDataInfoEXT; + +typedef struct VkImageViewCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void * pNext; + VkImageView imageView; +} VkImageViewCaptureDescriptorDataInfoEXT; + +typedef struct VkSamplerCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void * pNext; + VkSampler sampler; +} VkSamplerCaptureDescriptorDataInfoEXT; + +typedef struct VkAccelerationStructureCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void * pNext; + VkAccelerationStructureKHR accelerationStructure; + VkAccelerationStructureNV accelerationStructureNV; +} VkAccelerationStructureCaptureDescriptorDataInfoEXT; + +typedef struct VkOpaqueCaptureDescriptorDataCreateInfoEXT { + VkStructureType sType; + const void * pNext; + const void * opaqueCaptureDescriptorData; +} VkOpaqueCaptureDescriptorDataCreateInfoEXT; + +typedef enum VkAccelerationStructureMotionInstanceTypeNV { + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV = 0, + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV = 1, + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV = 2, + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkAccelerationStructureMotionInstanceTypeNV; +typedef struct VkSRTDataNV { + float sx; + float a; + float b; + float pvx; + float sy; + float c; + float pvy; + float sz; + float pvz; + float qx; + float qy; + float qz; + float qw; + float tx; + float ty; + float tz; +} VkSRTDataNV; + +typedef void* VkRemoteAddressNV; +typedef struct VkMemoryGetRemoteAddressInfoNV { + VkStructureType sType; + const void * pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetRemoteAddressInfoNV; + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkImportMemoryBufferCollectionFUCHSIA { + VkStructureType sType; + const void * pNext; + VkBufferCollectionFUCHSIA collection; + uint32_t index; +} VkImportMemoryBufferCollectionFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkBufferCollectionImageCreateInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + VkBufferCollectionFUCHSIA collection; + uint32_t index; +} VkBufferCollectionImageCreateInfoFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkBufferCollectionBufferCreateInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + VkBufferCollectionFUCHSIA collection; + uint32_t index; +} VkBufferCollectionBufferCreateInfoFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkBufferCollectionCreateInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + zx_handle_t collectionToken; +} VkBufferCollectionCreateInfoFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkSysmemColorSpaceFUCHSIA { + VkStructureType sType; + const void * pNext; + uint32_t colorSpace; +} VkSysmemColorSpaceFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkBufferCollectionConstraintsInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + uint32_t minBufferCount; + uint32_t maxBufferCount; + uint32_t minBufferCountForCamping; + uint32_t minBufferCountForDedicatedSlack; + uint32_t minBufferCountForSharedSlack; +} VkBufferCollectionConstraintsInfoFUCHSIA; + +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaModuleNV) +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaFunctionNV) +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkCudaModuleCreateInfoNV { + VkStructureType sType; + const void * pNext; + size_t dataSize; + const void * pData; +} VkCudaModuleCreateInfoNV; + +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkCudaFunctionCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkCudaModuleNV module; + const char * pName; +} VkCudaFunctionCreateInfoNV; + +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkCudaLaunchInfoNV { + VkStructureType sType; + const void * pNext; + VkCudaFunctionNV function; + uint32_t gridDimX; + uint32_t gridDimY; + uint32_t gridDimZ; + uint32_t blockDimX; + uint32_t blockDimY; + uint32_t blockDimZ; + uint32_t sharedMemBytes; + size_t paramCount; + const void * const * pParams; + size_t extraCount; + const void * const * pExtras; +} VkCudaLaunchInfoNV; + +#endif + +typedef struct VkPipelineRenderingCreateInfo { + VkStructureType sType; + const void * pNext; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkFormat * pColorAttachmentFormats; + VkFormat depthAttachmentFormat; + VkFormat stencilAttachmentFormat; +} VkPipelineRenderingCreateInfo; + +typedef struct VkPipelineRenderingCreateInfo VkPipelineRenderingCreateInfoKHR; + +typedef struct VkRenderingEndInfoEXT { + VkStructureType sType; + const void * pNext; +} VkRenderingEndInfoEXT; + +typedef struct VkRenderingAttachmentInfo { + VkStructureType sType; + const void * pNext; + VkImageView imageView; + VkImageLayout imageLayout; + VkResolveModeFlagBits resolveMode; + VkImageView resolveImageView; + VkImageLayout resolveImageLayout; + VkAttachmentLoadOp loadOp; + VkAttachmentStoreOp storeOp; + VkClearValue clearValue; +} VkRenderingAttachmentInfo; + +typedef struct VkRenderingAttachmentInfo VkRenderingAttachmentInfoKHR; + +typedef struct VkRenderingFragmentShadingRateAttachmentInfoKHR { + VkStructureType sType; + const void * pNext; + VkImageView imageView; + VkImageLayout imageLayout; + VkExtent2D shadingRateAttachmentTexelSize; +} VkRenderingFragmentShadingRateAttachmentInfoKHR; + +typedef struct VkRenderingFragmentDensityMapAttachmentInfoEXT { + VkStructureType sType; + const void * pNext; + VkImageView imageView; + VkImageLayout imageLayout; +} VkRenderingFragmentDensityMapAttachmentInfoEXT; + +typedef struct VkAttachmentSampleCountInfoAMD { + VkStructureType sType; + const void * pNext; + uint32_t colorAttachmentCount; + const VkSampleCountFlagBits * pColorAttachmentSamples; + VkSampleCountFlagBits depthStencilAttachmentSamples; +} VkAttachmentSampleCountInfoAMD; + +typedef struct VkAttachmentSampleCountInfoAMD VkAttachmentSampleCountInfoNV; + +typedef struct VkImageViewMinLodCreateInfoEXT { + VkStructureType sType; + const void * pNext; + float minLod; +} VkImageViewMinLodCreateInfoEXT; + +typedef struct VkDescriptorSetBindingReferenceVALVE { + VkStructureType sType; + const void * pNext; + VkDescriptorSetLayout descriptorSetLayout; + uint32_t binding; +} VkDescriptorSetBindingReferenceVALVE; + +typedef struct VkDescriptorSetLayoutHostMappingInfoVALVE { + VkStructureType sType; + void * pNext; + size_t descriptorOffset; + uint32_t descriptorSize; +} VkDescriptorSetLayoutHostMappingInfoVALVE; + +typedef struct VkPhysicalDeviceNestedCommandBufferPropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t maxCommandBufferNestingLevel; +} VkPhysicalDeviceNestedCommandBufferPropertiesEXT; + +typedef struct VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT { + VkStructureType sType; + void * pNext; + uint8_t shaderModuleIdentifierAlgorithmUUID [ VK_UUID_SIZE ]; +} VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT; + +typedef struct VkPipelineShaderStageModuleIdentifierCreateInfoEXT { + VkStructureType sType; + const void * pNext; + uint32_t identifierSize; + const uint8_t * pIdentifier; +} VkPipelineShaderStageModuleIdentifierCreateInfoEXT; + +typedef struct VkShaderModuleIdentifierEXT { + VkStructureType sType; + void * pNext; + uint32_t identifierSize; + uint8_t identifier [ VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT ]; +} VkShaderModuleIdentifierEXT; + +typedef struct VkRenderPassCreationFeedbackInfoEXT { + uint32_t postMergeSubpassCount; +} VkRenderPassCreationFeedbackInfoEXT; + +typedef struct VkRenderPassCreationFeedbackCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkRenderPassCreationFeedbackInfoEXT * pRenderPassFeedback; +} VkRenderPassCreationFeedbackCreateInfoEXT; + +typedef struct VkRenderPassSubpassFeedbackInfoEXT { + VkSubpassMergeStatusEXT subpassMergeStatus; + char description [ VK_MAX_DESCRIPTION_SIZE ]; + uint32_t postMergeIndex; +} VkRenderPassSubpassFeedbackInfoEXT; + +typedef struct VkRenderPassSubpassFeedbackCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkRenderPassSubpassFeedbackInfoEXT * pSubpassFeedback; +} VkRenderPassSubpassFeedbackCreateInfoEXT; + +typedef struct VkMicromapVersionInfoEXT { + VkStructureType sType; + const void * pNext; + const uint8_t * pVersionData; +} VkMicromapVersionInfoEXT; + +typedef struct VkCopyMicromapInfoEXT { + VkStructureType sType; + const void * pNext; + VkMicromapEXT src; + VkMicromapEXT dst; + VkCopyMicromapModeEXT mode; +} VkCopyMicromapInfoEXT; + +typedef struct VkMicromapUsageEXT { + uint32_t count; + uint32_t subdivisionLevel; + uint32_t format; +} VkMicromapUsageEXT; + +typedef struct VkMicromapTriangleEXT { + uint32_t dataOffset; + uint16_t subdivisionLevel; + uint16_t format; +} VkMicromapTriangleEXT; + +typedef struct VkPhysicalDeviceOpacityMicromapPropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t maxOpacity2StateSubdivisionLevel; + uint32_t maxOpacity4StateSubdivisionLevel; +} VkPhysicalDeviceOpacityMicromapPropertiesEXT; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkPhysicalDeviceDisplacementMicromapPropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t maxDisplacementMicromapSubdivisionLevel; +} VkPhysicalDeviceDisplacementMicromapPropertiesNV; + +#endif + +typedef struct VkPipelinePropertiesIdentifierEXT { + VkStructureType sType; + void * pNext; + uint8_t pipelineIdentifier [ VK_UUID_SIZE ]; +} VkPipelinePropertiesIdentifierEXT; + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkExportMetalObjectCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkExportMetalObjectTypeFlagBitsEXT exportObjectType; +} VkExportMetalObjectCreateInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkExportMetalObjectsInfoEXT { + VkStructureType sType; + const void * pNext; +} VkExportMetalObjectsInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkExportMetalDeviceInfoEXT { + VkStructureType sType; + const void * pNext; + MTLDevice_id mtlDevice; +} VkExportMetalDeviceInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkExportMetalCommandQueueInfoEXT { + VkStructureType sType; + const void * pNext; + VkQueue queue; + MTLCommandQueue_id mtlCommandQueue; +} VkExportMetalCommandQueueInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkExportMetalBufferInfoEXT { + VkStructureType sType; + const void * pNext; + VkDeviceMemory memory; + MTLBuffer_id mtlBuffer; +} VkExportMetalBufferInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkImportMetalBufferInfoEXT { + VkStructureType sType; + const void * pNext; + MTLBuffer_id mtlBuffer; +} VkImportMetalBufferInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkExportMetalTextureInfoEXT { + VkStructureType sType; + const void * pNext; + VkImage image; + VkImageView imageView; + VkBufferView bufferView; + VkImageAspectFlagBits plane; + MTLTexture_id mtlTexture; +} VkExportMetalTextureInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkImportMetalTextureInfoEXT { + VkStructureType sType; + const void * pNext; + VkImageAspectFlagBits plane; + MTLTexture_id mtlTexture; +} VkImportMetalTextureInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkExportMetalIOSurfaceInfoEXT { + VkStructureType sType; + const void * pNext; + VkImage image; + IOSurfaceRef ioSurface; +} VkExportMetalIOSurfaceInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkImportMetalIOSurfaceInfoEXT { + VkStructureType sType; + const void * pNext; + IOSurfaceRef ioSurface; +} VkImportMetalIOSurfaceInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkExportMetalSharedEventInfoEXT { + VkStructureType sType; + const void * pNext; + VkSemaphore semaphore; + VkEvent event; + MTLSharedEvent_id mtlSharedEvent; +} VkExportMetalSharedEventInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkImportMetalSharedEventInfoEXT { + VkStructureType sType; + const void * pNext; + MTLSharedEvent_id mtlSharedEvent; +} VkImportMetalSharedEventInfoEXT; + +#endif + +typedef struct VkPipelineRobustnessCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineRobustnessBufferBehavior storageBuffers; + VkPipelineRobustnessBufferBehavior uniformBuffers; + VkPipelineRobustnessBufferBehavior vertexInputs; + VkPipelineRobustnessImageBehavior images; +} VkPipelineRobustnessCreateInfo; + +typedef struct VkPipelineRobustnessCreateInfo VkPipelineRobustnessCreateInfoEXT; + +typedef struct VkPhysicalDevicePipelineRobustnessProperties { + VkStructureType sType; + void * pNext; + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs; + VkPipelineRobustnessImageBehavior defaultRobustnessImages; +} VkPhysicalDevicePipelineRobustnessProperties; + +typedef struct VkPhysicalDevicePipelineRobustnessProperties VkPhysicalDevicePipelineRobustnessPropertiesEXT; + +typedef struct VkImageViewSampleWeightCreateInfoQCOM { + VkStructureType sType; + const void * pNext; + VkOffset2D filterCenter; + VkExtent2D filterSize; + uint32_t numPhases; +} VkImageViewSampleWeightCreateInfoQCOM; + +typedef struct VkPhysicalDeviceImageProcessingPropertiesQCOM { + VkStructureType sType; + void * pNext; + uint32_t maxWeightFilterPhases; + VkExtent2D maxWeightFilterDimension; + VkExtent2D maxBlockMatchRegion; + VkExtent2D maxBoxFilterBlockSize; +} VkPhysicalDeviceImageProcessingPropertiesQCOM; + +typedef struct VkTilePropertiesQCOM { + VkStructureType sType; + void * pNext; + VkExtent3D tileSize; + VkExtent2D apronSize; + VkOffset2D origin; +} VkTilePropertiesQCOM; + +typedef struct VkTileMemoryBindInfoQCOM { + VkStructureType sType; + const void * pNext; + VkDeviceMemory memory; +} VkTileMemoryBindInfoQCOM; + +typedef struct VkAmigoProfilingSubmitInfoSEC { + VkStructureType sType; + const void * pNext; + uint64_t firstDrawTimestamp; + uint64_t swapBufferTimestamp; +} VkAmigoProfilingSubmitInfoSEC; + +typedef struct VkOpticalFlowImageFormatPropertiesNV { + VkStructureType sType; + const void * pNext; + VkFormat format; +} VkOpticalFlowImageFormatPropertiesNV; + +typedef struct VkOpticalFlowSessionCreatePrivateDataInfoNV { + VkStructureType sType; + void * pNext; + uint32_t id; + uint32_t size; + const void * pPrivateData; +} VkOpticalFlowSessionCreatePrivateDataInfoNV; + +typedef struct VkDeviceFaultVendorInfoEXT { + char description [ VK_MAX_DESCRIPTION_SIZE ]; + uint64_t vendorFaultCode; + uint64_t vendorFaultData; +} VkDeviceFaultVendorInfoEXT; + +typedef struct VkDeviceFaultVendorBinaryHeaderVersionOneEXT { + uint32_t headerSize; + VkDeviceFaultVendorBinaryHeaderVersionEXT headerVersion; + uint32_t vendorID; + uint32_t deviceID; + uint32_t driverVersion; + uint8_t pipelineCacheUUID [ VK_UUID_SIZE ]; + uint32_t applicationNameOffset; + uint32_t applicationVersion; + uint32_t engineNameOffset; + uint32_t engineVersion; + uint32_t apiVersion; +} VkDeviceFaultVendorBinaryHeaderVersionOneEXT; + +typedef struct VkDepthBiasInfoEXT { + VkStructureType sType; + const void * pNext; + float depthBiasConstantFactor; + float depthBiasClamp; + float depthBiasSlopeFactor; +} VkDepthBiasInfoEXT; + +typedef struct VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM { + VkStructureType sType; + void * pNext; + uint64_t shaderCoreMask; + uint32_t shaderCoreCount; + uint32_t shaderWarpsPerCore; +} VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM; + +typedef struct VkSurfacePresentModeKHR { + VkStructureType sType; + void * pNext; + VkPresentModeKHR presentMode; +} VkSurfacePresentModeKHR; + +typedef struct VkSurfacePresentModeKHR VkSurfacePresentModeEXT; + +typedef struct VkSurfacePresentModeCompatibilityKHR { + VkStructureType sType; + void * pNext; + uint32_t presentModeCount; + VkPresentModeKHR * pPresentModes; +} VkSurfacePresentModeCompatibilityKHR; + +typedef struct VkSurfacePresentModeCompatibilityKHR VkSurfacePresentModeCompatibilityEXT; + +typedef struct VkSwapchainPresentFenceInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t swapchainCount; + const VkFence * pFences; +} VkSwapchainPresentFenceInfoKHR; + +typedef struct VkSwapchainPresentFenceInfoKHR VkSwapchainPresentFenceInfoEXT; + +typedef struct VkSwapchainPresentModesCreateInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t presentModeCount; + const VkPresentModeKHR * pPresentModes; +} VkSwapchainPresentModesCreateInfoKHR; + +typedef struct VkSwapchainPresentModesCreateInfoKHR VkSwapchainPresentModesCreateInfoEXT; + +typedef struct VkSwapchainPresentModeInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t swapchainCount; + const VkPresentModeKHR * pPresentModes; +} VkSwapchainPresentModeInfoKHR; + +typedef struct VkSwapchainPresentModeInfoKHR VkSwapchainPresentModeInfoEXT; + +typedef struct VkReleaseSwapchainImagesInfoKHR { + VkStructureType sType; + const void * pNext; + VkSwapchainKHR swapchain; + uint32_t imageIndexCount; + const uint32_t * pImageIndices; +} VkReleaseSwapchainImagesInfoKHR; + +typedef struct VkReleaseSwapchainImagesInfoKHR VkReleaseSwapchainImagesInfoEXT; + +typedef struct VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV { + VkStructureType sType; + void * pNext; + VkRayTracingInvocationReorderModeNV rayTracingInvocationReorderReorderingHint; +} VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV; + +typedef struct VkPhysicalDeviceShaderCorePropertiesARM { + VkStructureType sType; + void * pNext; + uint32_t pixelRate; + uint32_t texelRate; + uint32_t fmaRate; +} VkPhysicalDeviceShaderCorePropertiesARM; + +typedef struct VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM { + VkStructureType sType; + const void * pNext; + uint32_t perViewRenderAreaCount; + const VkRect2D * pPerViewRenderAreas; +} VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM; + +typedef struct VkQueryLowLatencySupportNV { + VkStructureType sType; + const void * pNext; + void * pQueriedLowLatencyData; +} VkQueryLowLatencySupportNV; + +typedef struct VkPhysicalDeviceShaderObjectPropertiesEXT { + VkStructureType sType; + void * pNext; + uint8_t shaderBinaryUUID [ VK_UUID_SIZE ]; + uint32_t shaderBinaryVersion; +} VkPhysicalDeviceShaderObjectPropertiesEXT; + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +typedef struct VkImportScreenBufferInfoQNX { + VkStructureType sType; + const void * pNext; + struct _screen_buffer * buffer; +} VkImportScreenBufferInfoQNX; + +#endif + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +typedef struct VkExternalFormatQNX { + VkStructureType sType; + void * pNext; + uint64_t externalFormat; +} VkExternalFormatQNX; + +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkPhysicalDeviceShaderEnqueuePropertiesAMDX { + VkStructureType sType; + void * pNext; + uint32_t maxExecutionGraphDepth; + uint32_t maxExecutionGraphShaderOutputNodes; + uint32_t maxExecutionGraphShaderPayloadSize; + uint32_t maxExecutionGraphShaderPayloadCount; + uint32_t executionGraphDispatchAddressAlignment; + uint32_t maxExecutionGraphWorkgroupCount [3]; + uint32_t maxExecutionGraphWorkgroups; +} VkPhysicalDeviceShaderEnqueuePropertiesAMDX; + +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkPipelineShaderStageNodeCreateInfoAMDX { + VkStructureType sType; + const void * pNext; + const char * pName; + uint32_t index; +} VkPipelineShaderStageNodeCreateInfoAMDX; + +#endif + +typedef struct VkAntiLagPresentationInfoAMD { + VkStructureType sType; + void * pNext; + VkAntiLagStageAMD stage; + uint64_t frameIndex; +} VkAntiLagPresentationInfoAMD; + +typedef struct VkBindMemoryStatus { + VkStructureType sType; + const void * pNext; + VkResult * pResult; +} VkBindMemoryStatus; + +typedef struct VkBindMemoryStatus VkBindMemoryStatusKHR; + +typedef struct VkPushDescriptorSetWithTemplateInfo { + VkStructureType sType; + const void * pNext; + VkDescriptorUpdateTemplate descriptorUpdateTemplate; + VkPipelineLayout layout; + uint32_t set; + const void * pData; +} VkPushDescriptorSetWithTemplateInfo; + +typedef struct VkPushDescriptorSetWithTemplateInfo VkPushDescriptorSetWithTemplateInfoKHR; + +typedef struct VkSamplerCubicWeightsCreateInfoQCOM { + VkStructureType sType; + const void * pNext; + VkCubicFilterWeightsQCOM cubicWeights; +} VkSamplerCubicWeightsCreateInfoQCOM; + +typedef struct VkBlitImageCubicWeightsInfoQCOM { + VkStructureType sType; + const void * pNext; + VkCubicFilterWeightsQCOM cubicWeights; +} VkBlitImageCubicWeightsInfoQCOM; + +typedef struct VkPhysicalDeviceImageProcessing2PropertiesQCOM { + VkStructureType sType; + void * pNext; + VkExtent2D maxBlockMatchWindow; +} VkPhysicalDeviceImageProcessing2PropertiesQCOM; + +typedef struct VkSamplerBlockMatchWindowCreateInfoQCOM { + VkStructureType sType; + const void * pNext; + VkExtent2D windowExtent; + VkBlockMatchWindowCompareModeQCOM windowCompareMode; +} VkSamplerBlockMatchWindowCreateInfoQCOM; + +typedef struct VkPhysicalDeviceLayeredDriverPropertiesMSFT { + VkStructureType sType; + void * pNext; + VkLayeredDriverUnderlyingApiMSFT underlyingAPI; +} VkPhysicalDeviceLayeredDriverPropertiesMSFT; + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef struct VkAndroidHardwareBufferFormatResolvePropertiesANDROID { + VkStructureType sType; + void * pNext; + VkFormat colorAttachmentFormat; +} VkAndroidHardwareBufferFormatResolvePropertiesANDROID; + +#endif + +typedef struct VkLatencySleepInfoNV { + VkStructureType sType; + const void * pNext; + VkSemaphore signalSemaphore; + uint64_t value; +} VkLatencySleepInfoNV; + +typedef struct VkSetLatencyMarkerInfoNV { + VkStructureType sType; + const void * pNext; + uint64_t presentID; + VkLatencyMarkerNV marker; +} VkSetLatencyMarkerInfoNV; + +typedef struct VkLatencyTimingsFrameReportNV { + VkStructureType sType; + const void * pNext; + uint64_t presentID; + uint64_t inputSampleTimeUs; + uint64_t simStartTimeUs; + uint64_t simEndTimeUs; + uint64_t renderSubmitStartTimeUs; + uint64_t renderSubmitEndTimeUs; + uint64_t presentStartTimeUs; + uint64_t presentEndTimeUs; + uint64_t driverStartTimeUs; + uint64_t driverEndTimeUs; + uint64_t osRenderQueueStartTimeUs; + uint64_t osRenderQueueEndTimeUs; + uint64_t gpuRenderStartTimeUs; + uint64_t gpuRenderEndTimeUs; +} VkLatencyTimingsFrameReportNV; + +typedef struct VkOutOfBandQueueTypeInfoNV { + VkStructureType sType; + const void * pNext; + VkOutOfBandQueueTypeNV queueType; +} VkOutOfBandQueueTypeInfoNV; + +typedef struct VkLatencySubmissionPresentIdNV { + VkStructureType sType; + const void * pNext; + uint64_t presentID; +} VkLatencySubmissionPresentIdNV; + +typedef struct VkLatencySurfaceCapabilitiesNV { + VkStructureType sType; + const void * pNext; + uint32_t presentModeCount; + VkPresentModeKHR * pPresentModes; +} VkLatencySurfaceCapabilitiesNV; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkPhysicalDeviceCudaKernelLaunchPropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t computeCapabilityMinor; + uint32_t computeCapabilityMajor; +} VkPhysicalDeviceCudaKernelLaunchPropertiesNV; + +#endif + +typedef struct VkDeviceQueueShaderCoreControlCreateInfoARM { + VkStructureType sType; + void * pNext; + uint32_t shaderCoreCount; +} VkDeviceQueueShaderCoreControlCreateInfoARM; + +typedef struct VkPhysicalDeviceRenderPassStripedPropertiesARM { + VkStructureType sType; + void * pNext; + VkExtent2D renderPassStripeGranularity; + uint32_t maxRenderPassStripes; +} VkPhysicalDeviceRenderPassStripedPropertiesARM; + +typedef struct VkRenderPassStripeInfoARM { + VkStructureType sType; + const void * pNext; + VkRect2D stripeArea; +} VkRenderPassStripeInfoARM; + +typedef struct VkRenderPassStripeBeginInfoARM { + VkStructureType sType; + const void * pNext; + uint32_t stripeInfoCount; + const VkRenderPassStripeInfoARM * pStripeInfos; +} VkRenderPassStripeBeginInfoARM; + +typedef struct VkRenderingAttachmentLocationInfo { + VkStructureType sType; + const void * pNext; + uint32_t colorAttachmentCount; + const uint32_t * pColorAttachmentLocations; +} VkRenderingAttachmentLocationInfo; + +typedef struct VkRenderingAttachmentLocationInfo VkRenderingAttachmentLocationInfoKHR; + +typedef struct VkRenderingInputAttachmentIndexInfo { + VkStructureType sType; + const void * pNext; + uint32_t colorAttachmentCount; + const uint32_t * pColorAttachmentInputIndices; + const uint32_t * pDepthInputAttachmentIndex; + const uint32_t * pStencilInputAttachmentIndex; +} VkRenderingInputAttachmentIndexInfo; + +typedef struct VkRenderingInputAttachmentIndexInfo VkRenderingInputAttachmentIndexInfoKHR; + +typedef struct VkMemoryMapPlacedInfoEXT { + VkStructureType sType; + const void * pNext; + void * pPlacedAddress; +} VkMemoryMapPlacedInfoEXT; + +typedef struct VkPhysicalDeviceImageAlignmentControlPropertiesMESA { + VkStructureType sType; + void * pNext; + uint32_t supportedImageAlignmentMask; +} VkPhysicalDeviceImageAlignmentControlPropertiesMESA; + +typedef struct VkImageAlignmentControlCreateInfoMESA { + VkStructureType sType; + const void * pNext; + uint32_t maximumRequestedAlignment; +} VkImageAlignmentControlCreateInfoMESA; + +typedef struct VkDepthClampRangeEXT { + float minDepthClamp; + float maxDepthClamp; +} VkDepthClampRangeEXT; + +typedef struct VkPhysicalDeviceCooperativeMatrix2PropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t cooperativeMatrixWorkgroupScopeMaxWorkgroupSize; + uint32_t cooperativeMatrixFlexibleDimensionsMaxDimension; + uint32_t cooperativeMatrixWorkgroupScopeReservedSharedMemory; +} VkPhysicalDeviceCooperativeMatrix2PropertiesNV; + +typedef struct VkPerTileBeginInfoQCOM { + VkStructureType sType; + const void * pNext; +} VkPerTileBeginInfoQCOM; + +typedef struct VkPerTileEndInfoQCOM { + VkStructureType sType; + const void * pNext; +} VkPerTileEndInfoQCOM; + +typedef struct VkDispatchTileInfoQCOM { + VkStructureType sType; + const void * pNext; +} VkDispatchTileInfoQCOM; + +typedef struct VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE { + VkStructureType sType; + void * pNext; + uint32_t maxFragmentDensityMapLayers; +} VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE; + +typedef struct VkPipelineFragmentDensityMapLayeredCreateInfoVALVE { + VkStructureType sType; + const void * pNext; + uint32_t maxFragmentDensityMapLayers; +} VkPipelineFragmentDensityMapLayeredCreateInfoVALVE; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkSetPresentConfigNV { + VkStructureType sType; + const void * pNext; + uint32_t numFramesPerBatch; + uint32_t presentConfigFeedback; +} VkSetPresentConfigNV; + +#endif + +typedef struct VkExternalComputeQueueDeviceCreateInfoNV { + VkStructureType sType; + const void * pNext; + uint32_t reservedExternalQueues; +} VkExternalComputeQueueDeviceCreateInfoNV; + +typedef struct VkExternalComputeQueueCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkQueue preferredQueue; +} VkExternalComputeQueueCreateInfoNV; + +typedef struct VkExternalComputeQueueDataParamsNV { + VkStructureType sType; + const void * pNext; + uint32_t deviceIndex; +} VkExternalComputeQueueDataParamsNV; + +typedef struct VkPhysicalDeviceExternalComputeQueuePropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t externalDataSize; + uint32_t maxExternalQueues; +} VkPhysicalDeviceExternalComputeQueuePropertiesNV; + +VK_DEFINE_HANDLE(VkExternalComputeQueueNV) +typedef struct VkTensorMemoryRequirementsInfoARM { + VkStructureType sType; + const void * pNext; + VkTensorARM tensor; +} VkTensorMemoryRequirementsInfoARM; + +typedef struct VkWriteDescriptorSetTensorARM { + VkStructureType sType; + const void * pNext; + uint32_t tensorViewCount; + const VkTensorViewARM * pTensorViews; +} VkWriteDescriptorSetTensorARM; + +typedef struct VkTensorCopyARM { + VkStructureType sType; + const void * pNext; + uint32_t dimensionCount; + const uint64_t * pSrcOffset; + const uint64_t * pDstOffset; + const uint64_t * pExtent; +} VkTensorCopyARM; + +typedef struct VkMemoryDedicatedAllocateInfoTensorARM { + VkStructureType sType; + const void * pNext; + VkTensorARM tensor; +} VkMemoryDedicatedAllocateInfoTensorARM; + +typedef struct VkPhysicalDeviceDescriptorBufferTensorPropertiesARM { + VkStructureType sType; + void * pNext; + size_t tensorCaptureReplayDescriptorDataSize; + size_t tensorViewCaptureReplayDescriptorDataSize; + size_t tensorDescriptorSize; +} VkPhysicalDeviceDescriptorBufferTensorPropertiesARM; + +typedef struct VkTensorCaptureDescriptorDataInfoARM { + VkStructureType sType; + const void * pNext; + VkTensorARM tensor; +} VkTensorCaptureDescriptorDataInfoARM; + +typedef struct VkTensorViewCaptureDescriptorDataInfoARM { + VkStructureType sType; + const void * pNext; + VkTensorViewARM tensorView; +} VkTensorViewCaptureDescriptorDataInfoARM; + +typedef struct VkDescriptorGetTensorInfoARM { + VkStructureType sType; + const void * pNext; + VkTensorViewARM tensorView; +} VkDescriptorGetTensorInfoARM; + +typedef struct VkFrameBoundaryTensorsARM { + VkStructureType sType; + const void * pNext; + uint32_t tensorCount; + const VkTensorARM * pTensors; +} VkFrameBoundaryTensorsARM; + +typedef struct VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM { + VkStructureType sType; + const void * pNext; + uint32_t dimension; + uint32_t zeroCount; + uint32_t groupSize; +} VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM; + +typedef struct VkDataGraphPipelineConstantARM { + VkStructureType sType; + const void * pNext; + uint32_t id; + const void * pConstantData; +} VkDataGraphPipelineConstantARM; + +typedef struct VkDataGraphPipelineResourceInfoARM { + VkStructureType sType; + const void * pNext; + uint32_t descriptorSet; + uint32_t binding; + uint32_t arrayElement; +} VkDataGraphPipelineResourceInfoARM; + +typedef struct VkDataGraphPipelineCompilerControlCreateInfoARM { + VkStructureType sType; + const void * pNext; + const char * pVendorOptions; +} VkDataGraphPipelineCompilerControlCreateInfoARM; + +typedef struct VkDataGraphPipelineShaderModuleCreateInfoARM { + VkStructureType sType; + const void * pNext; + VkShaderModule module; + const char * pName; + const VkSpecializationInfo * pSpecializationInfo; + uint32_t constantCount; + const VkDataGraphPipelineConstantARM * pConstants; +} VkDataGraphPipelineShaderModuleCreateInfoARM; + +typedef struct VkDataGraphPipelineSessionBindPointRequirementsInfoARM { + VkStructureType sType; + const void * pNext; + VkDataGraphPipelineSessionARM session; +} VkDataGraphPipelineSessionBindPointRequirementsInfoARM; + +typedef struct VkDataGraphPipelineSessionBindPointRequirementARM { + VkStructureType sType; + const void * pNext; + VkDataGraphPipelineSessionBindPointARM bindPoint; + VkDataGraphPipelineSessionBindPointTypeARM bindPointType; + uint32_t numObjects; +} VkDataGraphPipelineSessionBindPointRequirementARM; + +typedef struct VkDataGraphPipelineSessionMemoryRequirementsInfoARM { + VkStructureType sType; + const void * pNext; + VkDataGraphPipelineSessionARM session; + VkDataGraphPipelineSessionBindPointARM bindPoint; + uint32_t objectIndex; +} VkDataGraphPipelineSessionMemoryRequirementsInfoARM; + +typedef struct VkDataGraphPipelineInfoARM { + VkStructureType sType; + const void * pNext; + VkPipeline dataGraphPipeline; +} VkDataGraphPipelineInfoARM; + +typedef struct VkDataGraphPipelineIdentifierCreateInfoARM { + VkStructureType sType; + const void * pNext; + uint32_t identifierSize; + const uint8_t * pIdentifier; +} VkDataGraphPipelineIdentifierCreateInfoARM; + +typedef struct VkPhysicalDeviceDataGraphOperationSupportARM { + VkPhysicalDeviceDataGraphOperationTypeARM operationType; + char name [ VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM ]; + uint32_t version; +} VkPhysicalDeviceDataGraphOperationSupportARM; + +typedef struct VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM { + VkStructureType sType; + const void * pNext; + uint32_t queueFamilyIndex; + VkPhysicalDeviceDataGraphProcessingEngineTypeARM engineType; +} VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM; + +typedef struct VkVideoEncodeSessionRgbConversionCreateInfoVALVE { + VkStructureType sType; + const void * pNext; + VkVideoEncodeRgbModelConversionFlagBitsVALVE rgbModel; + VkVideoEncodeRgbRangeCompressionFlagBitsVALVE rgbRange; + VkVideoEncodeRgbChromaOffsetFlagBitsVALVE xChromaOffset; + VkVideoEncodeRgbChromaOffsetFlagBitsVALVE yChromaOffset; +} VkVideoEncodeSessionRgbConversionCreateInfoVALVE; + +/* Complete version of this file */ +#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 4, VK_HEADER_VERSION) +typedef uint32_t VkSampleMask; +typedef uint32_t VkBool32; +typedef uint32_t VkFlags; +typedef uint64_t VkFlags64; +typedef uint64_t VkDeviceSize; +typedef uint64_t VkDeviceAddress; +typedef VkFlags VkFramebufferCreateFlags; +typedef VkFlags VkQueryPoolCreateFlags; +typedef VkFlags VkRenderPassCreateFlags; +typedef VkFlags VkSamplerCreateFlags; +typedef VkFlags VkPipelineLayoutCreateFlags; +typedef VkFlags VkPipelineCacheCreateFlags; +typedef VkFlags VkPipelineDepthStencilStateCreateFlags; +typedef VkFlags VkPipelineDynamicStateCreateFlags; +typedef VkFlags VkPipelineColorBlendStateCreateFlags; +typedef VkFlags VkPipelineMultisampleStateCreateFlags; +typedef VkFlags VkPipelineRasterizationStateCreateFlags; +typedef VkFlags VkPipelineViewportStateCreateFlags; +typedef VkFlags VkPipelineTessellationStateCreateFlags; +typedef VkFlags VkPipelineInputAssemblyStateCreateFlags; +typedef VkFlags VkPipelineVertexInputStateCreateFlags; +typedef VkFlags VkPipelineShaderStageCreateFlags; +typedef VkFlags VkDescriptorSetLayoutCreateFlags; +typedef VkFlags VkBufferViewCreateFlags; +typedef VkFlags VkInstanceCreateFlags; +typedef VkFlags VkDeviceCreateFlags; +typedef VkFlags VkDeviceQueueCreateFlags; +typedef VkFlags VkQueueFlags; +typedef VkFlags VkMemoryPropertyFlags; +typedef VkFlags VkMemoryHeapFlags; +typedef VkFlags VkAccessFlags; +typedef VkFlags VkBufferUsageFlags; +typedef VkFlags VkBufferCreateFlags; +typedef VkFlags VkShaderStageFlags; +typedef VkFlags VkImageUsageFlags; +typedef VkFlags VkImageCreateFlags; +typedef VkFlags VkImageViewCreateFlags; +typedef VkFlags VkPipelineCreateFlags; +typedef VkFlags VkColorComponentFlags; +typedef VkFlags VkFenceCreateFlags; +typedef VkFlags VkSemaphoreCreateFlags; +typedef VkFlags VkFormatFeatureFlags; +typedef VkFlags VkQueryControlFlags; +typedef VkFlags VkQueryResultFlags; +typedef VkFlags VkShaderModuleCreateFlags; +typedef VkFlags VkEventCreateFlags; +typedef VkFlags VkCommandPoolCreateFlags; +typedef VkFlags VkCommandPoolResetFlags; +typedef VkFlags VkCommandBufferResetFlags; +typedef VkFlags VkCommandBufferUsageFlags; +typedef VkFlags VkQueryPipelineStatisticFlags; +typedef VkFlags VkMemoryMapFlags; +typedef VkFlags VkMemoryUnmapFlags; +#define VkMemoryUnmapFlagsKHR VkMemoryUnmapFlags +typedef VkFlags VkImageAspectFlags; +typedef VkFlags VkSparseMemoryBindFlags; +typedef VkFlags VkSparseImageFormatFlags; +typedef VkFlags VkSubpassDescriptionFlags; +typedef VkFlags VkPipelineStageFlags; +typedef VkFlags VkSampleCountFlags; +typedef VkFlags VkAttachmentDescriptionFlags; +typedef VkFlags VkStencilFaceFlags; +typedef VkFlags VkCullModeFlags; +typedef VkFlags VkDescriptorPoolCreateFlags; +typedef VkFlags VkDescriptorPoolResetFlags; +typedef VkFlags VkDependencyFlags; +typedef VkFlags VkSubgroupFeatureFlags; +typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNV; +typedef VkFlags VkIndirectStateFlagsNV; +typedef VkFlags VkGeometryFlagsKHR; +#define VkGeometryFlagsNV VkGeometryFlagsKHR +typedef VkFlags VkGeometryInstanceFlagsKHR; +#define VkGeometryInstanceFlagsNV VkGeometryInstanceFlagsKHR +typedef VkFlags VkClusterAccelerationStructureGeometryFlagsNV; +typedef VkFlags VkClusterAccelerationStructureClusterFlagsNV; +typedef VkFlags VkClusterAccelerationStructureAddressResolutionFlagsNV; +typedef VkFlags VkBuildAccelerationStructureFlagsKHR; +#define VkBuildAccelerationStructureFlagsNV VkBuildAccelerationStructureFlagsKHR +typedef VkFlags VkPrivateDataSlotCreateFlags; +#define VkPrivateDataSlotCreateFlagsEXT VkPrivateDataSlotCreateFlags +typedef VkFlags VkAccelerationStructureCreateFlagsKHR; +typedef VkFlags VkDescriptorUpdateTemplateCreateFlags; +#define VkDescriptorUpdateTemplateCreateFlagsKHR VkDescriptorUpdateTemplateCreateFlags +typedef VkFlags VkPipelineCreationFeedbackFlags; +#define VkPipelineCreationFeedbackFlagsEXT VkPipelineCreationFeedbackFlags +typedef VkFlags VkPerformanceCounterDescriptionFlagsKHR; +typedef VkFlags VkAcquireProfilingLockFlagsKHR; +typedef VkFlags VkSemaphoreWaitFlags; +#define VkSemaphoreWaitFlagsKHR VkSemaphoreWaitFlags +typedef VkFlags VkPipelineCompilerControlFlagsAMD; +typedef VkFlags VkShaderCorePropertiesFlagsAMD; +typedef VkFlags VkDeviceDiagnosticsConfigFlagsNV; +typedef VkFlags64 VkAccessFlags2; +#define VkAccessFlags2KHR VkAccessFlags2 +typedef VkFlags64 VkPipelineStageFlags2; +#define VkPipelineStageFlags2KHR VkPipelineStageFlags2 +typedef VkFlags VkAccelerationStructureMotionInfoFlagsNV; +typedef VkFlags VkAccelerationStructureMotionInstanceFlagsNV; +typedef VkFlags64 VkFormatFeatureFlags2; +#define VkFormatFeatureFlags2KHR VkFormatFeatureFlags2 +typedef VkFlags VkRenderingFlags; +typedef VkFlags64 VkMemoryDecompressionMethodFlagsNV; +#define VkRenderingFlagsKHR VkRenderingFlags +typedef VkFlags VkBuildMicromapFlagsEXT; +typedef VkFlags VkMicromapCreateFlagsEXT; +typedef VkFlags VkIndirectCommandsLayoutUsageFlagsEXT; +typedef VkFlags VkIndirectCommandsInputModeFlagsEXT; +typedef VkFlags VkDirectDriverLoadingFlagsLUNARG; +typedef VkFlags64 VkPipelineCreateFlags2; +#define VkPipelineCreateFlags2KHR VkPipelineCreateFlags2 +typedef VkFlags64 VkBufferUsageFlags2; +#define VkBufferUsageFlags2KHR VkBufferUsageFlags2 +typedef VkFlags VkAddressCopyFlagsKHR; +typedef VkFlags64 VkTensorCreateFlagsARM; +typedef VkFlags64 VkTensorUsageFlagsARM; +typedef VkFlags64 VkTensorViewCreateFlagsARM; +typedef VkFlags64 VkDataGraphPipelineSessionCreateFlagsARM; +typedef VkFlags64 VkDataGraphPipelineDispatchFlagsARM; +typedef VkFlags VkVideoEncodeRgbModelConversionFlagsVALVE; +typedef VkFlags VkVideoEncodeRgbRangeCompressionFlagsVALVE; +typedef VkFlags VkVideoEncodeRgbChromaOffsetFlagsVALVE; +typedef VkFlags VkCompositeAlphaFlagsKHR; +typedef VkFlags VkDisplayPlaneAlphaFlagsKHR; +typedef VkFlags VkSurfaceTransformFlagsKHR; +typedef VkFlags VkSwapchainCreateFlagsKHR; +typedef VkFlags VkDisplayModeCreateFlagsKHR; +typedef VkFlags VkDisplaySurfaceCreateFlagsKHR; +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef VkFlags VkAndroidSurfaceCreateFlagsKHR; +#endif + +#if defined(VK_USE_PLATFORM_VI_NN) +typedef VkFlags VkViSurfaceCreateFlagsNN; +#endif + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +typedef VkFlags VkWaylandSurfaceCreateFlagsKHR; +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkFlags VkWin32SurfaceCreateFlagsKHR; +#endif + +#if defined(VK_USE_PLATFORM_XLIB_KHR) +typedef VkFlags VkXlibSurfaceCreateFlagsKHR; +#endif + +#if defined(VK_USE_PLATFORM_XCB_KHR) +typedef VkFlags VkXcbSurfaceCreateFlagsKHR; +#endif + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +typedef VkFlags VkDirectFBSurfaceCreateFlagsEXT; +#endif + +#if defined(VK_USE_PLATFORM_IOS_MVK) +typedef VkFlags VkIOSSurfaceCreateFlagsMVK; +#endif + +#if defined(VK_USE_PLATFORM_MACOS_MVK) +typedef VkFlags VkMacOSSurfaceCreateFlagsMVK; +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef VkFlags VkMetalSurfaceCreateFlagsEXT; +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA; +#endif + +#if defined(VK_USE_PLATFORM_GGP) +typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP; +#endif + +typedef VkFlags VkHeadlessSurfaceCreateFlagsEXT; +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +typedef VkFlags VkScreenSurfaceCreateFlagsQNX; +#endif + +typedef VkFlags VkPeerMemoryFeatureFlags; +#define VkPeerMemoryFeatureFlagsKHR VkPeerMemoryFeatureFlags +typedef VkFlags VkMemoryAllocateFlags; +#define VkMemoryAllocateFlagsKHR VkMemoryAllocateFlags +typedef VkFlags VkDeviceGroupPresentModeFlagsKHR; +typedef VkFlags VkDebugReportFlagsEXT; +typedef VkFlags VkCommandPoolTrimFlags; +#define VkCommandPoolTrimFlagsKHR VkCommandPoolTrimFlags +typedef VkFlags VkExternalMemoryHandleTypeFlagsNV; +typedef VkFlags VkClusterAccelerationStructureIndexFormatFlagsNV; +typedef VkFlags VkExternalMemoryFeatureFlagsNV; +typedef VkFlags VkExternalMemoryHandleTypeFlags; +#define VkExternalMemoryHandleTypeFlagsKHR VkExternalMemoryHandleTypeFlags +typedef VkFlags VkExternalMemoryFeatureFlags; +#define VkExternalMemoryFeatureFlagsKHR VkExternalMemoryFeatureFlags +typedef VkFlags VkExternalSemaphoreHandleTypeFlags; +#define VkExternalSemaphoreHandleTypeFlagsKHR VkExternalSemaphoreHandleTypeFlags +typedef VkFlags VkExternalSemaphoreFeatureFlags; +#define VkExternalSemaphoreFeatureFlagsKHR VkExternalSemaphoreFeatureFlags +typedef VkFlags VkSemaphoreImportFlags; +#define VkSemaphoreImportFlagsKHR VkSemaphoreImportFlags +typedef VkFlags VkExternalFenceHandleTypeFlags; +#define VkExternalFenceHandleTypeFlagsKHR VkExternalFenceHandleTypeFlags +typedef VkFlags VkExternalFenceFeatureFlags; +#define VkExternalFenceFeatureFlagsKHR VkExternalFenceFeatureFlags +typedef VkFlags VkFenceImportFlags; +#define VkFenceImportFlagsKHR VkFenceImportFlags +typedef VkFlags VkSurfaceCounterFlagsEXT; +typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV; +typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT; +typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV; +typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV; +typedef VkFlags VkPipelineCoverageReductionStateCreateFlagsNV; +typedef VkFlags VkValidationCacheCreateFlagsEXT; +typedef VkFlags VkDebugUtilsMessageSeverityFlagsEXT; +typedef VkFlags VkDebugUtilsMessageTypeFlagsEXT; +typedef VkFlags VkDebugUtilsMessengerCreateFlagsEXT; +typedef VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT; +typedef VkFlags VkDeviceMemoryReportFlagsEXT; +typedef VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT; +typedef VkFlags VkDescriptorBindingFlags; +#define VkDescriptorBindingFlagsEXT VkDescriptorBindingFlags +typedef VkFlags VkConditionalRenderingFlagsEXT; +typedef VkFlags VkResolveModeFlags; +#define VkResolveModeFlagsKHR VkResolveModeFlags +typedef VkFlags VkPipelineRasterizationStateStreamCreateFlagsEXT; +typedef VkFlags VkPipelineRasterizationDepthClipStateCreateFlagsEXT; +typedef VkFlags VkToolPurposeFlags; +#define VkToolPurposeFlagsEXT VkToolPurposeFlags +typedef VkFlags VkSubmitFlags; +#define VkSubmitFlagsKHR VkSubmitFlags +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkFlags VkImageFormatConstraintsFlagsFUCHSIA; +#endif + +typedef VkFlags VkHostImageCopyFlags; +#define VkHostImageCopyFlagsEXT VkHostImageCopyFlags +typedef VkFlags VkPartitionedAccelerationStructureInstanceFlagsNV; +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkFlags VkImageConstraintsInfoFlagsFUCHSIA; +#endif + +typedef VkFlags VkGraphicsPipelineLibraryFlagsEXT; +typedef VkFlags VkImageCompressionFlagsEXT; +typedef VkFlags VkImageCompressionFixedRateFlagsEXT; +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef VkFlags VkExportMetalObjectTypeFlagsEXT; +#endif + +typedef VkFlags VkDeviceAddressBindingFlagsEXT; +typedef VkFlags VkOpticalFlowGridSizeFlagsNV; +typedef VkFlags VkOpticalFlowUsageFlagsNV; +typedef VkFlags VkOpticalFlowSessionCreateFlagsNV; +typedef VkFlags VkOpticalFlowExecuteFlagsNV; +typedef VkFlags VkFrameBoundaryFlagsEXT; +typedef VkFlags VkPresentScalingFlagsKHR; +#define VkPresentScalingFlagsEXT VkPresentScalingFlagsKHR +typedef VkFlags VkPresentGravityFlagsKHR; +#define VkPresentGravityFlagsEXT VkPresentGravityFlagsKHR +typedef VkFlags VkShaderCreateFlagsEXT; +typedef VkFlags VkTileShadingRenderPassFlagsQCOM; +typedef VkFlags64 VkPhysicalDeviceSchedulingControlsFlagsARM; +#if defined(VK_USE_PLATFORM_OHOS) +typedef VkFlags VkSurfaceCreateFlagsOHOS; +#endif + +typedef VkFlags VkVideoCodecOperationFlagsKHR; +typedef VkFlags VkVideoCapabilityFlagsKHR; +typedef VkFlags VkVideoSessionCreateFlagsKHR; +typedef VkFlags VkVideoSessionParametersCreateFlagsKHR; +typedef VkFlags VkVideoBeginCodingFlagsKHR; +typedef VkFlags VkVideoEndCodingFlagsKHR; +typedef VkFlags VkVideoCodingControlFlagsKHR; +typedef VkFlags VkVideoDecodeUsageFlagsKHR; +typedef VkFlags VkVideoDecodeCapabilityFlagsKHR; +typedef VkFlags VkVideoDecodeFlagsKHR; +typedef VkFlags VkVideoDecodeH264PictureLayoutFlagsKHR; +typedef VkFlags VkVideoEncodeFlagsKHR; +typedef VkFlags VkVideoEncodeUsageFlagsKHR; +typedef VkFlags VkVideoEncodeContentFlagsKHR; +typedef VkFlags VkVideoEncodeCapabilityFlagsKHR; +typedef VkFlags VkVideoEncodeFeedbackFlagsKHR; +typedef VkFlags VkVideoEncodeRateControlFlagsKHR; +typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR; +typedef VkFlags VkVideoEncodeIntraRefreshModeFlagsKHR; +typedef VkFlags VkVideoChromaSubsamplingFlagsKHR; +typedef VkFlags VkVideoComponentBitDepthFlagsKHR; +typedef VkFlags VkVideoEncodeH264CapabilityFlagsKHR; +typedef VkFlags VkVideoEncodeH264StdFlagsKHR; +typedef VkFlags VkVideoEncodeH264RateControlFlagsKHR; +typedef VkFlags VkVideoEncodeH265CapabilityFlagsKHR; +typedef VkFlags VkVideoEncodeH265StdFlagsKHR; +typedef VkFlags VkVideoEncodeH265RateControlFlagsKHR; +typedef VkFlags VkVideoEncodeH265CtbSizeFlagsKHR; +typedef VkFlags VkVideoEncodeH265TransformBlockSizeFlagsKHR; +typedef VkFlags VkVideoEncodeAV1CapabilityFlagsKHR; +typedef VkFlags VkVideoEncodeAV1StdFlagsKHR; +typedef VkFlags VkVideoEncodeAV1RateControlFlagsKHR; +typedef VkFlags VkVideoEncodeAV1SuperblockSizeFlagsKHR; +typedef VkFlags64 VkAccessFlags3KHR; +typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)( + VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const char* pLayerPrefix, + const char* pMessage, + void* pUserData); +typedef struct VkDeviceQueueCreateInfo { + VkStructureType sType; + const void * pNext; + VkDeviceQueueCreateFlags flags; + uint32_t queueFamilyIndex; + uint32_t queueCount; + const float * pQueuePriorities; +} VkDeviceQueueCreateInfo; + +typedef struct VkInstanceCreateInfo { + VkStructureType sType; + const void * pNext; + VkInstanceCreateFlags flags; + const VkApplicationInfo * pApplicationInfo; + uint32_t enabledLayerCount; + const char * const* ppEnabledLayerNames; + uint32_t enabledExtensionCount; + const char * const* ppEnabledExtensionNames; +} VkInstanceCreateInfo; + +typedef struct VkQueueFamilyProperties { + VkQueueFlags queueFlags; + uint32_t queueCount; + uint32_t timestampValidBits; + VkExtent3D minImageTransferGranularity; +} VkQueueFamilyProperties; + +typedef struct VkMemoryAllocateInfo { + VkStructureType sType; + const void * pNext; + VkDeviceSize allocationSize; + uint32_t memoryTypeIndex; +} VkMemoryAllocateInfo; + +typedef struct VkMemoryRequirements { + VkDeviceSize size; + VkDeviceSize alignment; + uint32_t memoryTypeBits; +} VkMemoryRequirements; + +typedef struct VkSparseImageFormatProperties { + VkImageAspectFlags aspectMask; + VkExtent3D imageGranularity; + VkSparseImageFormatFlags flags; +} VkSparseImageFormatProperties; + +typedef struct VkSparseImageMemoryRequirements { + VkSparseImageFormatProperties formatProperties; + uint32_t imageMipTailFirstLod; + VkDeviceSize imageMipTailSize; + VkDeviceSize imageMipTailOffset; + VkDeviceSize imageMipTailStride; +} VkSparseImageMemoryRequirements; + +typedef struct VkMemoryType { + VkMemoryPropertyFlags propertyFlags; + uint32_t heapIndex; +} VkMemoryType; + +typedef struct VkMemoryHeap { + VkDeviceSize size; + VkMemoryHeapFlags flags; +} VkMemoryHeap; + +typedef struct VkMappedMemoryRange { + VkStructureType sType; + const void * pNext; + VkDeviceMemory memory; + VkDeviceSize offset; + VkDeviceSize size; +} VkMappedMemoryRange; + +typedef struct VkFormatProperties { + VkFormatFeatureFlags linearTilingFeatures; + VkFormatFeatureFlags optimalTilingFeatures; + VkFormatFeatureFlags bufferFeatures; +} VkFormatProperties; + +typedef struct VkImageFormatProperties { + VkExtent3D maxExtent; + uint32_t maxMipLevels; + uint32_t maxArrayLayers; + VkSampleCountFlags sampleCounts; + VkDeviceSize maxResourceSize; +} VkImageFormatProperties; + +typedef struct VkDescriptorBufferInfo { + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize range; +} VkDescriptorBufferInfo; + +typedef struct VkWriteDescriptorSet { + VkStructureType sType; + const void * pNext; + VkDescriptorSet dstSet; + uint32_t dstBinding; + uint32_t dstArrayElement; + uint32_t descriptorCount; + VkDescriptorType descriptorType; + const VkDescriptorImageInfo * pImageInfo; + const VkDescriptorBufferInfo * pBufferInfo; + const VkBufferView * pTexelBufferView; +} VkWriteDescriptorSet; + +typedef struct VkBufferUsageFlags2CreateInfo { + VkStructureType sType; + const void * pNext; + VkBufferUsageFlags2 usage; +} VkBufferUsageFlags2CreateInfo; + +typedef struct VkBufferUsageFlags2CreateInfo VkBufferUsageFlags2CreateInfoKHR; + +typedef struct VkBufferCreateInfo { + VkStructureType sType; + const void * pNext; + VkBufferCreateFlags flags; + VkDeviceSize size; + VkBufferUsageFlags usage; + VkSharingMode sharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t * pQueueFamilyIndices; +} VkBufferCreateInfo; + +typedef struct VkBufferViewCreateInfo { + VkStructureType sType; + const void * pNext; + VkBufferViewCreateFlags flags; + VkBuffer buffer; + VkFormat format; + VkDeviceSize offset; + VkDeviceSize range; +} VkBufferViewCreateInfo; + +typedef struct VkImageSubresource { + VkImageAspectFlags aspectMask; + uint32_t mipLevel; + uint32_t arrayLayer; +} VkImageSubresource; + +typedef struct VkImageSubresourceLayers { + VkImageAspectFlags aspectMask; + uint32_t mipLevel; + uint32_t baseArrayLayer; + uint32_t layerCount; +} VkImageSubresourceLayers; + +typedef struct VkImageSubresourceRange { + VkImageAspectFlags aspectMask; + uint32_t baseMipLevel; + uint32_t levelCount; + uint32_t baseArrayLayer; + uint32_t layerCount; +} VkImageSubresourceRange; + +typedef struct VkMemoryBarrier { + VkStructureType sType; + const void * pNext; + VkAccessFlags srcAccessMask; + VkAccessFlags dstAccessMask; +} VkMemoryBarrier; + +typedef struct VkBufferMemoryBarrier { + VkStructureType sType; + const void * pNext; + VkAccessFlags srcAccessMask; + VkAccessFlags dstAccessMask; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; +} VkBufferMemoryBarrier; + +typedef struct VkImageMemoryBarrier { + VkStructureType sType; + const void * pNext; + VkAccessFlags srcAccessMask; + VkAccessFlags dstAccessMask; + VkImageLayout oldLayout; + VkImageLayout newLayout; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkImage image; + VkImageSubresourceRange subresourceRange; +} VkImageMemoryBarrier; + +typedef struct VkImageCreateInfo { + VkStructureType sType; + const void * pNext; + VkImageCreateFlags flags; + VkImageType imageType; + VkFormat format; + VkExtent3D extent; + uint32_t mipLevels; + uint32_t arrayLayers; + VkSampleCountFlagBits samples; + VkImageTiling tiling; + VkImageUsageFlags usage; + VkSharingMode sharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t * pQueueFamilyIndices; + VkImageLayout initialLayout; +} VkImageCreateInfo; + +typedef struct VkSubresourceLayout { + VkDeviceSize offset; + VkDeviceSize size; + VkDeviceSize rowPitch; + VkDeviceSize arrayPitch; + VkDeviceSize depthPitch; +} VkSubresourceLayout; + +typedef struct VkImageViewCreateInfo { + VkStructureType sType; + const void * pNext; + VkImageViewCreateFlags flags; + VkImage image; + VkImageViewType viewType; + VkFormat format; + VkComponentMapping components; + VkImageSubresourceRange subresourceRange; +} VkImageViewCreateInfo; + +typedef struct VkBufferCopy { + VkDeviceSize srcOffset; + VkDeviceSize dstOffset; + VkDeviceSize size; +} VkBufferCopy; + +typedef struct VkSparseMemoryBind { + VkDeviceSize resourceOffset; + VkDeviceSize size; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; + VkSparseMemoryBindFlags flags; +} VkSparseMemoryBind; + +typedef struct VkSparseImageMemoryBind { + VkImageSubresource subresource; + VkOffset3D offset; + VkExtent3D extent; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; + VkSparseMemoryBindFlags flags; +} VkSparseImageMemoryBind; + +typedef struct VkSparseBufferMemoryBindInfo { + VkBuffer buffer; + uint32_t bindCount; + const VkSparseMemoryBind * pBinds; +} VkSparseBufferMemoryBindInfo; + +typedef struct VkSparseImageOpaqueMemoryBindInfo { + VkImage image; + uint32_t bindCount; + const VkSparseMemoryBind * pBinds; +} VkSparseImageOpaqueMemoryBindInfo; + +typedef struct VkSparseImageMemoryBindInfo { + VkImage image; + uint32_t bindCount; + const VkSparseImageMemoryBind * pBinds; +} VkSparseImageMemoryBindInfo; + +typedef struct VkBindSparseInfo { + VkStructureType sType; + const void * pNext; + uint32_t waitSemaphoreCount; + const VkSemaphore * pWaitSemaphores; + uint32_t bufferBindCount; + const VkSparseBufferMemoryBindInfo * pBufferBinds; + uint32_t imageOpaqueBindCount; + const VkSparseImageOpaqueMemoryBindInfo * pImageOpaqueBinds; + uint32_t imageBindCount; + const VkSparseImageMemoryBindInfo * pImageBinds; + uint32_t signalSemaphoreCount; + const VkSemaphore * pSignalSemaphores; +} VkBindSparseInfo; + +typedef struct VkImageCopy { + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffset; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffset; + VkExtent3D extent; +} VkImageCopy; + +typedef struct VkImageBlit { + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffsets [2]; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffsets [2]; +} VkImageBlit; + +typedef struct VkBufferImageCopy { + VkDeviceSize bufferOffset; + uint32_t bufferRowLength; + uint32_t bufferImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkBufferImageCopy; + +typedef struct VkStridedDeviceAddressRangeKHR { + VkDeviceAddress address; + VkDeviceSize size; + VkDeviceSize stride; +} VkStridedDeviceAddressRangeKHR; + +typedef struct VkCopyMemoryIndirectCommandKHR { + VkDeviceAddress srcAddress; + VkDeviceAddress dstAddress; + VkDeviceSize size; +} VkCopyMemoryIndirectCommandKHR; + +typedef struct VkCopyMemoryIndirectCommandKHR VkCopyMemoryIndirectCommandNV; + +typedef struct VkCopyMemoryIndirectInfoKHR { + VkStructureType sType; + const void * pNext; + VkAddressCopyFlagsKHR srcCopyFlags; + VkAddressCopyFlagsKHR dstCopyFlags; + uint32_t copyCount; + VkStridedDeviceAddressRangeKHR copyAddressRange; +} VkCopyMemoryIndirectInfoKHR; + +typedef struct VkCopyMemoryToImageIndirectCommandKHR { + VkDeviceAddress srcAddress; + uint32_t bufferRowLength; + uint32_t bufferImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkCopyMemoryToImageIndirectCommandKHR; + +typedef struct VkCopyMemoryToImageIndirectCommandKHR VkCopyMemoryToImageIndirectCommandNV; + +typedef struct VkCopyMemoryToImageIndirectInfoKHR { + VkStructureType sType; + const void * pNext; + VkAddressCopyFlagsKHR srcCopyFlags; + uint32_t copyCount; + VkStridedDeviceAddressRangeKHR copyAddressRange; + VkImage dstImage; + VkImageLayout dstImageLayout; + const VkImageSubresourceLayers * pImageSubresources; +} VkCopyMemoryToImageIndirectInfoKHR; + +typedef struct VkImageResolve { + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffset; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffset; + VkExtent3D extent; +} VkImageResolve; + +typedef struct VkShaderModuleCreateInfo { + VkStructureType sType; + const void * pNext; + VkShaderModuleCreateFlags flags; + size_t codeSize; + const uint32_t * pCode; +} VkShaderModuleCreateInfo; + +typedef struct VkDescriptorSetLayoutBinding { + uint32_t binding; + VkDescriptorType descriptorType; + uint32_t descriptorCount; + VkShaderStageFlags stageFlags; + const VkSampler * pImmutableSamplers; +} VkDescriptorSetLayoutBinding; + +typedef struct VkDescriptorSetLayoutCreateInfo { + VkStructureType sType; + const void * pNext; + VkDescriptorSetLayoutCreateFlags flags; + uint32_t bindingCount; + const VkDescriptorSetLayoutBinding * pBindings; +} VkDescriptorSetLayoutCreateInfo; + +typedef struct VkDescriptorPoolCreateInfo { + VkStructureType sType; + const void * pNext; + VkDescriptorPoolCreateFlags flags; + uint32_t maxSets; + uint32_t poolSizeCount; + const VkDescriptorPoolSize * pPoolSizes; +} VkDescriptorPoolCreateInfo; + +typedef struct VkPipelineShaderStageCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineShaderStageCreateFlags flags; + VkShaderStageFlagBits stage; + VkShaderModule module; + const char * pName; + const VkSpecializationInfo * pSpecializationInfo; +} VkPipelineShaderStageCreateInfo; + +typedef struct VkComputePipelineCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineCreateFlags flags; + VkPipelineShaderStageCreateInfo stage; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkComputePipelineCreateInfo; + +typedef struct VkComputePipelineIndirectBufferInfoNV { + VkStructureType sType; + const void * pNext; + VkDeviceAddress deviceAddress; + VkDeviceSize size; + VkDeviceAddress pipelineDeviceAddressCaptureReplay; +} VkComputePipelineIndirectBufferInfoNV; + +typedef struct VkPipelineCreateFlags2CreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineCreateFlags2 flags; +} VkPipelineCreateFlags2CreateInfo; + +typedef struct VkPipelineCreateFlags2CreateInfo VkPipelineCreateFlags2CreateInfoKHR; + +typedef struct VkPipelineVertexInputStateCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineVertexInputStateCreateFlags flags; + uint32_t vertexBindingDescriptionCount; + const VkVertexInputBindingDescription * pVertexBindingDescriptions; + uint32_t vertexAttributeDescriptionCount; + const VkVertexInputAttributeDescription * pVertexAttributeDescriptions; +} VkPipelineVertexInputStateCreateInfo; + +typedef struct VkPipelineInputAssemblyStateCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineInputAssemblyStateCreateFlags flags; + VkPrimitiveTopology topology; + VkBool32 primitiveRestartEnable; +} VkPipelineInputAssemblyStateCreateInfo; + +typedef struct VkPipelineTessellationStateCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineTessellationStateCreateFlags flags; + uint32_t patchControlPoints; +} VkPipelineTessellationStateCreateInfo; + +typedef struct VkPipelineViewportStateCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineViewportStateCreateFlags flags; + uint32_t viewportCount; + const VkViewport * pViewports; + uint32_t scissorCount; + const VkRect2D * pScissors; +} VkPipelineViewportStateCreateInfo; + +typedef struct VkPipelineRasterizationStateCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineRasterizationStateCreateFlags flags; + VkBool32 depthClampEnable; + VkBool32 rasterizerDiscardEnable; + VkPolygonMode polygonMode; + VkCullModeFlags cullMode; + VkFrontFace frontFace; + VkBool32 depthBiasEnable; + float depthBiasConstantFactor; + float depthBiasClamp; + float depthBiasSlopeFactor; + float lineWidth; +} VkPipelineRasterizationStateCreateInfo; + +typedef struct VkPipelineMultisampleStateCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineMultisampleStateCreateFlags flags; + VkSampleCountFlagBits rasterizationSamples; + VkBool32 sampleShadingEnable; + float minSampleShading; + const VkSampleMask * pSampleMask; + VkBool32 alphaToCoverageEnable; + VkBool32 alphaToOneEnable; +} VkPipelineMultisampleStateCreateInfo; + +typedef struct VkPipelineColorBlendAttachmentState { + VkBool32 blendEnable; + VkBlendFactor srcColorBlendFactor; + VkBlendFactor dstColorBlendFactor; + VkBlendOp colorBlendOp; + VkBlendFactor srcAlphaBlendFactor; + VkBlendFactor dstAlphaBlendFactor; + VkBlendOp alphaBlendOp; + VkColorComponentFlags colorWriteMask; +} VkPipelineColorBlendAttachmentState; + +typedef struct VkPipelineColorBlendStateCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineColorBlendStateCreateFlags flags; + VkBool32 logicOpEnable; + VkLogicOp logicOp; + uint32_t attachmentCount; + const VkPipelineColorBlendAttachmentState * pAttachments; + float blendConstants [4]; +} VkPipelineColorBlendStateCreateInfo; + +typedef struct VkPipelineDynamicStateCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineDynamicStateCreateFlags flags; + uint32_t dynamicStateCount; + const VkDynamicState * pDynamicStates; +} VkPipelineDynamicStateCreateInfo; + +typedef struct VkPipelineDepthStencilStateCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineDepthStencilStateCreateFlags flags; + VkBool32 depthTestEnable; + VkBool32 depthWriteEnable; + VkCompareOp depthCompareOp; + VkBool32 depthBoundsTestEnable; + VkBool32 stencilTestEnable; + VkStencilOpState front; + VkStencilOpState back; + float minDepthBounds; + float maxDepthBounds; +} VkPipelineDepthStencilStateCreateInfo; + +typedef struct VkGraphicsPipelineCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo * pStages; + const VkPipelineVertexInputStateCreateInfo * pVertexInputState; + const VkPipelineInputAssemblyStateCreateInfo * pInputAssemblyState; + const VkPipelineTessellationStateCreateInfo * pTessellationState; + const VkPipelineViewportStateCreateInfo * pViewportState; + const VkPipelineRasterizationStateCreateInfo * pRasterizationState; + const VkPipelineMultisampleStateCreateInfo * pMultisampleState; + const VkPipelineDepthStencilStateCreateInfo * pDepthStencilState; + const VkPipelineColorBlendStateCreateInfo * pColorBlendState; + const VkPipelineDynamicStateCreateInfo * pDynamicState; + VkPipelineLayout layout; + VkRenderPass renderPass; + uint32_t subpass; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkGraphicsPipelineCreateInfo; + +typedef struct VkPipelineCacheCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineCacheCreateFlags flags; + size_t initialDataSize; + const void * pInitialData; +} VkPipelineCacheCreateInfo; + +typedef struct VkPushConstantRange { + VkShaderStageFlags stageFlags; + uint32_t offset; + uint32_t size; +} VkPushConstantRange; + +typedef struct VkPipelineBinaryKeysAndDataKHR { + uint32_t binaryCount; + const VkPipelineBinaryKeyKHR * pPipelineBinaryKeys; + const VkPipelineBinaryDataKHR * pPipelineBinaryData; +} VkPipelineBinaryKeysAndDataKHR; + +typedef struct VkPipelineLayoutCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineLayoutCreateFlags flags; + uint32_t setLayoutCount; + const VkDescriptorSetLayout * pSetLayouts; + uint32_t pushConstantRangeCount; + const VkPushConstantRange * pPushConstantRanges; +} VkPipelineLayoutCreateInfo; + +typedef struct VkSamplerCreateInfo { + VkStructureType sType; + const void * pNext; + VkSamplerCreateFlags flags; + VkFilter magFilter; + VkFilter minFilter; + VkSamplerMipmapMode mipmapMode; + VkSamplerAddressMode addressModeU; + VkSamplerAddressMode addressModeV; + VkSamplerAddressMode addressModeW; + float mipLodBias; + VkBool32 anisotropyEnable; + float maxAnisotropy; + VkBool32 compareEnable; + VkCompareOp compareOp; + float minLod; + float maxLod; + VkBorderColor borderColor; + VkBool32 unnormalizedCoordinates; +} VkSamplerCreateInfo; + +typedef struct VkCommandPoolCreateInfo { + VkStructureType sType; + const void * pNext; + VkCommandPoolCreateFlags flags; + uint32_t queueFamilyIndex; +} VkCommandPoolCreateInfo; + +typedef struct VkCommandBufferInheritanceInfo { + VkStructureType sType; + const void * pNext; + VkRenderPass renderPass; + uint32_t subpass; + VkFramebuffer framebuffer; + VkBool32 occlusionQueryEnable; + VkQueryControlFlags queryFlags; + VkQueryPipelineStatisticFlags pipelineStatistics; +} VkCommandBufferInheritanceInfo; + +typedef struct VkCommandBufferBeginInfo { + VkStructureType sType; + const void * pNext; + VkCommandBufferUsageFlags flags; + const VkCommandBufferInheritanceInfo * pInheritanceInfo; +} VkCommandBufferBeginInfo; + +typedef struct VkRenderPassBeginInfo { + VkStructureType sType; + const void * pNext; + VkRenderPass renderPass; + VkFramebuffer framebuffer; + VkRect2D renderArea; + uint32_t clearValueCount; + const VkClearValue * pClearValues; +} VkRenderPassBeginInfo; + +typedef struct VkClearAttachment { + VkImageAspectFlags aspectMask; + uint32_t colorAttachment; + VkClearValue clearValue; +} VkClearAttachment; + +typedef struct VkAttachmentDescription { + VkAttachmentDescriptionFlags flags; + VkFormat format; + VkSampleCountFlagBits samples; + VkAttachmentLoadOp loadOp; + VkAttachmentStoreOp storeOp; + VkAttachmentLoadOp stencilLoadOp; + VkAttachmentStoreOp stencilStoreOp; + VkImageLayout initialLayout; + VkImageLayout finalLayout; +} VkAttachmentDescription; + +typedef struct VkSubpassDescription { + VkSubpassDescriptionFlags flags; + VkPipelineBindPoint pipelineBindPoint; + uint32_t inputAttachmentCount; + const VkAttachmentReference * pInputAttachments; + uint32_t colorAttachmentCount; + const VkAttachmentReference * pColorAttachments; + const VkAttachmentReference * pResolveAttachments; + const VkAttachmentReference * pDepthStencilAttachment; + uint32_t preserveAttachmentCount; + const uint32_t * pPreserveAttachments; +} VkSubpassDescription; + +typedef struct VkSubpassDependency { + uint32_t srcSubpass; + uint32_t dstSubpass; + VkPipelineStageFlags srcStageMask; + VkPipelineStageFlags dstStageMask; + VkAccessFlags srcAccessMask; + VkAccessFlags dstAccessMask; + VkDependencyFlags dependencyFlags; +} VkSubpassDependency; + +typedef struct VkRenderPassCreateInfo { + VkStructureType sType; + const void * pNext; + VkRenderPassCreateFlags flags; + uint32_t attachmentCount; + const VkAttachmentDescription * pAttachments; + uint32_t subpassCount; + const VkSubpassDescription * pSubpasses; + uint32_t dependencyCount; + const VkSubpassDependency * pDependencies; +} VkRenderPassCreateInfo; + +typedef struct VkEventCreateInfo { + VkStructureType sType; + const void * pNext; + VkEventCreateFlags flags; +} VkEventCreateInfo; + +typedef struct VkFenceCreateInfo { + VkStructureType sType; + const void * pNext; + VkFenceCreateFlags flags; +} VkFenceCreateInfo; + +typedef struct VkPhysicalDeviceFeatures { + VkBool32 robustBufferAccess; + VkBool32 fullDrawIndexUint32; + VkBool32 imageCubeArray; + VkBool32 independentBlend; + VkBool32 geometryShader; + VkBool32 tessellationShader; + VkBool32 sampleRateShading; + VkBool32 dualSrcBlend; + VkBool32 logicOp; + VkBool32 multiDrawIndirect; + VkBool32 drawIndirectFirstInstance; + VkBool32 depthClamp; + VkBool32 depthBiasClamp; + VkBool32 fillModeNonSolid; + VkBool32 depthBounds; + VkBool32 wideLines; + VkBool32 largePoints; + VkBool32 alphaToOne; + VkBool32 multiViewport; + VkBool32 samplerAnisotropy; + VkBool32 textureCompressionETC2; + VkBool32 textureCompressionASTC_LDR; + VkBool32 textureCompressionBC; + VkBool32 occlusionQueryPrecise; + VkBool32 pipelineStatisticsQuery; + VkBool32 vertexPipelineStoresAndAtomics; + VkBool32 fragmentStoresAndAtomics; + VkBool32 shaderTessellationAndGeometryPointSize; + VkBool32 shaderImageGatherExtended; + VkBool32 shaderStorageImageExtendedFormats; + VkBool32 shaderStorageImageMultisample; + VkBool32 shaderStorageImageReadWithoutFormat; + VkBool32 shaderStorageImageWriteWithoutFormat; + VkBool32 shaderUniformBufferArrayDynamicIndexing; + VkBool32 shaderSampledImageArrayDynamicIndexing; + VkBool32 shaderStorageBufferArrayDynamicIndexing; + VkBool32 shaderStorageImageArrayDynamicIndexing; + VkBool32 shaderClipDistance; + VkBool32 shaderCullDistance; + VkBool32 shaderFloat64; + VkBool32 shaderInt64; + VkBool32 shaderInt16; + VkBool32 shaderResourceResidency; + VkBool32 shaderResourceMinLod; + VkBool32 sparseBinding; + VkBool32 sparseResidencyBuffer; + VkBool32 sparseResidencyImage2D; + VkBool32 sparseResidencyImage3D; + VkBool32 sparseResidency2Samples; + VkBool32 sparseResidency4Samples; + VkBool32 sparseResidency8Samples; + VkBool32 sparseResidency16Samples; + VkBool32 sparseResidencyAliased; + VkBool32 variableMultisampleRate; + VkBool32 inheritedQueries; +} VkPhysicalDeviceFeatures; + +typedef struct VkPhysicalDeviceSparseProperties { + VkBool32 residencyStandard2DBlockShape; + VkBool32 residencyStandard2DMultisampleBlockShape; + VkBool32 residencyStandard3DBlockShape; + VkBool32 residencyAlignedMipSize; + VkBool32 residencyNonResidentStrict; +} VkPhysicalDeviceSparseProperties; + +typedef struct VkPhysicalDeviceLimits { + uint32_t maxImageDimension1D; + uint32_t maxImageDimension2D; + uint32_t maxImageDimension3D; + uint32_t maxImageDimensionCube; + uint32_t maxImageArrayLayers; + uint32_t maxTexelBufferElements; + uint32_t maxUniformBufferRange; + uint32_t maxStorageBufferRange; + uint32_t maxPushConstantsSize; + uint32_t maxMemoryAllocationCount; + uint32_t maxSamplerAllocationCount; + VkDeviceSize bufferImageGranularity; + VkDeviceSize sparseAddressSpaceSize; + uint32_t maxBoundDescriptorSets; + uint32_t maxPerStageDescriptorSamplers; + uint32_t maxPerStageDescriptorUniformBuffers; + uint32_t maxPerStageDescriptorStorageBuffers; + uint32_t maxPerStageDescriptorSampledImages; + uint32_t maxPerStageDescriptorStorageImages; + uint32_t maxPerStageDescriptorInputAttachments; + uint32_t maxPerStageResources; + uint32_t maxDescriptorSetSamplers; + uint32_t maxDescriptorSetUniformBuffers; + uint32_t maxDescriptorSetUniformBuffersDynamic; + uint32_t maxDescriptorSetStorageBuffers; + uint32_t maxDescriptorSetStorageBuffersDynamic; + uint32_t maxDescriptorSetSampledImages; + uint32_t maxDescriptorSetStorageImages; + uint32_t maxDescriptorSetInputAttachments; + uint32_t maxVertexInputAttributes; + uint32_t maxVertexInputBindings; + uint32_t maxVertexInputAttributeOffset; + uint32_t maxVertexInputBindingStride; + uint32_t maxVertexOutputComponents; + uint32_t maxTessellationGenerationLevel; + uint32_t maxTessellationPatchSize; + uint32_t maxTessellationControlPerVertexInputComponents; + uint32_t maxTessellationControlPerVertexOutputComponents; + uint32_t maxTessellationControlPerPatchOutputComponents; + uint32_t maxTessellationControlTotalOutputComponents; + uint32_t maxTessellationEvaluationInputComponents; + uint32_t maxTessellationEvaluationOutputComponents; + uint32_t maxGeometryShaderInvocations; + uint32_t maxGeometryInputComponents; + uint32_t maxGeometryOutputComponents; + uint32_t maxGeometryOutputVertices; + uint32_t maxGeometryTotalOutputComponents; + uint32_t maxFragmentInputComponents; + uint32_t maxFragmentOutputAttachments; + uint32_t maxFragmentDualSrcAttachments; + uint32_t maxFragmentCombinedOutputResources; + uint32_t maxComputeSharedMemorySize; + uint32_t maxComputeWorkGroupCount [3]; + uint32_t maxComputeWorkGroupInvocations; + uint32_t maxComputeWorkGroupSize [3]; + uint32_t subPixelPrecisionBits; + uint32_t subTexelPrecisionBits; + uint32_t mipmapPrecisionBits; + uint32_t maxDrawIndexedIndexValue; + uint32_t maxDrawIndirectCount; + float maxSamplerLodBias; + float maxSamplerAnisotropy; + uint32_t maxViewports; + uint32_t maxViewportDimensions [2]; + float viewportBoundsRange [2]; + uint32_t viewportSubPixelBits; + size_t minMemoryMapAlignment; + VkDeviceSize minTexelBufferOffsetAlignment; + VkDeviceSize minUniformBufferOffsetAlignment; + VkDeviceSize minStorageBufferOffsetAlignment; + int32_t minTexelOffset; + uint32_t maxTexelOffset; + int32_t minTexelGatherOffset; + uint32_t maxTexelGatherOffset; + float minInterpolationOffset; + float maxInterpolationOffset; + uint32_t subPixelInterpolationOffsetBits; + uint32_t maxFramebufferWidth; + uint32_t maxFramebufferHeight; + uint32_t maxFramebufferLayers; + VkSampleCountFlags framebufferColorSampleCounts; + VkSampleCountFlags framebufferDepthSampleCounts; + VkSampleCountFlags framebufferStencilSampleCounts; + VkSampleCountFlags framebufferNoAttachmentsSampleCounts; + uint32_t maxColorAttachments; + VkSampleCountFlags sampledImageColorSampleCounts; + VkSampleCountFlags sampledImageIntegerSampleCounts; + VkSampleCountFlags sampledImageDepthSampleCounts; + VkSampleCountFlags sampledImageStencilSampleCounts; + VkSampleCountFlags storageImageSampleCounts; + uint32_t maxSampleMaskWords; + VkBool32 timestampComputeAndGraphics; + float timestampPeriod; + uint32_t maxClipDistances; + uint32_t maxCullDistances; + uint32_t maxCombinedClipAndCullDistances; + uint32_t discreteQueuePriorities; + float pointSizeRange [2]; + float lineWidthRange [2]; + float pointSizeGranularity; + float lineWidthGranularity; + VkBool32 strictLines; + VkBool32 standardSampleLocations; + VkDeviceSize optimalBufferCopyOffsetAlignment; + VkDeviceSize optimalBufferCopyRowPitchAlignment; + VkDeviceSize nonCoherentAtomSize; +} VkPhysicalDeviceLimits; + +typedef struct VkSemaphoreCreateInfo { + VkStructureType sType; + const void * pNext; + VkSemaphoreCreateFlags flags; +} VkSemaphoreCreateInfo; + +typedef struct VkQueryPoolCreateInfo { + VkStructureType sType; + const void * pNext; + VkQueryPoolCreateFlags flags; + VkQueryType queryType; + uint32_t queryCount; + VkQueryPipelineStatisticFlags pipelineStatistics; +} VkQueryPoolCreateInfo; + +typedef struct VkFramebufferCreateInfo { + VkStructureType sType; + const void * pNext; + VkFramebufferCreateFlags flags; + VkRenderPass renderPass; + uint32_t attachmentCount; + const VkImageView * pAttachments; + uint32_t width; + uint32_t height; + uint32_t layers; +} VkFramebufferCreateInfo; + +typedef struct VkSubmitInfo { + VkStructureType sType; + const void * pNext; + uint32_t waitSemaphoreCount; + const VkSemaphore * pWaitSemaphores; + const VkPipelineStageFlags * pWaitDstStageMask; + uint32_t commandBufferCount; + const VkCommandBuffer * pCommandBuffers; + uint32_t signalSemaphoreCount; + const VkSemaphore * pSignalSemaphores; +} VkSubmitInfo; + +typedef struct VkDisplayPropertiesKHR { + VkDisplayKHR display; + const char * displayName; + VkExtent2D physicalDimensions; + VkExtent2D physicalResolution; + VkSurfaceTransformFlagsKHR supportedTransforms; + VkBool32 planeReorderPossible; + VkBool32 persistentContent; +} VkDisplayPropertiesKHR; + +typedef struct VkDisplayModeCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkDisplayModeCreateFlagsKHR flags; + VkDisplayModeParametersKHR parameters; +} VkDisplayModeCreateInfoKHR; + +typedef struct VkDisplayPlaneCapabilitiesKHR { + VkDisplayPlaneAlphaFlagsKHR supportedAlpha; + VkOffset2D minSrcPosition; + VkOffset2D maxSrcPosition; + VkExtent2D minSrcExtent; + VkExtent2D maxSrcExtent; + VkOffset2D minDstPosition; + VkOffset2D maxDstPosition; + VkExtent2D minDstExtent; + VkExtent2D maxDstExtent; +} VkDisplayPlaneCapabilitiesKHR; + +typedef struct VkDisplaySurfaceCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkDisplaySurfaceCreateFlagsKHR flags; + VkDisplayModeKHR displayMode; + uint32_t planeIndex; + uint32_t planeStackIndex; + VkSurfaceTransformFlagBitsKHR transform; + float globalAlpha; + VkDisplayPlaneAlphaFlagBitsKHR alphaMode; + VkExtent2D imageExtent; +} VkDisplaySurfaceCreateInfoKHR; + +typedef struct VkDisplayPresentInfoKHR { + VkStructureType sType; + const void * pNext; + VkRect2D srcRect; + VkRect2D dstRect; + VkBool32 persistent; +} VkDisplayPresentInfoKHR; + +typedef struct VkSurfaceCapabilitiesKHR { + uint32_t minImageCount; + uint32_t maxImageCount; + VkExtent2D currentExtent; + VkExtent2D minImageExtent; + VkExtent2D maxImageExtent; + uint32_t maxImageArrayLayers; + VkSurfaceTransformFlagsKHR supportedTransforms; + VkSurfaceTransformFlagBitsKHR currentTransform; + VkCompositeAlphaFlagsKHR supportedCompositeAlpha; + VkImageUsageFlags supportedUsageFlags; +} VkSurfaceCapabilitiesKHR; + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef struct VkAndroidSurfaceCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkAndroidSurfaceCreateFlagsKHR flags; + struct ANativeWindow * window; +} VkAndroidSurfaceCreateInfoKHR; + +#endif + +#if defined(VK_USE_PLATFORM_VI_NN) +typedef struct VkViSurfaceCreateInfoNN { + VkStructureType sType; + const void * pNext; + VkViSurfaceCreateFlagsNN flags; + void * window; +} VkViSurfaceCreateInfoNN; + +#endif + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +typedef struct VkWaylandSurfaceCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkWaylandSurfaceCreateFlagsKHR flags; + struct wl_display * display; + struct wl_surface * surface; +} VkWaylandSurfaceCreateInfoKHR; + +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkWin32SurfaceCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkWin32SurfaceCreateFlagsKHR flags; + HINSTANCE hinstance; + HWND hwnd; +} VkWin32SurfaceCreateInfoKHR; + +#endif + +#if defined(VK_USE_PLATFORM_XLIB_KHR) +typedef struct VkXlibSurfaceCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkXlibSurfaceCreateFlagsKHR flags; + Display * dpy; + Window window; +} VkXlibSurfaceCreateInfoKHR; + +#endif + +#if defined(VK_USE_PLATFORM_XCB_KHR) +typedef struct VkXcbSurfaceCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkXcbSurfaceCreateFlagsKHR flags; + xcb_connection_t * connection; + xcb_window_t window; +} VkXcbSurfaceCreateInfoKHR; + +#endif + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +typedef struct VkDirectFBSurfaceCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkDirectFBSurfaceCreateFlagsEXT flags; + IDirectFB * dfb; + IDirectFBSurface * surface; +} VkDirectFBSurfaceCreateInfoEXT; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + VkImagePipeSurfaceCreateFlagsFUCHSIA flags; + zx_handle_t imagePipeHandle; +} VkImagePipeSurfaceCreateInfoFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_GGP) +typedef struct VkStreamDescriptorSurfaceCreateInfoGGP { + VkStructureType sType; + const void * pNext; + VkStreamDescriptorSurfaceCreateFlagsGGP flags; + GgpStreamDescriptor streamDescriptor; +} VkStreamDescriptorSurfaceCreateInfoGGP; + +#endif + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +typedef struct VkScreenSurfaceCreateInfoQNX { + VkStructureType sType; + const void * pNext; + VkScreenSurfaceCreateFlagsQNX flags; + struct _screen_context * context; + struct _screen_window * window; +} VkScreenSurfaceCreateInfoQNX; + +#endif + +typedef struct VkSwapchainCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkSwapchainCreateFlagsKHR flags; + VkSurfaceKHR surface; + uint32_t minImageCount; + VkFormat imageFormat; + VkColorSpaceKHR imageColorSpace; + VkExtent2D imageExtent; + uint32_t imageArrayLayers; + VkImageUsageFlags imageUsage; + VkSharingMode imageSharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t * pQueueFamilyIndices; + VkSurfaceTransformFlagBitsKHR preTransform; + VkCompositeAlphaFlagBitsKHR compositeAlpha; + VkPresentModeKHR presentMode; + VkBool32 clipped; + VkSwapchainKHR oldSwapchain; +} VkSwapchainCreateInfoKHR; + +typedef struct VkDebugReportCallbackCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkDebugReportFlagsEXT flags; + PFN_vkDebugReportCallbackEXT pfnCallback; + void * pUserData; +} VkDebugReportCallbackCreateInfoEXT; + +typedef struct VkLayerSettingsCreateInfoEXT { + VkStructureType sType; + const void * pNext; + uint32_t settingCount; + const VkLayerSettingEXT * pSettings; +} VkLayerSettingsCreateInfoEXT; + +typedef struct VkDedicatedAllocationImageCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkBool32 dedicatedAllocation; +} VkDedicatedAllocationImageCreateInfoNV; + +typedef struct VkDedicatedAllocationBufferCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkBool32 dedicatedAllocation; +} VkDedicatedAllocationBufferCreateInfoNV; + +typedef struct VkExternalImageFormatPropertiesNV { + VkImageFormatProperties imageFormatProperties; + VkExternalMemoryFeatureFlagsNV externalMemoryFeatures; + VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes; + VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes; +} VkExternalImageFormatPropertiesNV; + +typedef struct VkExternalMemoryImageCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlagsNV handleTypes; +} VkExternalMemoryImageCreateInfoNV; + +typedef struct VkExportMemoryAllocateInfoNV { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlagsNV handleTypes; +} VkExportMemoryAllocateInfoNV; + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkImportMemoryWin32HandleInfoNV { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlagsNV handleType; + HANDLE handle; +} VkImportMemoryWin32HandleInfoNV; + +#endif + +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 deviceGeneratedCommands; +} VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV; + +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 deviceGeneratedCompute; + VkBool32 deviceGeneratedComputePipelines; + VkBool32 deviceGeneratedComputeCaptureReplay; +} VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV; + +typedef struct VkPrivateDataSlotCreateInfo { + VkStructureType sType; + const void * pNext; + VkPrivateDataSlotCreateFlags flags; +} VkPrivateDataSlotCreateInfo; + +typedef struct VkPrivateDataSlotCreateInfo VkPrivateDataSlotCreateInfoEXT; + +typedef struct VkPhysicalDevicePrivateDataFeatures { + VkStructureType sType; + void * pNext; + VkBool32 privateData; +} VkPhysicalDevicePrivateDataFeatures; + +typedef struct VkPhysicalDevicePrivateDataFeatures VkPhysicalDevicePrivateDataFeaturesEXT; + +typedef struct VkPhysicalDeviceClusterAccelerationStructureFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 clusterAccelerationStructure; +} VkPhysicalDeviceClusterAccelerationStructureFeaturesNV; + +typedef struct VkStridedDeviceAddressNV { + VkDeviceAddress startAddress; + VkDeviceSize strideInBytes; +} VkStridedDeviceAddressNV; + +typedef struct VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV { + VkStructureType sType; + void * pNext; + VkBool32 allowClusterAccelerationStructure; +} VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV; + +typedef struct VkClusterAccelerationStructureMoveObjectsInfoNV { + VkDeviceAddress srcAccelerationStructure; +} VkClusterAccelerationStructureMoveObjectsInfoNV; + +typedef struct VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV { + uint32_t clusterReferencesCount; + uint32_t clusterReferencesStride; + VkDeviceAddress clusterReferences; +} VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV; + +typedef struct VkClusterAccelerationStructureGetTemplateIndicesInfoNV { + VkDeviceAddress clusterTemplateAddress; +} VkClusterAccelerationStructureGetTemplateIndicesInfoNV; + +typedef struct VkClusterAccelerationStructureBuildTriangleClusterInfoNV { + uint32_t clusterID; + VkClusterAccelerationStructureClusterFlagsNV clusterFlags; + uint32_t triangleCount :9; + uint32_t vertexCount :9; + uint32_t positionTruncateBitCount :6; + uint32_t indexType :4; + uint32_t opacityMicromapIndexType :4; + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags; + uint16_t indexBufferStride; + uint16_t vertexBufferStride; + uint16_t geometryIndexAndFlagsBufferStride; + uint16_t opacityMicromapIndexBufferStride; + VkDeviceAddress indexBuffer; + VkDeviceAddress vertexBuffer; + VkDeviceAddress geometryIndexAndFlagsBuffer; + VkDeviceAddress opacityMicromapArray; + VkDeviceAddress opacityMicromapIndexBuffer; +} VkClusterAccelerationStructureBuildTriangleClusterInfoNV; + +typedef struct VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV { + uint32_t clusterID; + VkClusterAccelerationStructureClusterFlagsNV clusterFlags; + uint32_t triangleCount :9; + uint32_t vertexCount :9; + uint32_t positionTruncateBitCount :6; + uint32_t indexType :4; + uint32_t opacityMicromapIndexType :4; + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags; + uint16_t indexBufferStride; + uint16_t vertexBufferStride; + uint16_t geometryIndexAndFlagsBufferStride; + uint16_t opacityMicromapIndexBufferStride; + VkDeviceAddress indexBuffer; + VkDeviceAddress vertexBuffer; + VkDeviceAddress geometryIndexAndFlagsBuffer; + VkDeviceAddress opacityMicromapArray; + VkDeviceAddress opacityMicromapIndexBuffer; + VkDeviceAddress instantiationBoundingBoxLimit; +} VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV; + +typedef struct VkClusterAccelerationStructureInstantiateClusterInfoNV { + uint32_t clusterIdOffset; + uint32_t geometryIndexOffset :24; + uint32_t reserved :8; + VkDeviceAddress clusterTemplateAddress; + VkStridedDeviceAddressNV vertexBuffer; +} VkClusterAccelerationStructureInstantiateClusterInfoNV; + +typedef struct VkClusterAccelerationStructureMoveObjectsInputNV { + VkStructureType sType; + void * pNext; + VkClusterAccelerationStructureTypeNV type; + VkBool32 noMoveOverlap; + VkDeviceSize maxMovedBytes; +} VkClusterAccelerationStructureMoveObjectsInputNV; + +typedef union VkClusterAccelerationStructureOpInputNV { + VkClusterAccelerationStructureClustersBottomLevelInputNV * pClustersBottomLevel; + VkClusterAccelerationStructureTriangleClusterInputNV * pTriangleClusters; + VkClusterAccelerationStructureMoveObjectsInputNV * pMoveObjects; +} VkClusterAccelerationStructureOpInputNV; + +typedef struct VkClusterAccelerationStructureInputInfoNV { + VkStructureType sType; + void * pNext; + uint32_t maxAccelerationStructureCount; + VkBuildAccelerationStructureFlagsKHR flags; + VkClusterAccelerationStructureOpTypeNV opType; + VkClusterAccelerationStructureOpModeNV opMode; + VkClusterAccelerationStructureOpInputNV opInput; +} VkClusterAccelerationStructureInputInfoNV; + +typedef struct VkGraphicsShaderGroupCreateInfoNV { + VkStructureType sType; + const void * pNext; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo * pStages; + const VkPipelineVertexInputStateCreateInfo * pVertexInputState; + const VkPipelineTessellationStateCreateInfo * pTessellationState; +} VkGraphicsShaderGroupCreateInfoNV; + +typedef struct VkGraphicsPipelineShaderGroupsCreateInfoNV { + VkStructureType sType; + const void * pNext; + uint32_t groupCount; + const VkGraphicsShaderGroupCreateInfoNV * pGroups; + uint32_t pipelineCount; + const VkPipeline * pPipelines; +} VkGraphicsPipelineShaderGroupsCreateInfoNV; + +typedef struct VkBindIndexBufferIndirectCommandNV { + VkDeviceAddress bufferAddress; + uint32_t size; + VkIndexType indexType; +} VkBindIndexBufferIndirectCommandNV; + +typedef struct VkBindVertexBufferIndirectCommandNV { + VkDeviceAddress bufferAddress; + uint32_t size; + uint32_t stride; +} VkBindVertexBufferIndirectCommandNV; + +typedef struct VkIndirectCommandsStreamNV { + VkBuffer buffer; + VkDeviceSize offset; +} VkIndirectCommandsStreamNV; + +typedef struct VkIndirectCommandsLayoutTokenNV { + VkStructureType sType; + const void * pNext; + VkIndirectCommandsTokenTypeNV tokenType; + uint32_t stream; + uint32_t offset; + uint32_t vertexBindingUnit; + VkBool32 vertexDynamicStride; + VkPipelineLayout pushconstantPipelineLayout; + VkShaderStageFlags pushconstantShaderStageFlags; + uint32_t pushconstantOffset; + uint32_t pushconstantSize; + VkIndirectStateFlagsNV indirectStateFlags; + uint32_t indexTypeCount; + const VkIndexType * pIndexTypes; + const uint32_t * pIndexTypeValues; +} VkIndirectCommandsLayoutTokenNV; + +typedef struct VkIndirectCommandsLayoutCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkIndirectCommandsLayoutUsageFlagsNV flags; + VkPipelineBindPoint pipelineBindPoint; + uint32_t tokenCount; + const VkIndirectCommandsLayoutTokenNV * pTokens; + uint32_t streamCount; + const uint32_t * pStreamStrides; +} VkIndirectCommandsLayoutCreateInfoNV; + +typedef struct VkGeneratedCommandsInfoNV { + VkStructureType sType; + const void * pNext; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline pipeline; + VkIndirectCommandsLayoutNV indirectCommandsLayout; + uint32_t streamCount; + const VkIndirectCommandsStreamNV * pStreams; + uint32_t sequencesCount; + VkBuffer preprocessBuffer; + VkDeviceSize preprocessOffset; + VkDeviceSize preprocessSize; + VkBuffer sequencesCountBuffer; + VkDeviceSize sequencesCountOffset; + VkBuffer sequencesIndexBuffer; + VkDeviceSize sequencesIndexOffset; +} VkGeneratedCommandsInfoNV; + +typedef struct VkBindPipelineIndirectCommandNV { + VkDeviceAddress pipelineAddress; +} VkBindPipelineIndirectCommandNV; + +typedef struct VkPhysicalDeviceFeatures2 { + VkStructureType sType; + void * pNext; + VkPhysicalDeviceFeatures features; +} VkPhysicalDeviceFeatures2; + +typedef struct VkPhysicalDeviceFeatures2 VkPhysicalDeviceFeatures2KHR; + +typedef struct VkFormatProperties2 { + VkStructureType sType; + void * pNext; + VkFormatProperties formatProperties; +} VkFormatProperties2; + +typedef struct VkFormatProperties2 VkFormatProperties2KHR; + +typedef struct VkImageFormatProperties2 { + VkStructureType sType; + void * pNext; + VkImageFormatProperties imageFormatProperties; +} VkImageFormatProperties2; + +typedef struct VkImageFormatProperties2 VkImageFormatProperties2KHR; + +typedef struct VkPhysicalDeviceImageFormatInfo2 { + VkStructureType sType; + const void * pNext; + VkFormat format; + VkImageType type; + VkImageTiling tiling; + VkImageUsageFlags usage; + VkImageCreateFlags flags; +} VkPhysicalDeviceImageFormatInfo2; + +typedef struct VkPhysicalDeviceImageFormatInfo2 VkPhysicalDeviceImageFormatInfo2KHR; + +typedef struct VkQueueFamilyProperties2 { + VkStructureType sType; + void * pNext; + VkQueueFamilyProperties queueFamilyProperties; +} VkQueueFamilyProperties2; + +typedef struct VkQueueFamilyProperties2 VkQueueFamilyProperties2KHR; + +typedef struct VkSparseImageFormatProperties2 { + VkStructureType sType; + void * pNext; + VkSparseImageFormatProperties properties; +} VkSparseImageFormatProperties2; + +typedef struct VkSparseImageFormatProperties2 VkSparseImageFormatProperties2KHR; + +typedef struct VkPhysicalDeviceSparseImageFormatInfo2 { + VkStructureType sType; + const void * pNext; + VkFormat format; + VkImageType type; + VkSampleCountFlagBits samples; + VkImageUsageFlags usage; + VkImageTiling tiling; +} VkPhysicalDeviceSparseImageFormatInfo2; + +typedef struct VkPhysicalDeviceSparseImageFormatInfo2 VkPhysicalDeviceSparseImageFormatInfo2KHR; + +typedef struct VkPresentRegionKHR { + uint32_t rectangleCount; + const VkRectLayerKHR * pRectangles; +} VkPresentRegionKHR; + +typedef struct VkPhysicalDeviceVariablePointersFeatures { + VkStructureType sType; + void * pNext; + VkBool32 variablePointersStorageBuffer; + VkBool32 variablePointers; +} VkPhysicalDeviceVariablePointersFeatures; + +typedef struct VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointersFeaturesKHR; + +typedef struct VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeaturesKHR; + +typedef struct VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeatures; + +typedef struct VkExternalMemoryProperties { + VkExternalMemoryFeatureFlags externalMemoryFeatures; + VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes; + VkExternalMemoryHandleTypeFlags compatibleHandleTypes; +} VkExternalMemoryProperties; + +typedef struct VkExternalMemoryProperties VkExternalMemoryPropertiesKHR; + +typedef struct VkExternalImageFormatProperties { + VkStructureType sType; + void * pNext; + VkExternalMemoryProperties externalMemoryProperties; +} VkExternalImageFormatProperties; + +typedef struct VkExternalImageFormatProperties VkExternalImageFormatPropertiesKHR; + +typedef struct VkPhysicalDeviceExternalBufferInfo { + VkStructureType sType; + const void * pNext; + VkBufferCreateFlags flags; + VkBufferUsageFlags usage; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalBufferInfo; + +typedef struct VkPhysicalDeviceExternalBufferInfo VkPhysicalDeviceExternalBufferInfoKHR; + +typedef struct VkExternalBufferProperties { + VkStructureType sType; + void * pNext; + VkExternalMemoryProperties externalMemoryProperties; +} VkExternalBufferProperties; + +typedef struct VkExternalBufferProperties VkExternalBufferPropertiesKHR; + +typedef struct VkPhysicalDeviceIDProperties { + VkStructureType sType; + void * pNext; + uint8_t deviceUUID [ VK_UUID_SIZE ]; + uint8_t driverUUID [ VK_UUID_SIZE ]; + uint8_t deviceLUID [ VK_LUID_SIZE ]; + uint32_t deviceNodeMask; + VkBool32 deviceLUIDValid; +} VkPhysicalDeviceIDProperties; + +typedef struct VkPhysicalDeviceIDProperties VkPhysicalDeviceIDPropertiesKHR; + +typedef struct VkExternalMemoryImageCreateInfo { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlags handleTypes; +} VkExternalMemoryImageCreateInfo; + +typedef struct VkExternalMemoryImageCreateInfo VkExternalMemoryImageCreateInfoKHR; + +typedef struct VkExternalMemoryBufferCreateInfo { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlags handleTypes; +} VkExternalMemoryBufferCreateInfo; + +typedef struct VkExternalMemoryBufferCreateInfo VkExternalMemoryBufferCreateInfoKHR; + +typedef struct VkExportMemoryAllocateInfo { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlags handleTypes; +} VkExportMemoryAllocateInfo; + +typedef struct VkExportMemoryAllocateInfo VkExportMemoryAllocateInfoKHR; + +typedef struct VkExternalSemaphoreProperties { + VkStructureType sType; + void * pNext; + VkExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes; + VkExternalSemaphoreHandleTypeFlags compatibleHandleTypes; + VkExternalSemaphoreFeatureFlags externalSemaphoreFeatures; +} VkExternalSemaphoreProperties; + +typedef struct VkExternalSemaphoreProperties VkExternalSemaphorePropertiesKHR; + +typedef struct VkExportSemaphoreCreateInfo { + VkStructureType sType; + const void * pNext; + VkExternalSemaphoreHandleTypeFlags handleTypes; +} VkExportSemaphoreCreateInfo; + +typedef struct VkExportSemaphoreCreateInfo VkExportSemaphoreCreateInfoKHR; + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkImportSemaphoreWin32HandleInfoKHR { + VkStructureType sType; + const void * pNext; + VkSemaphore semaphore; + VkSemaphoreImportFlags flags; + VkExternalSemaphoreHandleTypeFlagBits handleType; + HANDLE handle; + LPCWSTR name; +} VkImportSemaphoreWin32HandleInfoKHR; + +#endif + +typedef struct VkImportSemaphoreFdInfoKHR { + VkStructureType sType; + const void * pNext; + VkSemaphore semaphore; + VkSemaphoreImportFlags flags; + VkExternalSemaphoreHandleTypeFlagBits handleType; + int fd; +} VkImportSemaphoreFdInfoKHR; + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkImportSemaphoreZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + VkSemaphore semaphore; + VkSemaphoreImportFlags flags; + VkExternalSemaphoreHandleTypeFlagBits handleType; + zx_handle_t zirconHandle; +} VkImportSemaphoreZirconHandleInfoFUCHSIA; + +#endif + +typedef struct VkExternalFenceProperties { + VkStructureType sType; + void * pNext; + VkExternalFenceHandleTypeFlags exportFromImportedHandleTypes; + VkExternalFenceHandleTypeFlags compatibleHandleTypes; + VkExternalFenceFeatureFlags externalFenceFeatures; +} VkExternalFenceProperties; + +typedef struct VkExternalFenceProperties VkExternalFencePropertiesKHR; + +typedef struct VkExportFenceCreateInfo { + VkStructureType sType; + const void * pNext; + VkExternalFenceHandleTypeFlags handleTypes; +} VkExportFenceCreateInfo; + +typedef struct VkExportFenceCreateInfo VkExportFenceCreateInfoKHR; + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkImportFenceWin32HandleInfoKHR { + VkStructureType sType; + const void * pNext; + VkFence fence; + VkFenceImportFlags flags; + VkExternalFenceHandleTypeFlagBits handleType; + HANDLE handle; + LPCWSTR name; +} VkImportFenceWin32HandleInfoKHR; + +#endif + +typedef struct VkImportFenceFdInfoKHR { + VkStructureType sType; + const void * pNext; + VkFence fence; + VkFenceImportFlags flags; + VkExternalFenceHandleTypeFlagBits handleType; + int fd; +} VkImportFenceFdInfoKHR; + +typedef struct VkPhysicalDeviceMultiviewFeatures { + VkStructureType sType; + void * pNext; + VkBool32 multiview; + VkBool32 multiviewGeometryShader; + VkBool32 multiviewTessellationShader; +} VkPhysicalDeviceMultiviewFeatures; + +typedef struct VkPhysicalDeviceMultiviewFeatures VkPhysicalDeviceMultiviewFeaturesKHR; + +typedef struct VkSurfaceCapabilities2EXT { + VkStructureType sType; + void * pNext; + uint32_t minImageCount; + uint32_t maxImageCount; + VkExtent2D currentExtent; + VkExtent2D minImageExtent; + VkExtent2D maxImageExtent; + uint32_t maxImageArrayLayers; + VkSurfaceTransformFlagsKHR supportedTransforms; + VkSurfaceTransformFlagBitsKHR currentTransform; + VkCompositeAlphaFlagsKHR supportedCompositeAlpha; + VkImageUsageFlags supportedUsageFlags; + VkSurfaceCounterFlagsEXT supportedSurfaceCounters; +} VkSurfaceCapabilities2EXT; + +typedef struct VkSwapchainCounterCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkSurfaceCounterFlagsEXT surfaceCounters; +} VkSwapchainCounterCreateInfoEXT; + +typedef struct VkPhysicalDeviceGroupProperties { + VkStructureType sType; + void * pNext; + uint32_t physicalDeviceCount; + VkPhysicalDevice physicalDevices [ VK_MAX_DEVICE_GROUP_SIZE ]; + VkBool32 subsetAllocation; +} VkPhysicalDeviceGroupProperties; + +typedef struct VkPhysicalDeviceGroupProperties VkPhysicalDeviceGroupPropertiesKHR; + +typedef struct VkMemoryAllocateFlagsInfo { + VkStructureType sType; + const void * pNext; + VkMemoryAllocateFlags flags; + uint32_t deviceMask; +} VkMemoryAllocateFlagsInfo; + +typedef struct VkMemoryAllocateFlagsInfo VkMemoryAllocateFlagsInfoKHR; + +typedef struct VkBindBufferMemoryInfo { + VkStructureType sType; + const void * pNext; + VkBuffer buffer; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindBufferMemoryInfo; + +typedef struct VkBindBufferMemoryInfo VkBindBufferMemoryInfoKHR; + +typedef struct VkBindImageMemoryInfo { + VkStructureType sType; + const void * pNext; + VkImage image; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindImageMemoryInfo; + +typedef struct VkBindImageMemoryInfo VkBindImageMemoryInfoKHR; + +typedef struct VkDeviceGroupPresentCapabilitiesKHR { + VkStructureType sType; + void * pNext; + uint32_t presentMask [ VK_MAX_DEVICE_GROUP_SIZE ]; + VkDeviceGroupPresentModeFlagsKHR modes; +} VkDeviceGroupPresentCapabilitiesKHR; + +typedef struct VkDeviceGroupSwapchainCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkDeviceGroupPresentModeFlagsKHR modes; +} VkDeviceGroupSwapchainCreateInfoKHR; + +typedef struct VkDescriptorUpdateTemplateCreateInfo { + VkStructureType sType; + const void * pNext; + VkDescriptorUpdateTemplateCreateFlags flags; + uint32_t descriptorUpdateEntryCount; + const VkDescriptorUpdateTemplateEntry * pDescriptorUpdateEntries; + VkDescriptorUpdateTemplateType templateType; + VkDescriptorSetLayout descriptorSetLayout; + VkPipelineBindPoint pipelineBindPoint; + VkPipelineLayout pipelineLayout; + uint32_t set; +} VkDescriptorUpdateTemplateCreateInfo; + +typedef struct VkDescriptorUpdateTemplateCreateInfo VkDescriptorUpdateTemplateCreateInfoKHR; + +typedef struct VkPhysicalDevicePresentIdFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 presentId; +} VkPhysicalDevicePresentIdFeaturesKHR; + +typedef struct VkPhysicalDevicePresentId2FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 presentId2; +} VkPhysicalDevicePresentId2FeaturesKHR; + +typedef struct VkPhysicalDevicePresentWaitFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 presentWait; +} VkPhysicalDevicePresentWaitFeaturesKHR; + +typedef struct VkPhysicalDevicePresentWait2FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 presentWait2; +} VkPhysicalDevicePresentWait2FeaturesKHR; + +typedef struct VkDisplayNativeHdrSurfaceCapabilitiesAMD { + VkStructureType sType; + void * pNext; + VkBool32 localDimmingSupport; +} VkDisplayNativeHdrSurfaceCapabilitiesAMD; + +typedef struct VkSwapchainDisplayNativeHdrCreateInfoAMD { + VkStructureType sType; + const void * pNext; + VkBool32 localDimmingEnable; +} VkSwapchainDisplayNativeHdrCreateInfoAMD; + +typedef struct VkPresentTimesInfoGOOGLE { + VkStructureType sType; + const void * pNext; + uint32_t swapchainCount; + const VkPresentTimeGOOGLE * pTimes; +} VkPresentTimesInfoGOOGLE; + +#if defined(VK_USE_PLATFORM_IOS_MVK) +typedef struct VkIOSSurfaceCreateInfoMVK { + VkStructureType sType; + const void * pNext; + VkIOSSurfaceCreateFlagsMVK flags; + const void * pView; +} VkIOSSurfaceCreateInfoMVK; + +#endif + +#if defined(VK_USE_PLATFORM_MACOS_MVK) +typedef struct VkMacOSSurfaceCreateInfoMVK { + VkStructureType sType; + const void * pNext; + VkMacOSSurfaceCreateFlagsMVK flags; + const void * pView; +} VkMacOSSurfaceCreateInfoMVK; + +#endif + +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef struct VkMetalSurfaceCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkMetalSurfaceCreateFlagsEXT flags; + const CAMetalLayer * pLayer; +} VkMetalSurfaceCreateInfoEXT; + +#endif + +typedef struct VkPipelineViewportWScalingStateCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkBool32 viewportWScalingEnable; + uint32_t viewportCount; + const VkViewportWScalingNV * pViewportWScalings; +} VkPipelineViewportWScalingStateCreateInfoNV; + +typedef struct VkPipelineViewportSwizzleStateCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkPipelineViewportSwizzleStateCreateFlagsNV flags; + uint32_t viewportCount; + const VkViewportSwizzleNV * pViewportSwizzles; +} VkPipelineViewportSwizzleStateCreateInfoNV; + +typedef struct VkPipelineDiscardRectangleStateCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkPipelineDiscardRectangleStateCreateFlagsEXT flags; + VkDiscardRectangleModeEXT discardRectangleMode; + uint32_t discardRectangleCount; + const VkRect2D * pDiscardRectangles; +} VkPipelineDiscardRectangleStateCreateInfoEXT; + +typedef struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX { + VkStructureType sType; + void * pNext; + VkBool32 perViewPositionAllComponents; +} VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; + +typedef struct VkInputAttachmentAspectReference { + uint32_t subpass; + uint32_t inputAttachmentIndex; + VkImageAspectFlags aspectMask; +} VkInputAttachmentAspectReference; + +typedef struct VkInputAttachmentAspectReference VkInputAttachmentAspectReferenceKHR; + +typedef struct VkRenderPassInputAttachmentAspectCreateInfo { + VkStructureType sType; + const void * pNext; + uint32_t aspectReferenceCount; + const VkInputAttachmentAspectReference * pAspectReferences; +} VkRenderPassInputAttachmentAspectCreateInfo; + +typedef struct VkRenderPassInputAttachmentAspectCreateInfo VkRenderPassInputAttachmentAspectCreateInfoKHR; + +typedef struct VkSurfaceCapabilities2KHR { + VkStructureType sType; + void * pNext; + VkSurfaceCapabilitiesKHR surfaceCapabilities; +} VkSurfaceCapabilities2KHR; + +typedef struct VkDisplayProperties2KHR { + VkStructureType sType; + void * pNext; + VkDisplayPropertiesKHR displayProperties; +} VkDisplayProperties2KHR; + +typedef struct VkDisplayModeStereoPropertiesNV { + VkStructureType sType; + const void * pNext; + VkBool32 hdmi3DSupported; +} VkDisplayModeStereoPropertiesNV; + +typedef struct VkDisplayPlaneCapabilities2KHR { + VkStructureType sType; + void * pNext; + VkDisplayPlaneCapabilitiesKHR capabilities; +} VkDisplayPlaneCapabilities2KHR; + +typedef struct VkSharedPresentSurfaceCapabilitiesKHR { + VkStructureType sType; + void * pNext; + VkImageUsageFlags sharedPresentSupportedUsageFlags; +} VkSharedPresentSurfaceCapabilitiesKHR; + +typedef struct VkPhysicalDevice16BitStorageFeatures { + VkStructureType sType; + void * pNext; + VkBool32 storageBuffer16BitAccess; + VkBool32 uniformAndStorageBuffer16BitAccess; + VkBool32 storagePushConstant16; + VkBool32 storageInputOutput16; +} VkPhysicalDevice16BitStorageFeatures; + +typedef struct VkPhysicalDevice16BitStorageFeatures VkPhysicalDevice16BitStorageFeaturesKHR; + +typedef struct VkPhysicalDeviceSubgroupProperties { + VkStructureType sType; + void * pNext; + uint32_t subgroupSize; + VkShaderStageFlags supportedStages; + VkSubgroupFeatureFlags supportedOperations; + VkBool32 quadOperationsInAllStages; +} VkPhysicalDeviceSubgroupProperties; + +typedef struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures { + VkStructureType sType; + void * pNext; + VkBool32 shaderSubgroupExtendedTypes; +} VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures; + +typedef struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR; + +typedef struct VkDeviceBufferMemoryRequirements { + VkStructureType sType; + const void * pNext; + const VkBufferCreateInfo * pCreateInfo; +} VkDeviceBufferMemoryRequirements; + +typedef struct VkDeviceBufferMemoryRequirements VkDeviceBufferMemoryRequirementsKHR; + +typedef struct VkDeviceImageMemoryRequirements { + VkStructureType sType; + const void * pNext; + const VkImageCreateInfo * pCreateInfo; + VkImageAspectFlagBits planeAspect; +} VkDeviceImageMemoryRequirements; + +typedef struct VkDeviceImageMemoryRequirements VkDeviceImageMemoryRequirementsKHR; + +typedef struct VkMemoryRequirements2 { + VkStructureType sType; + void * pNext; + VkMemoryRequirements memoryRequirements; +} VkMemoryRequirements2; + +typedef struct VkMemoryRequirements2 VkMemoryRequirements2KHR; + +typedef struct VkSparseImageMemoryRequirements2 { + VkStructureType sType; + void * pNext; + VkSparseImageMemoryRequirements memoryRequirements; +} VkSparseImageMemoryRequirements2; + +typedef struct VkSparseImageMemoryRequirements2 VkSparseImageMemoryRequirements2KHR; + +typedef struct VkMemoryDedicatedRequirements { + VkStructureType sType; + void * pNext; + VkBool32 prefersDedicatedAllocation; + VkBool32 requiresDedicatedAllocation; +} VkMemoryDedicatedRequirements; + +typedef struct VkMemoryDedicatedRequirements VkMemoryDedicatedRequirementsKHR; + +typedef struct VkImageViewUsageCreateInfo { + VkStructureType sType; + const void * pNext; + VkImageUsageFlags usage; +} VkImageViewUsageCreateInfo; + +typedef struct VkImageViewUsageCreateInfo VkImageViewUsageCreateInfoKHR; + +typedef struct VkSamplerYcbcrConversionCreateInfo { + VkStructureType sType; + const void * pNext; + VkFormat format; + VkSamplerYcbcrModelConversion ycbcrModel; + VkSamplerYcbcrRange ycbcrRange; + VkComponentMapping components; + VkChromaLocation xChromaOffset; + VkChromaLocation yChromaOffset; + VkFilter chromaFilter; + VkBool32 forceExplicitReconstruction; +} VkSamplerYcbcrConversionCreateInfo; + +typedef struct VkSamplerYcbcrConversionCreateInfo VkSamplerYcbcrConversionCreateInfoKHR; + +typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures { + VkStructureType sType; + void * pNext; + VkBool32 samplerYcbcrConversion; +} VkPhysicalDeviceSamplerYcbcrConversionFeatures; + +typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR; + +typedef struct VkTextureLODGatherFormatPropertiesAMD { + VkStructureType sType; + void * pNext; + VkBool32 supportsTextureGatherLODBiasAMD; +} VkTextureLODGatherFormatPropertiesAMD; + +typedef struct VkConditionalRenderingBeginInfoEXT { + VkStructureType sType; + const void * pNext; + VkBuffer buffer; + VkDeviceSize offset; + VkConditionalRenderingFlagsEXT flags; +} VkConditionalRenderingBeginInfoEXT; + +typedef struct VkProtectedSubmitInfo { + VkStructureType sType; + const void * pNext; + VkBool32 protectedSubmit; +} VkProtectedSubmitInfo; + +typedef struct VkPhysicalDeviceProtectedMemoryFeatures { + VkStructureType sType; + void * pNext; + VkBool32 protectedMemory; +} VkPhysicalDeviceProtectedMemoryFeatures; + +typedef struct VkPhysicalDeviceProtectedMemoryProperties { + VkStructureType sType; + void * pNext; + VkBool32 protectedNoFault; +} VkPhysicalDeviceProtectedMemoryProperties; + +typedef struct VkDeviceQueueInfo2 { + VkStructureType sType; + const void * pNext; + VkDeviceQueueCreateFlags flags; + uint32_t queueFamilyIndex; + uint32_t queueIndex; +} VkDeviceQueueInfo2; + +typedef struct VkPipelineCoverageToColorStateCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkPipelineCoverageToColorStateCreateFlagsNV flags; + VkBool32 coverageToColorEnable; + uint32_t coverageToColorLocation; +} VkPipelineCoverageToColorStateCreateInfoNV; + +typedef struct VkPhysicalDeviceSamplerFilterMinmaxProperties { + VkStructureType sType; + void * pNext; + VkBool32 filterMinmaxSingleComponentFormats; + VkBool32 filterMinmaxImageComponentMapping; +} VkPhysicalDeviceSamplerFilterMinmaxProperties; + +typedef struct VkPhysicalDeviceSamplerFilterMinmaxProperties VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT; + +typedef struct VkPipelineSampleLocationsStateCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkBool32 sampleLocationsEnable; + VkSampleLocationsInfoEXT sampleLocationsInfo; +} VkPipelineSampleLocationsStateCreateInfoEXT; + +typedef struct VkPhysicalDeviceSampleLocationsPropertiesEXT { + VkStructureType sType; + void * pNext; + VkSampleCountFlags sampleLocationSampleCounts; + VkExtent2D maxSampleLocationGridSize; + float sampleLocationCoordinateRange [2]; + uint32_t sampleLocationSubPixelBits; + VkBool32 variableSampleLocations; +} VkPhysicalDeviceSampleLocationsPropertiesEXT; + +typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 advancedBlendCoherentOperations; +} VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT; + +typedef struct VkPhysicalDeviceMultiDrawFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 multiDraw; +} VkPhysicalDeviceMultiDrawFeaturesEXT; + +typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t advancedBlendMaxColorAttachments; + VkBool32 advancedBlendIndependentBlend; + VkBool32 advancedBlendNonPremultipliedSrcColor; + VkBool32 advancedBlendNonPremultipliedDstColor; + VkBool32 advancedBlendCorrelatedOverlap; + VkBool32 advancedBlendAllOperations; +} VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT; + +typedef struct VkPipelineColorBlendAdvancedStateCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkBool32 srcPremultiplied; + VkBool32 dstPremultiplied; + VkBlendOverlapEXT blendOverlap; +} VkPipelineColorBlendAdvancedStateCreateInfoEXT; + +typedef struct VkPhysicalDeviceInlineUniformBlockFeatures { + VkStructureType sType; + void * pNext; + VkBool32 inlineUniformBlock; + VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind; +} VkPhysicalDeviceInlineUniformBlockFeatures; + +typedef struct VkPhysicalDeviceInlineUniformBlockFeatures VkPhysicalDeviceInlineUniformBlockFeaturesEXT; + +typedef struct VkPipelineCoverageModulationStateCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkPipelineCoverageModulationStateCreateFlagsNV flags; + VkCoverageModulationModeNV coverageModulationMode; + VkBool32 coverageModulationTableEnable; + uint32_t coverageModulationTableCount; + const float * pCoverageModulationTable; +} VkPipelineCoverageModulationStateCreateInfoNV; + +typedef struct VkValidationCacheCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkValidationCacheCreateFlagsEXT flags; + size_t initialDataSize; + const void * pInitialData; +} VkValidationCacheCreateInfoEXT; + +typedef struct VkPhysicalDeviceMaintenance3Properties { + VkStructureType sType; + void * pNext; + uint32_t maxPerSetDescriptors; + VkDeviceSize maxMemoryAllocationSize; +} VkPhysicalDeviceMaintenance3Properties; + +typedef struct VkPhysicalDeviceMaintenance3Properties VkPhysicalDeviceMaintenance3PropertiesKHR; + +typedef struct VkPhysicalDeviceMaintenance4Features { + VkStructureType sType; + void * pNext; + VkBool32 maintenance4; +} VkPhysicalDeviceMaintenance4Features; + +typedef struct VkPhysicalDeviceMaintenance4Features VkPhysicalDeviceMaintenance4FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance4Properties { + VkStructureType sType; + void * pNext; + VkDeviceSize maxBufferSize; +} VkPhysicalDeviceMaintenance4Properties; + +typedef struct VkPhysicalDeviceMaintenance4Properties VkPhysicalDeviceMaintenance4PropertiesKHR; + +typedef struct VkPhysicalDeviceMaintenance5Features { + VkStructureType sType; + void * pNext; + VkBool32 maintenance5; +} VkPhysicalDeviceMaintenance5Features; + +typedef struct VkPhysicalDeviceMaintenance5Features VkPhysicalDeviceMaintenance5FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance5Properties { + VkStructureType sType; + void * pNext; + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting; + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting; + VkBool32 depthStencilSwizzleOneSupport; + VkBool32 polygonModePointSize; + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram; + VkBool32 nonStrictWideLinesUseParallelogram; +} VkPhysicalDeviceMaintenance5Properties; + +typedef struct VkPhysicalDeviceMaintenance5Properties VkPhysicalDeviceMaintenance5PropertiesKHR; + +typedef struct VkPhysicalDeviceMaintenance6Features { + VkStructureType sType; + void * pNext; + VkBool32 maintenance6; +} VkPhysicalDeviceMaintenance6Features; + +typedef struct VkPhysicalDeviceMaintenance6Features VkPhysicalDeviceMaintenance6FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance6Properties { + VkStructureType sType; + void * pNext; + VkBool32 blockTexelViewCompatibleMultipleLayers; + uint32_t maxCombinedImageSamplerDescriptorCount; + VkBool32 fragmentShadingRateClampCombinerInputs; +} VkPhysicalDeviceMaintenance6Properties; + +typedef struct VkPhysicalDeviceMaintenance6Properties VkPhysicalDeviceMaintenance6PropertiesKHR; + +typedef struct VkPhysicalDeviceMaintenance7FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 maintenance7; +} VkPhysicalDeviceMaintenance7FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance7PropertiesKHR { + VkStructureType sType; + void * pNext; + VkBool32 robustFragmentShadingRateAttachmentAccess; + VkBool32 separateDepthStencilAttachmentAccess; + uint32_t maxDescriptorSetTotalUniformBuffersDynamic; + uint32_t maxDescriptorSetTotalStorageBuffersDynamic; + uint32_t maxDescriptorSetTotalBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindTotalBuffersDynamic; +} VkPhysicalDeviceMaintenance7PropertiesKHR; + +typedef struct VkPhysicalDeviceLayeredApiPropertiesListKHR { + VkStructureType sType; + void * pNext; + uint32_t layeredApiCount; + VkPhysicalDeviceLayeredApiPropertiesKHR * pLayeredApis; +} VkPhysicalDeviceLayeredApiPropertiesListKHR; + +typedef struct VkPhysicalDeviceMaintenance8FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 maintenance8; +} VkPhysicalDeviceMaintenance8FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance9FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 maintenance9; +} VkPhysicalDeviceMaintenance9FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance9PropertiesKHR { + VkStructureType sType; + void * pNext; + VkBool32 image2DViewOf3DSparse; + VkDefaultVertexAttributeValueKHR defaultVertexAttributeValue; +} VkPhysicalDeviceMaintenance9PropertiesKHR; + +typedef struct VkDescriptorSetLayoutSupport { + VkStructureType sType; + void * pNext; + VkBool32 supported; +} VkDescriptorSetLayoutSupport; + +typedef struct VkDescriptorSetLayoutSupport VkDescriptorSetLayoutSupportKHR; + +typedef struct VkPhysicalDeviceShaderDrawParametersFeatures { + VkStructureType sType; + void * pNext; + VkBool32 shaderDrawParameters; +} VkPhysicalDeviceShaderDrawParametersFeatures; + +typedef struct VkPhysicalDeviceShaderDrawParametersFeatures VkPhysicalDeviceShaderDrawParameterFeatures; + +typedef struct VkPhysicalDeviceShaderFloat16Int8Features { + VkStructureType sType; + void * pNext; + VkBool32 shaderFloat16; + VkBool32 shaderInt8; +} VkPhysicalDeviceShaderFloat16Int8Features; + +typedef struct VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceShaderFloat16Int8FeaturesKHR; + +typedef struct VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceFloat16Int8FeaturesKHR; + +typedef struct VkPhysicalDeviceFloatControlsProperties { + VkStructureType sType; + void * pNext; + VkShaderFloatControlsIndependence denormBehaviorIndependence; + VkShaderFloatControlsIndependence roundingModeIndependence; + VkBool32 shaderSignedZeroInfNanPreserveFloat16; + VkBool32 shaderSignedZeroInfNanPreserveFloat32; + VkBool32 shaderSignedZeroInfNanPreserveFloat64; + VkBool32 shaderDenormPreserveFloat16; + VkBool32 shaderDenormPreserveFloat32; + VkBool32 shaderDenormPreserveFloat64; + VkBool32 shaderDenormFlushToZeroFloat16; + VkBool32 shaderDenormFlushToZeroFloat32; + VkBool32 shaderDenormFlushToZeroFloat64; + VkBool32 shaderRoundingModeRTEFloat16; + VkBool32 shaderRoundingModeRTEFloat32; + VkBool32 shaderRoundingModeRTEFloat64; + VkBool32 shaderRoundingModeRTZFloat16; + VkBool32 shaderRoundingModeRTZFloat32; + VkBool32 shaderRoundingModeRTZFloat64; +} VkPhysicalDeviceFloatControlsProperties; + +typedef struct VkPhysicalDeviceFloatControlsProperties VkPhysicalDeviceFloatControlsPropertiesKHR; + +typedef struct VkPhysicalDeviceHostQueryResetFeatures { + VkStructureType sType; + void * pNext; + VkBool32 hostQueryReset; +} VkPhysicalDeviceHostQueryResetFeatures; + +typedef struct VkPhysicalDeviceHostQueryResetFeatures VkPhysicalDeviceHostQueryResetFeaturesEXT; + +typedef struct VkShaderStatisticsInfoAMD { + VkShaderStageFlags shaderStageMask; + VkShaderResourceUsageAMD resourceUsage; + uint32_t numPhysicalVgprs; + uint32_t numPhysicalSgprs; + uint32_t numAvailableVgprs; + uint32_t numAvailableSgprs; + uint32_t computeWorkGroupSize [3]; +} VkShaderStatisticsInfoAMD; + +typedef struct VkPhysicalDeviceGlobalPriorityQueryFeatures { + VkStructureType sType; + void * pNext; + VkBool32 globalPriorityQuery; +} VkPhysicalDeviceGlobalPriorityQueryFeatures; + +typedef struct VkPhysicalDeviceGlobalPriorityQueryFeatures VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR; + +typedef struct VkPhysicalDeviceGlobalPriorityQueryFeatures VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT; + +typedef struct VkDebugUtilsMessengerCallbackDataEXT { + VkStructureType sType; + const void * pNext; + VkDebugUtilsMessengerCallbackDataFlagsEXT flags; + const char * pMessageIdName; + int32_t messageIdNumber; + const char * pMessage; + uint32_t queueLabelCount; + const VkDebugUtilsLabelEXT * pQueueLabels; + uint32_t cmdBufLabelCount; + const VkDebugUtilsLabelEXT * pCmdBufLabels; + uint32_t objectCount; + const VkDebugUtilsObjectNameInfoEXT * pObjects; +} VkDebugUtilsMessengerCallbackDataEXT; + +typedef struct VkPhysicalDeviceDeviceMemoryReportFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 deviceMemoryReport; +} VkPhysicalDeviceDeviceMemoryReportFeaturesEXT; + +typedef struct VkDeviceMemoryReportCallbackDataEXT { + VkStructureType sType; + void * pNext; + VkDeviceMemoryReportFlagsEXT flags; + VkDeviceMemoryReportEventTypeEXT type; + uint64_t memoryObjectId; + VkDeviceSize size; + VkObjectType objectType; + uint64_t objectHandle; + uint32_t heapIndex; +} VkDeviceMemoryReportCallbackDataEXT; + +typedef struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT { + VkStructureType sType; + void * pNext; + VkDeviceSize minImportedHostPointerAlignment; +} VkPhysicalDeviceExternalMemoryHostPropertiesEXT; + +typedef struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT { + VkStructureType sType; + void * pNext; + float primitiveOverestimationSize; + float maxExtraPrimitiveOverestimationSize; + float extraPrimitiveOverestimationSizeGranularity; + VkBool32 primitiveUnderestimation; + VkBool32 conservativePointAndLineRasterization; + VkBool32 degenerateTrianglesRasterized; + VkBool32 degenerateLinesRasterized; + VkBool32 fullyCoveredFragmentShaderInputVariable; + VkBool32 conservativeRasterizationPostDepthCoverage; +} VkPhysicalDeviceConservativeRasterizationPropertiesEXT; + +typedef struct VkPhysicalDeviceShaderCoreProperties2AMD { + VkStructureType sType; + void * pNext; + VkShaderCorePropertiesFlagsAMD shaderCoreFeatures; + uint32_t activeComputeUnitCount; +} VkPhysicalDeviceShaderCoreProperties2AMD; + +typedef struct VkPipelineRasterizationConservativeStateCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkPipelineRasterizationConservativeStateCreateFlagsEXT flags; + VkConservativeRasterizationModeEXT conservativeRasterizationMode; + float extraPrimitiveOverestimationSize; +} VkPipelineRasterizationConservativeStateCreateInfoEXT; + +typedef struct VkPhysicalDeviceDescriptorIndexingFeatures { + VkStructureType sType; + void * pNext; + VkBool32 shaderInputAttachmentArrayDynamicIndexing; + VkBool32 shaderUniformTexelBufferArrayDynamicIndexing; + VkBool32 shaderStorageTexelBufferArrayDynamicIndexing; + VkBool32 shaderUniformBufferArrayNonUniformIndexing; + VkBool32 shaderSampledImageArrayNonUniformIndexing; + VkBool32 shaderStorageBufferArrayNonUniformIndexing; + VkBool32 shaderStorageImageArrayNonUniformIndexing; + VkBool32 shaderInputAttachmentArrayNonUniformIndexing; + VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing; + VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing; + VkBool32 descriptorBindingUniformBufferUpdateAfterBind; + VkBool32 descriptorBindingSampledImageUpdateAfterBind; + VkBool32 descriptorBindingStorageImageUpdateAfterBind; + VkBool32 descriptorBindingStorageBufferUpdateAfterBind; + VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind; + VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind; + VkBool32 descriptorBindingUpdateUnusedWhilePending; + VkBool32 descriptorBindingPartiallyBound; + VkBool32 descriptorBindingVariableDescriptorCount; + VkBool32 runtimeDescriptorArray; +} VkPhysicalDeviceDescriptorIndexingFeatures; + +typedef struct VkPhysicalDeviceDescriptorIndexingFeatures VkPhysicalDeviceDescriptorIndexingFeaturesEXT; + +typedef struct VkPhysicalDeviceDescriptorIndexingProperties { + VkStructureType sType; + void * pNext; + uint32_t maxUpdateAfterBindDescriptorsInAllPools; + VkBool32 shaderUniformBufferArrayNonUniformIndexingNative; + VkBool32 shaderSampledImageArrayNonUniformIndexingNative; + VkBool32 shaderStorageBufferArrayNonUniformIndexingNative; + VkBool32 shaderStorageImageArrayNonUniformIndexingNative; + VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative; + VkBool32 robustBufferAccessUpdateAfterBind; + VkBool32 quadDivergentImplicitLod; + uint32_t maxPerStageDescriptorUpdateAfterBindSamplers; + uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers; + uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages; + uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments; + uint32_t maxPerStageUpdateAfterBindResources; + uint32_t maxDescriptorSetUpdateAfterBindSamplers; + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers; + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers; + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindSampledImages; + uint32_t maxDescriptorSetUpdateAfterBindStorageImages; + uint32_t maxDescriptorSetUpdateAfterBindInputAttachments; +} VkPhysicalDeviceDescriptorIndexingProperties; + +typedef struct VkPhysicalDeviceDescriptorIndexingProperties VkPhysicalDeviceDescriptorIndexingPropertiesEXT; + +typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfo { + VkStructureType sType; + const void * pNext; + uint32_t bindingCount; + const VkDescriptorBindingFlags * pBindingFlags; +} VkDescriptorSetLayoutBindingFlagsCreateInfo; + +typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfo VkDescriptorSetLayoutBindingFlagsCreateInfoEXT; + +typedef struct VkAttachmentDescription2 { + VkStructureType sType; + const void * pNext; + VkAttachmentDescriptionFlags flags; + VkFormat format; + VkSampleCountFlagBits samples; + VkAttachmentLoadOp loadOp; + VkAttachmentStoreOp storeOp; + VkAttachmentLoadOp stencilLoadOp; + VkAttachmentStoreOp stencilStoreOp; + VkImageLayout initialLayout; + VkImageLayout finalLayout; +} VkAttachmentDescription2; + +typedef struct VkAttachmentDescription2 VkAttachmentDescription2KHR; + +typedef struct VkAttachmentReference2 { + VkStructureType sType; + const void * pNext; + uint32_t attachment; + VkImageLayout layout; + VkImageAspectFlags aspectMask; +} VkAttachmentReference2; + +typedef struct VkAttachmentReference2 VkAttachmentReference2KHR; + +typedef struct VkSubpassDescription2 { + VkStructureType sType; + const void * pNext; + VkSubpassDescriptionFlags flags; + VkPipelineBindPoint pipelineBindPoint; + uint32_t viewMask; + uint32_t inputAttachmentCount; + const VkAttachmentReference2 * pInputAttachments; + uint32_t colorAttachmentCount; + const VkAttachmentReference2 * pColorAttachments; + const VkAttachmentReference2 * pResolveAttachments; + const VkAttachmentReference2 * pDepthStencilAttachment; + uint32_t preserveAttachmentCount; + const uint32_t * pPreserveAttachments; +} VkSubpassDescription2; + +typedef struct VkSubpassDescription2 VkSubpassDescription2KHR; + +typedef struct VkSubpassDependency2 { + VkStructureType sType; + const void * pNext; + uint32_t srcSubpass; + uint32_t dstSubpass; + VkPipelineStageFlags srcStageMask; + VkPipelineStageFlags dstStageMask; + VkAccessFlags srcAccessMask; + VkAccessFlags dstAccessMask; + VkDependencyFlags dependencyFlags; + int32_t viewOffset; +} VkSubpassDependency2; + +typedef struct VkSubpassDependency2 VkSubpassDependency2KHR; + +typedef struct VkRenderPassCreateInfo2 { + VkStructureType sType; + const void * pNext; + VkRenderPassCreateFlags flags; + uint32_t attachmentCount; + const VkAttachmentDescription2 * pAttachments; + uint32_t subpassCount; + const VkSubpassDescription2 * pSubpasses; + uint32_t dependencyCount; + const VkSubpassDependency2 * pDependencies; + uint32_t correlatedViewMaskCount; + const uint32_t * pCorrelatedViewMasks; +} VkRenderPassCreateInfo2; + +typedef struct VkRenderPassCreateInfo2 VkRenderPassCreateInfo2KHR; + +typedef struct VkPhysicalDeviceTimelineSemaphoreFeatures { + VkStructureType sType; + void * pNext; + VkBool32 timelineSemaphore; +} VkPhysicalDeviceTimelineSemaphoreFeatures; + +typedef struct VkPhysicalDeviceTimelineSemaphoreFeatures VkPhysicalDeviceTimelineSemaphoreFeaturesKHR; + +typedef struct VkSemaphoreWaitInfo { + VkStructureType sType; + const void * pNext; + VkSemaphoreWaitFlags flags; + uint32_t semaphoreCount; + const VkSemaphore * pSemaphores; + const uint64_t * pValues; +} VkSemaphoreWaitInfo; + +typedef struct VkSemaphoreWaitInfo VkSemaphoreWaitInfoKHR; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorProperties { + VkStructureType sType; + void * pNext; + uint32_t maxVertexAttribDivisor; + VkBool32 supportsNonZeroFirstInstance; +} VkPhysicalDeviceVertexAttributeDivisorProperties; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorProperties VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR; + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef struct VkAndroidHardwareBufferPropertiesANDROID { + VkStructureType sType; + void * pNext; + VkDeviceSize allocationSize; + uint32_t memoryTypeBits; +} VkAndroidHardwareBufferPropertiesANDROID; + +#endif + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID { + VkStructureType sType; + void * pNext; + VkFormat format; + uint64_t externalFormat; + VkFormatFeatureFlags formatFeatures; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkAndroidHardwareBufferFormatPropertiesANDROID; + +#endif + +typedef struct VkCommandBufferInheritanceConditionalRenderingInfoEXT { + VkStructureType sType; + const void * pNext; + VkBool32 conditionalRenderingEnable; +} VkCommandBufferInheritanceConditionalRenderingInfoEXT; + +typedef struct VkPhysicalDevice8BitStorageFeatures { + VkStructureType sType; + void * pNext; + VkBool32 storageBuffer8BitAccess; + VkBool32 uniformAndStorageBuffer8BitAccess; + VkBool32 storagePushConstant8; +} VkPhysicalDevice8BitStorageFeatures; + +typedef struct VkPhysicalDevice8BitStorageFeatures VkPhysicalDevice8BitStorageFeaturesKHR; + +typedef struct VkPhysicalDeviceConditionalRenderingFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 conditionalRendering; + VkBool32 inheritedConditionalRendering; +} VkPhysicalDeviceConditionalRenderingFeaturesEXT; + +typedef struct VkPhysicalDeviceVulkanMemoryModelFeatures { + VkStructureType sType; + void * pNext; + VkBool32 vulkanMemoryModel; + VkBool32 vulkanMemoryModelDeviceScope; + VkBool32 vulkanMemoryModelAvailabilityVisibilityChains; +} VkPhysicalDeviceVulkanMemoryModelFeatures; + +typedef struct VkPhysicalDeviceVulkanMemoryModelFeatures VkPhysicalDeviceVulkanMemoryModelFeaturesKHR; + +typedef struct VkPhysicalDeviceShaderAtomicInt64Features { + VkStructureType sType; + void * pNext; + VkBool32 shaderBufferInt64Atomics; + VkBool32 shaderSharedInt64Atomics; +} VkPhysicalDeviceShaderAtomicInt64Features; + +typedef struct VkPhysicalDeviceShaderAtomicInt64Features VkPhysicalDeviceShaderAtomicInt64FeaturesKHR; + +typedef struct VkPhysicalDeviceShaderAtomicFloatFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 shaderBufferFloat32Atomics; + VkBool32 shaderBufferFloat32AtomicAdd; + VkBool32 shaderBufferFloat64Atomics; + VkBool32 shaderBufferFloat64AtomicAdd; + VkBool32 shaderSharedFloat32Atomics; + VkBool32 shaderSharedFloat32AtomicAdd; + VkBool32 shaderSharedFloat64Atomics; + VkBool32 shaderSharedFloat64AtomicAdd; + VkBool32 shaderImageFloat32Atomics; + VkBool32 shaderImageFloat32AtomicAdd; + VkBool32 sparseImageFloat32Atomics; + VkBool32 sparseImageFloat32AtomicAdd; +} VkPhysicalDeviceShaderAtomicFloatFeaturesEXT; + +typedef struct VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 shaderBufferFloat16Atomics; + VkBool32 shaderBufferFloat16AtomicAdd; + VkBool32 shaderBufferFloat16AtomicMinMax; + VkBool32 shaderBufferFloat32AtomicMinMax; + VkBool32 shaderBufferFloat64AtomicMinMax; + VkBool32 shaderSharedFloat16Atomics; + VkBool32 shaderSharedFloat16AtomicAdd; + VkBool32 shaderSharedFloat16AtomicMinMax; + VkBool32 shaderSharedFloat32AtomicMinMax; + VkBool32 shaderSharedFloat64AtomicMinMax; + VkBool32 shaderImageFloat32AtomicMinMax; + VkBool32 sparseImageFloat32AtomicMinMax; +} VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorFeatures { + VkStructureType sType; + void * pNext; + VkBool32 vertexAttributeInstanceRateDivisor; + VkBool32 vertexAttributeInstanceRateZeroDivisor; +} VkPhysicalDeviceVertexAttributeDivisorFeatures; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorFeatures VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorFeatures VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT; + +typedef struct VkQueueFamilyCheckpointPropertiesNV { + VkStructureType sType; + void * pNext; + VkPipelineStageFlags checkpointExecutionStageMask; +} VkQueueFamilyCheckpointPropertiesNV; + +typedef struct VkPhysicalDeviceDepthStencilResolveProperties { + VkStructureType sType; + void * pNext; + VkResolveModeFlags supportedDepthResolveModes; + VkResolveModeFlags supportedStencilResolveModes; + VkBool32 independentResolveNone; + VkBool32 independentResolve; +} VkPhysicalDeviceDepthStencilResolveProperties; + +typedef struct VkPhysicalDeviceDepthStencilResolveProperties VkPhysicalDeviceDepthStencilResolvePropertiesKHR; + +typedef struct VkSubpassDescriptionDepthStencilResolve { + VkStructureType sType; + const void * pNext; + VkResolveModeFlagBits depthResolveMode; + VkResolveModeFlagBits stencilResolveMode; + const VkAttachmentReference2 * pDepthStencilResolveAttachment; +} VkSubpassDescriptionDepthStencilResolve; + +typedef struct VkSubpassDescriptionDepthStencilResolve VkSubpassDescriptionDepthStencilResolveKHR; + +typedef struct VkPhysicalDeviceASTCDecodeFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 decodeModeSharedExponent; +} VkPhysicalDeviceASTCDecodeFeaturesEXT; + +typedef struct VkPhysicalDeviceTransformFeedbackFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 transformFeedback; + VkBool32 geometryStreams; +} VkPhysicalDeviceTransformFeedbackFeaturesEXT; + +typedef struct VkPhysicalDeviceTransformFeedbackPropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t maxTransformFeedbackStreams; + uint32_t maxTransformFeedbackBuffers; + VkDeviceSize maxTransformFeedbackBufferSize; + uint32_t maxTransformFeedbackStreamDataSize; + uint32_t maxTransformFeedbackBufferDataSize; + uint32_t maxTransformFeedbackBufferDataStride; + VkBool32 transformFeedbackQueries; + VkBool32 transformFeedbackStreamsLinesTriangles; + VkBool32 transformFeedbackRasterizationStreamSelect; + VkBool32 transformFeedbackDraw; +} VkPhysicalDeviceTransformFeedbackPropertiesEXT; + +typedef struct VkPipelineRasterizationStateStreamCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkPipelineRasterizationStateStreamCreateFlagsEXT flags; + uint32_t rasterizationStream; +} VkPipelineRasterizationStateStreamCreateInfoEXT; + +typedef struct VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 representativeFragmentTest; +} VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV; + +typedef struct VkPipelineRepresentativeFragmentTestStateCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkBool32 representativeFragmentTestEnable; +} VkPipelineRepresentativeFragmentTestStateCreateInfoNV; + +typedef struct VkPhysicalDeviceExclusiveScissorFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 exclusiveScissor; +} VkPhysicalDeviceExclusiveScissorFeaturesNV; + +typedef struct VkPhysicalDeviceCornerSampledImageFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 cornerSampledImage; +} VkPhysicalDeviceCornerSampledImageFeaturesNV; + +typedef struct VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 computeDerivativeGroupQuads; + VkBool32 computeDerivativeGroupLinear; +} VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR; + +typedef struct VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR VkPhysicalDeviceComputeShaderDerivativesFeaturesNV; + +typedef struct VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR { + VkStructureType sType; + void * pNext; + VkBool32 meshAndTaskShaderDerivatives; +} VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR; + +typedef struct VkPhysicalDeviceShaderImageFootprintFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 imageFootprint; +} VkPhysicalDeviceShaderImageFootprintFeaturesNV; + +typedef struct VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 dedicatedAllocationImageAliasing; +} VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; + +typedef struct VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 indirectMemoryCopy; + VkBool32 indirectMemoryToImageCopy; +} VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR; + +typedef struct VkPhysicalDeviceCopyMemoryIndirectFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 indirectCopy; +} VkPhysicalDeviceCopyMemoryIndirectFeaturesNV; + +typedef struct VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR { + VkStructureType sType; + void * pNext; + VkQueueFlags supportedQueues; +} VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR; + +typedef struct VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR VkPhysicalDeviceCopyMemoryIndirectPropertiesNV; + +typedef struct VkPhysicalDeviceMemoryDecompressionFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 memoryDecompression; +} VkPhysicalDeviceMemoryDecompressionFeaturesNV; + +typedef struct VkPhysicalDeviceMemoryDecompressionPropertiesNV { + VkStructureType sType; + void * pNext; + VkMemoryDecompressionMethodFlagsNV decompressionMethods; + uint64_t maxDecompressionIndirectCount; +} VkPhysicalDeviceMemoryDecompressionPropertiesNV; + +typedef struct VkPipelineViewportShadingRateImageStateCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkBool32 shadingRateImageEnable; + uint32_t viewportCount; + const VkShadingRatePaletteNV * pShadingRatePalettes; +} VkPipelineViewportShadingRateImageStateCreateInfoNV; + +typedef struct VkPhysicalDeviceShadingRateImageFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 shadingRateImage; + VkBool32 shadingRateCoarseSampleOrder; +} VkPhysicalDeviceShadingRateImageFeaturesNV; + +typedef struct VkPhysicalDeviceInvocationMaskFeaturesHUAWEI { + VkStructureType sType; + void * pNext; + VkBool32 invocationMask; +} VkPhysicalDeviceInvocationMaskFeaturesHUAWEI; + +typedef struct VkPhysicalDeviceMeshShaderFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 taskShader; + VkBool32 meshShader; +} VkPhysicalDeviceMeshShaderFeaturesNV; + +typedef struct VkPhysicalDeviceMeshShaderFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 taskShader; + VkBool32 meshShader; + VkBool32 multiviewMeshShader; + VkBool32 primitiveFragmentShadingRateMeshShader; + VkBool32 meshShaderQueries; +} VkPhysicalDeviceMeshShaderFeaturesEXT; + +typedef struct VkPhysicalDeviceMeshShaderPropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t maxTaskWorkGroupTotalCount; + uint32_t maxTaskWorkGroupCount [3]; + uint32_t maxTaskWorkGroupInvocations; + uint32_t maxTaskWorkGroupSize [3]; + uint32_t maxTaskPayloadSize; + uint32_t maxTaskSharedMemorySize; + uint32_t maxTaskPayloadAndSharedMemorySize; + uint32_t maxMeshWorkGroupTotalCount; + uint32_t maxMeshWorkGroupCount [3]; + uint32_t maxMeshWorkGroupInvocations; + uint32_t maxMeshWorkGroupSize [3]; + uint32_t maxMeshSharedMemorySize; + uint32_t maxMeshPayloadAndSharedMemorySize; + uint32_t maxMeshOutputMemorySize; + uint32_t maxMeshPayloadAndOutputMemorySize; + uint32_t maxMeshOutputComponents; + uint32_t maxMeshOutputVertices; + uint32_t maxMeshOutputPrimitives; + uint32_t maxMeshOutputLayers; + uint32_t maxMeshMultiviewViewCount; + uint32_t meshOutputPerVertexGranularity; + uint32_t meshOutputPerPrimitiveGranularity; + uint32_t maxPreferredTaskWorkGroupInvocations; + uint32_t maxPreferredMeshWorkGroupInvocations; + VkBool32 prefersLocalInvocationVertexOutput; + VkBool32 prefersLocalInvocationPrimitiveOutput; + VkBool32 prefersCompactVertexOutput; + VkBool32 prefersCompactPrimitiveOutput; +} VkPhysicalDeviceMeshShaderPropertiesEXT; + +typedef struct VkRayTracingPipelineCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo * pStages; + uint32_t groupCount; + const VkRayTracingShaderGroupCreateInfoNV * pGroups; + uint32_t maxRecursionDepth; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkRayTracingPipelineCreateInfoNV; + +typedef struct VkRayTracingPipelineCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo * pStages; + uint32_t groupCount; + const VkRayTracingShaderGroupCreateInfoKHR * pGroups; + uint32_t maxPipelineRayRecursionDepth; + const VkPipelineLibraryCreateInfoKHR * pLibraryInfo; + const VkRayTracingPipelineInterfaceCreateInfoKHR * pLibraryInterface; + const VkPipelineDynamicStateCreateInfo * pDynamicState; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkRayTracingPipelineCreateInfoKHR; + +typedef struct VkGeometryTrianglesNV { + VkStructureType sType; + const void * pNext; + VkBuffer vertexData; + VkDeviceSize vertexOffset; + uint32_t vertexCount; + VkDeviceSize vertexStride; + VkFormat vertexFormat; + VkBuffer indexData; + VkDeviceSize indexOffset; + uint32_t indexCount; + VkIndexType indexType; + VkBuffer transformData; + VkDeviceSize transformOffset; +} VkGeometryTrianglesNV; + +typedef struct VkGeometryAABBNV { + VkStructureType sType; + const void * pNext; + VkBuffer aabbData; + uint32_t numAABBs; + uint32_t stride; + VkDeviceSize offset; +} VkGeometryAABBNV; + +typedef struct VkGeometryDataNV { + VkGeometryTrianglesNV triangles; + VkGeometryAABBNV aabbs; +} VkGeometryDataNV; + +typedef struct VkGeometryNV { + VkStructureType sType; + const void * pNext; + VkGeometryTypeKHR geometryType; + VkGeometryDataNV geometry; + VkGeometryFlagsKHR flags; +} VkGeometryNV; + +typedef struct VkAccelerationStructureInfoNV { + VkStructureType sType; + const void * pNext; + VkAccelerationStructureTypeNV type; + VkBuildAccelerationStructureFlagsNV flags; + uint32_t instanceCount; + uint32_t geometryCount; + const VkGeometryNV * pGeometries; +} VkAccelerationStructureInfoNV; + +typedef struct VkAccelerationStructureCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkDeviceSize compactedSize; + VkAccelerationStructureInfoNV info; +} VkAccelerationStructureCreateInfoNV; + +typedef struct VkBindAccelerationStructureMemoryInfoNV { + VkStructureType sType; + const void * pNext; + VkAccelerationStructureNV accelerationStructure; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; + uint32_t deviceIndexCount; + const uint32_t * pDeviceIndices; +} VkBindAccelerationStructureMemoryInfoNV; + +typedef struct VkPhysicalDeviceAccelerationStructureFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 accelerationStructure; + VkBool32 accelerationStructureCaptureReplay; + VkBool32 accelerationStructureIndirectBuild; + VkBool32 accelerationStructureHostCommands; + VkBool32 descriptorBindingAccelerationStructureUpdateAfterBind; +} VkPhysicalDeviceAccelerationStructureFeaturesKHR; + +typedef struct VkPhysicalDeviceRayTracingPipelineFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 rayTracingPipeline; + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplay; + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed; + VkBool32 rayTracingPipelineTraceRaysIndirect; + VkBool32 rayTraversalPrimitiveCulling; +} VkPhysicalDeviceRayTracingPipelineFeaturesKHR; + +typedef struct VkPhysicalDeviceRayQueryFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 rayQuery; +} VkPhysicalDeviceRayQueryFeaturesKHR; + +typedef struct VkStridedDeviceAddressRegionKHR { + VkDeviceAddress deviceAddress; + VkDeviceSize stride; + VkDeviceSize size; +} VkStridedDeviceAddressRegionKHR; + +typedef struct VkTraceRaysIndirectCommand2KHR { + VkDeviceAddress raygenShaderRecordAddress; + VkDeviceSize raygenShaderRecordSize; + VkDeviceAddress missShaderBindingTableAddress; + VkDeviceSize missShaderBindingTableSize; + VkDeviceSize missShaderBindingTableStride; + VkDeviceAddress hitShaderBindingTableAddress; + VkDeviceSize hitShaderBindingTableSize; + VkDeviceSize hitShaderBindingTableStride; + VkDeviceAddress callableShaderBindingTableAddress; + VkDeviceSize callableShaderBindingTableSize; + VkDeviceSize callableShaderBindingTableStride; + uint32_t width; + uint32_t height; + uint32_t depth; +} VkTraceRaysIndirectCommand2KHR; + +typedef struct VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 rayTracingMaintenance1; + VkBool32 rayTracingPipelineTraceRaysIndirect2; +} VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR; + +typedef struct VkDrmFormatModifierPropertiesEXT { + uint64_t drmFormatModifier; + uint32_t drmFormatModifierPlaneCount; + VkFormatFeatureFlags drmFormatModifierTilingFeatures; +} VkDrmFormatModifierPropertiesEXT; + +typedef struct VkImageDrmFormatModifierExplicitCreateInfoEXT { + VkStructureType sType; + const void * pNext; + uint64_t drmFormatModifier; + uint32_t drmFormatModifierPlaneCount; + const VkSubresourceLayout * pPlaneLayouts; +} VkImageDrmFormatModifierExplicitCreateInfoEXT; + +typedef struct VkImageStencilUsageCreateInfo { + VkStructureType sType; + const void * pNext; + VkImageUsageFlags stencilUsage; +} VkImageStencilUsageCreateInfo; + +typedef struct VkImageStencilUsageCreateInfo VkImageStencilUsageCreateInfoEXT; + +typedef struct VkPhysicalDeviceFragmentDensityMapFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 fragmentDensityMap; + VkBool32 fragmentDensityMapDynamic; + VkBool32 fragmentDensityMapNonSubsampledImages; +} VkPhysicalDeviceFragmentDensityMapFeaturesEXT; + +typedef struct VkPhysicalDeviceFragmentDensityMap2FeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 fragmentDensityMapDeferred; +} VkPhysicalDeviceFragmentDensityMap2FeaturesEXT; + +typedef struct VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 fragmentDensityMapOffset; +} VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; + +typedef struct VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; + +typedef struct VkPhysicalDeviceFragmentDensityMapPropertiesEXT { + VkStructureType sType; + void * pNext; + VkExtent2D minFragmentDensityTexelSize; + VkExtent2D maxFragmentDensityTexelSize; + VkBool32 fragmentDensityInvocations; +} VkPhysicalDeviceFragmentDensityMapPropertiesEXT; + +typedef struct VkPhysicalDeviceFragmentDensityMap2PropertiesEXT { + VkStructureType sType; + void * pNext; + VkBool32 subsampledLoads; + VkBool32 subsampledCoarseReconstructionEarlyAccess; + uint32_t maxSubsampledArrayLayers; + uint32_t maxDescriptorSetSubsampledSamplers; +} VkPhysicalDeviceFragmentDensityMap2PropertiesEXT; + +typedef struct VkPhysicalDeviceScalarBlockLayoutFeatures { + VkStructureType sType; + void * pNext; + VkBool32 scalarBlockLayout; +} VkPhysicalDeviceScalarBlockLayoutFeatures; + +typedef struct VkPhysicalDeviceScalarBlockLayoutFeatures VkPhysicalDeviceScalarBlockLayoutFeaturesEXT; + +typedef struct VkSurfaceProtectedCapabilitiesKHR { + VkStructureType sType; + const void * pNext; + VkBool32 supportsProtected; +} VkSurfaceProtectedCapabilitiesKHR; + +typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures { + VkStructureType sType; + void * pNext; + VkBool32 uniformBufferStandardLayout; +} VkPhysicalDeviceUniformBufferStandardLayoutFeatures; + +typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR; + +typedef struct VkPhysicalDeviceDepthClipEnableFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 depthClipEnable; +} VkPhysicalDeviceDepthClipEnableFeaturesEXT; + +typedef struct VkPipelineRasterizationDepthClipStateCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkPipelineRasterizationDepthClipStateCreateFlagsEXT flags; + VkBool32 depthClipEnable; +} VkPipelineRasterizationDepthClipStateCreateInfoEXT; + +typedef struct VkPhysicalDeviceMemoryBudgetPropertiesEXT { + VkStructureType sType; + void * pNext; + VkDeviceSize heapBudget [ VK_MAX_MEMORY_HEAPS ]; + VkDeviceSize heapUsage [ VK_MAX_MEMORY_HEAPS ]; +} VkPhysicalDeviceMemoryBudgetPropertiesEXT; + +typedef struct VkPhysicalDeviceMemoryPriorityFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 memoryPriority; +} VkPhysicalDeviceMemoryPriorityFeaturesEXT; + +typedef struct VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 pageableDeviceLocalMemory; +} VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; + +typedef struct VkPhysicalDeviceBufferDeviceAddressFeatures { + VkStructureType sType; + void * pNext; + VkBool32 bufferDeviceAddress; + VkBool32 bufferDeviceAddressCaptureReplay; + VkBool32 bufferDeviceAddressMultiDevice; +} VkPhysicalDeviceBufferDeviceAddressFeatures; + +typedef struct VkPhysicalDeviceBufferDeviceAddressFeatures VkPhysicalDeviceBufferDeviceAddressFeaturesKHR; + +typedef struct VkPhysicalDeviceBufferDeviceAddressFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 bufferDeviceAddress; + VkBool32 bufferDeviceAddressCaptureReplay; + VkBool32 bufferDeviceAddressMultiDevice; +} VkPhysicalDeviceBufferDeviceAddressFeaturesEXT; + +typedef struct VkPhysicalDeviceBufferDeviceAddressFeaturesEXT VkPhysicalDeviceBufferAddressFeaturesEXT; + +typedef struct VkBufferDeviceAddressCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkDeviceAddress deviceAddress; +} VkBufferDeviceAddressCreateInfoEXT; + +typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT { + VkStructureType sType; + void * pNext; + VkBool32 filterCubic; + VkBool32 filterCubicMinmax; +} VkFilterCubicImageViewImageFormatPropertiesEXT; + +typedef struct VkPhysicalDeviceImagelessFramebufferFeatures { + VkStructureType sType; + void * pNext; + VkBool32 imagelessFramebuffer; +} VkPhysicalDeviceImagelessFramebufferFeatures; + +typedef struct VkPhysicalDeviceImagelessFramebufferFeatures VkPhysicalDeviceImagelessFramebufferFeaturesKHR; + +typedef struct VkFramebufferAttachmentImageInfo { + VkStructureType sType; + const void * pNext; + VkImageCreateFlags flags; + VkImageUsageFlags usage; + uint32_t width; + uint32_t height; + uint32_t layerCount; + uint32_t viewFormatCount; + const VkFormat * pViewFormats; +} VkFramebufferAttachmentImageInfo; + +typedef struct VkFramebufferAttachmentImageInfo VkFramebufferAttachmentImageInfoKHR; + +typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeatures { + VkStructureType sType; + void * pNext; + VkBool32 textureCompressionASTC_HDR; +} VkPhysicalDeviceTextureCompressionASTCHDRFeatures; + +typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeatures VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT; + +typedef struct VkPhysicalDeviceCooperativeMatrixFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 cooperativeMatrix; + VkBool32 cooperativeMatrixRobustBufferAccess; +} VkPhysicalDeviceCooperativeMatrixFeaturesNV; + +typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesNV { + VkStructureType sType; + void * pNext; + VkShaderStageFlags cooperativeMatrixSupportedStages; +} VkPhysicalDeviceCooperativeMatrixPropertiesNV; + +typedef struct VkPhysicalDeviceYcbcrImageArraysFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 ycbcrImageArrays; +} VkPhysicalDeviceYcbcrImageArraysFeaturesEXT; + +typedef struct VkImageViewAddressPropertiesNVX { + VkStructureType sType; + void * pNext; + VkDeviceAddress deviceAddress; + VkDeviceSize size; +} VkImageViewAddressPropertiesNVX; + +typedef struct VkPipelineCreationFeedback { + VkPipelineCreationFeedbackFlags flags; + uint64_t duration; +} VkPipelineCreationFeedback; + +typedef struct VkPipelineCreationFeedback VkPipelineCreationFeedbackEXT; + +typedef struct VkPipelineCreationFeedbackCreateInfo { + VkStructureType sType; + const void * pNext; + VkPipelineCreationFeedback * pPipelineCreationFeedback; + uint32_t pipelineStageCreationFeedbackCount; + VkPipelineCreationFeedback * pPipelineStageCreationFeedbacks; +} VkPipelineCreationFeedbackCreateInfo; + +typedef struct VkPipelineCreationFeedbackCreateInfo VkPipelineCreationFeedbackCreateInfoEXT; + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef struct VkSurfaceCapabilitiesFullScreenExclusiveEXT { + VkStructureType sType; + void * pNext; + VkBool32 fullScreenExclusiveSupported; +} VkSurfaceCapabilitiesFullScreenExclusiveEXT; + +#endif + +typedef struct VkPhysicalDevicePresentBarrierFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 presentBarrier; +} VkPhysicalDevicePresentBarrierFeaturesNV; + +typedef struct VkSurfaceCapabilitiesPresentBarrierNV { + VkStructureType sType; + void * pNext; + VkBool32 presentBarrierSupported; +} VkSurfaceCapabilitiesPresentBarrierNV; + +typedef struct VkSwapchainPresentBarrierCreateInfoNV { + VkStructureType sType; + void * pNext; + VkBool32 presentBarrierEnable; +} VkSwapchainPresentBarrierCreateInfoNV; + +typedef struct VkPhysicalDevicePerformanceQueryFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 performanceCounterQueryPools; + VkBool32 performanceCounterMultipleQueryPools; +} VkPhysicalDevicePerformanceQueryFeaturesKHR; + +typedef struct VkPhysicalDevicePerformanceQueryPropertiesKHR { + VkStructureType sType; + void * pNext; + VkBool32 allowCommandBufferQueryCopies; +} VkPhysicalDevicePerformanceQueryPropertiesKHR; + +typedef struct VkPerformanceCounterDescriptionKHR { + VkStructureType sType; + void * pNext; + VkPerformanceCounterDescriptionFlagsKHR flags; + char name [ VK_MAX_DESCRIPTION_SIZE ]; + char category [ VK_MAX_DESCRIPTION_SIZE ]; + char description [ VK_MAX_DESCRIPTION_SIZE ]; +} VkPerformanceCounterDescriptionKHR; + +typedef struct VkAcquireProfilingLockInfoKHR { + VkStructureType sType; + const void * pNext; + VkAcquireProfilingLockFlagsKHR flags; + uint64_t timeout; +} VkAcquireProfilingLockInfoKHR; + +typedef struct VkHeadlessSurfaceCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkHeadlessSurfaceCreateFlagsEXT flags; +} VkHeadlessSurfaceCreateInfoEXT; + +typedef struct VkPhysicalDeviceCoverageReductionModeFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 coverageReductionMode; +} VkPhysicalDeviceCoverageReductionModeFeaturesNV; + +typedef struct VkPipelineCoverageReductionStateCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkPipelineCoverageReductionStateCreateFlagsNV flags; + VkCoverageReductionModeNV coverageReductionMode; +} VkPipelineCoverageReductionStateCreateInfoNV; + +typedef struct VkFramebufferMixedSamplesCombinationNV { + VkStructureType sType; + void * pNext; + VkCoverageReductionModeNV coverageReductionMode; + VkSampleCountFlagBits rasterizationSamples; + VkSampleCountFlags depthStencilSamples; + VkSampleCountFlags colorSamples; +} VkFramebufferMixedSamplesCombinationNV; + +typedef struct VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL { + VkStructureType sType; + void * pNext; + VkBool32 shaderIntegerFunctions2; +} VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; + +typedef union VkPerformanceValueDataINTEL { + uint32_t value32; + uint64_t value64; + float valueFloat; + VkBool32 valueBool; + const char * valueString; +} VkPerformanceValueDataINTEL; + +typedef struct VkPerformanceValueINTEL { + VkPerformanceValueTypeINTEL type; + VkPerformanceValueDataINTEL data; +} VkPerformanceValueINTEL; + +typedef struct VkPerformanceOverrideInfoINTEL { + VkStructureType sType; + const void * pNext; + VkPerformanceOverrideTypeINTEL type; + VkBool32 enable; + uint64_t parameter; +} VkPerformanceOverrideInfoINTEL; + +typedef struct VkPhysicalDeviceShaderClockFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 shaderSubgroupClock; + VkBool32 shaderDeviceClock; +} VkPhysicalDeviceShaderClockFeaturesKHR; + +typedef struct VkPhysicalDeviceIndexTypeUint8Features { + VkStructureType sType; + void * pNext; + VkBool32 indexTypeUint8; +} VkPhysicalDeviceIndexTypeUint8Features; + +typedef struct VkPhysicalDeviceIndexTypeUint8Features VkPhysicalDeviceIndexTypeUint8FeaturesKHR; + +typedef struct VkPhysicalDeviceIndexTypeUint8Features VkPhysicalDeviceIndexTypeUint8FeaturesEXT; + +typedef struct VkPhysicalDeviceShaderSMBuiltinsFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 shaderSMBuiltins; +} VkPhysicalDeviceShaderSMBuiltinsFeaturesNV; + +typedef struct VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 fragmentShaderSampleInterlock; + VkBool32 fragmentShaderPixelInterlock; + VkBool32 fragmentShaderShadingRateInterlock; +} VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT; + +typedef struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures { + VkStructureType sType; + void * pNext; + VkBool32 separateDepthStencilLayouts; +} VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures; + +typedef struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR; + +typedef struct VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 primitiveTopologyListRestart; + VkBool32 primitiveTopologyPatchListRestart; +} VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; + +typedef struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 pipelineExecutableInfo; +} VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR; + +typedef struct VkPipelineExecutablePropertiesKHR { + VkStructureType sType; + void * pNext; + VkShaderStageFlags stages; + char name [ VK_MAX_DESCRIPTION_SIZE ]; + char description [ VK_MAX_DESCRIPTION_SIZE ]; + uint32_t subgroupSize; +} VkPipelineExecutablePropertiesKHR; + +typedef union VkPipelineExecutableStatisticValueKHR { + VkBool32 b32; + int64_t i64; + uint64_t u64; + double f64; +} VkPipelineExecutableStatisticValueKHR; + +typedef struct VkPipelineExecutableStatisticKHR { + VkStructureType sType; + void * pNext; + char name [ VK_MAX_DESCRIPTION_SIZE ]; + char description [ VK_MAX_DESCRIPTION_SIZE ]; + VkPipelineExecutableStatisticFormatKHR format; + VkPipelineExecutableStatisticValueKHR value; +} VkPipelineExecutableStatisticKHR; + +typedef struct VkPipelineExecutableInternalRepresentationKHR { + VkStructureType sType; + void * pNext; + char name [ VK_MAX_DESCRIPTION_SIZE ]; + char description [ VK_MAX_DESCRIPTION_SIZE ]; + VkBool32 isText; + size_t dataSize; + void * pData; +} VkPipelineExecutableInternalRepresentationKHR; + +typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures { + VkStructureType sType; + void * pNext; + VkBool32 shaderDemoteToHelperInvocation; +} VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures; + +typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT; + +typedef struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 texelBufferAlignment; +} VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT; + +typedef struct VkPhysicalDeviceTexelBufferAlignmentProperties { + VkStructureType sType; + void * pNext; + VkDeviceSize storageTexelBufferOffsetAlignmentBytes; + VkBool32 storageTexelBufferOffsetSingleTexelAlignment; + VkDeviceSize uniformTexelBufferOffsetAlignmentBytes; + VkBool32 uniformTexelBufferOffsetSingleTexelAlignment; +} VkPhysicalDeviceTexelBufferAlignmentProperties; + +typedef struct VkPhysicalDeviceTexelBufferAlignmentProperties VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT; + +typedef struct VkPhysicalDeviceSubgroupSizeControlFeatures { + VkStructureType sType; + void * pNext; + VkBool32 subgroupSizeControl; + VkBool32 computeFullSubgroups; +} VkPhysicalDeviceSubgroupSizeControlFeatures; + +typedef struct VkPhysicalDeviceSubgroupSizeControlFeatures VkPhysicalDeviceSubgroupSizeControlFeaturesEXT; + +typedef struct VkPhysicalDeviceSubgroupSizeControlProperties { + VkStructureType sType; + void * pNext; + uint32_t minSubgroupSize; + uint32_t maxSubgroupSize; + uint32_t maxComputeWorkgroupSubgroups; + VkShaderStageFlags requiredSubgroupSizeStages; +} VkPhysicalDeviceSubgroupSizeControlProperties; + +typedef struct VkPhysicalDeviceSubgroupSizeControlProperties VkPhysicalDeviceSubgroupSizeControlPropertiesEXT; + +typedef struct VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI { + VkStructureType sType; + void * pNext; + uint32_t maxWorkGroupCount [3]; + uint32_t maxWorkGroupSize [3]; + uint32_t maxOutputClusterCount; + VkDeviceSize indirectBufferOffsetAlignment; +} VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI; + +typedef struct VkPhysicalDeviceLineRasterizationFeatures { + VkStructureType sType; + void * pNext; + VkBool32 rectangularLines; + VkBool32 bresenhamLines; + VkBool32 smoothLines; + VkBool32 stippledRectangularLines; + VkBool32 stippledBresenhamLines; + VkBool32 stippledSmoothLines; +} VkPhysicalDeviceLineRasterizationFeatures; + +typedef struct VkPhysicalDeviceLineRasterizationFeatures VkPhysicalDeviceLineRasterizationFeaturesKHR; + +typedef struct VkPhysicalDeviceLineRasterizationFeatures VkPhysicalDeviceLineRasterizationFeaturesEXT; + +typedef struct VkPipelineRasterizationLineStateCreateInfo { + VkStructureType sType; + const void * pNext; + VkLineRasterizationMode lineRasterizationMode; + VkBool32 stippledLineEnable; + uint32_t lineStippleFactor; + uint16_t lineStipplePattern; +} VkPipelineRasterizationLineStateCreateInfo; + +typedef struct VkPipelineRasterizationLineStateCreateInfo VkPipelineRasterizationLineStateCreateInfoKHR; + +typedef struct VkPipelineRasterizationLineStateCreateInfo VkPipelineRasterizationLineStateCreateInfoEXT; + +typedef struct VkPhysicalDevicePipelineCreationCacheControlFeatures { + VkStructureType sType; + void * pNext; + VkBool32 pipelineCreationCacheControl; +} VkPhysicalDevicePipelineCreationCacheControlFeatures; + +typedef struct VkPhysicalDevicePipelineCreationCacheControlFeatures VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT; + +typedef struct VkPhysicalDeviceVulkan11Features { + VkStructureType sType; + void * pNext; + VkBool32 storageBuffer16BitAccess; + VkBool32 uniformAndStorageBuffer16BitAccess; + VkBool32 storagePushConstant16; + VkBool32 storageInputOutput16; + VkBool32 multiview; + VkBool32 multiviewGeometryShader; + VkBool32 multiviewTessellationShader; + VkBool32 variablePointersStorageBuffer; + VkBool32 variablePointers; + VkBool32 protectedMemory; + VkBool32 samplerYcbcrConversion; + VkBool32 shaderDrawParameters; +} VkPhysicalDeviceVulkan11Features; + +typedef struct VkPhysicalDeviceVulkan11Properties { + VkStructureType sType; + void * pNext; + uint8_t deviceUUID [ VK_UUID_SIZE ]; + uint8_t driverUUID [ VK_UUID_SIZE ]; + uint8_t deviceLUID [ VK_LUID_SIZE ]; + uint32_t deviceNodeMask; + VkBool32 deviceLUIDValid; + uint32_t subgroupSize; + VkShaderStageFlags subgroupSupportedStages; + VkSubgroupFeatureFlags subgroupSupportedOperations; + VkBool32 subgroupQuadOperationsInAllStages; + VkPointClippingBehavior pointClippingBehavior; + uint32_t maxMultiviewViewCount; + uint32_t maxMultiviewInstanceIndex; + VkBool32 protectedNoFault; + uint32_t maxPerSetDescriptors; + VkDeviceSize maxMemoryAllocationSize; +} VkPhysicalDeviceVulkan11Properties; + +typedef struct VkPhysicalDeviceVulkan12Features { + VkStructureType sType; + void * pNext; + VkBool32 samplerMirrorClampToEdge; + VkBool32 drawIndirectCount; + VkBool32 storageBuffer8BitAccess; + VkBool32 uniformAndStorageBuffer8BitAccess; + VkBool32 storagePushConstant8; + VkBool32 shaderBufferInt64Atomics; + VkBool32 shaderSharedInt64Atomics; + VkBool32 shaderFloat16; + VkBool32 shaderInt8; + VkBool32 descriptorIndexing; + VkBool32 shaderInputAttachmentArrayDynamicIndexing; + VkBool32 shaderUniformTexelBufferArrayDynamicIndexing; + VkBool32 shaderStorageTexelBufferArrayDynamicIndexing; + VkBool32 shaderUniformBufferArrayNonUniformIndexing; + VkBool32 shaderSampledImageArrayNonUniformIndexing; + VkBool32 shaderStorageBufferArrayNonUniformIndexing; + VkBool32 shaderStorageImageArrayNonUniformIndexing; + VkBool32 shaderInputAttachmentArrayNonUniformIndexing; + VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing; + VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing; + VkBool32 descriptorBindingUniformBufferUpdateAfterBind; + VkBool32 descriptorBindingSampledImageUpdateAfterBind; + VkBool32 descriptorBindingStorageImageUpdateAfterBind; + VkBool32 descriptorBindingStorageBufferUpdateAfterBind; + VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind; + VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind; + VkBool32 descriptorBindingUpdateUnusedWhilePending; + VkBool32 descriptorBindingPartiallyBound; + VkBool32 descriptorBindingVariableDescriptorCount; + VkBool32 runtimeDescriptorArray; + VkBool32 samplerFilterMinmax; + VkBool32 scalarBlockLayout; + VkBool32 imagelessFramebuffer; + VkBool32 uniformBufferStandardLayout; + VkBool32 shaderSubgroupExtendedTypes; + VkBool32 separateDepthStencilLayouts; + VkBool32 hostQueryReset; + VkBool32 timelineSemaphore; + VkBool32 bufferDeviceAddress; + VkBool32 bufferDeviceAddressCaptureReplay; + VkBool32 bufferDeviceAddressMultiDevice; + VkBool32 vulkanMemoryModel; + VkBool32 vulkanMemoryModelDeviceScope; + VkBool32 vulkanMemoryModelAvailabilityVisibilityChains; + VkBool32 shaderOutputViewportIndex; + VkBool32 shaderOutputLayer; + VkBool32 subgroupBroadcastDynamicId; +} VkPhysicalDeviceVulkan12Features; + +typedef struct VkPhysicalDeviceVulkan12Properties { + VkStructureType sType; + void * pNext; + VkDriverId driverID; + char driverName [ VK_MAX_DRIVER_NAME_SIZE ]; + char driverInfo [ VK_MAX_DRIVER_INFO_SIZE ]; + VkConformanceVersion conformanceVersion; + VkShaderFloatControlsIndependence denormBehaviorIndependence; + VkShaderFloatControlsIndependence roundingModeIndependence; + VkBool32 shaderSignedZeroInfNanPreserveFloat16; + VkBool32 shaderSignedZeroInfNanPreserveFloat32; + VkBool32 shaderSignedZeroInfNanPreserveFloat64; + VkBool32 shaderDenormPreserveFloat16; + VkBool32 shaderDenormPreserveFloat32; + VkBool32 shaderDenormPreserveFloat64; + VkBool32 shaderDenormFlushToZeroFloat16; + VkBool32 shaderDenormFlushToZeroFloat32; + VkBool32 shaderDenormFlushToZeroFloat64; + VkBool32 shaderRoundingModeRTEFloat16; + VkBool32 shaderRoundingModeRTEFloat32; + VkBool32 shaderRoundingModeRTEFloat64; + VkBool32 shaderRoundingModeRTZFloat16; + VkBool32 shaderRoundingModeRTZFloat32; + VkBool32 shaderRoundingModeRTZFloat64; + uint32_t maxUpdateAfterBindDescriptorsInAllPools; + VkBool32 shaderUniformBufferArrayNonUniformIndexingNative; + VkBool32 shaderSampledImageArrayNonUniformIndexingNative; + VkBool32 shaderStorageBufferArrayNonUniformIndexingNative; + VkBool32 shaderStorageImageArrayNonUniformIndexingNative; + VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative; + VkBool32 robustBufferAccessUpdateAfterBind; + VkBool32 quadDivergentImplicitLod; + uint32_t maxPerStageDescriptorUpdateAfterBindSamplers; + uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers; + uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages; + uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments; + uint32_t maxPerStageUpdateAfterBindResources; + uint32_t maxDescriptorSetUpdateAfterBindSamplers; + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers; + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers; + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindSampledImages; + uint32_t maxDescriptorSetUpdateAfterBindStorageImages; + uint32_t maxDescriptorSetUpdateAfterBindInputAttachments; + VkResolveModeFlags supportedDepthResolveModes; + VkResolveModeFlags supportedStencilResolveModes; + VkBool32 independentResolveNone; + VkBool32 independentResolve; + VkBool32 filterMinmaxSingleComponentFormats; + VkBool32 filterMinmaxImageComponentMapping; + uint64_t maxTimelineSemaphoreValueDifference; + VkSampleCountFlags framebufferIntegerColorSampleCounts; +} VkPhysicalDeviceVulkan12Properties; + +typedef struct VkPhysicalDeviceVulkan13Features { + VkStructureType sType; + void * pNext; + VkBool32 robustImageAccess; + VkBool32 inlineUniformBlock; + VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind; + VkBool32 pipelineCreationCacheControl; + VkBool32 privateData; + VkBool32 shaderDemoteToHelperInvocation; + VkBool32 shaderTerminateInvocation; + VkBool32 subgroupSizeControl; + VkBool32 computeFullSubgroups; + VkBool32 synchronization2; + VkBool32 textureCompressionASTC_HDR; + VkBool32 shaderZeroInitializeWorkgroupMemory; + VkBool32 dynamicRendering; + VkBool32 shaderIntegerDotProduct; + VkBool32 maintenance4; +} VkPhysicalDeviceVulkan13Features; + +typedef struct VkPhysicalDeviceVulkan13Properties { + VkStructureType sType; + void * pNext; + uint32_t minSubgroupSize; + uint32_t maxSubgroupSize; + uint32_t maxComputeWorkgroupSubgroups; + VkShaderStageFlags requiredSubgroupSizeStages; + uint32_t maxInlineUniformBlockSize; + uint32_t maxPerStageDescriptorInlineUniformBlocks; + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks; + uint32_t maxDescriptorSetInlineUniformBlocks; + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks; + uint32_t maxInlineUniformTotalSize; + VkBool32 integerDotProduct8BitUnsignedAccelerated; + VkBool32 integerDotProduct8BitSignedAccelerated; + VkBool32 integerDotProduct8BitMixedSignednessAccelerated; + VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedSignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProduct16BitUnsignedAccelerated; + VkBool32 integerDotProduct16BitSignedAccelerated; + VkBool32 integerDotProduct16BitMixedSignednessAccelerated; + VkBool32 integerDotProduct32BitUnsignedAccelerated; + VkBool32 integerDotProduct32BitSignedAccelerated; + VkBool32 integerDotProduct32BitMixedSignednessAccelerated; + VkBool32 integerDotProduct64BitUnsignedAccelerated; + VkBool32 integerDotProduct64BitSignedAccelerated; + VkBool32 integerDotProduct64BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated; + VkDeviceSize storageTexelBufferOffsetAlignmentBytes; + VkBool32 storageTexelBufferOffsetSingleTexelAlignment; + VkDeviceSize uniformTexelBufferOffsetAlignmentBytes; + VkBool32 uniformTexelBufferOffsetSingleTexelAlignment; + VkDeviceSize maxBufferSize; +} VkPhysicalDeviceVulkan13Properties; + +typedef struct VkPhysicalDeviceVulkan14Features { + VkStructureType sType; + void * pNext; + VkBool32 globalPriorityQuery; + VkBool32 shaderSubgroupRotate; + VkBool32 shaderSubgroupRotateClustered; + VkBool32 shaderFloatControls2; + VkBool32 shaderExpectAssume; + VkBool32 rectangularLines; + VkBool32 bresenhamLines; + VkBool32 smoothLines; + VkBool32 stippledRectangularLines; + VkBool32 stippledBresenhamLines; + VkBool32 stippledSmoothLines; + VkBool32 vertexAttributeInstanceRateDivisor; + VkBool32 vertexAttributeInstanceRateZeroDivisor; + VkBool32 indexTypeUint8; + VkBool32 dynamicRenderingLocalRead; + VkBool32 maintenance5; + VkBool32 maintenance6; + VkBool32 pipelineProtectedAccess; + VkBool32 pipelineRobustness; + VkBool32 hostImageCopy; + VkBool32 pushDescriptor; +} VkPhysicalDeviceVulkan14Features; + +typedef struct VkPhysicalDeviceVulkan14Properties { + VkStructureType sType; + void * pNext; + uint32_t lineSubPixelPrecisionBits; + uint32_t maxVertexAttribDivisor; + VkBool32 supportsNonZeroFirstInstance; + uint32_t maxPushDescriptors; + VkBool32 dynamicRenderingLocalReadDepthStencilAttachments; + VkBool32 dynamicRenderingLocalReadMultisampledAttachments; + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting; + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting; + VkBool32 depthStencilSwizzleOneSupport; + VkBool32 polygonModePointSize; + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram; + VkBool32 nonStrictWideLinesUseParallelogram; + VkBool32 blockTexelViewCompatibleMultipleLayers; + uint32_t maxCombinedImageSamplerDescriptorCount; + VkBool32 fragmentShadingRateClampCombinerInputs; + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs; + VkPipelineRobustnessImageBehavior defaultRobustnessImages; + uint32_t copySrcLayoutCount; + VkImageLayout * pCopySrcLayouts; + uint32_t copyDstLayoutCount; + VkImageLayout * pCopyDstLayouts; + uint8_t optimalTilingLayoutUUID [ VK_UUID_SIZE ]; + VkBool32 identicalMemoryTypeRequirements; +} VkPhysicalDeviceVulkan14Properties; + +typedef struct VkPipelineCompilerControlCreateInfoAMD { + VkStructureType sType; + const void * pNext; + VkPipelineCompilerControlFlagsAMD compilerControlFlags; +} VkPipelineCompilerControlCreateInfoAMD; + +typedef struct VkPhysicalDeviceCoherentMemoryFeaturesAMD { + VkStructureType sType; + void * pNext; + VkBool32 deviceCoherentMemory; +} VkPhysicalDeviceCoherentMemoryFeaturesAMD; + +typedef struct VkPhysicalDeviceToolProperties { + VkStructureType sType; + void * pNext; + char name [ VK_MAX_EXTENSION_NAME_SIZE ]; + char version [ VK_MAX_EXTENSION_NAME_SIZE ]; + VkToolPurposeFlags purposes; + char description [ VK_MAX_DESCRIPTION_SIZE ]; + char layer [ VK_MAX_EXTENSION_NAME_SIZE ]; +} VkPhysicalDeviceToolProperties; + +typedef struct VkPhysicalDeviceToolProperties VkPhysicalDeviceToolPropertiesEXT; + +typedef struct VkPhysicalDeviceCustomBorderColorFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 customBorderColors; + VkBool32 customBorderColorWithoutFormat; +} VkPhysicalDeviceCustomBorderColorFeaturesEXT; + +typedef struct VkSamplerBorderColorComponentMappingCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkComponentMapping components; + VkBool32 srgb; +} VkSamplerBorderColorComponentMappingCreateInfoEXT; + +typedef struct VkPhysicalDeviceBorderColorSwizzleFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 borderColorSwizzle; + VkBool32 borderColorSwizzleFromImage; +} VkPhysicalDeviceBorderColorSwizzleFeaturesEXT; + +typedef union VkDeviceOrHostAddressKHR { + VkDeviceAddress deviceAddress; + void * hostAddress; +} VkDeviceOrHostAddressKHR; + +typedef union VkDeviceOrHostAddressConstKHR { + VkDeviceAddress deviceAddress; + const void * hostAddress; +} VkDeviceOrHostAddressConstKHR; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef union VkDeviceOrHostAddressConstAMDX { + VkDeviceAddress deviceAddress; + const void * hostAddress; +} VkDeviceOrHostAddressConstAMDX; + +#endif + +typedef struct VkAccelerationStructureGeometryTrianglesDataKHR { + VkStructureType sType; + const void * pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + uint32_t maxVertex; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceOrHostAddressConstKHR transformData; +} VkAccelerationStructureGeometryTrianglesDataKHR; + +typedef struct VkAccelerationStructureGeometryAabbsDataKHR { + VkStructureType sType; + const void * pNext; + VkDeviceOrHostAddressConstKHR data; + VkDeviceSize stride; +} VkAccelerationStructureGeometryAabbsDataKHR; + +typedef struct VkAccelerationStructureGeometryInstancesDataKHR { + VkStructureType sType; + const void * pNext; + VkBool32 arrayOfPointers; + VkDeviceOrHostAddressConstKHR data; +} VkAccelerationStructureGeometryInstancesDataKHR; + +typedef struct VkAccelerationStructureGeometryLinearSweptSpheresDataNV { + VkStructureType sType; + const void * pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + VkFormat radiusFormat; + VkDeviceOrHostAddressConstKHR radiusData; + VkDeviceSize radiusStride; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceSize indexStride; + VkRayTracingLssIndexingModeNV indexingMode; + VkRayTracingLssPrimitiveEndCapsModeNV endCapsMode; +} VkAccelerationStructureGeometryLinearSweptSpheresDataNV; + +typedef struct VkAccelerationStructureGeometrySpheresDataNV { + VkStructureType sType; + const void * pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + VkFormat radiusFormat; + VkDeviceOrHostAddressConstKHR radiusData; + VkDeviceSize radiusStride; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceSize indexStride; +} VkAccelerationStructureGeometrySpheresDataNV; + +typedef union VkAccelerationStructureGeometryDataKHR { + VkAccelerationStructureGeometryTrianglesDataKHR triangles; + VkAccelerationStructureGeometryAabbsDataKHR aabbs; + VkAccelerationStructureGeometryInstancesDataKHR instances; +} VkAccelerationStructureGeometryDataKHR; + +typedef struct VkAccelerationStructureGeometryKHR { + VkStructureType sType; + const void * pNext; + VkGeometryTypeKHR geometryType; + VkAccelerationStructureGeometryDataKHR geometry; + VkGeometryFlagsKHR flags; +} VkAccelerationStructureGeometryKHR; + +typedef struct VkAccelerationStructureBuildGeometryInfoKHR { + VkStructureType sType; + const void * pNext; + VkAccelerationStructureTypeKHR type; + VkBuildAccelerationStructureFlagsKHR flags; + VkBuildAccelerationStructureModeKHR mode; + VkAccelerationStructureKHR srcAccelerationStructure; + VkAccelerationStructureKHR dstAccelerationStructure; + uint32_t geometryCount; + const VkAccelerationStructureGeometryKHR * pGeometries; + const VkAccelerationStructureGeometryKHR * const* ppGeometries; + VkDeviceOrHostAddressKHR scratchData; +} VkAccelerationStructureBuildGeometryInfoKHR; + +typedef struct VkAccelerationStructureCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkAccelerationStructureCreateFlagsKHR createFlags; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; + VkAccelerationStructureTypeKHR type; + VkDeviceAddress deviceAddress; +} VkAccelerationStructureCreateInfoKHR; + +typedef struct VkAccelerationStructureInstanceKHR { + VkTransformMatrixKHR transform; + uint32_t instanceCustomIndex :24; + uint32_t mask :8; + uint32_t instanceShaderBindingTableRecordOffset :24; + VkGeometryInstanceFlagsKHR flags :8; + uint64_t accelerationStructureReference; +} VkAccelerationStructureInstanceKHR; + +typedef struct VkAccelerationStructureInstanceKHR VkAccelerationStructureInstanceNV; + +typedef struct VkCopyAccelerationStructureToMemoryInfoKHR { + VkStructureType sType; + const void * pNext; + VkAccelerationStructureKHR src; + VkDeviceOrHostAddressKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyAccelerationStructureToMemoryInfoKHR; + +typedef struct VkCopyMemoryToAccelerationStructureInfoKHR { + VkStructureType sType; + const void * pNext; + VkDeviceOrHostAddressConstKHR src; + VkAccelerationStructureKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyMemoryToAccelerationStructureInfoKHR; + +typedef struct VkPhysicalDeviceExtendedDynamicStateFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 extendedDynamicState; +} VkPhysicalDeviceExtendedDynamicStateFeaturesEXT; + +typedef struct VkPhysicalDeviceExtendedDynamicState2FeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 extendedDynamicState2; + VkBool32 extendedDynamicState2LogicOp; + VkBool32 extendedDynamicState2PatchControlPoints; +} VkPhysicalDeviceExtendedDynamicState2FeaturesEXT; + +typedef struct VkPhysicalDeviceExtendedDynamicState3FeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 extendedDynamicState3TessellationDomainOrigin; + VkBool32 extendedDynamicState3DepthClampEnable; + VkBool32 extendedDynamicState3PolygonMode; + VkBool32 extendedDynamicState3RasterizationSamples; + VkBool32 extendedDynamicState3SampleMask; + VkBool32 extendedDynamicState3AlphaToCoverageEnable; + VkBool32 extendedDynamicState3AlphaToOneEnable; + VkBool32 extendedDynamicState3LogicOpEnable; + VkBool32 extendedDynamicState3ColorBlendEnable; + VkBool32 extendedDynamicState3ColorBlendEquation; + VkBool32 extendedDynamicState3ColorWriteMask; + VkBool32 extendedDynamicState3RasterizationStream; + VkBool32 extendedDynamicState3ConservativeRasterizationMode; + VkBool32 extendedDynamicState3ExtraPrimitiveOverestimationSize; + VkBool32 extendedDynamicState3DepthClipEnable; + VkBool32 extendedDynamicState3SampleLocationsEnable; + VkBool32 extendedDynamicState3ColorBlendAdvanced; + VkBool32 extendedDynamicState3ProvokingVertexMode; + VkBool32 extendedDynamicState3LineRasterizationMode; + VkBool32 extendedDynamicState3LineStippleEnable; + VkBool32 extendedDynamicState3DepthClipNegativeOneToOne; + VkBool32 extendedDynamicState3ViewportWScalingEnable; + VkBool32 extendedDynamicState3ViewportSwizzle; + VkBool32 extendedDynamicState3CoverageToColorEnable; + VkBool32 extendedDynamicState3CoverageToColorLocation; + VkBool32 extendedDynamicState3CoverageModulationMode; + VkBool32 extendedDynamicState3CoverageModulationTableEnable; + VkBool32 extendedDynamicState3CoverageModulationTable; + VkBool32 extendedDynamicState3CoverageReductionMode; + VkBool32 extendedDynamicState3RepresentativeFragmentTestEnable; + VkBool32 extendedDynamicState3ShadingRateImageEnable; +} VkPhysicalDeviceExtendedDynamicState3FeaturesEXT; + +typedef struct VkPhysicalDeviceExtendedDynamicState3PropertiesEXT { + VkStructureType sType; + void * pNext; + VkBool32 dynamicPrimitiveTopologyUnrestricted; +} VkPhysicalDeviceExtendedDynamicState3PropertiesEXT; + +typedef struct VkColorBlendAdvancedEXT { + VkBlendOp advancedBlendOp; + VkBool32 srcPremultiplied; + VkBool32 dstPremultiplied; + VkBlendOverlapEXT blendOverlap; + VkBool32 clampResults; +} VkColorBlendAdvancedEXT; + +typedef struct VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 partitionedAccelerationStructure; +} VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV; + +typedef struct VkBuildPartitionedAccelerationStructureIndirectCommandNV { + VkPartitionedAccelerationStructureOpTypeNV opType; + uint32_t argCount; + VkStridedDeviceAddressNV argData; +} VkBuildPartitionedAccelerationStructureIndirectCommandNV; + +typedef struct VkPartitionedAccelerationStructureFlagsNV { + VkStructureType sType; + void * pNext; + VkBool32 enablePartitionTranslation; +} VkPartitionedAccelerationStructureFlagsNV; + +typedef struct VkPartitionedAccelerationStructureWriteInstanceDataNV { + VkTransformMatrixKHR transform; + float explicitAABB [6]; + uint32_t instanceID; + uint32_t instanceMask; + uint32_t instanceContributionToHitGroupIndex; + VkPartitionedAccelerationStructureInstanceFlagsNV instanceFlags; + uint32_t instanceIndex; + uint32_t partitionIndex; + VkDeviceAddress accelerationStructure; +} VkPartitionedAccelerationStructureWriteInstanceDataNV; + +typedef struct VkPartitionedAccelerationStructureUpdateInstanceDataNV { + uint32_t instanceIndex; + uint32_t instanceContributionToHitGroupIndex; + VkDeviceAddress accelerationStructure; +} VkPartitionedAccelerationStructureUpdateInstanceDataNV; + +typedef struct VkWriteDescriptorSetPartitionedAccelerationStructureNV { + VkStructureType sType; + void * pNext; + uint32_t accelerationStructureCount; + const VkDeviceAddress * pAccelerationStructures; +} VkWriteDescriptorSetPartitionedAccelerationStructureNV; + +typedef struct VkPartitionedAccelerationStructureInstancesInputNV { + VkStructureType sType; + void * pNext; + VkBuildAccelerationStructureFlagsKHR flags; + uint32_t instanceCount; + uint32_t maxInstancePerPartitionCount; + uint32_t partitionCount; + uint32_t maxInstanceInGlobalPartitionCount; +} VkPartitionedAccelerationStructureInstancesInputNV; + +typedef struct VkBuildPartitionedAccelerationStructureInfoNV { + VkStructureType sType; + void * pNext; + VkPartitionedAccelerationStructureInstancesInputNV input; + VkDeviceAddress srcAccelerationStructureData; + VkDeviceAddress dstAccelerationStructureData; + VkDeviceAddress scratchData; + VkDeviceAddress srcInfos; + VkDeviceAddress srcInfosCount; +} VkBuildPartitionedAccelerationStructureInfoNV; + +typedef struct VkPhysicalDeviceDiagnosticsConfigFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 diagnosticsConfig; +} VkPhysicalDeviceDiagnosticsConfigFeaturesNV; + +typedef struct VkDeviceDiagnosticsConfigCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkDeviceDiagnosticsConfigFlagsNV flags; +} VkDeviceDiagnosticsConfigCreateInfoNV; + +typedef struct VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures { + VkStructureType sType; + void * pNext; + VkBool32 shaderZeroInitializeWorkgroupMemory; +} VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; + +typedef struct VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR; + +typedef struct VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 shaderSubgroupUniformControlFlow; +} VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; + +typedef struct VkPhysicalDeviceRobustness2FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 robustBufferAccess2; + VkBool32 robustImageAccess2; + VkBool32 nullDescriptor; +} VkPhysicalDeviceRobustness2FeaturesKHR; + +typedef struct VkPhysicalDeviceRobustness2FeaturesKHR VkPhysicalDeviceRobustness2FeaturesEXT; + +typedef struct VkPhysicalDeviceRobustness2PropertiesKHR { + VkStructureType sType; + void * pNext; + VkDeviceSize robustStorageBufferAccessSizeAlignment; + VkDeviceSize robustUniformBufferAccessSizeAlignment; +} VkPhysicalDeviceRobustness2PropertiesKHR; + +typedef struct VkPhysicalDeviceRobustness2PropertiesKHR VkPhysicalDeviceRobustness2PropertiesEXT; + +typedef struct VkPhysicalDeviceImageRobustnessFeatures { + VkStructureType sType; + void * pNext; + VkBool32 robustImageAccess; +} VkPhysicalDeviceImageRobustnessFeatures; + +typedef struct VkPhysicalDeviceImageRobustnessFeatures VkPhysicalDeviceImageRobustnessFeaturesEXT; + +typedef struct VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 workgroupMemoryExplicitLayout; + VkBool32 workgroupMemoryExplicitLayoutScalarBlockLayout; + VkBool32 workgroupMemoryExplicitLayout8BitAccess; + VkBool32 workgroupMemoryExplicitLayout16BitAccess; +} VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 constantAlphaColorBlendFactors; + VkBool32 events; + VkBool32 imageViewFormatReinterpretation; + VkBool32 imageViewFormatSwizzle; + VkBool32 imageView2DOn3DImage; + VkBool32 multisampleArrayImage; + VkBool32 mutableComparisonSamplers; + VkBool32 pointPolygons; + VkBool32 samplerMipLodBias; + VkBool32 separateStencilMaskRef; + VkBool32 shaderSampleRateInterpolationFunctions; + VkBool32 tessellationIsolines; + VkBool32 tessellationPointMode; + VkBool32 triangleFans; + VkBool32 vertexAttributeAccessBeyondStride; +} VkPhysicalDevicePortabilitySubsetFeaturesKHR; + +#endif + +typedef struct VkPhysicalDevice4444FormatsFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 formatA4R4G4B4; + VkBool32 formatA4B4G4R4; +} VkPhysicalDevice4444FormatsFeaturesEXT; + +typedef struct VkPhysicalDeviceSubpassShadingFeaturesHUAWEI { + VkStructureType sType; + void * pNext; + VkBool32 subpassShading; +} VkPhysicalDeviceSubpassShadingFeaturesHUAWEI; + +typedef struct VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI { + VkStructureType sType; + void * pNext; + VkBool32 clustercullingShader; + VkBool32 multiviewClusterCullingShader; +} VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI; + +typedef struct VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI { + VkStructureType sType; + void * pNext; + VkBool32 clusterShadingRate; +} VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI; + +typedef struct VkBufferCopy2 { + VkStructureType sType; + const void * pNext; + VkDeviceSize srcOffset; + VkDeviceSize dstOffset; + VkDeviceSize size; +} VkBufferCopy2; + +typedef struct VkBufferCopy2 VkBufferCopy2KHR; + +typedef struct VkImageCopy2 { + VkStructureType sType; + const void * pNext; + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffset; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffset; + VkExtent3D extent; +} VkImageCopy2; + +typedef struct VkImageCopy2 VkImageCopy2KHR; + +typedef struct VkImageBlit2 { + VkStructureType sType; + const void * pNext; + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffsets [2]; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffsets [2]; +} VkImageBlit2; + +typedef struct VkImageBlit2 VkImageBlit2KHR; + +typedef struct VkBufferImageCopy2 { + VkStructureType sType; + const void * pNext; + VkDeviceSize bufferOffset; + uint32_t bufferRowLength; + uint32_t bufferImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkBufferImageCopy2; + +typedef struct VkBufferImageCopy2 VkBufferImageCopy2KHR; + +typedef struct VkImageResolve2 { + VkStructureType sType; + const void * pNext; + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffset; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffset; + VkExtent3D extent; +} VkImageResolve2; + +typedef struct VkImageResolve2 VkImageResolve2KHR; + +typedef struct VkCopyBufferInfo2 { + VkStructureType sType; + const void * pNext; + VkBuffer srcBuffer; + VkBuffer dstBuffer; + uint32_t regionCount; + const VkBufferCopy2 * pRegions; +} VkCopyBufferInfo2; + +typedef struct VkCopyBufferInfo2 VkCopyBufferInfo2KHR; + +typedef struct VkCopyImageInfo2 { + VkStructureType sType; + const void * pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageCopy2 * pRegions; +} VkCopyImageInfo2; + +typedef struct VkCopyImageInfo2 VkCopyImageInfo2KHR; + +typedef struct VkBlitImageInfo2 { + VkStructureType sType; + const void * pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageBlit2 * pRegions; + VkFilter filter; +} VkBlitImageInfo2; + +typedef struct VkBlitImageInfo2 VkBlitImageInfo2KHR; + +typedef struct VkCopyBufferToImageInfo2 { + VkStructureType sType; + const void * pNext; + VkBuffer srcBuffer; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkBufferImageCopy2 * pRegions; +} VkCopyBufferToImageInfo2; + +typedef struct VkCopyBufferToImageInfo2 VkCopyBufferToImageInfo2KHR; + +typedef struct VkCopyImageToBufferInfo2 { + VkStructureType sType; + const void * pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkBuffer dstBuffer; + uint32_t regionCount; + const VkBufferImageCopy2 * pRegions; +} VkCopyImageToBufferInfo2; + +typedef struct VkCopyImageToBufferInfo2 VkCopyImageToBufferInfo2KHR; + +typedef struct VkResolveImageInfo2 { + VkStructureType sType; + const void * pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageResolve2 * pRegions; +} VkResolveImageInfo2; + +typedef struct VkResolveImageInfo2 VkResolveImageInfo2KHR; + +typedef struct VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 shaderImageInt64Atomics; + VkBool32 sparseImageInt64Atomics; +} VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT; + +typedef struct VkFragmentShadingRateAttachmentInfoKHR { + VkStructureType sType; + const void * pNext; + const VkAttachmentReference2 * pFragmentShadingRateAttachment; + VkExtent2D shadingRateAttachmentTexelSize; +} VkFragmentShadingRateAttachmentInfoKHR; + +typedef struct VkPhysicalDeviceFragmentShadingRateFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 pipelineFragmentShadingRate; + VkBool32 primitiveFragmentShadingRate; + VkBool32 attachmentFragmentShadingRate; +} VkPhysicalDeviceFragmentShadingRateFeaturesKHR; + +typedef struct VkPhysicalDeviceFragmentShadingRatePropertiesKHR { + VkStructureType sType; + void * pNext; + VkExtent2D minFragmentShadingRateAttachmentTexelSize; + VkExtent2D maxFragmentShadingRateAttachmentTexelSize; + uint32_t maxFragmentShadingRateAttachmentTexelSizeAspectRatio; + VkBool32 primitiveFragmentShadingRateWithMultipleViewports; + VkBool32 layeredShadingRateAttachments; + VkBool32 fragmentShadingRateNonTrivialCombinerOps; + VkExtent2D maxFragmentSize; + uint32_t maxFragmentSizeAspectRatio; + uint32_t maxFragmentShadingRateCoverageSamples; + VkSampleCountFlagBits maxFragmentShadingRateRasterizationSamples; + VkBool32 fragmentShadingRateWithShaderDepthStencilWrites; + VkBool32 fragmentShadingRateWithSampleMask; + VkBool32 fragmentShadingRateWithShaderSampleMask; + VkBool32 fragmentShadingRateWithConservativeRasterization; + VkBool32 fragmentShadingRateWithFragmentShaderInterlock; + VkBool32 fragmentShadingRateWithCustomSampleLocations; + VkBool32 fragmentShadingRateStrictMultiplyCombiner; +} VkPhysicalDeviceFragmentShadingRatePropertiesKHR; + +typedef struct VkPhysicalDeviceFragmentShadingRateKHR { + VkStructureType sType; + void * pNext; + VkSampleCountFlags sampleCounts; + VkExtent2D fragmentSize; +} VkPhysicalDeviceFragmentShadingRateKHR; + +typedef struct VkPhysicalDeviceShaderTerminateInvocationFeatures { + VkStructureType sType; + void * pNext; + VkBool32 shaderTerminateInvocation; +} VkPhysicalDeviceShaderTerminateInvocationFeatures; + +typedef struct VkPhysicalDeviceShaderTerminateInvocationFeatures VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR; + +typedef struct VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 fragmentShadingRateEnums; + VkBool32 supersampleFragmentShadingRates; + VkBool32 noInvocationFragmentShadingRates; +} VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV; + +typedef struct VkAccelerationStructureBuildSizesInfoKHR { + VkStructureType sType; + const void * pNext; + VkDeviceSize accelerationStructureSize; + VkDeviceSize updateScratchSize; + VkDeviceSize buildScratchSize; +} VkAccelerationStructureBuildSizesInfoKHR; + +typedef struct VkPhysicalDeviceImage2DViewOf3DFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 image2DViewOf3D; + VkBool32 sampler2DViewOf3D; +} VkPhysicalDeviceImage2DViewOf3DFeaturesEXT; + +typedef struct VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 imageSlicedViewOf3D; +} VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT; + +typedef struct VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 attachmentFeedbackLoopDynamicState; +} VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT; + +typedef struct VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 legacyVertexAttributes; +} VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT; + +typedef struct VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT { + VkStructureType sType; + void * pNext; + VkBool32 nativeUnalignedPerformance; +} VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT; + +typedef struct VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 mutableDescriptorType; +} VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT; + +typedef struct VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE; + +typedef struct VkPhysicalDeviceDepthClipControlFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 depthClipControl; +} VkPhysicalDeviceDepthClipControlFeaturesEXT; + +typedef struct VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 zeroInitializeDeviceMemory; +} VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; + +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 deviceGeneratedCommands; + VkBool32 dynamicGeneratedPipelineLayout; +} VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT; + +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT { + VkStructureType sType; + void * pNext; + uint32_t maxIndirectPipelineCount; + uint32_t maxIndirectShaderObjectCount; + uint32_t maxIndirectSequenceCount; + uint32_t maxIndirectCommandsTokenCount; + uint32_t maxIndirectCommandsTokenOffset; + uint32_t maxIndirectCommandsIndirectStride; + VkIndirectCommandsInputModeFlagsEXT supportedIndirectCommandsInputModes; + VkShaderStageFlags supportedIndirectCommandsShaderStages; + VkShaderStageFlags supportedIndirectCommandsShaderStagesPipelineBinding; + VkShaderStageFlags supportedIndirectCommandsShaderStagesShaderBinding; + VkBool32 deviceGeneratedCommandsTransformFeedback; + VkBool32 deviceGeneratedCommandsMultiDrawIndirectCount; +} VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT; + +typedef struct VkIndirectExecutionSetShaderInfoEXT { + VkStructureType sType; + const void * pNext; + uint32_t shaderCount; + const VkShaderEXT * pInitialShaders; + const VkIndirectExecutionSetShaderLayoutInfoEXT * pSetLayoutInfos; + uint32_t maxShaderCount; + uint32_t pushConstantRangeCount; + const VkPushConstantRange * pPushConstantRanges; +} VkIndirectExecutionSetShaderInfoEXT; + +typedef union VkIndirectExecutionSetInfoEXT { + const VkIndirectExecutionSetPipelineInfoEXT * pPipelineInfo; + const VkIndirectExecutionSetShaderInfoEXT * pShaderInfo; +} VkIndirectExecutionSetInfoEXT; + +typedef struct VkIndirectExecutionSetCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkIndirectExecutionSetInfoTypeEXT type; + VkIndirectExecutionSetInfoEXT info; +} VkIndirectExecutionSetCreateInfoEXT; + +typedef struct VkGeneratedCommandsInfoEXT { + VkStructureType sType; + const void * pNext; + VkShaderStageFlags shaderStages; + VkIndirectExecutionSetEXT indirectExecutionSet; + VkIndirectCommandsLayoutEXT indirectCommandsLayout; + VkDeviceAddress indirectAddress; + VkDeviceSize indirectAddressSize; + VkDeviceAddress preprocessAddress; + VkDeviceSize preprocessSize; + uint32_t maxSequenceCount; + VkDeviceAddress sequenceCountAddress; + uint32_t maxDrawCount; +} VkGeneratedCommandsInfoEXT; + +typedef struct VkDrawIndirectCountIndirectCommandEXT { + VkDeviceAddress bufferAddress; + uint32_t stride; + uint32_t commandCount; +} VkDrawIndirectCountIndirectCommandEXT; + +typedef struct VkBindVertexBufferIndirectCommandEXT { + VkDeviceAddress bufferAddress; + uint32_t size; + uint32_t stride; +} VkBindVertexBufferIndirectCommandEXT; + +typedef struct VkBindIndexBufferIndirectCommandEXT { + VkDeviceAddress bufferAddress; + uint32_t size; + VkIndexType indexType; +} VkBindIndexBufferIndirectCommandEXT; + +typedef struct VkIndirectCommandsPushConstantTokenEXT { + VkPushConstantRange updateRange; +} VkIndirectCommandsPushConstantTokenEXT; + +typedef struct VkIndirectCommandsExecutionSetTokenEXT { + VkIndirectExecutionSetInfoTypeEXT type; + VkShaderStageFlags shaderStages; +} VkIndirectCommandsExecutionSetTokenEXT; + +typedef union VkIndirectCommandsTokenDataEXT { + const VkIndirectCommandsPushConstantTokenEXT * pPushConstant; + const VkIndirectCommandsVertexBufferTokenEXT * pVertexBuffer; + const VkIndirectCommandsIndexBufferTokenEXT * pIndexBuffer; + const VkIndirectCommandsExecutionSetTokenEXT * pExecutionSet; +} VkIndirectCommandsTokenDataEXT; + +typedef struct VkPipelineViewportDepthClipControlCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkBool32 negativeOneToOne; +} VkPipelineViewportDepthClipControlCreateInfoEXT; + +typedef struct VkPhysicalDeviceDepthClampControlFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 depthClampControl; +} VkPhysicalDeviceDepthClampControlFeaturesEXT; + +typedef struct VkPipelineViewportDepthClampControlCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkDepthClampModeEXT depthClampMode; + const VkDepthClampRangeEXT * pDepthClampRange; +} VkPipelineViewportDepthClampControlCreateInfoEXT; + +typedef struct VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 vertexInputDynamicState; +} VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT; + +typedef struct VkPhysicalDeviceExternalMemoryRDMAFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 externalMemoryRDMA; +} VkPhysicalDeviceExternalMemoryRDMAFeaturesNV; + +typedef struct VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 shaderRelaxedExtendedInstruction; +} VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR; + +typedef struct VkPhysicalDeviceColorWriteEnableFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 colorWriteEnable; +} VkPhysicalDeviceColorWriteEnableFeaturesEXT; + +typedef struct VkPipelineColorWriteCreateInfoEXT { + VkStructureType sType; + const void * pNext; + uint32_t attachmentCount; + const VkBool32 * pColorWriteEnables; +} VkPipelineColorWriteCreateInfoEXT; + +typedef struct VkMemoryBarrier2 { + VkStructureType sType; + const void * pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; +} VkMemoryBarrier2; + +typedef struct VkMemoryBarrier2 VkMemoryBarrier2KHR; + +typedef struct VkImageMemoryBarrier2 { + VkStructureType sType; + const void * pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; + VkImageLayout oldLayout; + VkImageLayout newLayout; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkImage image; + VkImageSubresourceRange subresourceRange; +} VkImageMemoryBarrier2; + +typedef struct VkImageMemoryBarrier2 VkImageMemoryBarrier2KHR; + +typedef struct VkBufferMemoryBarrier2 { + VkStructureType sType; + const void * pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; +} VkBufferMemoryBarrier2; + +typedef struct VkBufferMemoryBarrier2 VkBufferMemoryBarrier2KHR; + +typedef struct VkMemoryBarrierAccessFlags3KHR { + VkStructureType sType; + const void * pNext; + VkAccessFlags3KHR srcAccessMask3; + VkAccessFlags3KHR dstAccessMask3; +} VkMemoryBarrierAccessFlags3KHR; + +typedef struct VkDependencyInfo { + VkStructureType sType; + const void * pNext; + VkDependencyFlags dependencyFlags; + uint32_t memoryBarrierCount; + const VkMemoryBarrier2 * pMemoryBarriers; + uint32_t bufferMemoryBarrierCount; + const VkBufferMemoryBarrier2 * pBufferMemoryBarriers; + uint32_t imageMemoryBarrierCount; + const VkImageMemoryBarrier2 * pImageMemoryBarriers; +} VkDependencyInfo; + +typedef struct VkDependencyInfo VkDependencyInfoKHR; + +typedef struct VkSemaphoreSubmitInfo { + VkStructureType sType; + const void * pNext; + VkSemaphore semaphore; + uint64_t value; + VkPipelineStageFlags2 stageMask; + uint32_t deviceIndex; +} VkSemaphoreSubmitInfo; + +typedef struct VkSemaphoreSubmitInfo VkSemaphoreSubmitInfoKHR; + +typedef struct VkSubmitInfo2 { + VkStructureType sType; + const void * pNext; + VkSubmitFlags flags; + uint32_t waitSemaphoreInfoCount; + const VkSemaphoreSubmitInfo * pWaitSemaphoreInfos; + uint32_t commandBufferInfoCount; + const VkCommandBufferSubmitInfo * pCommandBufferInfos; + uint32_t signalSemaphoreInfoCount; + const VkSemaphoreSubmitInfo * pSignalSemaphoreInfos; +} VkSubmitInfo2; + +typedef struct VkSubmitInfo2 VkSubmitInfo2KHR; + +typedef struct VkQueueFamilyCheckpointProperties2NV { + VkStructureType sType; + void * pNext; + VkPipelineStageFlags2 checkpointExecutionStageMask; +} VkQueueFamilyCheckpointProperties2NV; + +typedef struct VkCheckpointData2NV { + VkStructureType sType; + void * pNext; + VkPipelineStageFlags2 stage; + void * pCheckpointMarker; +} VkCheckpointData2NV; + +typedef struct VkPhysicalDeviceSynchronization2Features { + VkStructureType sType; + void * pNext; + VkBool32 synchronization2; +} VkPhysicalDeviceSynchronization2Features; + +typedef struct VkPhysicalDeviceSynchronization2Features VkPhysicalDeviceSynchronization2FeaturesKHR; + +typedef struct VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 unifiedImageLayouts; + VkBool32 unifiedImageLayoutsVideo; +} VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + +typedef struct VkPhysicalDeviceHostImageCopyFeatures { + VkStructureType sType; + void * pNext; + VkBool32 hostImageCopy; +} VkPhysicalDeviceHostImageCopyFeatures; + +typedef struct VkPhysicalDeviceHostImageCopyFeatures VkPhysicalDeviceHostImageCopyFeaturesEXT; + +typedef struct VkPhysicalDeviceHostImageCopyProperties { + VkStructureType sType; + void * pNext; + uint32_t copySrcLayoutCount; + VkImageLayout * pCopySrcLayouts; + uint32_t copyDstLayoutCount; + VkImageLayout * pCopyDstLayouts; + uint8_t optimalTilingLayoutUUID [ VK_UUID_SIZE ]; + VkBool32 identicalMemoryTypeRequirements; +} VkPhysicalDeviceHostImageCopyProperties; + +typedef struct VkPhysicalDeviceHostImageCopyProperties VkPhysicalDeviceHostImageCopyPropertiesEXT; + +typedef struct VkMemoryToImageCopy { + VkStructureType sType; + const void * pNext; + const void * pHostPointer; + uint32_t memoryRowLength; + uint32_t memoryImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkMemoryToImageCopy; + +typedef struct VkMemoryToImageCopy VkMemoryToImageCopyEXT; + +typedef struct VkImageToMemoryCopy { + VkStructureType sType; + const void * pNext; + void * pHostPointer; + uint32_t memoryRowLength; + uint32_t memoryImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkImageToMemoryCopy; + +typedef struct VkImageToMemoryCopy VkImageToMemoryCopyEXT; + +typedef struct VkCopyMemoryToImageInfo { + VkStructureType sType; + const void * pNext; + VkHostImageCopyFlags flags; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkMemoryToImageCopy * pRegions; +} VkCopyMemoryToImageInfo; + +typedef struct VkCopyMemoryToImageInfo VkCopyMemoryToImageInfoEXT; + +typedef struct VkCopyImageToMemoryInfo { + VkStructureType sType; + const void * pNext; + VkHostImageCopyFlags flags; + VkImage srcImage; + VkImageLayout srcImageLayout; + uint32_t regionCount; + const VkImageToMemoryCopy * pRegions; +} VkCopyImageToMemoryInfo; + +typedef struct VkCopyImageToMemoryInfo VkCopyImageToMemoryInfoEXT; + +typedef struct VkCopyImageToImageInfo { + VkStructureType sType; + const void * pNext; + VkHostImageCopyFlags flags; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageCopy2 * pRegions; +} VkCopyImageToImageInfo; + +typedef struct VkCopyImageToImageInfo VkCopyImageToImageInfoEXT; + +typedef struct VkHostImageLayoutTransitionInfo { + VkStructureType sType; + const void * pNext; + VkImage image; + VkImageLayout oldLayout; + VkImageLayout newLayout; + VkImageSubresourceRange subresourceRange; +} VkHostImageLayoutTransitionInfo; + +typedef struct VkHostImageLayoutTransitionInfo VkHostImageLayoutTransitionInfoEXT; + +typedef struct VkSubresourceHostMemcpySize { + VkStructureType sType; + void * pNext; + VkDeviceSize size; +} VkSubresourceHostMemcpySize; + +typedef struct VkSubresourceHostMemcpySize VkSubresourceHostMemcpySizeEXT; + +typedef struct VkHostImageCopyDevicePerformanceQuery { + VkStructureType sType; + void * pNext; + VkBool32 optimalDeviceAccess; + VkBool32 identicalMemoryLayout; +} VkHostImageCopyDevicePerformanceQuery; + +typedef struct VkHostImageCopyDevicePerformanceQuery VkHostImageCopyDevicePerformanceQueryEXT; + +typedef struct VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 primitivesGeneratedQuery; + VkBool32 primitivesGeneratedQueryWithRasterizerDiscard; + VkBool32 primitivesGeneratedQueryWithNonZeroStreams; +} VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; + +typedef struct VkPhysicalDeviceLegacyDitheringFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 legacyDithering; +} VkPhysicalDeviceLegacyDitheringFeaturesEXT; + +typedef struct VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 multisampledRenderToSingleSampled; +} VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; + +typedef struct VkSurfaceCapabilitiesPresentId2KHR { + VkStructureType sType; + void * pNext; + VkBool32 presentId2Supported; +} VkSurfaceCapabilitiesPresentId2KHR; + +typedef struct VkSurfaceCapabilitiesPresentWait2KHR { + VkStructureType sType; + void * pNext; + VkBool32 presentWait2Supported; +} VkSurfaceCapabilitiesPresentWait2KHR; + +typedef struct VkSubpassResolvePerformanceQueryEXT { + VkStructureType sType; + void * pNext; + VkBool32 optimal; +} VkSubpassResolvePerformanceQueryEXT; + +typedef struct VkMultisampledRenderToSingleSampledInfoEXT { + VkStructureType sType; + const void * pNext; + VkBool32 multisampledRenderToSingleSampledEnable; + VkSampleCountFlagBits rasterizationSamples; +} VkMultisampledRenderToSingleSampledInfoEXT; + +typedef struct VkPhysicalDevicePipelineProtectedAccessFeatures { + VkStructureType sType; + void * pNext; + VkBool32 pipelineProtectedAccess; +} VkPhysicalDevicePipelineProtectedAccessFeatures; + +typedef struct VkPhysicalDevicePipelineProtectedAccessFeatures VkPhysicalDevicePipelineProtectedAccessFeaturesEXT; + +typedef struct VkQueueFamilyVideoPropertiesKHR { + VkStructureType sType; + void * pNext; + VkVideoCodecOperationFlagsKHR videoCodecOperations; +} VkQueueFamilyVideoPropertiesKHR; + +typedef struct VkQueueFamilyQueryResultStatusPropertiesKHR { + VkStructureType sType; + void * pNext; + VkBool32 queryResultStatusSupport; +} VkQueueFamilyQueryResultStatusPropertiesKHR; + +typedef struct VkPhysicalDeviceVideoFormatInfoKHR { + VkStructureType sType; + const void * pNext; + VkImageUsageFlags imageUsage; +} VkPhysicalDeviceVideoFormatInfoKHR; + +typedef struct VkVideoFormatPropertiesKHR { + VkStructureType sType; + void * pNext; + VkFormat format; + VkComponentMapping componentMapping; + VkImageCreateFlags imageCreateFlags; + VkImageType imageType; + VkImageTiling imageTiling; + VkImageUsageFlags imageUsageFlags; +} VkVideoFormatPropertiesKHR; + +typedef struct VkVideoFormatH265QuantizationMapPropertiesKHR { + VkStructureType sType; + void * pNext; + VkVideoEncodeH265CtbSizeFlagsKHR compatibleCtbSizes; +} VkVideoFormatH265QuantizationMapPropertiesKHR; + +typedef struct VkVideoFormatAV1QuantizationMapPropertiesKHR { + VkStructureType sType; + void * pNext; + VkVideoEncodeAV1SuperblockSizeFlagsKHR compatibleSuperblockSizes; +} VkVideoFormatAV1QuantizationMapPropertiesKHR; + +typedef struct VkVideoProfileInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoCodecOperationFlagBitsKHR videoCodecOperation; + VkVideoChromaSubsamplingFlagsKHR chromaSubsampling; + VkVideoComponentBitDepthFlagsKHR lumaBitDepth; + VkVideoComponentBitDepthFlagsKHR chromaBitDepth; +} VkVideoProfileInfoKHR; + +typedef struct VkVideoCapabilitiesKHR { + VkStructureType sType; + void * pNext; + VkVideoCapabilityFlagsKHR flags; + VkDeviceSize minBitstreamBufferOffsetAlignment; + VkDeviceSize minBitstreamBufferSizeAlignment; + VkExtent2D pictureAccessGranularity; + VkExtent2D minCodedExtent; + VkExtent2D maxCodedExtent; + uint32_t maxDpbSlots; + uint32_t maxActiveReferencePictures; + VkExtensionProperties stdHeaderVersion; +} VkVideoCapabilitiesKHR; + +typedef struct VkVideoSessionMemoryRequirementsKHR { + VkStructureType sType; + void * pNext; + uint32_t memoryBindIndex; + VkMemoryRequirements memoryRequirements; +} VkVideoSessionMemoryRequirementsKHR; + +typedef struct VkBindVideoSessionMemoryInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t memoryBindIndex; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; + VkDeviceSize memorySize; +} VkBindVideoSessionMemoryInfoKHR; + +typedef struct VkVideoDecodeCapabilitiesKHR { + VkStructureType sType; + void * pNext; + VkVideoDecodeCapabilityFlagsKHR flags; +} VkVideoDecodeCapabilitiesKHR; + +typedef struct VkVideoDecodeUsageInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoDecodeUsageFlagsKHR videoUsageHints; +} VkVideoDecodeUsageInfoKHR; + +typedef struct VkVideoDecodeInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoDecodeFlagsKHR flags; + VkBuffer srcBuffer; + VkDeviceSize srcBufferOffset; + VkDeviceSize srcBufferRange; + VkVideoPictureResourceInfoKHR dstPictureResource; + const VkVideoReferenceSlotInfoKHR * pSetupReferenceSlot; + uint32_t referenceSlotCount; + const VkVideoReferenceSlotInfoKHR * pReferenceSlots; +} VkVideoDecodeInfoKHR; + +typedef struct VkPhysicalDeviceVideoMaintenance1FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 videoMaintenance1; +} VkPhysicalDeviceVideoMaintenance1FeaturesKHR; + +typedef struct VkPhysicalDeviceVideoMaintenance2FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 videoMaintenance2; +} VkPhysicalDeviceVideoMaintenance2FeaturesKHR; + +typedef struct VkPhysicalDeviceVideoDecodeVP9FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 videoDecodeVP9; +} VkPhysicalDeviceVideoDecodeVP9FeaturesKHR; + +typedef struct VkVideoDecodeAV1ProfileInfoKHR { + VkStructureType sType; + const void * pNext; + StdVideoAV1Profile stdProfile; + VkBool32 filmGrainSupport; +} VkVideoDecodeAV1ProfileInfoKHR; + +typedef struct VkVideoSessionCreateInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t queueFamilyIndex; + VkVideoSessionCreateFlagsKHR flags; + const VkVideoProfileInfoKHR * pVideoProfile; + VkFormat pictureFormat; + VkExtent2D maxCodedExtent; + VkFormat referencePictureFormat; + uint32_t maxDpbSlots; + uint32_t maxActiveReferencePictures; + const VkExtensionProperties * pStdHeaderVersion; +} VkVideoSessionCreateInfoKHR; + +typedef struct VkVideoSessionParametersCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoSessionParametersCreateFlagsKHR flags; + VkVideoSessionParametersKHR videoSessionParametersTemplate; + VkVideoSessionKHR videoSession; +} VkVideoSessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeSessionParametersFeedbackInfoKHR { + VkStructureType sType; + void * pNext; + VkBool32 hasOverrides; +} VkVideoEncodeSessionParametersFeedbackInfoKHR; + +typedef struct VkVideoBeginCodingInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoBeginCodingFlagsKHR flags; + VkVideoSessionKHR videoSession; + VkVideoSessionParametersKHR videoSessionParameters; + uint32_t referenceSlotCount; + const VkVideoReferenceSlotInfoKHR * pReferenceSlots; +} VkVideoBeginCodingInfoKHR; + +typedef struct VkVideoEndCodingInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoEndCodingFlagsKHR flags; +} VkVideoEndCodingInfoKHR; + +typedef struct VkVideoCodingControlInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoCodingControlFlagsKHR flags; +} VkVideoCodingControlInfoKHR; + +typedef struct VkVideoEncodeUsageInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoEncodeUsageFlagsKHR videoUsageHints; + VkVideoEncodeContentFlagsKHR videoContentHints; + VkVideoEncodeTuningModeKHR tuningMode; +} VkVideoEncodeUsageInfoKHR; + +typedef struct VkVideoEncodeInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoEncodeFlagsKHR flags; + VkBuffer dstBuffer; + VkDeviceSize dstBufferOffset; + VkDeviceSize dstBufferRange; + VkVideoPictureResourceInfoKHR srcPictureResource; + const VkVideoReferenceSlotInfoKHR * pSetupReferenceSlot; + uint32_t referenceSlotCount; + const VkVideoReferenceSlotInfoKHR * pReferenceSlots; + uint32_t precedingExternallyEncodedBytes; +} VkVideoEncodeInfoKHR; + +typedef struct VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 videoEncodeQuantizationMap; +} VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR; + +typedef struct VkQueryPoolVideoEncodeFeedbackCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoEncodeFeedbackFlagsKHR encodeFeedbackFlags; +} VkQueryPoolVideoEncodeFeedbackCreateInfoKHR; + +typedef struct VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR { + VkStructureType sType; + const void * pNext; + const VkVideoProfileInfoKHR * pVideoProfile; + uint32_t qualityLevel; +} VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR; + +typedef struct VkVideoEncodeRateControlInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoEncodeRateControlFlagsKHR flags; + VkVideoEncodeRateControlModeFlagBitsKHR rateControlMode; + uint32_t layerCount; + const VkVideoEncodeRateControlLayerInfoKHR * pLayers; + uint32_t virtualBufferSizeInMs; + uint32_t initialVirtualBufferSizeInMs; +} VkVideoEncodeRateControlInfoKHR; + +typedef struct VkVideoEncodeCapabilitiesKHR { + VkStructureType sType; + void * pNext; + VkVideoEncodeCapabilityFlagsKHR flags; + VkVideoEncodeRateControlModeFlagsKHR rateControlModes; + uint32_t maxRateControlLayers; + uint64_t maxBitrate; + uint32_t maxQualityLevels; + VkExtent2D encodeInputPictureGranularity; + VkVideoEncodeFeedbackFlagsKHR supportedEncodeFeedbackFlags; +} VkVideoEncodeCapabilitiesKHR; + +typedef struct VkVideoEncodeH264CapabilitiesKHR { + VkStructureType sType; + void * pNext; + VkVideoEncodeH264CapabilityFlagsKHR flags; + StdVideoH264LevelIdc maxLevelIdc; + uint32_t maxSliceCount; + uint32_t maxPPictureL0ReferenceCount; + uint32_t maxBPictureL0ReferenceCount; + uint32_t maxL1ReferenceCount; + uint32_t maxTemporalLayerCount; + VkBool32 expectDyadicTemporalLayerPattern; + int32_t minQp; + int32_t maxQp; + VkBool32 prefersGopRemainingFrames; + VkBool32 requiresGopRemainingFrames; + VkVideoEncodeH264StdFlagsKHR stdSyntaxFlags; +} VkVideoEncodeH264CapabilitiesKHR; + +typedef struct VkVideoEncodeH264QualityLevelPropertiesKHR { + VkStructureType sType; + void * pNext; + VkVideoEncodeH264RateControlFlagsKHR preferredRateControlFlags; + uint32_t preferredGopFrameCount; + uint32_t preferredIdrPeriod; + uint32_t preferredConsecutiveBFrameCount; + uint32_t preferredTemporalLayerCount; + VkVideoEncodeH264QpKHR preferredConstantQp; + uint32_t preferredMaxL0ReferenceCount; + uint32_t preferredMaxL1ReferenceCount; + VkBool32 preferredStdEntropyCodingModeFlag; +} VkVideoEncodeH264QualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeH264SessionCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkBool32 useMaxLevelIdc; + StdVideoH264LevelIdc maxLevelIdc; +} VkVideoEncodeH264SessionCreateInfoKHR; + +typedef struct VkVideoEncodeH264SessionParametersGetInfoKHR { + VkStructureType sType; + const void * pNext; + VkBool32 writeStdSPS; + VkBool32 writeStdPPS; + uint32_t stdSPSId; + uint32_t stdPPSId; +} VkVideoEncodeH264SessionParametersGetInfoKHR; + +typedef struct VkVideoEncodeH264SessionParametersFeedbackInfoKHR { + VkStructureType sType; + void * pNext; + VkBool32 hasStdSPSOverrides; + VkBool32 hasStdPPSOverrides; +} VkVideoEncodeH264SessionParametersFeedbackInfoKHR; + +typedef struct VkVideoEncodeH264PictureInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t naluSliceEntryCount; + const VkVideoEncodeH264NaluSliceInfoKHR * pNaluSliceEntries; + const StdVideoEncodeH264PictureInfo * pStdPictureInfo; + VkBool32 generatePrefixNalu; +} VkVideoEncodeH264PictureInfoKHR; + +typedef struct VkVideoEncodeH264RateControlInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoEncodeH264RateControlFlagsKHR flags; + uint32_t gopFrameCount; + uint32_t idrPeriod; + uint32_t consecutiveBFrameCount; + uint32_t temporalLayerCount; +} VkVideoEncodeH264RateControlInfoKHR; + +typedef struct VkVideoEncodeH264GopRemainingFrameInfoKHR { + VkStructureType sType; + const void * pNext; + VkBool32 useGopRemainingFrames; + uint32_t gopRemainingI; + uint32_t gopRemainingP; + uint32_t gopRemainingB; +} VkVideoEncodeH264GopRemainingFrameInfoKHR; + +typedef struct VkVideoEncodeH264RateControlLayerInfoKHR { + VkStructureType sType; + const void * pNext; + VkBool32 useMinQp; + VkVideoEncodeH264QpKHR minQp; + VkBool32 useMaxQp; + VkVideoEncodeH264QpKHR maxQp; + VkBool32 useMaxFrameSize; + VkVideoEncodeH264FrameSizeKHR maxFrameSize; +} VkVideoEncodeH264RateControlLayerInfoKHR; + +typedef struct VkVideoEncodeH265CapabilitiesKHR { + VkStructureType sType; + void * pNext; + VkVideoEncodeH265CapabilityFlagsKHR flags; + StdVideoH265LevelIdc maxLevelIdc; + uint32_t maxSliceSegmentCount; + VkExtent2D maxTiles; + VkVideoEncodeH265CtbSizeFlagsKHR ctbSizes; + VkVideoEncodeH265TransformBlockSizeFlagsKHR transformBlockSizes; + uint32_t maxPPictureL0ReferenceCount; + uint32_t maxBPictureL0ReferenceCount; + uint32_t maxL1ReferenceCount; + uint32_t maxSubLayerCount; + VkBool32 expectDyadicTemporalSubLayerPattern; + int32_t minQp; + int32_t maxQp; + VkBool32 prefersGopRemainingFrames; + VkBool32 requiresGopRemainingFrames; + VkVideoEncodeH265StdFlagsKHR stdSyntaxFlags; +} VkVideoEncodeH265CapabilitiesKHR; + +typedef struct VkVideoEncodeH265QualityLevelPropertiesKHR { + VkStructureType sType; + void * pNext; + VkVideoEncodeH265RateControlFlagsKHR preferredRateControlFlags; + uint32_t preferredGopFrameCount; + uint32_t preferredIdrPeriod; + uint32_t preferredConsecutiveBFrameCount; + uint32_t preferredSubLayerCount; + VkVideoEncodeH265QpKHR preferredConstantQp; + uint32_t preferredMaxL0ReferenceCount; + uint32_t preferredMaxL1ReferenceCount; +} VkVideoEncodeH265QualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeH265SessionCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkBool32 useMaxLevelIdc; + StdVideoH265LevelIdc maxLevelIdc; +} VkVideoEncodeH265SessionCreateInfoKHR; + +typedef struct VkVideoEncodeH265SessionParametersGetInfoKHR { + VkStructureType sType; + const void * pNext; + VkBool32 writeStdVPS; + VkBool32 writeStdSPS; + VkBool32 writeStdPPS; + uint32_t stdVPSId; + uint32_t stdSPSId; + uint32_t stdPPSId; +} VkVideoEncodeH265SessionParametersGetInfoKHR; + +typedef struct VkVideoEncodeH265SessionParametersFeedbackInfoKHR { + VkStructureType sType; + void * pNext; + VkBool32 hasStdVPSOverrides; + VkBool32 hasStdSPSOverrides; + VkBool32 hasStdPPSOverrides; +} VkVideoEncodeH265SessionParametersFeedbackInfoKHR; + +typedef struct VkVideoEncodeH265PictureInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t naluSliceSegmentEntryCount; + const VkVideoEncodeH265NaluSliceSegmentInfoKHR * pNaluSliceSegmentEntries; + const StdVideoEncodeH265PictureInfo * pStdPictureInfo; +} VkVideoEncodeH265PictureInfoKHR; + +typedef struct VkVideoEncodeH265RateControlInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoEncodeH265RateControlFlagsKHR flags; + uint32_t gopFrameCount; + uint32_t idrPeriod; + uint32_t consecutiveBFrameCount; + uint32_t subLayerCount; +} VkVideoEncodeH265RateControlInfoKHR; + +typedef struct VkVideoEncodeH265GopRemainingFrameInfoKHR { + VkStructureType sType; + const void * pNext; + VkBool32 useGopRemainingFrames; + uint32_t gopRemainingI; + uint32_t gopRemainingP; + uint32_t gopRemainingB; +} VkVideoEncodeH265GopRemainingFrameInfoKHR; + +typedef struct VkVideoEncodeH265RateControlLayerInfoKHR { + VkStructureType sType; + const void * pNext; + VkBool32 useMinQp; + VkVideoEncodeH265QpKHR minQp; + VkBool32 useMaxQp; + VkVideoEncodeH265QpKHR maxQp; + VkBool32 useMaxFrameSize; + VkVideoEncodeH265FrameSizeKHR maxFrameSize; +} VkVideoEncodeH265RateControlLayerInfoKHR; + +typedef struct VkVideoEncodeAV1CapabilitiesKHR { + VkStructureType sType; + void * pNext; + VkVideoEncodeAV1CapabilityFlagsKHR flags; + StdVideoAV1Level maxLevel; + VkExtent2D codedPictureAlignment; + VkExtent2D maxTiles; + VkExtent2D minTileSize; + VkExtent2D maxTileSize; + VkVideoEncodeAV1SuperblockSizeFlagsKHR superblockSizes; + uint32_t maxSingleReferenceCount; + uint32_t singleReferenceNameMask; + uint32_t maxUnidirectionalCompoundReferenceCount; + uint32_t maxUnidirectionalCompoundGroup1ReferenceCount; + uint32_t unidirectionalCompoundReferenceNameMask; + uint32_t maxBidirectionalCompoundReferenceCount; + uint32_t maxBidirectionalCompoundGroup1ReferenceCount; + uint32_t maxBidirectionalCompoundGroup2ReferenceCount; + uint32_t bidirectionalCompoundReferenceNameMask; + uint32_t maxTemporalLayerCount; + uint32_t maxSpatialLayerCount; + uint32_t maxOperatingPoints; + uint32_t minQIndex; + uint32_t maxQIndex; + VkBool32 prefersGopRemainingFrames; + VkBool32 requiresGopRemainingFrames; + VkVideoEncodeAV1StdFlagsKHR stdSyntaxFlags; +} VkVideoEncodeAV1CapabilitiesKHR; + +typedef struct VkVideoEncodeAV1QualityLevelPropertiesKHR { + VkStructureType sType; + void * pNext; + VkVideoEncodeAV1RateControlFlagsKHR preferredRateControlFlags; + uint32_t preferredGopFrameCount; + uint32_t preferredKeyFramePeriod; + uint32_t preferredConsecutiveBipredictiveFrameCount; + uint32_t preferredTemporalLayerCount; + VkVideoEncodeAV1QIndexKHR preferredConstantQIndex; + uint32_t preferredMaxSingleReferenceCount; + uint32_t preferredSingleReferenceNameMask; + uint32_t preferredMaxUnidirectionalCompoundReferenceCount; + uint32_t preferredMaxUnidirectionalCompoundGroup1ReferenceCount; + uint32_t preferredUnidirectionalCompoundReferenceNameMask; + uint32_t preferredMaxBidirectionalCompoundReferenceCount; + uint32_t preferredMaxBidirectionalCompoundGroup1ReferenceCount; + uint32_t preferredMaxBidirectionalCompoundGroup2ReferenceCount; + uint32_t preferredBidirectionalCompoundReferenceNameMask; +} VkVideoEncodeAV1QualityLevelPropertiesKHR; + +typedef struct VkPhysicalDeviceVideoEncodeAV1FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 videoEncodeAV1; +} VkPhysicalDeviceVideoEncodeAV1FeaturesKHR; + +typedef struct VkVideoEncodeAV1SessionCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkBool32 useMaxLevel; + StdVideoAV1Level maxLevel; +} VkVideoEncodeAV1SessionCreateInfoKHR; + +typedef struct VkVideoEncodeAV1PictureInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoEncodeAV1PredictionModeKHR predictionMode; + VkVideoEncodeAV1RateControlGroupKHR rateControlGroup; + uint32_t constantQIndex; + const StdVideoEncodeAV1PictureInfo * pStdPictureInfo; + int32_t referenceNameSlotIndices [ VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR ]; + VkBool32 primaryReferenceCdfOnly; + VkBool32 generateObuExtensionHeader; +} VkVideoEncodeAV1PictureInfoKHR; + +typedef struct VkVideoEncodeAV1RateControlInfoKHR { + VkStructureType sType; + const void * pNext; + VkVideoEncodeAV1RateControlFlagsKHR flags; + uint32_t gopFrameCount; + uint32_t keyFramePeriod; + uint32_t consecutiveBipredictiveFrameCount; + uint32_t temporalLayerCount; +} VkVideoEncodeAV1RateControlInfoKHR; + +typedef struct VkVideoEncodeAV1GopRemainingFrameInfoKHR { + VkStructureType sType; + const void * pNext; + VkBool32 useGopRemainingFrames; + uint32_t gopRemainingIntra; + uint32_t gopRemainingPredictive; + uint32_t gopRemainingBipredictive; +} VkVideoEncodeAV1GopRemainingFrameInfoKHR; + +typedef struct VkVideoEncodeAV1RateControlLayerInfoKHR { + VkStructureType sType; + const void * pNext; + VkBool32 useMinQIndex; + VkVideoEncodeAV1QIndexKHR minQIndex; + VkBool32 useMaxQIndex; + VkVideoEncodeAV1QIndexKHR maxQIndex; + VkBool32 useMaxFrameSize; + VkVideoEncodeAV1FrameSizeKHR maxFrameSize; +} VkVideoEncodeAV1RateControlLayerInfoKHR; + +typedef struct VkPhysicalDeviceInheritedViewportScissorFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 inheritedViewportScissor2D; +} VkPhysicalDeviceInheritedViewportScissorFeaturesNV; + +typedef struct VkCommandBufferInheritanceViewportScissorInfoNV { + VkStructureType sType; + const void * pNext; + VkBool32 viewportScissor2D; + uint32_t viewportDepthCount; + const VkViewport * pViewportDepths; +} VkCommandBufferInheritanceViewportScissorInfoNV; + +typedef struct VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 ycbcr2plane444Formats; +} VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; + +typedef struct VkPhysicalDeviceProvokingVertexFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 provokingVertexLast; + VkBool32 transformFeedbackPreservesProvokingVertex; +} VkPhysicalDeviceProvokingVertexFeaturesEXT; + +typedef struct VkPhysicalDeviceProvokingVertexPropertiesEXT { + VkStructureType sType; + void * pNext; + VkBool32 provokingVertexModePerPipeline; + VkBool32 transformFeedbackPreservesTriangleFanProvokingVertex; +} VkPhysicalDeviceProvokingVertexPropertiesEXT; + +typedef struct VkVideoEncodeIntraRefreshCapabilitiesKHR { + VkStructureType sType; + void * pNext; + VkVideoEncodeIntraRefreshModeFlagsKHR intraRefreshModes; + uint32_t maxIntraRefreshCycleDuration; + uint32_t maxIntraRefreshActiveReferencePictures; + VkBool32 partitionIndependentIntraRefreshRegions; + VkBool32 nonRectangularIntraRefreshRegions; +} VkVideoEncodeIntraRefreshCapabilitiesKHR; + +typedef struct VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 videoEncodeIntraRefresh; +} VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR; + +typedef struct VkCuModuleTexturingModeCreateInfoNVX { + VkStructureType sType; + const void * pNext; + VkBool32 use64bitTexturing; +} VkCuModuleTexturingModeCreateInfoNVX; + +typedef struct VkPhysicalDeviceDescriptorBufferFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 descriptorBuffer; + VkBool32 descriptorBufferCaptureReplay; + VkBool32 descriptorBufferImageLayoutIgnored; + VkBool32 descriptorBufferPushDescriptors; +} VkPhysicalDeviceDescriptorBufferFeaturesEXT; + +typedef struct VkPhysicalDeviceDescriptorBufferPropertiesEXT { + VkStructureType sType; + void * pNext; + VkBool32 combinedImageSamplerDescriptorSingleArray; + VkBool32 bufferlessPushDescriptors; + VkBool32 allowSamplerImageViewPostSubmitCreation; + VkDeviceSize descriptorBufferOffsetAlignment; + uint32_t maxDescriptorBufferBindings; + uint32_t maxResourceDescriptorBufferBindings; + uint32_t maxSamplerDescriptorBufferBindings; + uint32_t maxEmbeddedImmutableSamplerBindings; + uint32_t maxEmbeddedImmutableSamplers; + size_t bufferCaptureReplayDescriptorDataSize; + size_t imageCaptureReplayDescriptorDataSize; + size_t imageViewCaptureReplayDescriptorDataSize; + size_t samplerCaptureReplayDescriptorDataSize; + size_t accelerationStructureCaptureReplayDescriptorDataSize; + size_t samplerDescriptorSize; + size_t combinedImageSamplerDescriptorSize; + size_t sampledImageDescriptorSize; + size_t storageImageDescriptorSize; + size_t uniformTexelBufferDescriptorSize; + size_t robustUniformTexelBufferDescriptorSize; + size_t storageTexelBufferDescriptorSize; + size_t robustStorageTexelBufferDescriptorSize; + size_t uniformBufferDescriptorSize; + size_t robustUniformBufferDescriptorSize; + size_t storageBufferDescriptorSize; + size_t robustStorageBufferDescriptorSize; + size_t inputAttachmentDescriptorSize; + size_t accelerationStructureDescriptorSize; + VkDeviceSize maxSamplerDescriptorBufferRange; + VkDeviceSize maxResourceDescriptorBufferRange; + VkDeviceSize samplerDescriptorBufferAddressSpaceSize; + VkDeviceSize resourceDescriptorBufferAddressSpaceSize; + VkDeviceSize descriptorBufferAddressSpaceSize; +} VkPhysicalDeviceDescriptorBufferPropertiesEXT; + +typedef struct VkDescriptorAddressInfoEXT { + VkStructureType sType; + void * pNext; + VkDeviceAddress address; + VkDeviceSize range; + VkFormat format; +} VkDescriptorAddressInfoEXT; + +typedef struct VkDescriptorBufferBindingInfoEXT { + VkStructureType sType; + const void * pNext; + VkDeviceAddress address; + VkBufferUsageFlags usage; +} VkDescriptorBufferBindingInfoEXT; + +typedef union VkDescriptorDataEXT { + const VkSampler * pSampler; + const VkDescriptorImageInfo * pCombinedImageSampler; + const VkDescriptorImageInfo * pInputAttachmentImage; + const VkDescriptorImageInfo * pSampledImage; + const VkDescriptorImageInfo * pStorageImage; + const VkDescriptorAddressInfoEXT * pUniformTexelBuffer; + const VkDescriptorAddressInfoEXT * pStorageTexelBuffer; + const VkDescriptorAddressInfoEXT * pUniformBuffer; + const VkDescriptorAddressInfoEXT * pStorageBuffer; + VkDeviceAddress accelerationStructure; +} VkDescriptorDataEXT; + +typedef struct VkDescriptorGetInfoEXT { + VkStructureType sType; + const void * pNext; + VkDescriptorType type; + VkDescriptorDataEXT data; +} VkDescriptorGetInfoEXT; + +typedef struct VkPhysicalDeviceShaderIntegerDotProductFeatures { + VkStructureType sType; + void * pNext; + VkBool32 shaderIntegerDotProduct; +} VkPhysicalDeviceShaderIntegerDotProductFeatures; + +typedef struct VkPhysicalDeviceShaderIntegerDotProductFeatures VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR; + +typedef struct VkPhysicalDeviceShaderIntegerDotProductProperties { + VkStructureType sType; + void * pNext; + VkBool32 integerDotProduct8BitUnsignedAccelerated; + VkBool32 integerDotProduct8BitSignedAccelerated; + VkBool32 integerDotProduct8BitMixedSignednessAccelerated; + VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedSignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProduct16BitUnsignedAccelerated; + VkBool32 integerDotProduct16BitSignedAccelerated; + VkBool32 integerDotProduct16BitMixedSignednessAccelerated; + VkBool32 integerDotProduct32BitUnsignedAccelerated; + VkBool32 integerDotProduct32BitSignedAccelerated; + VkBool32 integerDotProduct32BitMixedSignednessAccelerated; + VkBool32 integerDotProduct64BitUnsignedAccelerated; + VkBool32 integerDotProduct64BitSignedAccelerated; + VkBool32 integerDotProduct64BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated; +} VkPhysicalDeviceShaderIntegerDotProductProperties; + +typedef struct VkPhysicalDeviceShaderIntegerDotProductProperties VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR; + +typedef struct VkPhysicalDeviceDrmPropertiesEXT { + VkStructureType sType; + void * pNext; + VkBool32 hasPrimary; + VkBool32 hasRender; + int64_t primaryMajor; + int64_t primaryMinor; + int64_t renderMajor; + int64_t renderMinor; +} VkPhysicalDeviceDrmPropertiesEXT; + +typedef struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 fragmentShaderBarycentric; +} VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR; + +typedef struct VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR { + VkStructureType sType; + void * pNext; + VkBool32 triStripVertexOrderIndependentOfProvokingVertex; +} VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR; + +typedef struct VkPhysicalDeviceShaderFmaFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 shaderFmaFloat16; + VkBool32 shaderFmaFloat32; + VkBool32 shaderFmaFloat64; +} VkPhysicalDeviceShaderFmaFeaturesKHR; + +typedef struct VkPhysicalDeviceRayTracingMotionBlurFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 rayTracingMotionBlur; + VkBool32 rayTracingMotionBlurPipelineTraceRaysIndirect; +} VkPhysicalDeviceRayTracingMotionBlurFeaturesNV; + +typedef struct VkPhysicalDeviceRayTracingValidationFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 rayTracingValidation; +} VkPhysicalDeviceRayTracingValidationFeaturesNV; + +typedef struct VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 spheres; + VkBool32 linearSweptSpheres; +} VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV; + +typedef struct VkAccelerationStructureGeometryMotionTrianglesDataNV { + VkStructureType sType; + const void * pNext; + VkDeviceOrHostAddressConstKHR vertexData; +} VkAccelerationStructureGeometryMotionTrianglesDataNV; + +typedef struct VkAccelerationStructureMotionInfoNV { + VkStructureType sType; + const void * pNext; + uint32_t maxInstances; + VkAccelerationStructureMotionInfoFlagsNV flags; +} VkAccelerationStructureMotionInfoNV; + +typedef struct VkAccelerationStructureSRTMotionInstanceNV { + VkSRTDataNV transformT0; + VkSRTDataNV transformT1; + uint32_t instanceCustomIndex :24; + uint32_t mask :8; + uint32_t instanceShaderBindingTableRecordOffset :24; + VkGeometryInstanceFlagsKHR flags :8; + uint64_t accelerationStructureReference; +} VkAccelerationStructureSRTMotionInstanceNV; + +typedef struct VkAccelerationStructureMatrixMotionInstanceNV { + VkTransformMatrixKHR transformT0; + VkTransformMatrixKHR transformT1; + uint32_t instanceCustomIndex :24; + uint32_t mask :8; + uint32_t instanceShaderBindingTableRecordOffset :24; + VkGeometryInstanceFlagsKHR flags :8; + uint64_t accelerationStructureReference; +} VkAccelerationStructureMatrixMotionInstanceNV; + +typedef union VkAccelerationStructureMotionInstanceDataNV { + VkAccelerationStructureInstanceKHR staticInstance; + VkAccelerationStructureMatrixMotionInstanceNV matrixMotionInstance; + VkAccelerationStructureSRTMotionInstanceNV srtMotionInstance; +} VkAccelerationStructureMotionInstanceDataNV; + +typedef struct VkAccelerationStructureMotionInstanceNV { + VkAccelerationStructureMotionInstanceTypeNV type; + VkAccelerationStructureMotionInstanceFlagsNV flags; + VkAccelerationStructureMotionInstanceDataNV data; +} VkAccelerationStructureMotionInstanceNV; + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkBufferCollectionPropertiesFUCHSIA { + VkStructureType sType; + void * pNext; + uint32_t memoryTypeBits; + uint32_t bufferCount; + uint32_t createInfoIndex; + uint64_t sysmemPixelFormat; + VkFormatFeatureFlags formatFeatures; + VkSysmemColorSpaceFUCHSIA sysmemColorSpaceIndex; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkBufferCollectionPropertiesFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkBufferConstraintsInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + VkBufferCreateInfo createInfo; + VkFormatFeatureFlags requiredFormatFeatures; + VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints; +} VkBufferConstraintsInfoFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkImageFormatConstraintsInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + VkImageCreateInfo imageCreateInfo; + VkFormatFeatureFlags requiredFormatFeatures; + VkImageFormatConstraintsFlagsFUCHSIA flags; + uint64_t sysmemPixelFormat; + uint32_t colorSpaceCount; + const VkSysmemColorSpaceFUCHSIA * pColorSpaces; +} VkImageFormatConstraintsInfoFUCHSIA; + +#endif + +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef struct VkImageConstraintsInfoFUCHSIA { + VkStructureType sType; + const void * pNext; + uint32_t formatConstraintsCount; + const VkImageFormatConstraintsInfoFUCHSIA * pFormatConstraints; + VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints; + VkImageConstraintsInfoFlagsFUCHSIA flags; +} VkImageConstraintsInfoFUCHSIA; + +#endif + +typedef struct VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 formatRgba10x6WithoutYCbCrSampler; +} VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT; + +typedef struct VkFormatProperties3 { + VkStructureType sType; + void * pNext; + VkFormatFeatureFlags2 linearTilingFeatures; + VkFormatFeatureFlags2 optimalTilingFeatures; + VkFormatFeatureFlags2 bufferFeatures; +} VkFormatProperties3; + +typedef struct VkFormatProperties3 VkFormatProperties3KHR; + +typedef struct VkDrmFormatModifierProperties2EXT { + uint64_t drmFormatModifier; + uint32_t drmFormatModifierPlaneCount; + VkFormatFeatureFlags2 drmFormatModifierTilingFeatures; +} VkDrmFormatModifierProperties2EXT; + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef struct VkAndroidHardwareBufferFormatProperties2ANDROID { + VkStructureType sType; + void * pNext; + VkFormat format; + uint64_t externalFormat; + VkFormatFeatureFlags2 formatFeatures; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkAndroidHardwareBufferFormatProperties2ANDROID; + +#endif + +typedef struct VkRenderingInfo { + VkStructureType sType; + const void * pNext; + VkRenderingFlags flags; + VkRect2D renderArea; + uint32_t layerCount; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkRenderingAttachmentInfo * pColorAttachments; + const VkRenderingAttachmentInfo * pDepthAttachment; + const VkRenderingAttachmentInfo * pStencilAttachment; +} VkRenderingInfo; + +typedef struct VkRenderingInfo VkRenderingInfoKHR; + +typedef struct VkPhysicalDeviceDynamicRenderingFeatures { + VkStructureType sType; + void * pNext; + VkBool32 dynamicRendering; +} VkPhysicalDeviceDynamicRenderingFeatures; + +typedef struct VkPhysicalDeviceDynamicRenderingFeatures VkPhysicalDeviceDynamicRenderingFeaturesKHR; + +typedef struct VkCommandBufferInheritanceRenderingInfo { + VkStructureType sType; + const void * pNext; + VkRenderingFlags flags; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkFormat * pColorAttachmentFormats; + VkFormat depthAttachmentFormat; + VkFormat stencilAttachmentFormat; + VkSampleCountFlagBits rasterizationSamples; +} VkCommandBufferInheritanceRenderingInfo; + +typedef struct VkCommandBufferInheritanceRenderingInfo VkCommandBufferInheritanceRenderingInfoKHR; + +typedef struct VkMultiviewPerViewAttributesInfoNVX { + VkStructureType sType; + const void * pNext; + VkBool32 perViewAttributes; + VkBool32 perViewAttributesPositionXOnly; +} VkMultiviewPerViewAttributesInfoNVX; + +typedef struct VkPhysicalDeviceImageViewMinLodFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 minLod; +} VkPhysicalDeviceImageViewMinLodFeaturesEXT; + +typedef struct VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 rasterizationOrderColorAttachmentAccess; + VkBool32 rasterizationOrderDepthAttachmentAccess; + VkBool32 rasterizationOrderStencilAttachmentAccess; +} VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT; + +typedef struct VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM; + +typedef struct VkPhysicalDeviceLinearColorAttachmentFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 linearColorAttachment; +} VkPhysicalDeviceLinearColorAttachmentFeaturesNV; + +typedef struct VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 graphicsPipelineLibrary; +} VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; + +typedef struct VkPhysicalDevicePipelineBinaryFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 pipelineBinaries; +} VkPhysicalDevicePipelineBinaryFeaturesKHR; + +typedef struct VkDevicePipelineBinaryInternalCacheControlKHR { + VkStructureType sType; + const void * pNext; + VkBool32 disableInternalCache; +} VkDevicePipelineBinaryInternalCacheControlKHR; + +typedef struct VkPhysicalDevicePipelineBinaryPropertiesKHR { + VkStructureType sType; + void * pNext; + VkBool32 pipelineBinaryInternalCache; + VkBool32 pipelineBinaryInternalCacheControl; + VkBool32 pipelineBinaryPrefersInternalCache; + VkBool32 pipelineBinaryPrecompiledInternalCache; + VkBool32 pipelineBinaryCompressedData; +} VkPhysicalDevicePipelineBinaryPropertiesKHR; + +typedef struct VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT { + VkStructureType sType; + void * pNext; + VkBool32 graphicsPipelineLibraryFastLinking; + VkBool32 graphicsPipelineLibraryIndependentInterpolationDecoration; +} VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; + +typedef struct VkGraphicsPipelineLibraryCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkGraphicsPipelineLibraryFlagsEXT flags; +} VkGraphicsPipelineLibraryCreateInfoEXT; + +typedef struct VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE { + VkStructureType sType; + void * pNext; + VkBool32 descriptorSetHostMapping; +} VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; + +typedef struct VkPhysicalDeviceNestedCommandBufferFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 nestedCommandBuffer; + VkBool32 nestedCommandBufferRendering; + VkBool32 nestedCommandBufferSimultaneousUse; +} VkPhysicalDeviceNestedCommandBufferFeaturesEXT; + +typedef struct VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 shaderModuleIdentifier; +} VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT; + +typedef struct VkImageCompressionControlEXT { + VkStructureType sType; + const void * pNext; + VkImageCompressionFlagsEXT flags; + uint32_t compressionControlPlaneCount; + VkImageCompressionFixedRateFlagsEXT * pFixedRateFlags; +} VkImageCompressionControlEXT; + +typedef struct VkPhysicalDeviceImageCompressionControlFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 imageCompressionControl; +} VkPhysicalDeviceImageCompressionControlFeaturesEXT; + +typedef struct VkImageCompressionPropertiesEXT { + VkStructureType sType; + void * pNext; + VkImageCompressionFlagsEXT imageCompressionFlags; + VkImageCompressionFixedRateFlagsEXT imageCompressionFixedRateFlags; +} VkImageCompressionPropertiesEXT; + +typedef struct VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 imageCompressionControlSwapchain; +} VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; + +typedef struct VkImageSubresource2 { + VkStructureType sType; + void * pNext; + VkImageSubresource imageSubresource; +} VkImageSubresource2; + +typedef struct VkImageSubresource2 VkImageSubresource2KHR; + +typedef struct VkImageSubresource2 VkImageSubresource2EXT; + +typedef struct VkSubresourceLayout2 { + VkStructureType sType; + void * pNext; + VkSubresourceLayout subresourceLayout; +} VkSubresourceLayout2; + +typedef struct VkSubresourceLayout2 VkSubresourceLayout2KHR; + +typedef struct VkSubresourceLayout2 VkSubresourceLayout2EXT; + +typedef struct VkRenderPassCreationControlEXT { + VkStructureType sType; + const void * pNext; + VkBool32 disallowMerging; +} VkRenderPassCreationControlEXT; + +typedef struct VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 subpassMergeFeedback; +} VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT; + +typedef struct VkMicromapBuildInfoEXT { + VkStructureType sType; + const void * pNext; + VkMicromapTypeEXT type; + VkBuildMicromapFlagsEXT flags; + VkBuildMicromapModeEXT mode; + VkMicromapEXT dstMicromap; + uint32_t usageCountsCount; + const VkMicromapUsageEXT * pUsageCounts; + const VkMicromapUsageEXT * const* ppUsageCounts; + VkDeviceOrHostAddressConstKHR data; + VkDeviceOrHostAddressKHR scratchData; + VkDeviceOrHostAddressConstKHR triangleArray; + VkDeviceSize triangleArrayStride; +} VkMicromapBuildInfoEXT; + +typedef struct VkMicromapCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkMicromapCreateFlagsEXT createFlags; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; + VkMicromapTypeEXT type; + VkDeviceAddress deviceAddress; +} VkMicromapCreateInfoEXT; + +typedef struct VkCopyMicromapToMemoryInfoEXT { + VkStructureType sType; + const void * pNext; + VkMicromapEXT src; + VkDeviceOrHostAddressKHR dst; + VkCopyMicromapModeEXT mode; +} VkCopyMicromapToMemoryInfoEXT; + +typedef struct VkCopyMemoryToMicromapInfoEXT { + VkStructureType sType; + const void * pNext; + VkDeviceOrHostAddressConstKHR src; + VkMicromapEXT dst; + VkCopyMicromapModeEXT mode; +} VkCopyMemoryToMicromapInfoEXT; + +typedef struct VkMicromapBuildSizesInfoEXT { + VkStructureType sType; + const void * pNext; + VkDeviceSize micromapSize; + VkDeviceSize buildScratchSize; + VkBool32 discardable; +} VkMicromapBuildSizesInfoEXT; + +typedef struct VkPhysicalDeviceOpacityMicromapFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 micromap; + VkBool32 micromapCaptureReplay; + VkBool32 micromapHostCommands; +} VkPhysicalDeviceOpacityMicromapFeaturesEXT; + +typedef struct VkAccelerationStructureTrianglesOpacityMicromapEXT { + VkStructureType sType; + void * pNext; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexBuffer; + VkDeviceSize indexStride; + uint32_t baseTriangle; + uint32_t usageCountsCount; + const VkMicromapUsageEXT * pUsageCounts; + const VkMicromapUsageEXT * const* ppUsageCounts; + VkMicromapEXT micromap; +} VkAccelerationStructureTrianglesOpacityMicromapEXT; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkPhysicalDeviceDisplacementMicromapFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 displacementMicromap; +} VkPhysicalDeviceDisplacementMicromapFeaturesNV; + +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkAccelerationStructureTrianglesDisplacementMicromapNV { + VkStructureType sType; + void * pNext; + VkFormat displacementBiasAndScaleFormat; + VkFormat displacementVectorFormat; + VkDeviceOrHostAddressConstKHR displacementBiasAndScaleBuffer; + VkDeviceSize displacementBiasAndScaleStride; + VkDeviceOrHostAddressConstKHR displacementVectorBuffer; + VkDeviceSize displacementVectorStride; + VkDeviceOrHostAddressConstKHR displacedMicromapPrimitiveFlags; + VkDeviceSize displacedMicromapPrimitiveFlagsStride; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexBuffer; + VkDeviceSize indexStride; + uint32_t baseTriangle; + uint32_t usageCountsCount; + const VkMicromapUsageEXT * pUsageCounts; + const VkMicromapUsageEXT * const* ppUsageCounts; + VkMicromapEXT micromap; +} VkAccelerationStructureTrianglesDisplacementMicromapNV; + +#endif + +typedef struct VkPhysicalDevicePipelinePropertiesFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 pipelinePropertiesIdentifier; +} VkPhysicalDevicePipelinePropertiesFeaturesEXT; + +typedef struct VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD { + VkStructureType sType; + void * pNext; + VkBool32 shaderEarlyAndLateFragmentTests; +} VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; + +typedef struct VkExternalMemoryAcquireUnmodifiedEXT { + VkStructureType sType; + const void * pNext; + VkBool32 acquireUnmodifiedMemory; +} VkExternalMemoryAcquireUnmodifiedEXT; + +typedef struct VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 nonSeamlessCubeMap; +} VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT; + +typedef struct VkPhysicalDevicePipelineRobustnessFeatures { + VkStructureType sType; + void * pNext; + VkBool32 pipelineRobustness; +} VkPhysicalDevicePipelineRobustnessFeatures; + +typedef struct VkPhysicalDevicePipelineRobustnessFeatures VkPhysicalDevicePipelineRobustnessFeaturesEXT; + +typedef struct VkPhysicalDeviceImageProcessingFeaturesQCOM { + VkStructureType sType; + void * pNext; + VkBool32 textureSampleWeighted; + VkBool32 textureBoxFilter; + VkBool32 textureBlockMatch; +} VkPhysicalDeviceImageProcessingFeaturesQCOM; + +typedef struct VkPhysicalDeviceTilePropertiesFeaturesQCOM { + VkStructureType sType; + void * pNext; + VkBool32 tileProperties; +} VkPhysicalDeviceTilePropertiesFeaturesQCOM; + +typedef struct VkPhysicalDeviceAmigoProfilingFeaturesSEC { + VkStructureType sType; + void * pNext; + VkBool32 amigoProfiling; +} VkPhysicalDeviceAmigoProfilingFeaturesSEC; + +typedef struct VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 attachmentFeedbackLoopLayout; +} VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; + +typedef struct VkAttachmentFeedbackLoopInfoEXT { + VkStructureType sType; + const void * pNext; + VkBool32 feedbackLoopEnable; +} VkAttachmentFeedbackLoopInfoEXT; + +typedef struct VkPhysicalDeviceAddressBindingReportFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 reportAddressBinding; +} VkPhysicalDeviceAddressBindingReportFeaturesEXT; + +typedef struct VkDeviceAddressBindingCallbackDataEXT { + VkStructureType sType; + void * pNext; + VkDeviceAddressBindingFlagsEXT flags; + VkDeviceAddress baseAddress; + VkDeviceSize size; + VkDeviceAddressBindingTypeEXT bindingType; +} VkDeviceAddressBindingCallbackDataEXT; + +typedef struct VkPhysicalDeviceOpticalFlowFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 opticalFlow; +} VkPhysicalDeviceOpticalFlowFeaturesNV; + +typedef struct VkPhysicalDeviceOpticalFlowPropertiesNV { + VkStructureType sType; + void * pNext; + VkOpticalFlowGridSizeFlagsNV supportedOutputGridSizes; + VkOpticalFlowGridSizeFlagsNV supportedHintGridSizes; + VkBool32 hintSupported; + VkBool32 costSupported; + VkBool32 bidirectionalFlowSupported; + VkBool32 globalFlowSupported; + uint32_t minWidth; + uint32_t minHeight; + uint32_t maxWidth; + uint32_t maxHeight; + uint32_t maxNumRegionsOfInterest; +} VkPhysicalDeviceOpticalFlowPropertiesNV; + +typedef struct VkOpticalFlowImageFormatInfoNV { + VkStructureType sType; + const void * pNext; + VkOpticalFlowUsageFlagsNV usage; +} VkOpticalFlowImageFormatInfoNV; + +typedef struct VkOpticalFlowSessionCreateInfoNV { + VkStructureType sType; + void * pNext; + uint32_t width; + uint32_t height; + VkFormat imageFormat; + VkFormat flowVectorFormat; + VkFormat costFormat; + VkOpticalFlowGridSizeFlagsNV outputGridSize; + VkOpticalFlowGridSizeFlagsNV hintGridSize; + VkOpticalFlowPerformanceLevelNV performanceLevel; + VkOpticalFlowSessionCreateFlagsNV flags; +} VkOpticalFlowSessionCreateInfoNV; + +typedef struct VkOpticalFlowExecuteInfoNV { + VkStructureType sType; + void * pNext; + VkOpticalFlowExecuteFlagsNV flags; + uint32_t regionCount; + const VkRect2D * pRegions; +} VkOpticalFlowExecuteInfoNV; + +typedef struct VkPhysicalDeviceFaultFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 deviceFault; + VkBool32 deviceFaultVendorBinary; +} VkPhysicalDeviceFaultFeaturesEXT; + +typedef struct VkDeviceFaultAddressInfoEXT { + VkDeviceFaultAddressTypeEXT addressType; + VkDeviceAddress reportedAddress; + VkDeviceSize addressPrecision; +} VkDeviceFaultAddressInfoEXT; + +typedef struct VkDeviceFaultCountsEXT { + VkStructureType sType; + void * pNext; + uint32_t addressInfoCount; + uint32_t vendorInfoCount; + VkDeviceSize vendorBinarySize; +} VkDeviceFaultCountsEXT; + +typedef struct VkDeviceFaultInfoEXT { + VkStructureType sType; + void * pNext; + char description [ VK_MAX_DESCRIPTION_SIZE ]; + VkDeviceFaultAddressInfoEXT * pAddressInfos; + VkDeviceFaultVendorInfoEXT * pVendorInfos; + void * pVendorBinaryData; +} VkDeviceFaultInfoEXT; + +typedef struct VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 pipelineLibraryGroupHandles; +} VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT; + +typedef struct VkDepthBiasRepresentationInfoEXT { + VkStructureType sType; + const void * pNext; + VkDepthBiasRepresentationEXT depthBiasRepresentation; + VkBool32 depthBiasExact; +} VkDepthBiasRepresentationInfoEXT; + +typedef struct VkDecompressMemoryRegionNV { + VkDeviceAddress srcAddress; + VkDeviceAddress dstAddress; + VkDeviceSize compressedSize; + VkDeviceSize decompressedSize; + VkMemoryDecompressionMethodFlagsNV decompressionMethod; +} VkDecompressMemoryRegionNV; + +typedef struct VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM { + VkStructureType sType; + void * pNext; + VkBool32 shaderCoreBuiltins; +} VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM; + +typedef struct VkFrameBoundaryEXT { + VkStructureType sType; + const void * pNext; + VkFrameBoundaryFlagsEXT flags; + uint64_t frameID; + uint32_t imageCount; + const VkImage * pImages; + uint32_t bufferCount; + const VkBuffer * pBuffers; + uint64_t tagName; + size_t tagSize; + const void * pTag; +} VkFrameBoundaryEXT; + +typedef struct VkPhysicalDeviceFrameBoundaryFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 frameBoundary; +} VkPhysicalDeviceFrameBoundaryFeaturesEXT; + +typedef struct VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 dynamicRenderingUnusedAttachments; +} VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT; + +typedef struct VkSurfacePresentScalingCapabilitiesKHR { + VkStructureType sType; + void * pNext; + VkPresentScalingFlagsKHR supportedPresentScaling; + VkPresentGravityFlagsKHR supportedPresentGravityX; + VkPresentGravityFlagsKHR supportedPresentGravityY; + VkExtent2D minScaledImageExtent; + VkExtent2D maxScaledImageExtent; +} VkSurfacePresentScalingCapabilitiesKHR; + +typedef struct VkSurfacePresentScalingCapabilitiesKHR VkSurfacePresentScalingCapabilitiesEXT; + +typedef struct VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 swapchainMaintenance1; +} VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR; + +typedef struct VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT; + +typedef struct VkSwapchainPresentScalingCreateInfoKHR { + VkStructureType sType; + const void * pNext; + VkPresentScalingFlagsKHR scalingBehavior; + VkPresentGravityFlagsKHR presentGravityX; + VkPresentGravityFlagsKHR presentGravityY; +} VkSwapchainPresentScalingCreateInfoKHR; + +typedef struct VkSwapchainPresentScalingCreateInfoKHR VkSwapchainPresentScalingCreateInfoEXT; + +typedef struct VkPhysicalDeviceDepthBiasControlFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 depthBiasControl; + VkBool32 leastRepresentableValueForceUnormRepresentation; + VkBool32 floatRepresentation; + VkBool32 depthBiasExact; +} VkPhysicalDeviceDepthBiasControlFeaturesEXT; + +typedef struct VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 rayTracingInvocationReorder; +} VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV; + +typedef struct VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 extendedSparseAddressSpace; +} VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; + +typedef struct VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV { + VkStructureType sType; + void * pNext; + VkDeviceSize extendedSparseAddressSpaceSize; + VkImageUsageFlags extendedSparseImageUsageFlags; + VkBufferUsageFlags extendedSparseBufferUsageFlags; +} VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV; + +typedef struct VkDirectDriverLoadingInfoLUNARG { + VkStructureType sType; + void * pNext; + VkDirectDriverLoadingFlagsLUNARG flags; + PFN_vkGetInstanceProcAddrLUNARG pfnGetInstanceProcAddr; +} VkDirectDriverLoadingInfoLUNARG; + +typedef struct VkDirectDriverLoadingListLUNARG { + VkStructureType sType; + const void * pNext; + VkDirectDriverLoadingModeLUNARG mode; + uint32_t driverCount; + const VkDirectDriverLoadingInfoLUNARG * pDrivers; +} VkDirectDriverLoadingListLUNARG; + +typedef struct VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM { + VkStructureType sType; + void * pNext; + VkBool32 multiviewPerViewViewports; +} VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM; + +typedef struct VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 rayTracingPositionFetch; +} VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR; + +typedef struct VkDeviceImageSubresourceInfo { + VkStructureType sType; + const void * pNext; + const VkImageCreateInfo * pCreateInfo; + const VkImageSubresource2 * pSubresource; +} VkDeviceImageSubresourceInfo; + +typedef struct VkDeviceImageSubresourceInfo VkDeviceImageSubresourceInfoKHR; + +typedef struct VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM { + VkStructureType sType; + void * pNext; + VkBool32 multiviewPerViewRenderAreas; +} VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM; + +typedef struct VkMemoryMapInfo { + VkStructureType sType; + const void * pNext; + VkMemoryMapFlags flags; + VkDeviceMemory memory; + VkDeviceSize offset; + VkDeviceSize size; +} VkMemoryMapInfo; + +typedef struct VkMemoryMapInfo VkMemoryMapInfoKHR; + +typedef struct VkMemoryUnmapInfo { + VkStructureType sType; + const void * pNext; + VkMemoryUnmapFlags flags; + VkDeviceMemory memory; +} VkMemoryUnmapInfo; + +typedef struct VkMemoryUnmapInfo VkMemoryUnmapInfoKHR; + +typedef struct VkPhysicalDeviceShaderObjectFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 shaderObject; +} VkPhysicalDeviceShaderObjectFeaturesEXT; + +typedef struct VkShaderCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkShaderCreateFlagsEXT flags; + VkShaderStageFlagBits stage; + VkShaderStageFlags nextStage; + VkShaderCodeTypeEXT codeType; + size_t codeSize; + const void * pCode; + const char * pName; + uint32_t setLayoutCount; + const VkDescriptorSetLayout * pSetLayouts; + uint32_t pushConstantRangeCount; + const VkPushConstantRange * pPushConstantRanges; + const VkSpecializationInfo * pSpecializationInfo; +} VkShaderCreateInfoEXT; + +typedef struct VkPhysicalDeviceShaderTileImageFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 shaderTileImageColorReadAccess; + VkBool32 shaderTileImageDepthReadAccess; + VkBool32 shaderTileImageStencilReadAccess; +} VkPhysicalDeviceShaderTileImageFeaturesEXT; + +typedef struct VkPhysicalDeviceShaderTileImagePropertiesEXT { + VkStructureType sType; + void * pNext; + VkBool32 shaderTileImageCoherentReadAccelerated; + VkBool32 shaderTileImageReadSampleFromPixelRateInvocation; + VkBool32 shaderTileImageReadFromHelperInvocation; +} VkPhysicalDeviceShaderTileImagePropertiesEXT; + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +typedef struct VkScreenBufferPropertiesQNX { + VkStructureType sType; + void * pNext; + VkDeviceSize allocationSize; + uint32_t memoryTypeBits; +} VkScreenBufferPropertiesQNX; + +#endif + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +typedef struct VkScreenBufferFormatPropertiesQNX { + VkStructureType sType; + void * pNext; + VkFormat format; + uint64_t externalFormat; + uint64_t screenUsage; + VkFormatFeatureFlags formatFeatures; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkScreenBufferFormatPropertiesQNX; + +#endif + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +typedef struct VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX { + VkStructureType sType; + void * pNext; + VkBool32 screenBufferImport; +} VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX; + +#endif + +typedef struct VkPhysicalDeviceCooperativeMatrixFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 cooperativeMatrix; + VkBool32 cooperativeMatrixRobustBufferAccess; +} VkPhysicalDeviceCooperativeMatrixFeaturesKHR; + +typedef struct VkCooperativeMatrixPropertiesKHR { + VkStructureType sType; + void * pNext; + uint32_t MSize; + uint32_t NSize; + uint32_t KSize; + VkComponentTypeKHR AType; + VkComponentTypeKHR BType; + VkComponentTypeKHR CType; + VkComponentTypeKHR ResultType; + VkBool32 saturatingAccumulation; + VkScopeKHR scope; +} VkCooperativeMatrixPropertiesKHR; + +typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesKHR { + VkStructureType sType; + void * pNext; + VkShaderStageFlags cooperativeMatrixSupportedStages; +} VkPhysicalDeviceCooperativeMatrixPropertiesKHR; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkPhysicalDeviceShaderEnqueueFeaturesAMDX { + VkStructureType sType; + void * pNext; + VkBool32 shaderEnqueue; + VkBool32 shaderMeshEnqueue; +} VkPhysicalDeviceShaderEnqueueFeaturesAMDX; + +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkExecutionGraphPipelineCreateInfoAMDX { + VkStructureType sType; + const void * pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo * pStages; + const VkPipelineLibraryCreateInfoKHR * pLibraryInfo; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkExecutionGraphPipelineCreateInfoAMDX; + +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkExecutionGraphPipelineScratchSizeAMDX { + VkStructureType sType; + void * pNext; + VkDeviceSize minSize; + VkDeviceSize maxSize; + VkDeviceSize sizeGranularity; +} VkExecutionGraphPipelineScratchSizeAMDX; + +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkDispatchGraphInfoAMDX { + uint32_t nodeIndex; + uint32_t payloadCount; + VkDeviceOrHostAddressConstAMDX payloads; + uint64_t payloadStride; +} VkDispatchGraphInfoAMDX; + +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkDispatchGraphCountInfoAMDX { + uint32_t count; + VkDeviceOrHostAddressConstAMDX infos; + uint64_t stride; +} VkDispatchGraphCountInfoAMDX; + +#endif + +typedef struct VkPhysicalDeviceAntiLagFeaturesAMD { + VkStructureType sType; + void * pNext; + VkBool32 antiLag; +} VkPhysicalDeviceAntiLagFeaturesAMD; + +typedef struct VkAntiLagDataAMD { + VkStructureType sType; + const void * pNext; + VkAntiLagModeAMD mode; + uint32_t maxFPS; + const VkAntiLagPresentationInfoAMD * pPresentationInfo; +} VkAntiLagDataAMD; + +typedef struct VkPhysicalDeviceTileMemoryHeapFeaturesQCOM { + VkStructureType sType; + void * pNext; + VkBool32 tileMemoryHeap; +} VkPhysicalDeviceTileMemoryHeapFeaturesQCOM; + +typedef struct VkPhysicalDeviceTileMemoryHeapPropertiesQCOM { + VkStructureType sType; + void * pNext; + VkBool32 queueSubmitBoundary; + VkBool32 tileBufferTransfers; +} VkPhysicalDeviceTileMemoryHeapPropertiesQCOM; + +typedef struct VkTileMemorySizeInfoQCOM { + VkStructureType sType; + const void * pNext; + VkDeviceSize size; +} VkTileMemorySizeInfoQCOM; + +typedef struct VkTileMemoryRequirementsQCOM { + VkStructureType sType; + void * pNext; + VkDeviceSize size; + VkDeviceSize alignment; +} VkTileMemoryRequirementsQCOM; + +typedef struct VkBindDescriptorSetsInfo { + VkStructureType sType; + const void * pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t firstSet; + uint32_t descriptorSetCount; + const VkDescriptorSet * pDescriptorSets; + uint32_t dynamicOffsetCount; + const uint32_t * pDynamicOffsets; +} VkBindDescriptorSetsInfo; + +typedef struct VkBindDescriptorSetsInfo VkBindDescriptorSetsInfoKHR; + +typedef struct VkPushConstantsInfo { + VkStructureType sType; + const void * pNext; + VkPipelineLayout layout; + VkShaderStageFlags stageFlags; + uint32_t offset; + uint32_t size; + const void * pValues; +} VkPushConstantsInfo; + +typedef struct VkPushConstantsInfo VkPushConstantsInfoKHR; + +typedef struct VkPushDescriptorSetInfo { + VkStructureType sType; + const void * pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t set; + uint32_t descriptorWriteCount; + const VkWriteDescriptorSet * pDescriptorWrites; +} VkPushDescriptorSetInfo; + +typedef struct VkPushDescriptorSetInfo VkPushDescriptorSetInfoKHR; + +typedef struct VkSetDescriptorBufferOffsetsInfoEXT { + VkStructureType sType; + const void * pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t firstSet; + uint32_t setCount; + const uint32_t * pBufferIndices; + const VkDeviceSize * pOffsets; +} VkSetDescriptorBufferOffsetsInfoEXT; + +typedef struct VkBindDescriptorBufferEmbeddedSamplersInfoEXT { + VkStructureType sType; + const void * pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t set; +} VkBindDescriptorBufferEmbeddedSamplersInfoEXT; + +typedef struct VkPhysicalDeviceCubicClampFeaturesQCOM { + VkStructureType sType; + void * pNext; + VkBool32 cubicRangeClamp; +} VkPhysicalDeviceCubicClampFeaturesQCOM; + +typedef struct VkPhysicalDeviceYcbcrDegammaFeaturesQCOM { + VkStructureType sType; + void * pNext; + VkBool32 ycbcrDegamma; +} VkPhysicalDeviceYcbcrDegammaFeaturesQCOM; + +typedef struct VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM { + VkStructureType sType; + void * pNext; + VkBool32 enableYDegamma; + VkBool32 enableCbCrDegamma; +} VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM; + +typedef struct VkPhysicalDeviceCubicWeightsFeaturesQCOM { + VkStructureType sType; + void * pNext; + VkBool32 selectableCubicWeights; +} VkPhysicalDeviceCubicWeightsFeaturesQCOM; + +typedef struct VkPhysicalDeviceImageProcessing2FeaturesQCOM { + VkStructureType sType; + void * pNext; + VkBool32 textureBlockMatch2; +} VkPhysicalDeviceImageProcessing2FeaturesQCOM; + +typedef struct VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 descriptorPoolOverallocation; +} VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV; + +typedef struct VkPhysicalDevicePerStageDescriptorSetFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 perStageDescriptorSet; + VkBool32 dynamicPipelineLayout; +} VkPhysicalDevicePerStageDescriptorSetFeaturesNV; + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef struct VkPhysicalDeviceExternalFormatResolveFeaturesANDROID { + VkStructureType sType; + void * pNext; + VkBool32 externalFormatResolve; +} VkPhysicalDeviceExternalFormatResolveFeaturesANDROID; + +#endif + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef struct VkPhysicalDeviceExternalFormatResolvePropertiesANDROID { + VkStructureType sType; + void * pNext; + VkBool32 nullColorAttachmentWithExternalFormatResolve; + VkChromaLocation externalFormatResolveChromaOffsetX; + VkChromaLocation externalFormatResolveChromaOffsetY; +} VkPhysicalDeviceExternalFormatResolvePropertiesANDROID; + +#endif + +typedef struct VkLatencySleepModeInfoNV { + VkStructureType sType; + const void * pNext; + VkBool32 lowLatencyMode; + VkBool32 lowLatencyBoost; + uint32_t minimumIntervalUs; +} VkLatencySleepModeInfoNV; + +typedef struct VkGetLatencyMarkerInfoNV { + VkStructureType sType; + const void * pNext; + uint32_t timingCount; + VkLatencyTimingsFrameReportNV * pTimings; +} VkGetLatencyMarkerInfoNV; + +typedef struct VkSwapchainLatencyCreateInfoNV { + VkStructureType sType; + const void * pNext; + VkBool32 latencyModeEnable; +} VkSwapchainLatencyCreateInfoNV; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkPhysicalDeviceCudaKernelLaunchFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 cudaKernelLaunchFeatures; +} VkPhysicalDeviceCudaKernelLaunchFeaturesNV; + +#endif + +typedef struct VkPhysicalDeviceSchedulingControlsFeaturesARM { + VkStructureType sType; + void * pNext; + VkBool32 schedulingControls; +} VkPhysicalDeviceSchedulingControlsFeaturesARM; + +typedef struct VkPhysicalDeviceSchedulingControlsPropertiesARM { + VkStructureType sType; + void * pNext; + VkPhysicalDeviceSchedulingControlsFlagsARM schedulingControlsFlags; +} VkPhysicalDeviceSchedulingControlsPropertiesARM; + +typedef struct VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG { + VkStructureType sType; + void * pNext; + VkBool32 relaxedLineRasterization; +} VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG; + +typedef struct VkPhysicalDeviceRenderPassStripedFeaturesARM { + VkStructureType sType; + void * pNext; + VkBool32 renderPassStriped; +} VkPhysicalDeviceRenderPassStripedFeaturesARM; + +typedef struct VkRenderPassStripeSubmitInfoARM { + VkStructureType sType; + const void * pNext; + uint32_t stripeSemaphoreInfoCount; + const VkSemaphoreSubmitInfo * pStripeSemaphoreInfos; +} VkRenderPassStripeSubmitInfoARM; + +typedef struct VkPhysicalDevicePipelineOpacityMicromapFeaturesARM { + VkStructureType sType; + void * pNext; + VkBool32 pipelineOpacityMicromap; +} VkPhysicalDevicePipelineOpacityMicromapFeaturesARM; + +typedef struct VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 shaderMaximalReconvergence; +} VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR; + +typedef struct VkPhysicalDeviceShaderSubgroupRotateFeatures { + VkStructureType sType; + void * pNext; + VkBool32 shaderSubgroupRotate; + VkBool32 shaderSubgroupRotateClustered; +} VkPhysicalDeviceShaderSubgroupRotateFeatures; + +typedef struct VkPhysicalDeviceShaderSubgroupRotateFeatures VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR; + +typedef struct VkPhysicalDeviceShaderExpectAssumeFeatures { + VkStructureType sType; + void * pNext; + VkBool32 shaderExpectAssume; +} VkPhysicalDeviceShaderExpectAssumeFeatures; + +typedef struct VkPhysicalDeviceShaderExpectAssumeFeatures VkPhysicalDeviceShaderExpectAssumeFeaturesKHR; + +typedef struct VkPhysicalDeviceShaderFloatControls2Features { + VkStructureType sType; + void * pNext; + VkBool32 shaderFloatControls2; +} VkPhysicalDeviceShaderFloatControls2Features; + +typedef struct VkPhysicalDeviceShaderFloatControls2Features VkPhysicalDeviceShaderFloatControls2FeaturesKHR; + +typedef struct VkPhysicalDeviceDynamicRenderingLocalReadFeatures { + VkStructureType sType; + void * pNext; + VkBool32 dynamicRenderingLocalRead; +} VkPhysicalDeviceDynamicRenderingLocalReadFeatures; + +typedef struct VkPhysicalDeviceDynamicRenderingLocalReadFeatures VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR; + +typedef struct VkPhysicalDeviceShaderQuadControlFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 shaderQuadControl; +} VkPhysicalDeviceShaderQuadControlFeaturesKHR; + +typedef struct VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 shaderFloat16VectorAtomics; +} VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV; + +typedef struct VkPhysicalDeviceMapMemoryPlacedFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 memoryMapPlaced; + VkBool32 memoryMapRangePlaced; + VkBool32 memoryUnmapReserve; +} VkPhysicalDeviceMapMemoryPlacedFeaturesEXT; + +typedef struct VkPhysicalDeviceMapMemoryPlacedPropertiesEXT { + VkStructureType sType; + void * pNext; + VkDeviceSize minPlacedMemoryMapAlignment; +} VkPhysicalDeviceMapMemoryPlacedPropertiesEXT; + +typedef struct VkPhysicalDeviceShaderBfloat16FeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 shaderBFloat16Type; + VkBool32 shaderBFloat16DotProduct; + VkBool32 shaderBFloat16CooperativeMatrix; +} VkPhysicalDeviceShaderBfloat16FeaturesKHR; + +typedef struct VkPhysicalDeviceRawAccessChainsFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 shaderRawAccessChains; +} VkPhysicalDeviceRawAccessChainsFeaturesNV; + +typedef struct VkPhysicalDeviceCommandBufferInheritanceFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 commandBufferInheritance; +} VkPhysicalDeviceCommandBufferInheritanceFeaturesNV; + +typedef struct VkPhysicalDeviceImageAlignmentControlFeaturesMESA { + VkStructureType sType; + void * pNext; + VkBool32 imageAlignmentControl; +} VkPhysicalDeviceImageAlignmentControlFeaturesMESA; + +typedef struct VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 shaderReplicatedComposites; +} VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT; + +typedef struct VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 presentModeFifoLatestReady; +} VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + +typedef struct VkPhysicalDeviceCooperativeMatrix2FeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 cooperativeMatrixWorkgroupScope; + VkBool32 cooperativeMatrixFlexibleDimensions; + VkBool32 cooperativeMatrixReductions; + VkBool32 cooperativeMatrixConversions; + VkBool32 cooperativeMatrixPerElementOperations; + VkBool32 cooperativeMatrixTensorAddressing; + VkBool32 cooperativeMatrixBlockLoads; +} VkPhysicalDeviceCooperativeMatrix2FeaturesNV; + +typedef struct VkCooperativeMatrixFlexibleDimensionsPropertiesNV { + VkStructureType sType; + void * pNext; + uint32_t MGranularity; + uint32_t NGranularity; + uint32_t KGranularity; + VkComponentTypeKHR AType; + VkComponentTypeKHR BType; + VkComponentTypeKHR CType; + VkComponentTypeKHR ResultType; + VkBool32 saturatingAccumulation; + VkScopeKHR scope; + uint32_t workgroupInvocations; +} VkCooperativeMatrixFlexibleDimensionsPropertiesNV; + +typedef struct VkPhysicalDeviceHdrVividFeaturesHUAWEI { + VkStructureType sType; + void * pNext; + VkBool32 hdrVivid; +} VkPhysicalDeviceHdrVividFeaturesHUAWEI; + +typedef struct VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 vertexAttributeRobustness; +} VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkPhysicalDeviceDenseGeometryFormatFeaturesAMDX { + VkStructureType sType; + void * pNext; + VkBool32 denseGeometryFormat; +} VkPhysicalDeviceDenseGeometryFormatFeaturesAMDX; + +#endif + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX { + VkStructureType sType; + const void * pNext; + VkDeviceOrHostAddressConstKHR compressedData; + VkDeviceSize dataSize; + uint32_t numTriangles; + uint32_t numVertices; + uint32_t maxPrimitiveIndex; + uint32_t maxGeometryIndex; + VkCompressedTriangleFormatAMDX format; +} VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX; + +#endif + +typedef struct VkPhysicalDeviceDepthClampZeroOneFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 depthClampZeroOne; +} VkPhysicalDeviceDepthClampZeroOneFeaturesKHR; + +typedef struct VkPhysicalDeviceCooperativeVectorFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 cooperativeVector; + VkBool32 cooperativeVectorTraining; +} VkPhysicalDeviceCooperativeVectorFeaturesNV; + +typedef struct VkCooperativeVectorPropertiesNV { + VkStructureType sType; + void * pNext; + VkComponentTypeKHR inputType; + VkComponentTypeKHR inputInterpretation; + VkComponentTypeKHR matrixInterpretation; + VkComponentTypeKHR biasInterpretation; + VkComponentTypeKHR resultType; + VkBool32 transpose; +} VkCooperativeVectorPropertiesNV; + +typedef struct VkPhysicalDeviceCooperativeVectorPropertiesNV { + VkStructureType sType; + void * pNext; + VkShaderStageFlags cooperativeVectorSupportedStages; + VkBool32 cooperativeVectorTrainingFloat16Accumulation; + VkBool32 cooperativeVectorTrainingFloat32Accumulation; + uint32_t maxCooperativeVectorComponents; +} VkPhysicalDeviceCooperativeVectorPropertiesNV; + +typedef struct VkConvertCooperativeVectorMatrixInfoNV { + VkStructureType sType; + const void * pNext; + size_t srcSize; + VkDeviceOrHostAddressConstKHR srcData; + size_t * pDstSize; + VkDeviceOrHostAddressKHR dstData; + VkComponentTypeKHR srcComponentType; + VkComponentTypeKHR dstComponentType; + uint32_t numRows; + uint32_t numColumns; + VkCooperativeVectorMatrixLayoutNV srcLayout; + size_t srcStride; + VkCooperativeVectorMatrixLayoutNV dstLayout; + size_t dstStride; +} VkConvertCooperativeVectorMatrixInfoNV; + +typedef struct VkPhysicalDeviceTileShadingFeaturesQCOM { + VkStructureType sType; + void * pNext; + VkBool32 tileShading; + VkBool32 tileShadingFragmentStage; + VkBool32 tileShadingColorAttachments; + VkBool32 tileShadingDepthAttachments; + VkBool32 tileShadingStencilAttachments; + VkBool32 tileShadingInputAttachments; + VkBool32 tileShadingSampledAttachments; + VkBool32 tileShadingPerTileDraw; + VkBool32 tileShadingPerTileDispatch; + VkBool32 tileShadingDispatchTile; + VkBool32 tileShadingApron; + VkBool32 tileShadingAnisotropicApron; + VkBool32 tileShadingAtomicOps; + VkBool32 tileShadingImageProcessing; +} VkPhysicalDeviceTileShadingFeaturesQCOM; + +typedef struct VkPhysicalDeviceTileShadingPropertiesQCOM { + VkStructureType sType; + void * pNext; + uint32_t maxApronSize; + VkBool32 preferNonCoherent; + VkExtent2D tileGranularity; + VkExtent2D maxTileShadingRate; +} VkPhysicalDeviceTileShadingPropertiesQCOM; + +typedef struct VkRenderPassTileShadingCreateInfoQCOM { + VkStructureType sType; + const void * pNext; + VkTileShadingRenderPassFlagsQCOM flags; + VkExtent2D tileApronSize; +} VkRenderPassTileShadingCreateInfoQCOM; + +typedef struct VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE { + VkStructureType sType; + void * pNext; + VkBool32 fragmentDensityMapLayered; +} VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef struct VkPhysicalDevicePresentMeteringFeaturesNV { + VkStructureType sType; + void * pNext; + VkBool32 presentMetering; +} VkPhysicalDevicePresentMeteringFeaturesNV; + +#endif + +typedef struct VkPhysicalDeviceFormatPackFeaturesARM { + VkStructureType sType; + void * pNext; + VkBool32 formatPack; +} VkPhysicalDeviceFormatPackFeaturesARM; + +typedef struct VkTensorDescriptionARM { + VkStructureType sType; + const void * pNext; + VkTensorTilingARM tiling; + VkFormat format; + uint32_t dimensionCount; + const int64_t * pDimensions; + const int64_t * pStrides; + VkTensorUsageFlagsARM usage; +} VkTensorDescriptionARM; + +typedef struct VkTensorCreateInfoARM { + VkStructureType sType; + const void * pNext; + VkTensorCreateFlagsARM flags; + const VkTensorDescriptionARM * pDescription; + VkSharingMode sharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t * pQueueFamilyIndices; +} VkTensorCreateInfoARM; + +typedef struct VkTensorViewCreateInfoARM { + VkStructureType sType; + const void * pNext; + VkTensorViewCreateFlagsARM flags; + VkTensorARM tensor; + VkFormat format; +} VkTensorViewCreateInfoARM; + +typedef struct VkBindTensorMemoryInfoARM { + VkStructureType sType; + const void * pNext; + VkTensorARM tensor; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindTensorMemoryInfoARM; + +typedef struct VkTensorFormatPropertiesARM { + VkStructureType sType; + const void * pNext; + VkFormatFeatureFlags2 optimalTilingTensorFeatures; + VkFormatFeatureFlags2 linearTilingTensorFeatures; +} VkTensorFormatPropertiesARM; + +typedef struct VkPhysicalDeviceTensorPropertiesARM { + VkStructureType sType; + void * pNext; + uint32_t maxTensorDimensionCount; + uint64_t maxTensorElements; + uint64_t maxPerDimensionTensorElements; + int64_t maxTensorStride; + uint64_t maxTensorSize; + uint32_t maxTensorShaderAccessArrayLength; + uint32_t maxTensorShaderAccessSize; + uint32_t maxDescriptorSetStorageTensors; + uint32_t maxPerStageDescriptorSetStorageTensors; + uint32_t maxDescriptorSetUpdateAfterBindStorageTensors; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageTensors; + VkBool32 shaderStorageTensorArrayNonUniformIndexingNative; + VkShaderStageFlags shaderTensorSupportedStages; +} VkPhysicalDeviceTensorPropertiesARM; + +typedef struct VkTensorMemoryBarrierARM { + VkStructureType sType; + const void * pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkTensorARM tensor; +} VkTensorMemoryBarrierARM; + +typedef struct VkTensorDependencyInfoARM { + VkStructureType sType; + const void * pNext; + uint32_t tensorMemoryBarrierCount; + const VkTensorMemoryBarrierARM * pTensorMemoryBarriers; +} VkTensorDependencyInfoARM; + +typedef struct VkPhysicalDeviceTensorFeaturesARM { + VkStructureType sType; + void * pNext; + VkBool32 tensorNonPacked; + VkBool32 shaderTensorAccess; + VkBool32 shaderStorageTensorArrayDynamicIndexing; + VkBool32 shaderStorageTensorArrayNonUniformIndexing; + VkBool32 descriptorBindingStorageTensorUpdateAfterBind; + VkBool32 tensors; +} VkPhysicalDeviceTensorFeaturesARM; + +typedef struct VkDeviceTensorMemoryRequirementsARM { + VkStructureType sType; + const void * pNext; + const VkTensorCreateInfoARM * pCreateInfo; +} VkDeviceTensorMemoryRequirementsARM; + +typedef struct VkCopyTensorInfoARM { + VkStructureType sType; + const void * pNext; + VkTensorARM srcTensor; + VkTensorARM dstTensor; + uint32_t regionCount; + const VkTensorCopyARM * pRegions; +} VkCopyTensorInfoARM; + +typedef struct VkPhysicalDeviceDescriptorBufferTensorFeaturesARM { + VkStructureType sType; + void * pNext; + VkBool32 descriptorBufferTensorDescriptors; +} VkPhysicalDeviceDescriptorBufferTensorFeaturesARM; + +typedef struct VkPhysicalDeviceExternalTensorInfoARM { + VkStructureType sType; + const void * pNext; + VkTensorCreateFlagsARM flags; + const VkTensorDescriptionARM * pDescription; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalTensorInfoARM; + +typedef struct VkExternalTensorPropertiesARM { + VkStructureType sType; + const void * pNext; + VkExternalMemoryProperties externalMemoryProperties; +} VkExternalTensorPropertiesARM; + +typedef struct VkExternalMemoryTensorCreateInfoARM { + VkStructureType sType; + const void * pNext; + VkExternalMemoryHandleTypeFlags handleTypes; +} VkExternalMemoryTensorCreateInfoARM; + +typedef struct VkPhysicalDeviceShaderFloat8FeaturesEXT { + VkStructureType sType; + void * pNext; + VkBool32 shaderFloat8; + VkBool32 shaderFloat8CooperativeMatrix; +} VkPhysicalDeviceShaderFloat8FeaturesEXT; + +#if defined(VK_USE_PLATFORM_OHOS) +typedef struct VkSurfaceCreateInfoOHOS { + VkStructureType sType; + const void * pNext; + VkSurfaceCreateFlagsOHOS flags; + OHNativeWindow * window; +} VkSurfaceCreateInfoOHOS; + +#endif + +typedef struct VkPhysicalDeviceDataGraphFeaturesARM { + VkStructureType sType; + void * pNext; + VkBool32 dataGraph; + VkBool32 dataGraphUpdateAfterBind; + VkBool32 dataGraphSpecializationConstants; + VkBool32 dataGraphDescriptorBuffer; + VkBool32 dataGraphShaderModule; +} VkPhysicalDeviceDataGraphFeaturesARM; + +typedef struct VkDataGraphPipelineCreateInfoARM { + VkStructureType sType; + const void * pNext; + VkPipelineCreateFlags2KHR flags; + VkPipelineLayout layout; + uint32_t resourceInfoCount; + const VkDataGraphPipelineResourceInfoARM * pResourceInfos; +} VkDataGraphPipelineCreateInfoARM; + +typedef struct VkDataGraphPipelineSessionCreateInfoARM { + VkStructureType sType; + const void * pNext; + VkDataGraphPipelineSessionCreateFlagsARM flags; + VkPipeline dataGraphPipeline; +} VkDataGraphPipelineSessionCreateInfoARM; + +typedef struct VkBindDataGraphPipelineSessionMemoryInfoARM { + VkStructureType sType; + const void * pNext; + VkDataGraphPipelineSessionARM session; + VkDataGraphPipelineSessionBindPointARM bindPoint; + uint32_t objectIndex; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindDataGraphPipelineSessionMemoryInfoARM; + +typedef struct VkDataGraphPipelinePropertyQueryResultARM { + VkStructureType sType; + const void * pNext; + VkDataGraphPipelinePropertyARM property; + VkBool32 isText; + size_t dataSize; + void * pData; +} VkDataGraphPipelinePropertyQueryResultARM; + +typedef struct VkDataGraphPipelineDispatchInfoARM { + VkStructureType sType; + void * pNext; + VkDataGraphPipelineDispatchFlagsARM flags; +} VkDataGraphPipelineDispatchInfoARM; + +typedef struct VkPhysicalDeviceDataGraphProcessingEngineARM { + VkPhysicalDeviceDataGraphProcessingEngineTypeARM type; + VkBool32 isForeign; +} VkPhysicalDeviceDataGraphProcessingEngineARM; + +typedef struct VkQueueFamilyDataGraphPropertiesARM { + VkStructureType sType; + const void * pNext; + VkPhysicalDeviceDataGraphProcessingEngineARM engine; + VkPhysicalDeviceDataGraphOperationSupportARM operation; +} VkQueueFamilyDataGraphPropertiesARM; + +typedef struct VkQueueFamilyDataGraphProcessingEnginePropertiesARM { + VkStructureType sType; + const void * pNext; + VkExternalSemaphoreHandleTypeFlags foreignSemaphoreHandleTypes; + VkExternalMemoryHandleTypeFlags foreignMemoryHandleTypes; +} VkQueueFamilyDataGraphProcessingEnginePropertiesARM; + +typedef struct VkDataGraphProcessingEngineCreateInfoARM { + VkStructureType sType; + const void * pNext; + uint32_t processingEngineCount; + VkPhysicalDeviceDataGraphProcessingEngineARM * pProcessingEngines; +} VkDataGraphProcessingEngineCreateInfoARM; + +typedef struct VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC { + VkStructureType sType; + void * pNext; + VkBool32 pipelineCacheIncrementalMode; +} VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC; + +typedef struct VkPhysicalDeviceShaderUntypedPointersFeaturesKHR { + VkStructureType sType; + void * pNext; + VkBool32 shaderUntypedPointers; +} VkPhysicalDeviceShaderUntypedPointersFeaturesKHR; + +typedef struct VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE { + VkStructureType sType; + void * pNext; + VkBool32 videoEncodeRgbConversion; +} VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE; + +typedef struct VkVideoEncodeRgbConversionCapabilitiesVALVE { + VkStructureType sType; + void * pNext; + VkVideoEncodeRgbModelConversionFlagsVALVE rgbModels; + VkVideoEncodeRgbRangeCompressionFlagsVALVE rgbRanges; + VkVideoEncodeRgbChromaOffsetFlagsVALVE xChromaOffsets; + VkVideoEncodeRgbChromaOffsetFlagsVALVE yChromaOffsets; +} VkVideoEncodeRgbConversionCapabilitiesVALVE; + +typedef struct VkVideoEncodeProfileRgbConversionInfoVALVE { + VkStructureType sType; + const void * pNext; + VkBool32 performEncodeRgbConversion; +} VkVideoEncodeProfileRgbConversionInfoVALVE; + +typedef VkBool32 (VKAPI_PTR *PFN_vkDebugUtilsMessengerCallbackEXT)( + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, + void* pUserData); +typedef void (VKAPI_PTR *PFN_vkDeviceMemoryReportCallbackEXT)( + const VkDeviceMemoryReportCallbackDataEXT* pCallbackData, + void* pUserData); +typedef struct VkPhysicalDeviceProperties { + uint32_t apiVersion; + uint32_t driverVersion; + uint32_t vendorID; + uint32_t deviceID; + VkPhysicalDeviceType deviceType; + char deviceName [ VK_MAX_PHYSICAL_DEVICE_NAME_SIZE ]; + uint8_t pipelineCacheUUID [ VK_UUID_SIZE ]; + VkPhysicalDeviceLimits limits; + VkPhysicalDeviceSparseProperties sparseProperties; +} VkPhysicalDeviceProperties; + +typedef struct VkDeviceCreateInfo { + VkStructureType sType; + const void * pNext; + VkDeviceCreateFlags flags; + uint32_t queueCreateInfoCount; + const VkDeviceQueueCreateInfo * pQueueCreateInfos; + uint32_t enabledLayerCount; + const char * const* ppEnabledLayerNames; + uint32_t enabledExtensionCount; + const char * const* ppEnabledExtensionNames; + const VkPhysicalDeviceFeatures * pEnabledFeatures; +} VkDeviceCreateInfo; + +typedef struct VkPhysicalDeviceMemoryProperties { + uint32_t memoryTypeCount; + VkMemoryType memoryTypes [ VK_MAX_MEMORY_TYPES ]; + uint32_t memoryHeapCount; + VkMemoryHeap memoryHeaps [ VK_MAX_MEMORY_HEAPS ]; +} VkPhysicalDeviceMemoryProperties; + +typedef struct VkPipelineBinaryCreateInfoKHR { + VkStructureType sType; + const void * pNext; + const VkPipelineBinaryKeysAndDataKHR * pKeysAndDataInfo; + VkPipeline pipeline; + const VkPipelineCreateInfoKHR * pPipelineCreateInfo; +} VkPipelineBinaryCreateInfoKHR; + +typedef struct VkClusterAccelerationStructureCommandsInfoNV { + VkStructureType sType; + void * pNext; + VkClusterAccelerationStructureInputInfoNV input; + VkDeviceAddress dstImplicitData; + VkDeviceAddress scratchData; + VkStridedDeviceAddressRegionKHR dstAddressesArray; + VkStridedDeviceAddressRegionKHR dstSizesArray; + VkStridedDeviceAddressRegionKHR srcInfosArray; + VkDeviceAddress srcInfosCount; + VkClusterAccelerationStructureAddressResolutionFlagsNV addressResolutionFlags; +} VkClusterAccelerationStructureCommandsInfoNV; + +typedef struct VkPhysicalDeviceProperties2 { + VkStructureType sType; + void * pNext; + VkPhysicalDeviceProperties properties; +} VkPhysicalDeviceProperties2; + +typedef struct VkPhysicalDeviceProperties2 VkPhysicalDeviceProperties2KHR; + +typedef struct VkPhysicalDeviceMemoryProperties2 { + VkStructureType sType; + void * pNext; + VkPhysicalDeviceMemoryProperties memoryProperties; +} VkPhysicalDeviceMemoryProperties2; + +typedef struct VkPhysicalDeviceMemoryProperties2 VkPhysicalDeviceMemoryProperties2KHR; + +typedef struct VkPresentRegionsKHR { + VkStructureType sType; + const void * pNext; + uint32_t swapchainCount; + const VkPresentRegionKHR * pRegions; +} VkPresentRegionsKHR; + +typedef struct VkPhysicalDeviceLayeredApiVulkanPropertiesKHR { + VkStructureType sType; + void * pNext; + VkPhysicalDeviceProperties2 properties; +} VkPhysicalDeviceLayeredApiVulkanPropertiesKHR; + +typedef struct VkDebugUtilsMessengerCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkDebugUtilsMessengerCreateFlagsEXT flags; + VkDebugUtilsMessageSeverityFlagsEXT messageSeverity; + VkDebugUtilsMessageTypeFlagsEXT messageType; + PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback; + void * pUserData; +} VkDebugUtilsMessengerCreateInfoEXT; + +typedef struct VkDeviceDeviceMemoryReportCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkDeviceMemoryReportFlagsEXT flags; + PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback; + void * pUserData; +} VkDeviceDeviceMemoryReportCreateInfoEXT; + +typedef struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV; + +typedef struct VkDrmFormatModifierPropertiesListEXT { + VkStructureType sType; + void * pNext; + uint32_t drmFormatModifierCount; + VkDrmFormatModifierPropertiesEXT * pDrmFormatModifierProperties; +} VkDrmFormatModifierPropertiesListEXT; + +typedef struct VkFramebufferAttachmentsCreateInfo { + VkStructureType sType; + const void * pNext; + uint32_t attachmentImageInfoCount; + const VkFramebufferAttachmentImageInfo * pAttachmentImageInfos; +} VkFramebufferAttachmentsCreateInfo; + +typedef struct VkFramebufferAttachmentsCreateInfo VkFramebufferAttachmentsCreateInfoKHR; + +typedef struct VkIndirectCommandsLayoutTokenEXT { + VkStructureType sType; + const void * pNext; + VkIndirectCommandsTokenTypeEXT type; + VkIndirectCommandsTokenDataEXT data; + uint32_t offset; +} VkIndirectCommandsLayoutTokenEXT; + +typedef struct VkVideoProfileListInfoKHR { + VkStructureType sType; + const void * pNext; + uint32_t profileCount; + const VkVideoProfileInfoKHR * pProfiles; +} VkVideoProfileListInfoKHR; + +typedef struct VkDrmFormatModifierPropertiesList2EXT { + VkStructureType sType; + void * pNext; + uint32_t drmFormatModifierCount; + VkDrmFormatModifierProperties2EXT * pDrmFormatModifierProperties; +} VkDrmFormatModifierPropertiesList2EXT; + +typedef struct VkPhysicalDeviceDepthClampZeroOneFeaturesKHR VkPhysicalDeviceDepthClampZeroOneFeaturesEXT; + +typedef struct VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR VkPhysicalDevicePresentModeFifoLatestReadyFeaturesEXT; + +typedef struct VkIndirectCommandsLayoutCreateInfoEXT { + VkStructureType sType; + const void * pNext; + VkIndirectCommandsLayoutUsageFlagsEXT flags; + VkShaderStageFlags shaderStages; + uint32_t indirectStride; + VkPipelineLayout pipelineLayout; + uint32_t tokenCount; + const VkIndirectCommandsLayoutTokenEXT * pTokens; +} VkIndirectCommandsLayoutCreateInfoEXT; + + + +#define VK_VERSION_1_0 1 +GLAD_API_CALL int GLAD_VK_VERSION_1_0; +#define VK_VERSION_1_1 1 +GLAD_API_CALL int GLAD_VK_VERSION_1_1; +#define VK_VERSION_1_2 1 +GLAD_API_CALL int GLAD_VK_VERSION_1_2; +#define VK_VERSION_1_3 1 +GLAD_API_CALL int GLAD_VK_VERSION_1_3; +#define VK_VERSION_1_4 1 +GLAD_API_CALL int GLAD_VK_VERSION_1_4; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_AMDX_dense_geometry_format 1 +GLAD_API_CALL int GLAD_VK_AMDX_dense_geometry_format; + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_AMDX_shader_enqueue 1 +GLAD_API_CALL int GLAD_VK_AMDX_shader_enqueue; + +#endif +#define VK_AMD_anti_lag 1 +GLAD_API_CALL int GLAD_VK_AMD_anti_lag; +#define VK_AMD_buffer_marker 1 +GLAD_API_CALL int GLAD_VK_AMD_buffer_marker; +#define VK_AMD_device_coherent_memory 1 +GLAD_API_CALL int GLAD_VK_AMD_device_coherent_memory; +#define VK_AMD_display_native_hdr 1 +GLAD_API_CALL int GLAD_VK_AMD_display_native_hdr; +#define VK_AMD_draw_indirect_count 1 +GLAD_API_CALL int GLAD_VK_AMD_draw_indirect_count; +#define VK_AMD_gcn_shader 1 +GLAD_API_CALL int GLAD_VK_AMD_gcn_shader; +#define VK_AMD_gpu_shader_half_float 1 +GLAD_API_CALL int GLAD_VK_AMD_gpu_shader_half_float; +#define VK_AMD_gpu_shader_int16 1 +GLAD_API_CALL int GLAD_VK_AMD_gpu_shader_int16; +#define VK_AMD_memory_overallocation_behavior 1 +GLAD_API_CALL int GLAD_VK_AMD_memory_overallocation_behavior; +#define VK_AMD_mixed_attachment_samples 1 +GLAD_API_CALL int GLAD_VK_AMD_mixed_attachment_samples; +#define VK_AMD_negative_viewport_height 1 +GLAD_API_CALL int GLAD_VK_AMD_negative_viewport_height; +#define VK_AMD_pipeline_compiler_control 1 +GLAD_API_CALL int GLAD_VK_AMD_pipeline_compiler_control; +#define VK_AMD_rasterization_order 1 +GLAD_API_CALL int GLAD_VK_AMD_rasterization_order; +#define VK_AMD_shader_ballot 1 +GLAD_API_CALL int GLAD_VK_AMD_shader_ballot; +#define VK_AMD_shader_core_properties 1 +GLAD_API_CALL int GLAD_VK_AMD_shader_core_properties; +#define VK_AMD_shader_core_properties2 1 +GLAD_API_CALL int GLAD_VK_AMD_shader_core_properties2; +#define VK_AMD_shader_early_and_late_fragment_tests 1 +GLAD_API_CALL int GLAD_VK_AMD_shader_early_and_late_fragment_tests; +#define VK_AMD_shader_explicit_vertex_parameter 1 +GLAD_API_CALL int GLAD_VK_AMD_shader_explicit_vertex_parameter; +#define VK_AMD_shader_fragment_mask 1 +GLAD_API_CALL int GLAD_VK_AMD_shader_fragment_mask; +#define VK_AMD_shader_image_load_store_lod 1 +GLAD_API_CALL int GLAD_VK_AMD_shader_image_load_store_lod; +#define VK_AMD_shader_info 1 +GLAD_API_CALL int GLAD_VK_AMD_shader_info; +#define VK_AMD_shader_trinary_minmax 1 +GLAD_API_CALL int GLAD_VK_AMD_shader_trinary_minmax; +#define VK_AMD_texture_gather_bias_lod 1 +GLAD_API_CALL int GLAD_VK_AMD_texture_gather_bias_lod; +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +#define VK_ANDROID_external_format_resolve 1 +GLAD_API_CALL int GLAD_VK_ANDROID_external_format_resolve; + +#endif +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +#define VK_ANDROID_external_memory_android_hardware_buffer 1 +GLAD_API_CALL int GLAD_VK_ANDROID_external_memory_android_hardware_buffer; + +#endif +#define VK_ARM_data_graph 1 +GLAD_API_CALL int GLAD_VK_ARM_data_graph; +#define VK_ARM_format_pack 1 +GLAD_API_CALL int GLAD_VK_ARM_format_pack; +#define VK_ARM_pipeline_opacity_micromap 1 +GLAD_API_CALL int GLAD_VK_ARM_pipeline_opacity_micromap; +#define VK_ARM_rasterization_order_attachment_access 1 +GLAD_API_CALL int GLAD_VK_ARM_rasterization_order_attachment_access; +#define VK_ARM_render_pass_striped 1 +GLAD_API_CALL int GLAD_VK_ARM_render_pass_striped; +#define VK_ARM_scheduling_controls 1 +GLAD_API_CALL int GLAD_VK_ARM_scheduling_controls; +#define VK_ARM_shader_core_builtins 1 +GLAD_API_CALL int GLAD_VK_ARM_shader_core_builtins; +#define VK_ARM_shader_core_properties 1 +GLAD_API_CALL int GLAD_VK_ARM_shader_core_properties; +#define VK_ARM_tensors 1 +GLAD_API_CALL int GLAD_VK_ARM_tensors; +#define VK_EXT_4444_formats 1 +GLAD_API_CALL int GLAD_VK_EXT_4444_formats; +#define VK_EXT_acquire_drm_display 1 +GLAD_API_CALL int GLAD_VK_EXT_acquire_drm_display; +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +#define VK_EXT_acquire_xlib_display 1 +GLAD_API_CALL int GLAD_VK_EXT_acquire_xlib_display; + +#endif +#define VK_EXT_astc_decode_mode 1 +GLAD_API_CALL int GLAD_VK_EXT_astc_decode_mode; +#define VK_EXT_attachment_feedback_loop_dynamic_state 1 +GLAD_API_CALL int GLAD_VK_EXT_attachment_feedback_loop_dynamic_state; +#define VK_EXT_attachment_feedback_loop_layout 1 +GLAD_API_CALL int GLAD_VK_EXT_attachment_feedback_loop_layout; +#define VK_EXT_blend_operation_advanced 1 +GLAD_API_CALL int GLAD_VK_EXT_blend_operation_advanced; +#define VK_EXT_border_color_swizzle 1 +GLAD_API_CALL int GLAD_VK_EXT_border_color_swizzle; +#define VK_EXT_buffer_device_address 1 +GLAD_API_CALL int GLAD_VK_EXT_buffer_device_address; +#define VK_EXT_calibrated_timestamps 1 +GLAD_API_CALL int GLAD_VK_EXT_calibrated_timestamps; +#define VK_EXT_color_write_enable 1 +GLAD_API_CALL int GLAD_VK_EXT_color_write_enable; +#define VK_EXT_conditional_rendering 1 +GLAD_API_CALL int GLAD_VK_EXT_conditional_rendering; +#define VK_EXT_conservative_rasterization 1 +GLAD_API_CALL int GLAD_VK_EXT_conservative_rasterization; +#define VK_EXT_custom_border_color 1 +GLAD_API_CALL int GLAD_VK_EXT_custom_border_color; +#define VK_EXT_debug_marker 1 +GLAD_API_CALL int GLAD_VK_EXT_debug_marker; +#define VK_EXT_debug_report 1 +GLAD_API_CALL int GLAD_VK_EXT_debug_report; +#define VK_EXT_debug_utils 1 +GLAD_API_CALL int GLAD_VK_EXT_debug_utils; +#define VK_EXT_depth_bias_control 1 +GLAD_API_CALL int GLAD_VK_EXT_depth_bias_control; +#define VK_EXT_depth_clamp_control 1 +GLAD_API_CALL int GLAD_VK_EXT_depth_clamp_control; +#define VK_EXT_depth_clamp_zero_one 1 +GLAD_API_CALL int GLAD_VK_EXT_depth_clamp_zero_one; +#define VK_EXT_depth_clip_control 1 +GLAD_API_CALL int GLAD_VK_EXT_depth_clip_control; +#define VK_EXT_depth_clip_enable 1 +GLAD_API_CALL int GLAD_VK_EXT_depth_clip_enable; +#define VK_EXT_depth_range_unrestricted 1 +GLAD_API_CALL int GLAD_VK_EXT_depth_range_unrestricted; +#define VK_EXT_descriptor_buffer 1 +GLAD_API_CALL int GLAD_VK_EXT_descriptor_buffer; +#define VK_EXT_descriptor_indexing 1 +GLAD_API_CALL int GLAD_VK_EXT_descriptor_indexing; +#define VK_EXT_device_address_binding_report 1 +GLAD_API_CALL int GLAD_VK_EXT_device_address_binding_report; +#define VK_EXT_device_fault 1 +GLAD_API_CALL int GLAD_VK_EXT_device_fault; +#define VK_EXT_device_generated_commands 1 +GLAD_API_CALL int GLAD_VK_EXT_device_generated_commands; +#define VK_EXT_device_memory_report 1 +GLAD_API_CALL int GLAD_VK_EXT_device_memory_report; +#define VK_EXT_direct_mode_display 1 +GLAD_API_CALL int GLAD_VK_EXT_direct_mode_display; +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +#define VK_EXT_directfb_surface 1 +GLAD_API_CALL int GLAD_VK_EXT_directfb_surface; + +#endif +#define VK_EXT_discard_rectangles 1 +GLAD_API_CALL int GLAD_VK_EXT_discard_rectangles; +#define VK_EXT_display_control 1 +GLAD_API_CALL int GLAD_VK_EXT_display_control; +#define VK_EXT_display_surface_counter 1 +GLAD_API_CALL int GLAD_VK_EXT_display_surface_counter; +#define VK_EXT_dynamic_rendering_unused_attachments 1 +GLAD_API_CALL int GLAD_VK_EXT_dynamic_rendering_unused_attachments; +#define VK_EXT_extended_dynamic_state 1 +GLAD_API_CALL int GLAD_VK_EXT_extended_dynamic_state; +#define VK_EXT_extended_dynamic_state2 1 +GLAD_API_CALL int GLAD_VK_EXT_extended_dynamic_state2; +#define VK_EXT_extended_dynamic_state3 1 +GLAD_API_CALL int GLAD_VK_EXT_extended_dynamic_state3; +#define VK_EXT_external_memory_acquire_unmodified 1 +GLAD_API_CALL int GLAD_VK_EXT_external_memory_acquire_unmodified; +#define VK_EXT_external_memory_dma_buf 1 +GLAD_API_CALL int GLAD_VK_EXT_external_memory_dma_buf; +#define VK_EXT_external_memory_host 1 +GLAD_API_CALL int GLAD_VK_EXT_external_memory_host; +#if defined(VK_USE_PLATFORM_METAL_EXT) +#define VK_EXT_external_memory_metal 1 +GLAD_API_CALL int GLAD_VK_EXT_external_memory_metal; + +#endif +#define VK_EXT_filter_cubic 1 +GLAD_API_CALL int GLAD_VK_EXT_filter_cubic; +#define VK_EXT_fragment_density_map 1 +GLAD_API_CALL int GLAD_VK_EXT_fragment_density_map; +#define VK_EXT_fragment_density_map2 1 +GLAD_API_CALL int GLAD_VK_EXT_fragment_density_map2; +#define VK_EXT_fragment_density_map_offset 1 +GLAD_API_CALL int GLAD_VK_EXT_fragment_density_map_offset; +#define VK_EXT_fragment_shader_interlock 1 +GLAD_API_CALL int GLAD_VK_EXT_fragment_shader_interlock; +#define VK_EXT_frame_boundary 1 +GLAD_API_CALL int GLAD_VK_EXT_frame_boundary; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_EXT_full_screen_exclusive 1 +GLAD_API_CALL int GLAD_VK_EXT_full_screen_exclusive; + +#endif +#define VK_EXT_global_priority 1 +GLAD_API_CALL int GLAD_VK_EXT_global_priority; +#define VK_EXT_global_priority_query 1 +GLAD_API_CALL int GLAD_VK_EXT_global_priority_query; +#define VK_EXT_graphics_pipeline_library 1 +GLAD_API_CALL int GLAD_VK_EXT_graphics_pipeline_library; +#define VK_EXT_hdr_metadata 1 +GLAD_API_CALL int GLAD_VK_EXT_hdr_metadata; +#define VK_EXT_headless_surface 1 +GLAD_API_CALL int GLAD_VK_EXT_headless_surface; +#define VK_EXT_host_image_copy 1 +GLAD_API_CALL int GLAD_VK_EXT_host_image_copy; +#define VK_EXT_host_query_reset 1 +GLAD_API_CALL int GLAD_VK_EXT_host_query_reset; +#define VK_EXT_image_2d_view_of_3d 1 +GLAD_API_CALL int GLAD_VK_EXT_image_2d_view_of_3d; +#define VK_EXT_image_compression_control 1 +GLAD_API_CALL int GLAD_VK_EXT_image_compression_control; +#define VK_EXT_image_compression_control_swapchain 1 +GLAD_API_CALL int GLAD_VK_EXT_image_compression_control_swapchain; +#define VK_EXT_image_drm_format_modifier 1 +GLAD_API_CALL int GLAD_VK_EXT_image_drm_format_modifier; +#define VK_EXT_image_robustness 1 +GLAD_API_CALL int GLAD_VK_EXT_image_robustness; +#define VK_EXT_image_sliced_view_of_3d 1 +GLAD_API_CALL int GLAD_VK_EXT_image_sliced_view_of_3d; +#define VK_EXT_image_view_min_lod 1 +GLAD_API_CALL int GLAD_VK_EXT_image_view_min_lod; +#define VK_EXT_index_type_uint8 1 +GLAD_API_CALL int GLAD_VK_EXT_index_type_uint8; +#define VK_EXT_inline_uniform_block 1 +GLAD_API_CALL int GLAD_VK_EXT_inline_uniform_block; +#define VK_EXT_layer_settings 1 +GLAD_API_CALL int GLAD_VK_EXT_layer_settings; +#define VK_EXT_legacy_dithering 1 +GLAD_API_CALL int GLAD_VK_EXT_legacy_dithering; +#define VK_EXT_legacy_vertex_attributes 1 +GLAD_API_CALL int GLAD_VK_EXT_legacy_vertex_attributes; +#define VK_EXT_line_rasterization 1 +GLAD_API_CALL int GLAD_VK_EXT_line_rasterization; +#define VK_EXT_load_store_op_none 1 +GLAD_API_CALL int GLAD_VK_EXT_load_store_op_none; +#define VK_EXT_map_memory_placed 1 +GLAD_API_CALL int GLAD_VK_EXT_map_memory_placed; +#define VK_EXT_memory_budget 1 +GLAD_API_CALL int GLAD_VK_EXT_memory_budget; +#define VK_EXT_memory_priority 1 +GLAD_API_CALL int GLAD_VK_EXT_memory_priority; +#define VK_EXT_mesh_shader 1 +GLAD_API_CALL int GLAD_VK_EXT_mesh_shader; +#if defined(VK_USE_PLATFORM_METAL_EXT) +#define VK_EXT_metal_objects 1 +GLAD_API_CALL int GLAD_VK_EXT_metal_objects; + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +#define VK_EXT_metal_surface 1 +GLAD_API_CALL int GLAD_VK_EXT_metal_surface; + +#endif +#define VK_EXT_multi_draw 1 +GLAD_API_CALL int GLAD_VK_EXT_multi_draw; +#define VK_EXT_multisampled_render_to_single_sampled 1 +GLAD_API_CALL int GLAD_VK_EXT_multisampled_render_to_single_sampled; +#define VK_EXT_mutable_descriptor_type 1 +GLAD_API_CALL int GLAD_VK_EXT_mutable_descriptor_type; +#define VK_EXT_nested_command_buffer 1 +GLAD_API_CALL int GLAD_VK_EXT_nested_command_buffer; +#define VK_EXT_non_seamless_cube_map 1 +GLAD_API_CALL int GLAD_VK_EXT_non_seamless_cube_map; +#define VK_EXT_opacity_micromap 1 +GLAD_API_CALL int GLAD_VK_EXT_opacity_micromap; +#define VK_EXT_pageable_device_local_memory 1 +GLAD_API_CALL int GLAD_VK_EXT_pageable_device_local_memory; +#define VK_EXT_pci_bus_info 1 +GLAD_API_CALL int GLAD_VK_EXT_pci_bus_info; +#define VK_EXT_physical_device_drm 1 +GLAD_API_CALL int GLAD_VK_EXT_physical_device_drm; +#define VK_EXT_pipeline_creation_cache_control 1 +GLAD_API_CALL int GLAD_VK_EXT_pipeline_creation_cache_control; +#define VK_EXT_pipeline_creation_feedback 1 +GLAD_API_CALL int GLAD_VK_EXT_pipeline_creation_feedback; +#define VK_EXT_pipeline_library_group_handles 1 +GLAD_API_CALL int GLAD_VK_EXT_pipeline_library_group_handles; +#define VK_EXT_pipeline_properties 1 +GLAD_API_CALL int GLAD_VK_EXT_pipeline_properties; +#define VK_EXT_pipeline_protected_access 1 +GLAD_API_CALL int GLAD_VK_EXT_pipeline_protected_access; +#define VK_EXT_pipeline_robustness 1 +GLAD_API_CALL int GLAD_VK_EXT_pipeline_robustness; +#define VK_EXT_post_depth_coverage 1 +GLAD_API_CALL int GLAD_VK_EXT_post_depth_coverage; +#define VK_EXT_present_mode_fifo_latest_ready 1 +GLAD_API_CALL int GLAD_VK_EXT_present_mode_fifo_latest_ready; +#define VK_EXT_primitive_topology_list_restart 1 +GLAD_API_CALL int GLAD_VK_EXT_primitive_topology_list_restart; +#define VK_EXT_primitives_generated_query 1 +GLAD_API_CALL int GLAD_VK_EXT_primitives_generated_query; +#define VK_EXT_private_data 1 +GLAD_API_CALL int GLAD_VK_EXT_private_data; +#define VK_EXT_provoking_vertex 1 +GLAD_API_CALL int GLAD_VK_EXT_provoking_vertex; +#define VK_EXT_queue_family_foreign 1 +GLAD_API_CALL int GLAD_VK_EXT_queue_family_foreign; +#define VK_EXT_rasterization_order_attachment_access 1 +GLAD_API_CALL int GLAD_VK_EXT_rasterization_order_attachment_access; +#define VK_EXT_rgba10x6_formats 1 +GLAD_API_CALL int GLAD_VK_EXT_rgba10x6_formats; +#define VK_EXT_robustness2 1 +GLAD_API_CALL int GLAD_VK_EXT_robustness2; +#define VK_EXT_sample_locations 1 +GLAD_API_CALL int GLAD_VK_EXT_sample_locations; +#define VK_EXT_sampler_filter_minmax 1 +GLAD_API_CALL int GLAD_VK_EXT_sampler_filter_minmax; +#define VK_EXT_scalar_block_layout 1 +GLAD_API_CALL int GLAD_VK_EXT_scalar_block_layout; +#define VK_EXT_separate_stencil_usage 1 +GLAD_API_CALL int GLAD_VK_EXT_separate_stencil_usage; +#define VK_EXT_shader_atomic_float 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_atomic_float; +#define VK_EXT_shader_atomic_float2 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_atomic_float2; +#define VK_EXT_shader_demote_to_helper_invocation 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_demote_to_helper_invocation; +#define VK_EXT_shader_float8 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_float8; +#define VK_EXT_shader_image_atomic_int64 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_image_atomic_int64; +#define VK_EXT_shader_module_identifier 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_module_identifier; +#define VK_EXT_shader_object 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_object; +#define VK_EXT_shader_replicated_composites 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_replicated_composites; +#define VK_EXT_shader_stencil_export 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_stencil_export; +#define VK_EXT_shader_subgroup_ballot 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_subgroup_ballot; +#define VK_EXT_shader_subgroup_vote 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_subgroup_vote; +#define VK_EXT_shader_tile_image 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_tile_image; +#define VK_EXT_shader_viewport_index_layer 1 +GLAD_API_CALL int GLAD_VK_EXT_shader_viewport_index_layer; +#define VK_EXT_subgroup_size_control 1 +GLAD_API_CALL int GLAD_VK_EXT_subgroup_size_control; +#define VK_EXT_subpass_merge_feedback 1 +GLAD_API_CALL int GLAD_VK_EXT_subpass_merge_feedback; +#define VK_EXT_surface_maintenance1 1 +GLAD_API_CALL int GLAD_VK_EXT_surface_maintenance1; +#define VK_EXT_swapchain_colorspace 1 +GLAD_API_CALL int GLAD_VK_EXT_swapchain_colorspace; +#define VK_EXT_swapchain_maintenance1 1 +GLAD_API_CALL int GLAD_VK_EXT_swapchain_maintenance1; +#define VK_EXT_texel_buffer_alignment 1 +GLAD_API_CALL int GLAD_VK_EXT_texel_buffer_alignment; +#define VK_EXT_texture_compression_astc_hdr 1 +GLAD_API_CALL int GLAD_VK_EXT_texture_compression_astc_hdr; +#define VK_EXT_tooling_info 1 +GLAD_API_CALL int GLAD_VK_EXT_tooling_info; +#define VK_EXT_transform_feedback 1 +GLAD_API_CALL int GLAD_VK_EXT_transform_feedback; +#define VK_EXT_validation_cache 1 +GLAD_API_CALL int GLAD_VK_EXT_validation_cache; +#define VK_EXT_validation_features 1 +GLAD_API_CALL int GLAD_VK_EXT_validation_features; +#define VK_EXT_validation_flags 1 +GLAD_API_CALL int GLAD_VK_EXT_validation_flags; +#define VK_EXT_vertex_attribute_divisor 1 +GLAD_API_CALL int GLAD_VK_EXT_vertex_attribute_divisor; +#define VK_EXT_vertex_attribute_robustness 1 +GLAD_API_CALL int GLAD_VK_EXT_vertex_attribute_robustness; +#define VK_EXT_vertex_input_dynamic_state 1 +GLAD_API_CALL int GLAD_VK_EXT_vertex_input_dynamic_state; +#define VK_EXT_ycbcr_2plane_444_formats 1 +GLAD_API_CALL int GLAD_VK_EXT_ycbcr_2plane_444_formats; +#define VK_EXT_ycbcr_image_arrays 1 +GLAD_API_CALL int GLAD_VK_EXT_ycbcr_image_arrays; +#define VK_EXT_zero_initialize_device_memory 1 +GLAD_API_CALL int GLAD_VK_EXT_zero_initialize_device_memory; +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_buffer_collection 1 +GLAD_API_CALL int GLAD_VK_FUCHSIA_buffer_collection; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_external_memory 1 +GLAD_API_CALL int GLAD_VK_FUCHSIA_external_memory; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_external_semaphore 1 +GLAD_API_CALL int GLAD_VK_FUCHSIA_external_semaphore; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +#define VK_FUCHSIA_imagepipe_surface 1 +GLAD_API_CALL int GLAD_VK_FUCHSIA_imagepipe_surface; + +#endif +#if defined(VK_USE_PLATFORM_GGP) +#define VK_GGP_frame_token 1 +GLAD_API_CALL int GLAD_VK_GGP_frame_token; + +#endif +#if defined(VK_USE_PLATFORM_GGP) +#define VK_GGP_stream_descriptor_surface 1 +GLAD_API_CALL int GLAD_VK_GGP_stream_descriptor_surface; + +#endif +#define VK_GOOGLE_decorate_string 1 +GLAD_API_CALL int GLAD_VK_GOOGLE_decorate_string; +#define VK_GOOGLE_display_timing 1 +GLAD_API_CALL int GLAD_VK_GOOGLE_display_timing; +#define VK_GOOGLE_hlsl_functionality1 1 +GLAD_API_CALL int GLAD_VK_GOOGLE_hlsl_functionality1; +#define VK_GOOGLE_surfaceless_query 1 +GLAD_API_CALL int GLAD_VK_GOOGLE_surfaceless_query; +#define VK_GOOGLE_user_type 1 +GLAD_API_CALL int GLAD_VK_GOOGLE_user_type; +#define VK_HUAWEI_cluster_culling_shader 1 +GLAD_API_CALL int GLAD_VK_HUAWEI_cluster_culling_shader; +#define VK_HUAWEI_hdr_vivid 1 +GLAD_API_CALL int GLAD_VK_HUAWEI_hdr_vivid; +#define VK_HUAWEI_invocation_mask 1 +GLAD_API_CALL int GLAD_VK_HUAWEI_invocation_mask; +#define VK_HUAWEI_subpass_shading 1 +GLAD_API_CALL int GLAD_VK_HUAWEI_subpass_shading; +#define VK_IMG_filter_cubic 1 +GLAD_API_CALL int GLAD_VK_IMG_filter_cubic; +#define VK_IMG_format_pvrtc 1 +GLAD_API_CALL int GLAD_VK_IMG_format_pvrtc; +#define VK_IMG_relaxed_line_rasterization 1 +GLAD_API_CALL int GLAD_VK_IMG_relaxed_line_rasterization; +#define VK_INTEL_performance_query 1 +GLAD_API_CALL int GLAD_VK_INTEL_performance_query; +#define VK_INTEL_shader_integer_functions2 1 +GLAD_API_CALL int GLAD_VK_INTEL_shader_integer_functions2; +#define VK_KHR_16bit_storage 1 +GLAD_API_CALL int GLAD_VK_KHR_16bit_storage; +#define VK_KHR_8bit_storage 1 +GLAD_API_CALL int GLAD_VK_KHR_8bit_storage; +#define VK_KHR_acceleration_structure 1 +GLAD_API_CALL int GLAD_VK_KHR_acceleration_structure; +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +#define VK_KHR_android_surface 1 +GLAD_API_CALL int GLAD_VK_KHR_android_surface; + +#endif +#define VK_KHR_bind_memory2 1 +GLAD_API_CALL int GLAD_VK_KHR_bind_memory2; +#define VK_KHR_buffer_device_address 1 +GLAD_API_CALL int GLAD_VK_KHR_buffer_device_address; +#define VK_KHR_calibrated_timestamps 1 +GLAD_API_CALL int GLAD_VK_KHR_calibrated_timestamps; +#define VK_KHR_compute_shader_derivatives 1 +GLAD_API_CALL int GLAD_VK_KHR_compute_shader_derivatives; +#define VK_KHR_cooperative_matrix 1 +GLAD_API_CALL int GLAD_VK_KHR_cooperative_matrix; +#define VK_KHR_copy_commands2 1 +GLAD_API_CALL int GLAD_VK_KHR_copy_commands2; +#define VK_KHR_copy_memory_indirect 1 +GLAD_API_CALL int GLAD_VK_KHR_copy_memory_indirect; +#define VK_KHR_create_renderpass2 1 +GLAD_API_CALL int GLAD_VK_KHR_create_renderpass2; +#define VK_KHR_dedicated_allocation 1 +GLAD_API_CALL int GLAD_VK_KHR_dedicated_allocation; +#define VK_KHR_deferred_host_operations 1 +GLAD_API_CALL int GLAD_VK_KHR_deferred_host_operations; +#define VK_KHR_depth_clamp_zero_one 1 +GLAD_API_CALL int GLAD_VK_KHR_depth_clamp_zero_one; +#define VK_KHR_depth_stencil_resolve 1 +GLAD_API_CALL int GLAD_VK_KHR_depth_stencil_resolve; +#define VK_KHR_descriptor_update_template 1 +GLAD_API_CALL int GLAD_VK_KHR_descriptor_update_template; +#define VK_KHR_device_group 1 +GLAD_API_CALL int GLAD_VK_KHR_device_group; +#define VK_KHR_device_group_creation 1 +GLAD_API_CALL int GLAD_VK_KHR_device_group_creation; +#define VK_KHR_display 1 +GLAD_API_CALL int GLAD_VK_KHR_display; +#define VK_KHR_display_swapchain 1 +GLAD_API_CALL int GLAD_VK_KHR_display_swapchain; +#define VK_KHR_draw_indirect_count 1 +GLAD_API_CALL int GLAD_VK_KHR_draw_indirect_count; +#define VK_KHR_driver_properties 1 +GLAD_API_CALL int GLAD_VK_KHR_driver_properties; +#define VK_KHR_dynamic_rendering 1 +GLAD_API_CALL int GLAD_VK_KHR_dynamic_rendering; +#define VK_KHR_dynamic_rendering_local_read 1 +GLAD_API_CALL int GLAD_VK_KHR_dynamic_rendering_local_read; +#define VK_KHR_external_fence 1 +GLAD_API_CALL int GLAD_VK_KHR_external_fence; +#define VK_KHR_external_fence_capabilities 1 +GLAD_API_CALL int GLAD_VK_KHR_external_fence_capabilities; +#define VK_KHR_external_fence_fd 1 +GLAD_API_CALL int GLAD_VK_KHR_external_fence_fd; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_external_fence_win32 1 +GLAD_API_CALL int GLAD_VK_KHR_external_fence_win32; + +#endif +#define VK_KHR_external_memory 1 +GLAD_API_CALL int GLAD_VK_KHR_external_memory; +#define VK_KHR_external_memory_capabilities 1 +GLAD_API_CALL int GLAD_VK_KHR_external_memory_capabilities; +#define VK_KHR_external_memory_fd 1 +GLAD_API_CALL int GLAD_VK_KHR_external_memory_fd; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_external_memory_win32 1 +GLAD_API_CALL int GLAD_VK_KHR_external_memory_win32; + +#endif +#define VK_KHR_external_semaphore 1 +GLAD_API_CALL int GLAD_VK_KHR_external_semaphore; +#define VK_KHR_external_semaphore_capabilities 1 +GLAD_API_CALL int GLAD_VK_KHR_external_semaphore_capabilities; +#define VK_KHR_external_semaphore_fd 1 +GLAD_API_CALL int GLAD_VK_KHR_external_semaphore_fd; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_external_semaphore_win32 1 +GLAD_API_CALL int GLAD_VK_KHR_external_semaphore_win32; + +#endif +#define VK_KHR_format_feature_flags2 1 +GLAD_API_CALL int GLAD_VK_KHR_format_feature_flags2; +#define VK_KHR_fragment_shader_barycentric 1 +GLAD_API_CALL int GLAD_VK_KHR_fragment_shader_barycentric; +#define VK_KHR_fragment_shading_rate 1 +GLAD_API_CALL int GLAD_VK_KHR_fragment_shading_rate; +#define VK_KHR_get_display_properties2 1 +GLAD_API_CALL int GLAD_VK_KHR_get_display_properties2; +#define VK_KHR_get_memory_requirements2 1 +GLAD_API_CALL int GLAD_VK_KHR_get_memory_requirements2; +#define VK_KHR_get_physical_device_properties2 1 +GLAD_API_CALL int GLAD_VK_KHR_get_physical_device_properties2; +#define VK_KHR_get_surface_capabilities2 1 +GLAD_API_CALL int GLAD_VK_KHR_get_surface_capabilities2; +#define VK_KHR_global_priority 1 +GLAD_API_CALL int GLAD_VK_KHR_global_priority; +#define VK_KHR_image_format_list 1 +GLAD_API_CALL int GLAD_VK_KHR_image_format_list; +#define VK_KHR_imageless_framebuffer 1 +GLAD_API_CALL int GLAD_VK_KHR_imageless_framebuffer; +#define VK_KHR_incremental_present 1 +GLAD_API_CALL int GLAD_VK_KHR_incremental_present; +#define VK_KHR_index_type_uint8 1 +GLAD_API_CALL int GLAD_VK_KHR_index_type_uint8; +#define VK_KHR_line_rasterization 1 +GLAD_API_CALL int GLAD_VK_KHR_line_rasterization; +#define VK_KHR_load_store_op_none 1 +GLAD_API_CALL int GLAD_VK_KHR_load_store_op_none; +#define VK_KHR_maintenance1 1 +GLAD_API_CALL int GLAD_VK_KHR_maintenance1; +#define VK_KHR_maintenance2 1 +GLAD_API_CALL int GLAD_VK_KHR_maintenance2; +#define VK_KHR_maintenance3 1 +GLAD_API_CALL int GLAD_VK_KHR_maintenance3; +#define VK_KHR_maintenance4 1 +GLAD_API_CALL int GLAD_VK_KHR_maintenance4; +#define VK_KHR_maintenance5 1 +GLAD_API_CALL int GLAD_VK_KHR_maintenance5; +#define VK_KHR_maintenance6 1 +GLAD_API_CALL int GLAD_VK_KHR_maintenance6; +#define VK_KHR_maintenance7 1 +GLAD_API_CALL int GLAD_VK_KHR_maintenance7; +#define VK_KHR_maintenance8 1 +GLAD_API_CALL int GLAD_VK_KHR_maintenance8; +#define VK_KHR_maintenance9 1 +GLAD_API_CALL int GLAD_VK_KHR_maintenance9; +#define VK_KHR_map_memory2 1 +GLAD_API_CALL int GLAD_VK_KHR_map_memory2; +#define VK_KHR_multiview 1 +GLAD_API_CALL int GLAD_VK_KHR_multiview; +#define VK_KHR_performance_query 1 +GLAD_API_CALL int GLAD_VK_KHR_performance_query; +#define VK_KHR_pipeline_binary 1 +GLAD_API_CALL int GLAD_VK_KHR_pipeline_binary; +#define VK_KHR_pipeline_executable_properties 1 +GLAD_API_CALL int GLAD_VK_KHR_pipeline_executable_properties; +#define VK_KHR_pipeline_library 1 +GLAD_API_CALL int GLAD_VK_KHR_pipeline_library; +#define VK_KHR_portability_enumeration 1 +GLAD_API_CALL int GLAD_VK_KHR_portability_enumeration; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_KHR_portability_subset 1 +GLAD_API_CALL int GLAD_VK_KHR_portability_subset; + +#endif +#define VK_KHR_present_id 1 +GLAD_API_CALL int GLAD_VK_KHR_present_id; +#define VK_KHR_present_id2 1 +GLAD_API_CALL int GLAD_VK_KHR_present_id2; +#define VK_KHR_present_mode_fifo_latest_ready 1 +GLAD_API_CALL int GLAD_VK_KHR_present_mode_fifo_latest_ready; +#define VK_KHR_present_wait 1 +GLAD_API_CALL int GLAD_VK_KHR_present_wait; +#define VK_KHR_present_wait2 1 +GLAD_API_CALL int GLAD_VK_KHR_present_wait2; +#define VK_KHR_push_descriptor 1 +GLAD_API_CALL int GLAD_VK_KHR_push_descriptor; +#define VK_KHR_ray_query 1 +GLAD_API_CALL int GLAD_VK_KHR_ray_query; +#define VK_KHR_ray_tracing_maintenance1 1 +GLAD_API_CALL int GLAD_VK_KHR_ray_tracing_maintenance1; +#define VK_KHR_ray_tracing_pipeline 1 +GLAD_API_CALL int GLAD_VK_KHR_ray_tracing_pipeline; +#define VK_KHR_ray_tracing_position_fetch 1 +GLAD_API_CALL int GLAD_VK_KHR_ray_tracing_position_fetch; +#define VK_KHR_relaxed_block_layout 1 +GLAD_API_CALL int GLAD_VK_KHR_relaxed_block_layout; +#define VK_KHR_robustness2 1 +GLAD_API_CALL int GLAD_VK_KHR_robustness2; +#define VK_KHR_sampler_mirror_clamp_to_edge 1 +GLAD_API_CALL int GLAD_VK_KHR_sampler_mirror_clamp_to_edge; +#define VK_KHR_sampler_ycbcr_conversion 1 +GLAD_API_CALL int GLAD_VK_KHR_sampler_ycbcr_conversion; +#define VK_KHR_separate_depth_stencil_layouts 1 +GLAD_API_CALL int GLAD_VK_KHR_separate_depth_stencil_layouts; +#define VK_KHR_shader_atomic_int64 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_atomic_int64; +#define VK_KHR_shader_bfloat16 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_bfloat16; +#define VK_KHR_shader_clock 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_clock; +#define VK_KHR_shader_draw_parameters 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_draw_parameters; +#define VK_KHR_shader_expect_assume 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_expect_assume; +#define VK_KHR_shader_float16_int8 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_float16_int8; +#define VK_KHR_shader_float_controls 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_float_controls; +#define VK_KHR_shader_float_controls2 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_float_controls2; +#define VK_KHR_shader_fma 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_fma; +#define VK_KHR_shader_integer_dot_product 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_integer_dot_product; +#define VK_KHR_shader_maximal_reconvergence 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_maximal_reconvergence; +#define VK_KHR_shader_non_semantic_info 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_non_semantic_info; +#define VK_KHR_shader_quad_control 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_quad_control; +#define VK_KHR_shader_relaxed_extended_instruction 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_relaxed_extended_instruction; +#define VK_KHR_shader_subgroup_extended_types 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_subgroup_extended_types; +#define VK_KHR_shader_subgroup_rotate 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_subgroup_rotate; +#define VK_KHR_shader_subgroup_uniform_control_flow 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_subgroup_uniform_control_flow; +#define VK_KHR_shader_terminate_invocation 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_terminate_invocation; +#define VK_KHR_shader_untyped_pointers 1 +GLAD_API_CALL int GLAD_VK_KHR_shader_untyped_pointers; +#define VK_KHR_shared_presentable_image 1 +GLAD_API_CALL int GLAD_VK_KHR_shared_presentable_image; +#define VK_KHR_spirv_1_4 1 +GLAD_API_CALL int GLAD_VK_KHR_spirv_1_4; +#define VK_KHR_storage_buffer_storage_class 1 +GLAD_API_CALL int GLAD_VK_KHR_storage_buffer_storage_class; +#define VK_KHR_surface 1 +GLAD_API_CALL int GLAD_VK_KHR_surface; +#define VK_KHR_surface_maintenance1 1 +GLAD_API_CALL int GLAD_VK_KHR_surface_maintenance1; +#define VK_KHR_surface_protected_capabilities 1 +GLAD_API_CALL int GLAD_VK_KHR_surface_protected_capabilities; +#define VK_KHR_swapchain 1 +GLAD_API_CALL int GLAD_VK_KHR_swapchain; +#define VK_KHR_swapchain_maintenance1 1 +GLAD_API_CALL int GLAD_VK_KHR_swapchain_maintenance1; +#define VK_KHR_swapchain_mutable_format 1 +GLAD_API_CALL int GLAD_VK_KHR_swapchain_mutable_format; +#define VK_KHR_synchronization2 1 +GLAD_API_CALL int GLAD_VK_KHR_synchronization2; +#define VK_KHR_timeline_semaphore 1 +GLAD_API_CALL int GLAD_VK_KHR_timeline_semaphore; +#define VK_KHR_unified_image_layouts 1 +GLAD_API_CALL int GLAD_VK_KHR_unified_image_layouts; +#define VK_KHR_uniform_buffer_standard_layout 1 +GLAD_API_CALL int GLAD_VK_KHR_uniform_buffer_standard_layout; +#define VK_KHR_variable_pointers 1 +GLAD_API_CALL int GLAD_VK_KHR_variable_pointers; +#define VK_KHR_vertex_attribute_divisor 1 +GLAD_API_CALL int GLAD_VK_KHR_vertex_attribute_divisor; +#define VK_KHR_video_decode_av1 1 +GLAD_API_CALL int GLAD_VK_KHR_video_decode_av1; +#define VK_KHR_video_decode_h264 1 +GLAD_API_CALL int GLAD_VK_KHR_video_decode_h264; +#define VK_KHR_video_decode_h265 1 +GLAD_API_CALL int GLAD_VK_KHR_video_decode_h265; +#define VK_KHR_video_decode_queue 1 +GLAD_API_CALL int GLAD_VK_KHR_video_decode_queue; +#define VK_KHR_video_decode_vp9 1 +GLAD_API_CALL int GLAD_VK_KHR_video_decode_vp9; +#define VK_KHR_video_encode_av1 1 +GLAD_API_CALL int GLAD_VK_KHR_video_encode_av1; +#define VK_KHR_video_encode_h264 1 +GLAD_API_CALL int GLAD_VK_KHR_video_encode_h264; +#define VK_KHR_video_encode_h265 1 +GLAD_API_CALL int GLAD_VK_KHR_video_encode_h265; +#define VK_KHR_video_encode_intra_refresh 1 +GLAD_API_CALL int GLAD_VK_KHR_video_encode_intra_refresh; +#define VK_KHR_video_encode_quantization_map 1 +GLAD_API_CALL int GLAD_VK_KHR_video_encode_quantization_map; +#define VK_KHR_video_encode_queue 1 +GLAD_API_CALL int GLAD_VK_KHR_video_encode_queue; +#define VK_KHR_video_maintenance1 1 +GLAD_API_CALL int GLAD_VK_KHR_video_maintenance1; +#define VK_KHR_video_maintenance2 1 +GLAD_API_CALL int GLAD_VK_KHR_video_maintenance2; +#define VK_KHR_video_queue 1 +GLAD_API_CALL int GLAD_VK_KHR_video_queue; +#define VK_KHR_vulkan_memory_model 1 +GLAD_API_CALL int GLAD_VK_KHR_vulkan_memory_model; +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +#define VK_KHR_wayland_surface 1 +GLAD_API_CALL int GLAD_VK_KHR_wayland_surface; + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_win32_keyed_mutex 1 +GLAD_API_CALL int GLAD_VK_KHR_win32_keyed_mutex; + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_KHR_win32_surface 1 +GLAD_API_CALL int GLAD_VK_KHR_win32_surface; + +#endif +#define VK_KHR_workgroup_memory_explicit_layout 1 +GLAD_API_CALL int GLAD_VK_KHR_workgroup_memory_explicit_layout; +#if defined(VK_USE_PLATFORM_XCB_KHR) +#define VK_KHR_xcb_surface 1 +GLAD_API_CALL int GLAD_VK_KHR_xcb_surface; + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +#define VK_KHR_xlib_surface 1 +GLAD_API_CALL int GLAD_VK_KHR_xlib_surface; + +#endif +#define VK_KHR_zero_initialize_workgroup_memory 1 +GLAD_API_CALL int GLAD_VK_KHR_zero_initialize_workgroup_memory; +#define VK_LUNARG_direct_driver_loading 1 +GLAD_API_CALL int GLAD_VK_LUNARG_direct_driver_loading; +#define VK_MESA_image_alignment_control 1 +GLAD_API_CALL int GLAD_VK_MESA_image_alignment_control; +#define VK_MSFT_layered_driver 1 +GLAD_API_CALL int GLAD_VK_MSFT_layered_driver; +#if defined(VK_USE_PLATFORM_IOS_MVK) +#define VK_MVK_ios_surface 1 +GLAD_API_CALL int GLAD_VK_MVK_ios_surface; + +#endif +#if defined(VK_USE_PLATFORM_MACOS_MVK) +#define VK_MVK_macos_surface 1 +GLAD_API_CALL int GLAD_VK_MVK_macos_surface; + +#endif +#if defined(VK_USE_PLATFORM_VI_NN) +#define VK_NN_vi_surface 1 +GLAD_API_CALL int GLAD_VK_NN_vi_surface; + +#endif +#define VK_NVX_binary_import 1 +GLAD_API_CALL int GLAD_VK_NVX_binary_import; +#define VK_NVX_image_view_handle 1 +GLAD_API_CALL int GLAD_VK_NVX_image_view_handle; +#define VK_NVX_multiview_per_view_attributes 1 +GLAD_API_CALL int GLAD_VK_NVX_multiview_per_view_attributes; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_NV_acquire_winrt_display 1 +GLAD_API_CALL int GLAD_VK_NV_acquire_winrt_display; + +#endif +#define VK_NV_clip_space_w_scaling 1 +GLAD_API_CALL int GLAD_VK_NV_clip_space_w_scaling; +#define VK_NV_cluster_acceleration_structure 1 +GLAD_API_CALL int GLAD_VK_NV_cluster_acceleration_structure; +#define VK_NV_command_buffer_inheritance 1 +GLAD_API_CALL int GLAD_VK_NV_command_buffer_inheritance; +#define VK_NV_compute_shader_derivatives 1 +GLAD_API_CALL int GLAD_VK_NV_compute_shader_derivatives; +#define VK_NV_cooperative_matrix 1 +GLAD_API_CALL int GLAD_VK_NV_cooperative_matrix; +#define VK_NV_cooperative_matrix2 1 +GLAD_API_CALL int GLAD_VK_NV_cooperative_matrix2; +#define VK_NV_cooperative_vector 1 +GLAD_API_CALL int GLAD_VK_NV_cooperative_vector; +#define VK_NV_copy_memory_indirect 1 +GLAD_API_CALL int GLAD_VK_NV_copy_memory_indirect; +#define VK_NV_corner_sampled_image 1 +GLAD_API_CALL int GLAD_VK_NV_corner_sampled_image; +#define VK_NV_coverage_reduction_mode 1 +GLAD_API_CALL int GLAD_VK_NV_coverage_reduction_mode; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_NV_cuda_kernel_launch 1 +GLAD_API_CALL int GLAD_VK_NV_cuda_kernel_launch; + +#endif +#define VK_NV_dedicated_allocation 1 +GLAD_API_CALL int GLAD_VK_NV_dedicated_allocation; +#define VK_NV_dedicated_allocation_image_aliasing 1 +GLAD_API_CALL int GLAD_VK_NV_dedicated_allocation_image_aliasing; +#define VK_NV_descriptor_pool_overallocation 1 +GLAD_API_CALL int GLAD_VK_NV_descriptor_pool_overallocation; +#define VK_NV_device_diagnostic_checkpoints 1 +GLAD_API_CALL int GLAD_VK_NV_device_diagnostic_checkpoints; +#define VK_NV_device_diagnostics_config 1 +GLAD_API_CALL int GLAD_VK_NV_device_diagnostics_config; +#define VK_NV_device_generated_commands 1 +GLAD_API_CALL int GLAD_VK_NV_device_generated_commands; +#define VK_NV_device_generated_commands_compute 1 +GLAD_API_CALL int GLAD_VK_NV_device_generated_commands_compute; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_NV_displacement_micromap 1 +GLAD_API_CALL int GLAD_VK_NV_displacement_micromap; + +#endif +#define VK_NV_display_stereo 1 +GLAD_API_CALL int GLAD_VK_NV_display_stereo; +#define VK_NV_extended_sparse_address_space 1 +GLAD_API_CALL int GLAD_VK_NV_extended_sparse_address_space; +#define VK_NV_external_compute_queue 1 +GLAD_API_CALL int GLAD_VK_NV_external_compute_queue; +#define VK_NV_external_memory 1 +GLAD_API_CALL int GLAD_VK_NV_external_memory; +#define VK_NV_external_memory_capabilities 1 +GLAD_API_CALL int GLAD_VK_NV_external_memory_capabilities; +#define VK_NV_external_memory_rdma 1 +GLAD_API_CALL int GLAD_VK_NV_external_memory_rdma; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_NV_external_memory_win32 1 +GLAD_API_CALL int GLAD_VK_NV_external_memory_win32; + +#endif +#define VK_NV_fill_rectangle 1 +GLAD_API_CALL int GLAD_VK_NV_fill_rectangle; +#define VK_NV_fragment_coverage_to_color 1 +GLAD_API_CALL int GLAD_VK_NV_fragment_coverage_to_color; +#define VK_NV_fragment_shader_barycentric 1 +GLAD_API_CALL int GLAD_VK_NV_fragment_shader_barycentric; +#define VK_NV_fragment_shading_rate_enums 1 +GLAD_API_CALL int GLAD_VK_NV_fragment_shading_rate_enums; +#define VK_NV_framebuffer_mixed_samples 1 +GLAD_API_CALL int GLAD_VK_NV_framebuffer_mixed_samples; +#define VK_NV_geometry_shader_passthrough 1 +GLAD_API_CALL int GLAD_VK_NV_geometry_shader_passthrough; +#define VK_NV_glsl_shader 1 +GLAD_API_CALL int GLAD_VK_NV_glsl_shader; +#define VK_NV_inherited_viewport_scissor 1 +GLAD_API_CALL int GLAD_VK_NV_inherited_viewport_scissor; +#define VK_NV_linear_color_attachment 1 +GLAD_API_CALL int GLAD_VK_NV_linear_color_attachment; +#define VK_NV_low_latency 1 +GLAD_API_CALL int GLAD_VK_NV_low_latency; +#define VK_NV_low_latency2 1 +GLAD_API_CALL int GLAD_VK_NV_low_latency2; +#define VK_NV_memory_decompression 1 +GLAD_API_CALL int GLAD_VK_NV_memory_decompression; +#define VK_NV_mesh_shader 1 +GLAD_API_CALL int GLAD_VK_NV_mesh_shader; +#define VK_NV_optical_flow 1 +GLAD_API_CALL int GLAD_VK_NV_optical_flow; +#define VK_NV_partitioned_acceleration_structure 1 +GLAD_API_CALL int GLAD_VK_NV_partitioned_acceleration_structure; +#define VK_NV_per_stage_descriptor_set 1 +GLAD_API_CALL int GLAD_VK_NV_per_stage_descriptor_set; +#define VK_NV_present_barrier 1 +GLAD_API_CALL int GLAD_VK_NV_present_barrier; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +#define VK_NV_present_metering 1 +GLAD_API_CALL int GLAD_VK_NV_present_metering; + +#endif +#define VK_NV_raw_access_chains 1 +GLAD_API_CALL int GLAD_VK_NV_raw_access_chains; +#define VK_NV_ray_tracing 1 +GLAD_API_CALL int GLAD_VK_NV_ray_tracing; +#define VK_NV_ray_tracing_invocation_reorder 1 +GLAD_API_CALL int GLAD_VK_NV_ray_tracing_invocation_reorder; +#define VK_NV_ray_tracing_linear_swept_spheres 1 +GLAD_API_CALL int GLAD_VK_NV_ray_tracing_linear_swept_spheres; +#define VK_NV_ray_tracing_motion_blur 1 +GLAD_API_CALL int GLAD_VK_NV_ray_tracing_motion_blur; +#define VK_NV_ray_tracing_validation 1 +GLAD_API_CALL int GLAD_VK_NV_ray_tracing_validation; +#define VK_NV_representative_fragment_test 1 +GLAD_API_CALL int GLAD_VK_NV_representative_fragment_test; +#define VK_NV_sample_mask_override_coverage 1 +GLAD_API_CALL int GLAD_VK_NV_sample_mask_override_coverage; +#define VK_NV_scissor_exclusive 1 +GLAD_API_CALL int GLAD_VK_NV_scissor_exclusive; +#define VK_NV_shader_atomic_float16_vector 1 +GLAD_API_CALL int GLAD_VK_NV_shader_atomic_float16_vector; +#define VK_NV_shader_image_footprint 1 +GLAD_API_CALL int GLAD_VK_NV_shader_image_footprint; +#define VK_NV_shader_sm_builtins 1 +GLAD_API_CALL int GLAD_VK_NV_shader_sm_builtins; +#define VK_NV_shader_subgroup_partitioned 1 +GLAD_API_CALL int GLAD_VK_NV_shader_subgroup_partitioned; +#define VK_NV_shading_rate_image 1 +GLAD_API_CALL int GLAD_VK_NV_shading_rate_image; +#define VK_NV_viewport_array2 1 +GLAD_API_CALL int GLAD_VK_NV_viewport_array2; +#define VK_NV_viewport_swizzle 1 +GLAD_API_CALL int GLAD_VK_NV_viewport_swizzle; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +#define VK_NV_win32_keyed_mutex 1 +GLAD_API_CALL int GLAD_VK_NV_win32_keyed_mutex; + +#endif +#if defined(VK_USE_PLATFORM_OHOS) +#define VK_OHOS_surface 1 +GLAD_API_CALL int GLAD_VK_OHOS_surface; + +#endif +#define VK_QCOM_filter_cubic_clamp 1 +GLAD_API_CALL int GLAD_VK_QCOM_filter_cubic_clamp; +#define VK_QCOM_filter_cubic_weights 1 +GLAD_API_CALL int GLAD_VK_QCOM_filter_cubic_weights; +#define VK_QCOM_fragment_density_map_offset 1 +GLAD_API_CALL int GLAD_VK_QCOM_fragment_density_map_offset; +#define VK_QCOM_image_processing 1 +GLAD_API_CALL int GLAD_VK_QCOM_image_processing; +#define VK_QCOM_image_processing2 1 +GLAD_API_CALL int GLAD_VK_QCOM_image_processing2; +#define VK_QCOM_multiview_per_view_render_areas 1 +GLAD_API_CALL int GLAD_VK_QCOM_multiview_per_view_render_areas; +#define VK_QCOM_multiview_per_view_viewports 1 +GLAD_API_CALL int GLAD_VK_QCOM_multiview_per_view_viewports; +#define VK_QCOM_render_pass_shader_resolve 1 +GLAD_API_CALL int GLAD_VK_QCOM_render_pass_shader_resolve; +#define VK_QCOM_render_pass_store_ops 1 +GLAD_API_CALL int GLAD_VK_QCOM_render_pass_store_ops; +#define VK_QCOM_render_pass_transform 1 +GLAD_API_CALL int GLAD_VK_QCOM_render_pass_transform; +#define VK_QCOM_rotated_copy_commands 1 +GLAD_API_CALL int GLAD_VK_QCOM_rotated_copy_commands; +#define VK_QCOM_tile_memory_heap 1 +GLAD_API_CALL int GLAD_VK_QCOM_tile_memory_heap; +#define VK_QCOM_tile_properties 1 +GLAD_API_CALL int GLAD_VK_QCOM_tile_properties; +#define VK_QCOM_tile_shading 1 +GLAD_API_CALL int GLAD_VK_QCOM_tile_shading; +#define VK_QCOM_ycbcr_degamma 1 +GLAD_API_CALL int GLAD_VK_QCOM_ycbcr_degamma; +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +#define VK_QNX_external_memory_screen_buffer 1 +GLAD_API_CALL int GLAD_VK_QNX_external_memory_screen_buffer; + +#endif +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +#define VK_QNX_screen_surface 1 +GLAD_API_CALL int GLAD_VK_QNX_screen_surface; + +#endif +#define VK_SEC_amigo_profiling 1 +GLAD_API_CALL int GLAD_VK_SEC_amigo_profiling; +#define VK_SEC_pipeline_cache_incremental_mode 1 +GLAD_API_CALL int GLAD_VK_SEC_pipeline_cache_incremental_mode; +#define VK_VALVE_descriptor_set_host_mapping 1 +GLAD_API_CALL int GLAD_VK_VALVE_descriptor_set_host_mapping; +#define VK_VALVE_fragment_density_map_layered 1 +GLAD_API_CALL int GLAD_VK_VALVE_fragment_density_map_layered; +#define VK_VALVE_mutable_descriptor_type 1 +GLAD_API_CALL int GLAD_VK_VALVE_mutable_descriptor_type; +#define VK_VALVE_video_encode_rgb_conversion 1 +GLAD_API_CALL int GLAD_VK_VALVE_video_encode_rgb_conversion; + + +typedef VkResult (GLAD_API_PTR *PFN_vkAcquireDrmDisplayEXT)(VkPhysicalDevice physicalDevice, int32_t drmFd, VkDisplayKHR display); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkAcquireFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkAcquireNextImage2KHR)(VkDevice device, const VkAcquireNextImageInfoKHR * pAcquireInfo, uint32_t * pImageIndex); +typedef VkResult (GLAD_API_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t * pImageIndex); +typedef VkResult (GLAD_API_PTR *PFN_vkAcquirePerformanceConfigurationINTEL)(VkDevice device, const VkPerformanceConfigurationAcquireInfoINTEL * pAcquireInfo, VkPerformanceConfigurationINTEL * pConfiguration); +typedef VkResult (GLAD_API_PTR *PFN_vkAcquireProfilingLockKHR)(VkDevice device, const VkAcquireProfilingLockInfoKHR * pInfo); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkAcquireWinrtDisplayNV)(VkPhysicalDevice physicalDevice, VkDisplayKHR display); + +#endif +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +typedef VkResult (GLAD_API_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display * dpy, VkDisplayKHR display); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo * pAllocateInfo, VkCommandBuffer * pCommandBuffers); +typedef VkResult (GLAD_API_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo * pAllocateInfo, VkDescriptorSet * pDescriptorSets); +typedef VkResult (GLAD_API_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo * pAllocateInfo, const VkAllocationCallbacks * pAllocator, VkDeviceMemory * pMemory); +typedef void (GLAD_API_PTR *PFN_vkAntiLagUpdateAMD)(VkDevice device, const VkAntiLagDataAMD * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo * pBeginInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkBindAccelerationStructureMemoryNV)(VkDevice device, uint32_t bindInfoCount, const VkBindAccelerationStructureMemoryInfoNV * pBindInfos); +typedef VkResult (GLAD_API_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset); +typedef VkResult (GLAD_API_PTR *PFN_vkBindBufferMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo * pBindInfos); +typedef VkResult (GLAD_API_PTR *PFN_vkBindBufferMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo * pBindInfos); +typedef VkResult (GLAD_API_PTR *PFN_vkBindDataGraphPipelineSessionMemoryARM)(VkDevice device, uint32_t bindInfoCount, const VkBindDataGraphPipelineSessionMemoryInfoARM * pBindInfos); +typedef VkResult (GLAD_API_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset); +typedef VkResult (GLAD_API_PTR *PFN_vkBindImageMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo * pBindInfos); +typedef VkResult (GLAD_API_PTR *PFN_vkBindImageMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo * pBindInfos); +typedef VkResult (GLAD_API_PTR *PFN_vkBindOpticalFlowSessionImageNV)(VkDevice device, VkOpticalFlowSessionNV session, VkOpticalFlowSessionBindingPointNV bindingPoint, VkImageView view, VkImageLayout layout); +typedef VkResult (GLAD_API_PTR *PFN_vkBindTensorMemoryARM)(VkDevice device, uint32_t bindInfoCount, const VkBindTensorMemoryInfoARM * pBindInfos); +typedef VkResult (GLAD_API_PTR *PFN_vkBindVideoSessionMemoryKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t bindSessionMemoryInfoCount, const VkBindVideoSessionMemoryInfoKHR * pBindSessionMemoryInfos); +typedef VkResult (GLAD_API_PTR *PFN_vkBuildAccelerationStructuresKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR * pInfos, const VkAccelerationStructureBuildRangeInfoKHR * const* ppBuildRangeInfos); +typedef VkResult (GLAD_API_PTR *PFN_vkBuildMicromapsEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, uint32_t infoCount, const VkMicromapBuildInfoEXT * pInfos); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginConditionalRenderingEXT)(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT * pConditionalRenderingBegin); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT * pLabelInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginPerTileExecutionQCOM)(VkCommandBuffer commandBuffer, const VkPerTileBeginInfoQCOM * pPerTileBeginInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo * pRenderPassBegin, VkSubpassContents contents); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginRenderPass2)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo * pRenderPassBegin, const VkSubpassBeginInfo * pSubpassBeginInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo * pRenderPassBegin, const VkSubpassBeginInfo * pSubpassBeginInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginRendering)(VkCommandBuffer commandBuffer, const VkRenderingInfo * pRenderingInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginRenderingKHR)(VkCommandBuffer commandBuffer, const VkRenderingInfo * pRenderingInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer * pCounterBuffers, const VkDeviceSize * pCounterBufferOffsets); +typedef void (GLAD_API_PTR *PFN_vkCmdBeginVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR * pBeginInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT)(VkCommandBuffer commandBuffer, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT * pBindDescriptorBufferEmbeddedSamplersInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set); +typedef void (GLAD_API_PTR *PFN_vkCmdBindDescriptorBuffersEXT)(VkCommandBuffer commandBuffer, uint32_t bufferCount, const VkDescriptorBufferBindingInfoEXT * pBindingInfos); +typedef void (GLAD_API_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet * pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t * pDynamicOffsets); +typedef void (GLAD_API_PTR *PFN_vkCmdBindDescriptorSets2)(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo * pBindDescriptorSetsInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBindDescriptorSets2KHR)(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo * pBindDescriptorSetsInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType); +typedef void (GLAD_API_PTR *PFN_vkCmdBindIndexBuffer2)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType); +typedef void (GLAD_API_PTR *PFN_vkCmdBindIndexBuffer2KHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType); +typedef void (GLAD_API_PTR *PFN_vkCmdBindInvocationMaskHUAWEI)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout); +typedef void (GLAD_API_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline); +typedef void (GLAD_API_PTR *PFN_vkCmdBindPipelineShaderGroupNV)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline, uint32_t groupIndex); +typedef void (GLAD_API_PTR *PFN_vkCmdBindShadersEXT)(VkCommandBuffer commandBuffer, uint32_t stageCount, const VkShaderStageFlagBits * pStages, const VkShaderEXT * pShaders); +typedef void (GLAD_API_PTR *PFN_vkCmdBindShadingRateImageNV)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout); +typedef void (GLAD_API_PTR *PFN_vkCmdBindTileMemoryQCOM)(VkCommandBuffer commandBuffer, const VkTileMemoryBindInfoQCOM * pTileMemoryBindInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBindTransformFeedbackBuffersEXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer * pBuffers, const VkDeviceSize * pOffsets, const VkDeviceSize * pSizes); +typedef void (GLAD_API_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer * pBuffers, const VkDeviceSize * pOffsets); +typedef void (GLAD_API_PTR *PFN_vkCmdBindVertexBuffers2)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer * pBuffers, const VkDeviceSize * pOffsets, const VkDeviceSize * pSizes, const VkDeviceSize * pStrides); +typedef void (GLAD_API_PTR *PFN_vkCmdBindVertexBuffers2EXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer * pBuffers, const VkDeviceSize * pOffsets, const VkDeviceSize * pSizes, const VkDeviceSize * pStrides); +typedef void (GLAD_API_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit * pRegions, VkFilter filter); +typedef void (GLAD_API_PTR *PFN_vkCmdBlitImage2)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2 * pBlitImageInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBlitImage2KHR)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2 * pBlitImageInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdBuildAccelerationStructureNV)(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV * pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset); +typedef void (GLAD_API_PTR *PFN_vkCmdBuildAccelerationStructuresIndirectKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR * pInfos, const VkDeviceAddress * pIndirectDeviceAddresses, const uint32_t * pIndirectStrides, const uint32_t * const* ppMaxPrimitiveCounts); +typedef void (GLAD_API_PTR *PFN_vkCmdBuildAccelerationStructuresKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR * pInfos, const VkAccelerationStructureBuildRangeInfoKHR * const* ppBuildRangeInfos); +typedef void (GLAD_API_PTR *PFN_vkCmdBuildClusterAccelerationStructureIndirectNV)(VkCommandBuffer commandBuffer, const VkClusterAccelerationStructureCommandsInfoNV * pCommandInfos); +typedef void (GLAD_API_PTR *PFN_vkCmdBuildMicromapsEXT)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkMicromapBuildInfoEXT * pInfos); +typedef void (GLAD_API_PTR *PFN_vkCmdBuildPartitionedAccelerationStructuresNV)(VkCommandBuffer commandBuffer, const VkBuildPartitionedAccelerationStructureInfoNV * pBuildInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment * pAttachments, uint32_t rectCount, const VkClearRect * pRects); +typedef void (GLAD_API_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue * pColor, uint32_t rangeCount, const VkImageSubresourceRange * pRanges); +typedef void (GLAD_API_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue * pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange * pRanges); +typedef void (GLAD_API_PTR *PFN_vkCmdControlVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR * pCodingControlInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdConvertCooperativeVectorMatrixNV)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkConvertCooperativeVectorMatrixInfoNV * pInfos); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR * pInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyAccelerationStructureNV)(VkCommandBuffer commandBuffer, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeKHR mode); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyAccelerationStructureToMemoryKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR * pInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy * pRegions); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyBuffer2)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2 * pCopyBufferInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2 * pCopyBufferInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy * pRegions); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyBufferToImage2)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyBufferToImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy * pRegions); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyImage2)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2 * pCopyImageInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2 * pCopyImageInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy * pRegions); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyImageToBuffer2)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyImageToBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyMemoryIndirectKHR)(VkCommandBuffer commandBuffer, const VkCopyMemoryIndirectInfoKHR * pCopyMemoryIndirectInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyMemoryIndirectNV)(VkCommandBuffer commandBuffer, VkDeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyMemoryToAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR * pInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyMemoryToImageIndirectKHR)(VkCommandBuffer commandBuffer, const VkCopyMemoryToImageIndirectInfoKHR * pCopyMemoryToImageIndirectInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyMemoryToImageIndirectNV)(VkCommandBuffer commandBuffer, VkDeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride, VkImage dstImage, VkImageLayout dstImageLayout, const VkImageSubresourceLayers * pImageSubresources); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyMemoryToMicromapEXT)(VkCommandBuffer commandBuffer, const VkCopyMemoryToMicromapInfoEXT * pInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyMicromapEXT)(VkCommandBuffer commandBuffer, const VkCopyMicromapInfoEXT * pInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyMicromapToMemoryEXT)(VkCommandBuffer commandBuffer, const VkCopyMicromapToMemoryInfoEXT * pInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags); +typedef void (GLAD_API_PTR *PFN_vkCmdCopyTensorARM)(VkCommandBuffer commandBuffer, const VkCopyTensorInfoARM * pCopyTensorInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdCuLaunchKernelNVX)(VkCommandBuffer commandBuffer, const VkCuLaunchInfoNVX * pLaunchInfo); +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef void (GLAD_API_PTR *PFN_vkCmdCudaLaunchKernelNV)(VkCommandBuffer commandBuffer, const VkCudaLaunchInfoNV * pLaunchInfo); + +#endif +typedef void (GLAD_API_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT * pMarkerInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer); +typedef void (GLAD_API_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT * pMarkerInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdDecodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR * pDecodeInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdDecompressMemoryIndirectCountNV)(VkCommandBuffer commandBuffer, VkDeviceAddress indirectCommandsAddress, VkDeviceAddress indirectCommandsCountAddress, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDecompressMemoryNV)(VkCommandBuffer commandBuffer, uint32_t decompressRegionCount, const VkDecompressMemoryRegionNV * pDecompressMemoryRegions); +typedef void (GLAD_API_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +typedef void (GLAD_API_PTR *PFN_vkCmdDispatchBase)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +typedef void (GLAD_API_PTR *PFN_vkCmdDispatchBaseKHR)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +typedef void (GLAD_API_PTR *PFN_vkCmdDispatchDataGraphARM)(VkCommandBuffer commandBuffer, VkDataGraphPipelineSessionARM session, const VkDataGraphPipelineDispatchInfoARM * pInfo); +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef void (GLAD_API_PTR *PFN_vkCmdDispatchGraphAMDX)(VkCommandBuffer commandBuffer, VkDeviceAddress scratch, VkDeviceSize scratchSize, const VkDispatchGraphCountInfoAMDX * pCountInfo); + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef void (GLAD_API_PTR *PFN_vkCmdDispatchGraphIndirectAMDX)(VkCommandBuffer commandBuffer, VkDeviceAddress scratch, VkDeviceSize scratchSize, const VkDispatchGraphCountInfoAMDX * pCountInfo); + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef void (GLAD_API_PTR *PFN_vkCmdDispatchGraphIndirectCountAMDX)(VkCommandBuffer commandBuffer, VkDeviceAddress scratch, VkDeviceSize scratchSize, VkDeviceAddress countInfo); + +#endif +typedef void (GLAD_API_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset); +typedef void (GLAD_API_PTR *PFN_vkCmdDispatchTileQCOM)(VkCommandBuffer commandBuffer, const VkDispatchTileInfoQCOM * pDispatchTileInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawClusterHUAWEI)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawClusterIndirectHUAWEI)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawIndexedIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawIndexedIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawIndexedIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawIndirectByteCountEXT)(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawMeshTasksEXT)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawMeshTasksIndirectCountEXT)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawMeshTasksIndirectCountNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawMeshTasksIndirectEXT)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawMeshTasksIndirectNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawMeshTasksNV)(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawMultiEXT)(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT * pVertexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride); +typedef void (GLAD_API_PTR *PFN_vkCmdDrawMultiIndexedEXT)(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawIndexedInfoEXT * pIndexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride, const int32_t * pVertexOffset); +typedef void (GLAD_API_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR * pEncodeInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdEndConditionalRenderingEXT)(VkCommandBuffer commandBuffer); +typedef void (GLAD_API_PTR *PFN_vkCmdEndDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer); +typedef void (GLAD_API_PTR *PFN_vkCmdEndPerTileExecutionQCOM)(VkCommandBuffer commandBuffer, const VkPerTileEndInfoQCOM * pPerTileEndInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query); +typedef void (GLAD_API_PTR *PFN_vkCmdEndQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index); +typedef void (GLAD_API_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer); +typedef void (GLAD_API_PTR *PFN_vkCmdEndRenderPass2)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo * pSubpassEndInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdEndRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo * pSubpassEndInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdEndRendering)(VkCommandBuffer commandBuffer); +typedef void (GLAD_API_PTR *PFN_vkCmdEndRendering2EXT)(VkCommandBuffer commandBuffer, const VkRenderingEndInfoEXT * pRenderingEndInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdEndRenderingKHR)(VkCommandBuffer commandBuffer); +typedef void (GLAD_API_PTR *PFN_vkCmdEndTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer * pCounterBuffers, const VkDeviceSize * pCounterBufferOffsets); +typedef void (GLAD_API_PTR *PFN_vkCmdEndVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR * pEndCodingInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer * pCommandBuffers); +typedef void (GLAD_API_PTR *PFN_vkCmdExecuteGeneratedCommandsEXT)(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoEXT * pGeneratedCommandsInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdExecuteGeneratedCommandsNV)(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV * pGeneratedCommandsInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data); +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef void (GLAD_API_PTR *PFN_vkCmdInitializeGraphScratchMemoryAMDX)(VkCommandBuffer commandBuffer, VkPipeline executionGraph, VkDeviceAddress scratch, VkDeviceSize scratchSize); + +#endif +typedef void (GLAD_API_PTR *PFN_vkCmdInsertDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT * pLabelInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents); +typedef void (GLAD_API_PTR *PFN_vkCmdNextSubpass2)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo * pSubpassBeginInfo, const VkSubpassEndInfo * pSubpassEndInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdNextSubpass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo * pSubpassBeginInfo, const VkSubpassEndInfo * pSubpassEndInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdOpticalFlowExecuteNV)(VkCommandBuffer commandBuffer, VkOpticalFlowSessionNV session, const VkOpticalFlowExecuteInfoNV * pExecuteInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier * pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier * pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier * pImageMemoryBarriers); +typedef void (GLAD_API_PTR *PFN_vkCmdPipelineBarrier2)(VkCommandBuffer commandBuffer, const VkDependencyInfo * pDependencyInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdPipelineBarrier2KHR)(VkCommandBuffer commandBuffer, const VkDependencyInfo * pDependencyInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdPreprocessGeneratedCommandsEXT)(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoEXT * pGeneratedCommandsInfo, VkCommandBuffer stateCommandBuffer); +typedef void (GLAD_API_PTR *PFN_vkCmdPreprocessGeneratedCommandsNV)(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV * pGeneratedCommandsInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void * pValues); +typedef void (GLAD_API_PTR *PFN_vkCmdPushConstants2)(VkCommandBuffer commandBuffer, const VkPushConstantsInfo * pPushConstantsInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdPushConstants2KHR)(VkCommandBuffer commandBuffer, const VkPushConstantsInfo * pPushConstantsInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdPushDescriptorSet)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet * pDescriptorWrites); +typedef void (GLAD_API_PTR *PFN_vkCmdPushDescriptorSet2)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo * pPushDescriptorSetInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdPushDescriptorSet2KHR)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo * pPushDescriptorSetInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdPushDescriptorSetKHR)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet * pDescriptorWrites); +typedef void (GLAD_API_PTR *PFN_vkCmdPushDescriptorSetWithTemplate)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void * pData); +typedef void (GLAD_API_PTR *PFN_vkCmdPushDescriptorSetWithTemplate2)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo * pPushDescriptorSetWithTemplateInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdPushDescriptorSetWithTemplate2KHR)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo * pPushDescriptorSetWithTemplateInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdPushDescriptorSetWithTemplateKHR)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void * pData); +typedef void (GLAD_API_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); +typedef void (GLAD_API_PTR *PFN_vkCmdResetEvent2)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask); +typedef void (GLAD_API_PTR *PFN_vkCmdResetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask); +typedef void (GLAD_API_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); +typedef void (GLAD_API_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve * pRegions); +typedef void (GLAD_API_PTR *PFN_vkCmdResolveImage2)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2 * pResolveImageInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdResolveImage2KHR)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2 * pResolveImageInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdSetAlphaToCoverageEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 alphaToCoverageEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetAlphaToOneEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 alphaToOneEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT)(VkCommandBuffer commandBuffer, VkImageAspectFlags aspectMask); +typedef void (GLAD_API_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants [4]); +typedef void (GLAD_API_PTR *PFN_vkCmdSetCheckpointNV)(VkCommandBuffer commandBuffer, const void * pCheckpointMarker); +typedef void (GLAD_API_PTR *PFN_vkCmdSetCoarseSampleOrderNV)(VkCommandBuffer commandBuffer, VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV * pCustomSampleOrders); +typedef void (GLAD_API_PTR *PFN_vkCmdSetColorBlendAdvancedEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendAdvancedEXT * pColorBlendAdvanced); +typedef void (GLAD_API_PTR *PFN_vkCmdSetColorBlendEnableEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkBool32 * pColorBlendEnables); +typedef void (GLAD_API_PTR *PFN_vkCmdSetColorBlendEquationEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendEquationEXT * pColorBlendEquations); +typedef void (GLAD_API_PTR *PFN_vkCmdSetColorWriteEnableEXT)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32 * pColorWriteEnables); +typedef void (GLAD_API_PTR *PFN_vkCmdSetColorWriteMaskEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorComponentFlags * pColorWriteMasks); +typedef void (GLAD_API_PTR *PFN_vkCmdSetConservativeRasterizationModeEXT)(VkCommandBuffer commandBuffer, VkConservativeRasterizationModeEXT conservativeRasterizationMode); +typedef void (GLAD_API_PTR *PFN_vkCmdSetCoverageModulationModeNV)(VkCommandBuffer commandBuffer, VkCoverageModulationModeNV coverageModulationMode); +typedef void (GLAD_API_PTR *PFN_vkCmdSetCoverageModulationTableEnableNV)(VkCommandBuffer commandBuffer, VkBool32 coverageModulationTableEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetCoverageModulationTableNV)(VkCommandBuffer commandBuffer, uint32_t coverageModulationTableCount, const float * pCoverageModulationTable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetCoverageReductionModeNV)(VkCommandBuffer commandBuffer, VkCoverageReductionModeNV coverageReductionMode); +typedef void (GLAD_API_PTR *PFN_vkCmdSetCoverageToColorEnableNV)(VkCommandBuffer commandBuffer, VkBool32 coverageToColorEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetCoverageToColorLocationNV)(VkCommandBuffer commandBuffer, uint32_t coverageToColorLocation); +typedef void (GLAD_API_PTR *PFN_vkCmdSetCullMode)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode); +typedef void (GLAD_API_PTR *PFN_vkCmdSetCullModeEXT)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthBias2EXT)(VkCommandBuffer commandBuffer, const VkDepthBiasInfoEXT * pDepthBiasInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthBiasEnable)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthBiasEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthBoundsTestEnable)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthBoundsTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthClampEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthClampEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthClampRangeEXT)(VkCommandBuffer commandBuffer, VkDepthClampModeEXT depthClampMode, const VkDepthClampRangeEXT * pDepthClampRange); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthClipEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthClipEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthClipNegativeOneToOneEXT)(VkCommandBuffer commandBuffer, VkBool32 negativeOneToOne); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthCompareOp)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthCompareOpEXT)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthTestEnable)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthWriteEnable)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDepthWriteEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDescriptorBufferOffsets2EXT)(VkCommandBuffer commandBuffer, const VkSetDescriptorBufferOffsetsInfoEXT * pSetDescriptorBufferOffsetsInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDescriptorBufferOffsetsEXT)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const uint32_t * pBufferIndices, const VkDeviceSize * pOffsets); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDeviceMask)(VkCommandBuffer commandBuffer, uint32_t deviceMask); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDeviceMaskKHR)(VkCommandBuffer commandBuffer, uint32_t deviceMask); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDiscardRectangleEXT)(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D * pDiscardRectangles); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDiscardRectangleEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 discardRectangleEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetDiscardRectangleModeEXT)(VkCommandBuffer commandBuffer, VkDiscardRectangleModeEXT discardRectangleMode); +typedef void (GLAD_API_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); +typedef void (GLAD_API_PTR *PFN_vkCmdSetEvent2)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo * pDependencyInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdSetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo * pDependencyInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdSetExclusiveScissorEnableNV)(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkBool32 * pExclusiveScissorEnables); +typedef void (GLAD_API_PTR *PFN_vkCmdSetExclusiveScissorNV)(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkRect2D * pExclusiveScissors); +typedef void (GLAD_API_PTR *PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT)(VkCommandBuffer commandBuffer, float extraPrimitiveOverestimationSize); +typedef void (GLAD_API_PTR *PFN_vkCmdSetFragmentShadingRateEnumNV)(VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps [2]); +typedef void (GLAD_API_PTR *PFN_vkCmdSetFragmentShadingRateKHR)(VkCommandBuffer commandBuffer, const VkExtent2D * pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps [2]); +typedef void (GLAD_API_PTR *PFN_vkCmdSetFrontFace)(VkCommandBuffer commandBuffer, VkFrontFace frontFace); +typedef void (GLAD_API_PTR *PFN_vkCmdSetFrontFaceEXT)(VkCommandBuffer commandBuffer, VkFrontFace frontFace); +typedef void (GLAD_API_PTR *PFN_vkCmdSetLineRasterizationModeEXT)(VkCommandBuffer commandBuffer, VkLineRasterizationModeEXT lineRasterizationMode); +typedef void (GLAD_API_PTR *PFN_vkCmdSetLineStipple)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); +typedef void (GLAD_API_PTR *PFN_vkCmdSetLineStippleEXT)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); +typedef void (GLAD_API_PTR *PFN_vkCmdSetLineStippleEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 stippledLineEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetLineStippleKHR)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); +typedef void (GLAD_API_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth); +typedef void (GLAD_API_PTR *PFN_vkCmdSetLogicOpEXT)(VkCommandBuffer commandBuffer, VkLogicOp logicOp); +typedef void (GLAD_API_PTR *PFN_vkCmdSetLogicOpEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 logicOpEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetPatchControlPointsEXT)(VkCommandBuffer commandBuffer, uint32_t patchControlPoints); +typedef VkResult (GLAD_API_PTR *PFN_vkCmdSetPerformanceMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL * pMarkerInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCmdSetPerformanceOverrideINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL * pOverrideInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCmdSetPerformanceStreamMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceStreamMarkerInfoINTEL * pMarkerInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdSetPolygonModeEXT)(VkCommandBuffer commandBuffer, VkPolygonMode polygonMode); +typedef void (GLAD_API_PTR *PFN_vkCmdSetPrimitiveRestartEnable)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetPrimitiveRestartEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetPrimitiveTopology)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology); +typedef void (GLAD_API_PTR *PFN_vkCmdSetPrimitiveTopologyEXT)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology); +typedef void (GLAD_API_PTR *PFN_vkCmdSetProvokingVertexModeEXT)(VkCommandBuffer commandBuffer, VkProvokingVertexModeEXT provokingVertexMode); +typedef void (GLAD_API_PTR *PFN_vkCmdSetRasterizationSamplesEXT)(VkCommandBuffer commandBuffer, VkSampleCountFlagBits rasterizationSamples); +typedef void (GLAD_API_PTR *PFN_vkCmdSetRasterizationStreamEXT)(VkCommandBuffer commandBuffer, uint32_t rasterizationStream); +typedef void (GLAD_API_PTR *PFN_vkCmdSetRasterizerDiscardEnable)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetRasterizerDiscardEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetRayTracingPipelineStackSizeKHR)(VkCommandBuffer commandBuffer, uint32_t pipelineStackSize); +typedef void (GLAD_API_PTR *PFN_vkCmdSetRenderingAttachmentLocations)(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo * pLocationInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdSetRenderingAttachmentLocationsKHR)(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo * pLocationInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdSetRenderingInputAttachmentIndices)(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo * pInputAttachmentIndexInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdSetRenderingInputAttachmentIndicesKHR)(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo * pInputAttachmentIndexInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdSetRepresentativeFragmentTestEnableNV)(VkCommandBuffer commandBuffer, VkBool32 representativeFragmentTestEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetSampleLocationsEXT)(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT * pSampleLocationsInfo); +typedef void (GLAD_API_PTR *PFN_vkCmdSetSampleLocationsEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 sampleLocationsEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetSampleMaskEXT)(VkCommandBuffer commandBuffer, VkSampleCountFlagBits samples, const VkSampleMask * pSampleMask); +typedef void (GLAD_API_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D * pScissors); +typedef void (GLAD_API_PTR *PFN_vkCmdSetScissorWithCount)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D * pScissors); +typedef void (GLAD_API_PTR *PFN_vkCmdSetScissorWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D * pScissors); +typedef void (GLAD_API_PTR *PFN_vkCmdSetShadingRateImageEnableNV)(VkCommandBuffer commandBuffer, VkBool32 shadingRateImageEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask); +typedef void (GLAD_API_PTR *PFN_vkCmdSetStencilOp)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp); +typedef void (GLAD_API_PTR *PFN_vkCmdSetStencilOpEXT)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp); +typedef void (GLAD_API_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference); +typedef void (GLAD_API_PTR *PFN_vkCmdSetStencilTestEnable)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetStencilTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask); +typedef void (GLAD_API_PTR *PFN_vkCmdSetTessellationDomainOriginEXT)(VkCommandBuffer commandBuffer, VkTessellationDomainOrigin domainOrigin); +typedef void (GLAD_API_PTR *PFN_vkCmdSetVertexInputEXT)(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT * pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT * pVertexAttributeDescriptions); +typedef void (GLAD_API_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport * pViewports); +typedef void (GLAD_API_PTR *PFN_vkCmdSetViewportShadingRatePaletteNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkShadingRatePaletteNV * pShadingRatePalettes); +typedef void (GLAD_API_PTR *PFN_vkCmdSetViewportSwizzleNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportSwizzleNV * pViewportSwizzles); +typedef void (GLAD_API_PTR *PFN_vkCmdSetViewportWScalingEnableNV)(VkCommandBuffer commandBuffer, VkBool32 viewportWScalingEnable); +typedef void (GLAD_API_PTR *PFN_vkCmdSetViewportWScalingNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV * pViewportWScalings); +typedef void (GLAD_API_PTR *PFN_vkCmdSetViewportWithCount)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport * pViewports); +typedef void (GLAD_API_PTR *PFN_vkCmdSetViewportWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport * pViewports); +typedef void (GLAD_API_PTR *PFN_vkCmdSubpassShadingHUAWEI)(VkCommandBuffer commandBuffer); +typedef void (GLAD_API_PTR *PFN_vkCmdTraceRaysIndirect2KHR)(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress); +typedef void (GLAD_API_PTR *PFN_vkCmdTraceRaysIndirectKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR * pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR * pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR * pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress); +typedef void (GLAD_API_PTR *PFN_vkCmdTraceRaysKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR * pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR * pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR * pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth); +typedef void (GLAD_API_PTR *PFN_vkCmdTraceRaysNV)(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth); +typedef void (GLAD_API_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void * pData); +typedef void (GLAD_API_PTR *PFN_vkCmdUpdatePipelineIndirectBufferNV)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline); +typedef void (GLAD_API_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent * pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier * pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier * pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier * pImageMemoryBarriers); +typedef void (GLAD_API_PTR *PFN_vkCmdWaitEvents2)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent * pEvents, const VkDependencyInfo * pDependencyInfos); +typedef void (GLAD_API_PTR *PFN_vkCmdWaitEvents2KHR)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent * pEvents, const VkDependencyInfo * pDependencyInfos); +typedef void (GLAD_API_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR * pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); +typedef void (GLAD_API_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesNV)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureNV * pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); +typedef void (GLAD_API_PTR *PFN_vkCmdWriteBufferMarker2AMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); +typedef void (GLAD_API_PTR *PFN_vkCmdWriteBufferMarkerAMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); +typedef void (GLAD_API_PTR *PFN_vkCmdWriteMicromapsPropertiesEXT)(VkCommandBuffer commandBuffer, uint32_t micromapCount, const VkMicromapEXT * pMicromaps, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); +typedef void (GLAD_API_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query); +typedef void (GLAD_API_PTR *PFN_vkCmdWriteTimestamp2)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query); +typedef void (GLAD_API_PTR *PFN_vkCmdWriteTimestamp2KHR)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query); +typedef VkResult (GLAD_API_PTR *PFN_vkCompileDeferredNV)(VkDevice device, VkPipeline pipeline, uint32_t shader); +typedef VkResult (GLAD_API_PTR *PFN_vkConvertCooperativeVectorMatrixNV)(VkDevice device, const VkConvertCooperativeVectorMatrixInfoNV * pInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureInfoKHR * pInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyAccelerationStructureToMemoryKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureToMemoryInfoKHR * pInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyImageToImage)(VkDevice device, const VkCopyImageToImageInfo * pCopyImageToImageInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyImageToImageEXT)(VkDevice device, const VkCopyImageToImageInfo * pCopyImageToImageInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyImageToMemory)(VkDevice device, const VkCopyImageToMemoryInfo * pCopyImageToMemoryInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyImageToMemoryEXT)(VkDevice device, const VkCopyImageToMemoryInfo * pCopyImageToMemoryInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyMemoryToAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMemoryToAccelerationStructureInfoKHR * pInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyMemoryToImage)(VkDevice device, const VkCopyMemoryToImageInfo * pCopyMemoryToImageInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyMemoryToImageEXT)(VkDevice device, const VkCopyMemoryToImageInfo * pCopyMemoryToImageInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyMemoryToMicromapEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMemoryToMicromapInfoEXT * pInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyMicromapEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMicromapInfoEXT * pInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCopyMicromapToMemoryEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMicromapToMemoryInfoEXT * pInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateAccelerationStructureKHR)(VkDevice device, const VkAccelerationStructureCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkAccelerationStructureKHR * pAccelerationStructure); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateAccelerationStructureNV)(VkDevice device, const VkAccelerationStructureCreateInfoNV * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkAccelerationStructureNV * pAccelerationStructure); +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkBuffer * pBuffer); +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateBufferCollectionFUCHSIA)(VkDevice device, const VkBufferCollectionCreateInfoFUCHSIA * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkBufferCollectionFUCHSIA * pCollection); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkBufferView * pView); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkCommandPool * pCommandPool); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo * pCreateInfos, const VkAllocationCallbacks * pAllocator, VkPipeline * pPipelines); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateCuFunctionNVX)(VkDevice device, const VkCuFunctionCreateInfoNVX * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkCuFunctionNVX * pFunction); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateCuModuleNVX)(VkDevice device, const VkCuModuleCreateInfoNVX * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkCuModuleNVX * pModule); +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateCudaFunctionNV)(VkDevice device, const VkCudaFunctionCreateInfoNV * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkCudaFunctionNV * pFunction); + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateCudaModuleNV)(VkDevice device, const VkCudaModuleCreateInfoNV * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkCudaModuleNV * pModule); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDataGraphPipelineSessionARM)(VkDevice device, const VkDataGraphPipelineSessionCreateInfoARM * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDataGraphPipelineSessionARM * pSession); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDataGraphPipelinesARM)(VkDevice device, VkDeferredOperationKHR deferredOperation, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkDataGraphPipelineCreateInfoARM * pCreateInfos, const VkAllocationCallbacks * pAllocator, VkPipeline * pPipelines); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDebugReportCallbackEXT)(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDebugReportCallbackEXT * pCallback); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDebugUtilsMessengerEXT)(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDebugUtilsMessengerEXT * pMessenger); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDeferredOperationKHR)(VkDevice device, const VkAllocationCallbacks * pAllocator, VkDeferredOperationKHR * pDeferredOperation); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDescriptorPool * pDescriptorPool); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDescriptorSetLayout * pSetLayout); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDescriptorUpdateTemplate)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDescriptorUpdateTemplateKHR)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDevice * pDevice); +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDirectFBSurfaceEXT)(VkInstance instance, const VkDirectFBSurfaceCreateInfoEXT * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDisplayModeKHR * pMode); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkEvent * pEvent); +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateExecutionGraphPipelinesAMDX)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkExecutionGraphPipelineCreateInfoAMDX * pCreateInfos, const VkAllocationCallbacks * pAllocator, VkPipeline * pPipelines); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkCreateExternalComputeQueueNV)(VkDevice device, const VkExternalComputeQueueCreateInfoNV * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkExternalComputeQueueNV * pExternalQueue); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkFence * pFence); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkFramebuffer * pFramebuffer); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo * pCreateInfos, const VkAllocationCallbacks * pAllocator, VkPipeline * pPipelines); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateHeadlessSurfaceEXT)(VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); +#if defined(VK_USE_PLATFORM_IOS_MVK) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkImage * pImage); +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkImageView * pView); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateIndirectCommandsLayoutEXT)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoEXT * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkIndirectCommandsLayoutEXT * pIndirectCommandsLayout); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateIndirectCommandsLayoutNV)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNV * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkIndirectCommandsLayoutNV * pIndirectCommandsLayout); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateIndirectExecutionSetEXT)(VkDevice device, const VkIndirectExecutionSetCreateInfoEXT * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkIndirectExecutionSetEXT * pIndirectExecutionSet); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkInstance * pInstance); +#if defined(VK_USE_PLATFORM_MACOS_MVK) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkCreateMicromapEXT)(VkDevice device, const VkMicromapCreateInfoEXT * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkMicromapEXT * pMicromap); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateOpticalFlowSessionNV)(VkDevice device, const VkOpticalFlowSessionCreateInfoNV * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkOpticalFlowSessionNV * pSession); +typedef VkResult (GLAD_API_PTR *PFN_vkCreatePipelineBinariesKHR)(VkDevice device, const VkPipelineBinaryCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkPipelineBinaryHandlesInfoKHR * pBinaries); +typedef VkResult (GLAD_API_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkPipelineCache * pPipelineCache); +typedef VkResult (GLAD_API_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkPipelineLayout * pPipelineLayout); +typedef VkResult (GLAD_API_PTR *PFN_vkCreatePrivateDataSlot)(VkDevice device, const VkPrivateDataSlotCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkPrivateDataSlot * pPrivateDataSlot); +typedef VkResult (GLAD_API_PTR *PFN_vkCreatePrivateDataSlotEXT)(VkDevice device, const VkPrivateDataSlotCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkPrivateDataSlot * pPrivateDataSlot); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkQueryPool * pQueryPool); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateRayTracingPipelinesKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoKHR * pCreateInfos, const VkAllocationCallbacks * pAllocator, VkPipeline * pPipelines); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateRayTracingPipelinesNV)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoNV * pCreateInfos, const VkAllocationCallbacks * pAllocator, VkPipeline * pPipelines); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkRenderPass * pRenderPass); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateRenderPass2)(VkDevice device, const VkRenderPassCreateInfo2 * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkRenderPass * pRenderPass); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateRenderPass2KHR)(VkDevice device, const VkRenderPassCreateInfo2 * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkRenderPass * pRenderPass); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSampler * pSampler); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateSamplerYcbcrConversion)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSamplerYcbcrConversion * pYcbcrConversion); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateSamplerYcbcrConversionKHR)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSamplerYcbcrConversion * pYcbcrConversion); +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateScreenSurfaceQNX)(VkInstance instance, const VkScreenSurfaceCreateInfoQNX * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSemaphore * pSemaphore); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkShaderModule * pShaderModule); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateShadersEXT)(VkDevice device, uint32_t createInfoCount, const VkShaderCreateInfoEXT * pCreateInfos, const VkAllocationCallbacks * pAllocator, VkShaderEXT * pShaders); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR * pCreateInfos, const VkAllocationCallbacks * pAllocator, VkSwapchainKHR * pSwapchains); +#if defined(VK_USE_PLATFORM_GGP) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +#if defined(VK_USE_PLATFORM_OHOS) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateSurfaceOHOS)(VkInstance instance, const VkSurfaceCreateInfoOHOS * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSwapchainKHR * pSwapchain); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateTensorARM)(VkDevice device, const VkTensorCreateInfoARM * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkTensorARM * pTensor); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateTensorViewARM)(VkDevice device, const VkTensorViewCreateInfoARM * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkTensorViewARM * pView); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateValidationCacheEXT)(VkDevice device, const VkValidationCacheCreateInfoEXT * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkValidationCacheEXT * pValidationCache); +#if defined(VK_USE_PLATFORM_VI_NN) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkCreateVideoSessionKHR)(VkDevice device, const VkVideoSessionCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkVideoSessionKHR * pVideoSession); +typedef VkResult (GLAD_API_PTR *PFN_vkCreateVideoSessionParametersKHR)(VkDevice device, const VkVideoSessionParametersCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkVideoSessionParametersKHR * pVideoSessionParameters); +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkSurfaceKHR * pSurface); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, const VkDebugMarkerObjectNameInfoEXT * pNameInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, const VkDebugMarkerObjectTagInfoEXT * pTagInfo); +typedef void (GLAD_API_PTR *PFN_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char * pLayerPrefix, const char * pMessage); +typedef VkResult (GLAD_API_PTR *PFN_vkDeferredOperationJoinKHR)(VkDevice device, VkDeferredOperationKHR operation); +typedef void (GLAD_API_PTR *PFN_vkDestroyAccelerationStructureKHR)(VkDevice device, VkAccelerationStructureKHR accelerationStructure, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyAccelerationStructureNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks * pAllocator); +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef void (GLAD_API_PTR *PFN_vkDestroyBufferCollectionFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkAllocationCallbacks * pAllocator); + +#endif +typedef void (GLAD_API_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyCuFunctionNVX)(VkDevice device, VkCuFunctionNVX function, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyCuModuleNVX)(VkDevice device, VkCuModuleNVX module, const VkAllocationCallbacks * pAllocator); +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef void (GLAD_API_PTR *PFN_vkDestroyCudaFunctionNV)(VkDevice device, VkCudaFunctionNV function, const VkAllocationCallbacks * pAllocator); + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef void (GLAD_API_PTR *PFN_vkDestroyCudaModuleNV)(VkDevice device, VkCudaModuleNV module, const VkAllocationCallbacks * pAllocator); + +#endif +typedef void (GLAD_API_PTR *PFN_vkDestroyDataGraphPipelineSessionARM)(VkDevice device, VkDataGraphPipelineSessionARM session, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyDebugReportCallbackEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyDebugUtilsMessengerEXT)(VkInstance instance, VkDebugUtilsMessengerEXT messenger, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyDeferredOperationKHR)(VkDevice device, VkDeferredOperationKHR operation, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyDescriptorUpdateTemplate)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyDescriptorUpdateTemplateKHR)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyExternalComputeQueueNV)(VkDevice device, VkExternalComputeQueueNV externalQueue, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyIndirectCommandsLayoutEXT)(VkDevice device, VkIndirectCommandsLayoutEXT indirectCommandsLayout, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyIndirectCommandsLayoutNV)(VkDevice device, VkIndirectCommandsLayoutNV indirectCommandsLayout, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyIndirectExecutionSetEXT)(VkDevice device, VkIndirectExecutionSetEXT indirectExecutionSet, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyMicromapEXT)(VkDevice device, VkMicromapEXT micromap, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyOpticalFlowSessionNV)(VkDevice device, VkOpticalFlowSessionNV session, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyPipelineBinaryKHR)(VkDevice device, VkPipelineBinaryKHR pipelineBinary, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyPrivateDataSlot)(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyPrivateDataSlotEXT)(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroySamplerYcbcrConversion)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroySamplerYcbcrConversionKHR)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyShaderEXT)(VkDevice device, VkShaderEXT shader, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyTensorARM)(VkDevice device, VkTensorARM tensor, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyTensorViewARM)(VkDevice device, VkTensorViewARM tensorView, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyValidationCacheEXT)(VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyVideoSessionKHR)(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkDestroyVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks * pAllocator); +typedef VkResult (GLAD_API_PTR *PFN_vkDeviceWaitIdle)(VkDevice device); +typedef VkResult (GLAD_API_PTR *PFN_vkDisplayPowerControlEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT * pDisplayPowerInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer); +typedef VkResult (GLAD_API_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char * pLayerName, uint32_t * pPropertyCount, VkExtensionProperties * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkLayerProperties * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char * pLayerName, uint32_t * pPropertyCount, VkExtensionProperties * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t * pPropertyCount, VkLayerProperties * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkEnumerateInstanceVersion)(uint32_t * pApiVersion); +typedef VkResult (GLAD_API_PTR *PFN_vkEnumeratePhysicalDeviceGroups)(VkInstance instance, uint32_t * pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkEnumeratePhysicalDeviceGroupsKHR)(VkInstance instance, uint32_t * pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t * pCounterCount, VkPerformanceCounterKHR * pCounters, VkPerformanceCounterDescriptionKHR * pCounterDescriptions); +typedef VkResult (GLAD_API_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t * pPhysicalDeviceCount, VkPhysicalDevice * pPhysicalDevices); +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef void (GLAD_API_PTR *PFN_vkExportMetalObjectsEXT)(VkDevice device, VkExportMetalObjectsInfoEXT * pMetalObjectsInfo); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange * pMemoryRanges); +typedef void (GLAD_API_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer * pCommandBuffers); +typedef VkResult (GLAD_API_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet * pDescriptorSets); +typedef void (GLAD_API_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks * pAllocator); +typedef void (GLAD_API_PTR *PFN_vkGetAccelerationStructureBuildSizesKHR)(VkDevice device, VkAccelerationStructureBuildTypeKHR buildType, const VkAccelerationStructureBuildGeometryInfoKHR * pBuildInfo, const uint32_t * pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR * pSizeInfo); +typedef VkDeviceAddress (GLAD_API_PTR *PFN_vkGetAccelerationStructureDeviceAddressKHR)(VkDevice device, const VkAccelerationStructureDeviceAddressInfoKHR * pInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkGetAccelerationStructureHandleNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, size_t dataSize, void * pData); +typedef void (GLAD_API_PTR *PFN_vkGetAccelerationStructureMemoryRequirementsNV)(VkDevice device, const VkAccelerationStructureMemoryRequirementsInfoNV * pInfo, VkMemoryRequirements2KHR * pMemoryRequirements); +typedef VkResult (GLAD_API_PTR *PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkAccelerationStructureCaptureDescriptorDataInfoEXT * pInfo, void * pData); +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer * buffer, VkAndroidHardwareBufferPropertiesANDROID * pProperties); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkResult (GLAD_API_PTR *PFN_vkGetBufferCollectionPropertiesFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, VkBufferCollectionPropertiesFUCHSIA * pProperties); + +#endif +typedef VkDeviceAddress (GLAD_API_PTR *PFN_vkGetBufferDeviceAddress)(VkDevice device, const VkBufferDeviceAddressInfo * pInfo); +typedef VkDeviceAddress (GLAD_API_PTR *PFN_vkGetBufferDeviceAddressEXT)(VkDevice device, const VkBufferDeviceAddressInfo * pInfo); +typedef VkDeviceAddress (GLAD_API_PTR *PFN_vkGetBufferDeviceAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo * pInfo); +typedef void (GLAD_API_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements * pMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetBufferMemoryRequirements2)(VkDevice device, const VkBufferMemoryRequirementsInfo2 * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2 * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef uint64_t (GLAD_API_PTR *PFN_vkGetBufferOpaqueCaptureAddress)(VkDevice device, const VkBufferDeviceAddressInfo * pInfo); +typedef uint64_t (GLAD_API_PTR *PFN_vkGetBufferOpaqueCaptureAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo * pInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkBufferCaptureDescriptorDataInfoEXT * pInfo, void * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetCalibratedTimestampsEXT)(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoKHR * pTimestampInfos, uint64_t * pTimestamps, uint64_t * pMaxDeviation); +typedef VkResult (GLAD_API_PTR *PFN_vkGetCalibratedTimestampsKHR)(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoKHR * pTimestampInfos, uint64_t * pTimestamps, uint64_t * pMaxDeviation); +typedef void (GLAD_API_PTR *PFN_vkGetClusterAccelerationStructureBuildSizesNV)(VkDevice device, const VkClusterAccelerationStructureInputInfoNV * pInfo, VkAccelerationStructureBuildSizesInfoKHR * pSizeInfo); +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef VkResult (GLAD_API_PTR *PFN_vkGetCudaModuleCacheNV)(VkDevice device, VkCudaModuleNV module, size_t * pCacheSize, void * pCacheData); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkGetDataGraphPipelineAvailablePropertiesARM)(VkDevice device, const VkDataGraphPipelineInfoARM * pPipelineInfo, uint32_t * pPropertiesCount, VkDataGraphPipelinePropertyARM * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDataGraphPipelinePropertiesARM)(VkDevice device, const VkDataGraphPipelineInfoARM * pPipelineInfo, uint32_t propertiesCount, VkDataGraphPipelinePropertyQueryResultARM * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM)(VkDevice device, const VkDataGraphPipelineSessionBindPointRequirementsInfoARM * pInfo, uint32_t * pBindPointRequirementCount, VkDataGraphPipelineSessionBindPointRequirementARM * pBindPointRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM)(VkDevice device, const VkDataGraphPipelineSessionMemoryRequirementsInfoARM * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef uint32_t (GLAD_API_PTR *PFN_vkGetDeferredOperationMaxConcurrencyKHR)(VkDevice device, VkDeferredOperationKHR operation); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDeferredOperationResultKHR)(VkDevice device, VkDeferredOperationKHR operation); +typedef void (GLAD_API_PTR *PFN_vkGetDescriptorEXT)(VkDevice device, const VkDescriptorGetInfoEXT * pDescriptorInfo, size_t dataSize, void * pDescriptor); +typedef void (GLAD_API_PTR *PFN_vkGetDescriptorSetHostMappingVALVE)(VkDevice device, VkDescriptorSet descriptorSet, void ** ppData); +typedef void (GLAD_API_PTR *PFN_vkGetDescriptorSetLayoutBindingOffsetEXT)(VkDevice device, VkDescriptorSetLayout layout, uint32_t binding, VkDeviceSize * pOffset); +typedef void (GLAD_API_PTR *PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE)(VkDevice device, const VkDescriptorSetBindingReferenceVALVE * pBindingReference, VkDescriptorSetLayoutHostMappingInfoVALVE * pHostMapping); +typedef void (GLAD_API_PTR *PFN_vkGetDescriptorSetLayoutSizeEXT)(VkDevice device, VkDescriptorSetLayout layout, VkDeviceSize * pLayoutSizeInBytes); +typedef void (GLAD_API_PTR *PFN_vkGetDescriptorSetLayoutSupport)(VkDevice device, const VkDescriptorSetLayoutCreateInfo * pCreateInfo, VkDescriptorSetLayoutSupport * pSupport); +typedef void (GLAD_API_PTR *PFN_vkGetDescriptorSetLayoutSupportKHR)(VkDevice device, const VkDescriptorSetLayoutCreateInfo * pCreateInfo, VkDescriptorSetLayoutSupport * pSupport); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)(VkDevice device, const VkAccelerationStructureVersionInfoKHR * pVersionInfo, VkAccelerationStructureCompatibilityKHR * pCompatibility); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceBufferMemoryRequirements)(VkDevice device, const VkDeviceBufferMemoryRequirements * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceBufferMemoryRequirementsKHR)(VkDevice device, const VkDeviceBufferMemoryRequirements * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDeviceFaultInfoEXT)(VkDevice device, VkDeviceFaultCountsEXT * pFaultCounts, VkDeviceFaultInfoEXT * pFaultInfo); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceGroupPeerMemoryFeatures)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags * pPeerMemoryFeatures); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags * pPeerMemoryFeatures); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHR)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR * pDeviceGroupPresentCapabilities); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkGetDeviceGroupSurfacePresentModes2EXT)(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR * pModes); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHR)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR * pModes); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceImageMemoryRequirements)(VkDevice device, const VkDeviceImageMemoryRequirements * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceImageMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirements * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceImageSparseMemoryRequirements)(VkDevice device, const VkDeviceImageMemoryRequirements * pInfo, uint32_t * pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirements * pInfo, uint32_t * pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceImageSubresourceLayout)(VkDevice device, const VkDeviceImageSubresourceInfo * pInfo, VkSubresourceLayout2 * pLayout); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceImageSubresourceLayoutKHR)(VkDevice device, const VkDeviceImageSubresourceInfo * pInfo, VkSubresourceLayout2 * pLayout); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize * pCommittedMemoryInBytes); +typedef uint64_t (GLAD_API_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddress)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo * pInfo); +typedef uint64_t (GLAD_API_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo * pInfo); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceMicromapCompatibilityEXT)(VkDevice device, const VkMicromapVersionInfoEXT * pVersionInfo, VkAccelerationStructureCompatibilityKHR * pCompatibility); +typedef PFN_vkVoidFunction (GLAD_API_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char * pName); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue * pQueue); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceQueue2)(VkDevice device, const VkDeviceQueueInfo2 * pQueueInfo, VkQueue * pQueue); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI)(VkDevice device, VkRenderPass renderpass, VkExtent2D * pMaxWorkgroupSize); +typedef void (GLAD_API_PTR *PFN_vkGetDeviceTensorMemoryRequirementsARM)(VkDevice device, const VkDeviceTensorMemoryRequirementsARM * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDisplayModeProperties2KHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t * pPropertyCount, VkDisplayModeProperties2KHR * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t * pPropertyCount, VkDisplayModePropertiesKHR * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDisplayPlaneCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR * pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR * pCapabilities); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR * pCapabilities); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t * pDisplayCount, VkDisplayKHR * pDisplays); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDrmDisplayEXT)(VkPhysicalDevice physicalDevice, int32_t drmFd, uint32_t connectorId, VkDisplayKHR * display); +typedef VkResult (GLAD_API_PTR *PFN_vkGetDynamicRenderingTilePropertiesQCOM)(VkDevice device, const VkRenderingInfo * pRenderingInfo, VkTilePropertiesQCOM * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetEncodedVideoSessionParametersKHR)(VkDevice device, const VkVideoEncodeSessionParametersGetInfoKHR * pVideoSessionParametersInfo, VkVideoEncodeSessionParametersFeedbackInfoKHR * pFeedbackInfo, size_t * pDataSize, void * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event); +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef VkResult (GLAD_API_PTR *PFN_vkGetExecutionGraphPipelineNodeIndexAMDX)(VkDevice device, VkPipeline executionGraph, const VkPipelineShaderStageNodeCreateInfoAMDX * pNodeInfo, uint32_t * pNodeIndex); + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +typedef VkResult (GLAD_API_PTR *PFN_vkGetExecutionGraphPipelineScratchSizeAMDX)(VkDevice device, VkPipeline executionGraph, VkExecutionGraphPipelineScratchSizeAMDX * pSizeInfo); + +#endif +typedef void (GLAD_API_PTR *PFN_vkGetExternalComputeQueueDataNV)(VkExternalComputeQueueNV externalQueue, VkExternalComputeQueueDataParamsNV * params, void * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetFenceFdKHR)(VkDevice device, const VkFenceGetFdInfoKHR * pGetFdInfo, int * pFd); +typedef VkResult (GLAD_API_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR * pGetWin32HandleInfo, HANDLE * pHandle); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkGetFramebufferTilePropertiesQCOM)(VkDevice device, VkFramebuffer framebuffer, uint32_t * pPropertiesCount, VkTilePropertiesQCOM * pProperties); +typedef void (GLAD_API_PTR *PFN_vkGetGeneratedCommandsMemoryRequirementsEXT)(VkDevice device, const VkGeneratedCommandsMemoryRequirementsInfoEXT * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetGeneratedCommandsMemoryRequirementsNV)(VkDevice device, const VkGeneratedCommandsMemoryRequirementsInfoNV * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef VkResult (GLAD_API_PTR *PFN_vkGetImageDrmFormatModifierPropertiesEXT)(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT * pProperties); +typedef void (GLAD_API_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements * pMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetImageMemoryRequirements2)(VkDevice device, const VkImageMemoryRequirementsInfo2 * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2 * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef VkResult (GLAD_API_PTR *PFN_vkGetImageOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkImageCaptureDescriptorDataInfoEXT * pInfo, void * pData); +typedef void (GLAD_API_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t * pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements * pSparseMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetImageSparseMemoryRequirements2)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2 * pInfo, uint32_t * pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2 * pInfo, uint32_t * pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements); +typedef void (GLAD_API_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource * pSubresource, VkSubresourceLayout * pLayout); +typedef void (GLAD_API_PTR *PFN_vkGetImageSubresourceLayout2)(VkDevice device, VkImage image, const VkImageSubresource2 * pSubresource, VkSubresourceLayout2 * pLayout); +typedef void (GLAD_API_PTR *PFN_vkGetImageSubresourceLayout2EXT)(VkDevice device, VkImage image, const VkImageSubresource2 * pSubresource, VkSubresourceLayout2 * pLayout); +typedef void (GLAD_API_PTR *PFN_vkGetImageSubresourceLayout2KHR)(VkDevice device, VkImage image, const VkImageSubresource2 * pSubresource, VkSubresourceLayout2 * pLayout); +typedef VkResult (GLAD_API_PTR *PFN_vkGetImageViewAddressNVX)(VkDevice device, VkImageView imageView, VkImageViewAddressPropertiesNVX * pProperties); +typedef uint64_t (GLAD_API_PTR *PFN_vkGetImageViewHandle64NVX)(VkDevice device, const VkImageViewHandleInfoNVX * pInfo); +typedef uint32_t (GLAD_API_PTR *PFN_vkGetImageViewHandleNVX)(VkDevice device, const VkImageViewHandleInfoNVX * pInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkImageViewCaptureDescriptorDataInfoEXT * pInfo, void * pData); +typedef PFN_vkVoidFunction (GLAD_API_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char * pName); +typedef void (GLAD_API_PTR *PFN_vkGetLatencyTimingsNV)(VkDevice device, VkSwapchainKHR swapchain, VkGetLatencyMarkerInfoNV * pLatencyMarkerInfo); +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID * pInfo, struct AHardwareBuffer ** pBuffer); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryFdKHR)(VkDevice device, const VkMemoryGetFdInfoKHR * pGetFdInfo, int * pFd); +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryFdPropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR * pMemoryFdProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryHostPointerPropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void * pHostPointer, VkMemoryHostPointerPropertiesEXT * pMemoryHostPointerProperties); +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryMetalHandleEXT)(VkDevice device, const VkMemoryGetMetalHandleInfoEXT * pGetMetalHandleInfo, void ** pHandle); + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryMetalHandlePropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void * pHandle, VkMemoryMetalHandlePropertiesEXT * pMemoryMetalHandleProperties); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryRemoteAddressNV)(VkDevice device, const VkMemoryGetRemoteAddressInfoNV * pMemoryGetRemoteAddressInfo, VkRemoteAddressNV * pAddress); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo, HANDLE * pHandle); + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE * pHandle); + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR * pMemoryWin32HandleProperties); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryZirconHandleFUCHSIA)(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, zx_handle_t * pZirconHandle); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkResult (GLAD_API_PTR *PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA * pMemoryZirconHandleProperties); + +#endif +typedef void (GLAD_API_PTR *PFN_vkGetMicromapBuildSizesEXT)(VkDevice device, VkAccelerationStructureBuildTypeKHR buildType, const VkMicromapBuildInfoEXT * pBuildInfo, VkMicromapBuildSizesInfoEXT * pSizeInfo); +typedef void (GLAD_API_PTR *PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV)(VkDevice device, const VkPartitionedAccelerationStructureInstancesInputNV * pInfo, VkAccelerationStructureBuildSizesInfoKHR * pSizeInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPastPresentationTimingGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, uint32_t * pPresentationTimingCount, VkPastPresentationTimingGOOGLE * pPresentationTimings); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPerformanceParameterINTEL)(VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL * pValue); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(VkPhysicalDevice physicalDevice, uint32_t * pTimeDomainCount, VkTimeDomainKHR * pTimeDomains); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR)(VkPhysicalDevice physicalDevice, uint32_t * pTimeDomainCount, VkTimeDomainKHR * pTimeDomains); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkCooperativeMatrixFlexibleDimensionsPropertiesNV * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkCooperativeMatrixPropertiesKHR * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkCooperativeMatrixPropertiesNV * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkCooperativeVectorPropertiesNV * pProperties); +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +typedef VkBool32 (GLAD_API_PTR *PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB * dfb); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkDisplayPlaneProperties2KHR * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkDisplayPlanePropertiesKHR * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceDisplayProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkDisplayProperties2KHR * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkDisplayPropertiesKHR * pProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceExternalBufferProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo, VkExternalBufferProperties * pExternalBufferProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo, VkExternalBufferProperties * pExternalBufferProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceExternalFenceProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo, VkExternalFenceProperties * pExternalFenceProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo, VkExternalFenceProperties * pExternalFenceProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV * pExternalImageFormatProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, VkExternalSemaphoreProperties * pExternalSemaphoreProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, VkExternalSemaphoreProperties * pExternalSemaphoreProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalTensorInfoARM * pExternalTensorInfo, VkExternalTensorPropertiesARM * pExternalTensorProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures * pFeatures); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceFeatures2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2 * pFeatures); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceFeatures2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2 * pFeatures); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties * pFormatProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceFormatProperties2)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2 * pFormatProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceFormatProperties2KHR)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2 * pFormatProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)(VkPhysicalDevice physicalDevice, uint32_t * pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR * pFragmentShadingRates); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties * pImageFormatProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo, VkImageFormatProperties2 * pImageFormatProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo, VkImageFormatProperties2 * pImageFormatProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties * pMemoryProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2 * pMemoryProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2 * pMemoryProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT * pMultisampleProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV)(VkPhysicalDevice physicalDevice, const VkOpticalFlowImageFormatInfoNV * pOpticalFlowImageFormatInfo, uint32_t * pFormatCount, VkOpticalFlowImageFormatPropertiesNV * pImageFormatProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t * pRectCount, VkRect2D * pRects); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties * pProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2 * pProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2 * pProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM * pQueueFamilyDataGraphProcessingEngineInfo, VkQueueFamilyDataGraphProcessingEnginePropertiesARM * pQueueFamilyDataGraphProcessingEngineProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t * pQueueFamilyDataGraphPropertyCount, VkQueueFamilyDataGraphPropertiesARM * pQueueFamilyDataGraphProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)(VkPhysicalDevice physicalDevice, const VkQueryPoolPerformanceCreateInfoKHR * pPerformanceQueryCreateInfo, uint32_t * pNumPasses); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t * pQueueFamilyPropertyCount, VkQueueFamilyProperties * pQueueFamilyProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2)(VkPhysicalDevice physicalDevice, uint32_t * pQueueFamilyPropertyCount, VkQueueFamilyProperties2 * pQueueFamilyProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t * pQueueFamilyPropertyCount, VkQueueFamilyProperties2 * pQueueFamilyProperties); +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +typedef VkBool32 (GLAD_API_PTR *PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct _screen_window * window); + +#endif +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t * pPropertyCount, VkSparseImageFormatProperties * pProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, uint32_t * pPropertyCount, VkSparseImageFormatProperties2 * pProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, uint32_t * pPropertyCount, VkSparseImageFormatProperties2 * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)(VkPhysicalDevice physicalDevice, uint32_t * pCombinationCount, VkFramebufferMixedSamplesCombinationNV * pCombinations); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT * pSurfaceCapabilities); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, VkSurfaceCapabilities2KHR * pSurfaceCapabilities); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR * pSurfaceCapabilities); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, uint32_t * pSurfaceFormatCount, VkSurfaceFormat2KHR * pSurfaceFormats); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t * pSurfaceFormatCount, VkSurfaceFormatKHR * pSurfaceFormats); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, uint32_t * pPresentModeCount, VkPresentModeKHR * pPresentModes); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t * pPresentModeCount, VkPresentModeKHR * pPresentModes); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32 * pSupported); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceToolProperties)(VkPhysicalDevice physicalDevice, uint32_t * pToolCount, VkPhysicalDeviceToolProperties * pToolProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceToolPropertiesEXT)(VkPhysicalDevice physicalDevice, uint32_t * pToolCount, VkPhysicalDeviceToolProperties * pToolProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)(VkPhysicalDevice physicalDevice, const VkVideoProfileInfoKHR * pVideoProfile, VkVideoCapabilitiesKHR * pCapabilities); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR * pQualityLevelInfo, VkVideoEncodeQualityLevelPropertiesKHR * pQualityLevelProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR * pVideoFormatInfo, uint32_t * pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR * pVideoFormatProperties); +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +typedef VkBool32 (GLAD_API_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display * display); + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkBool32 (GLAD_API_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex); + +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) +typedef VkBool32 (GLAD_API_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t * connection, xcb_visualid_t visual_id); + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +typedef VkBool32 (GLAD_API_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display * dpy, VisualID visualID); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkGetPipelineBinaryDataKHR)(VkDevice device, const VkPipelineBinaryDataInfoKHR * pInfo, VkPipelineBinaryKeyKHR * pPipelineBinaryKey, size_t * pPipelineBinaryDataSize, void * pPipelineBinaryData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t * pDataSize, void * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR * pExecutableInfo, uint32_t * pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR * pInternalRepresentations); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPipelineExecutablePropertiesKHR)(VkDevice device, const VkPipelineInfoKHR * pPipelineInfo, uint32_t * pExecutableCount, VkPipelineExecutablePropertiesKHR * pProperties); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPipelineExecutableStatisticsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR * pExecutableInfo, uint32_t * pStatisticCount, VkPipelineExecutableStatisticKHR * pStatistics); +typedef VkDeviceAddress (GLAD_API_PTR *PFN_vkGetPipelineIndirectDeviceAddressNV)(VkDevice device, const VkPipelineIndirectDeviceAddressInfoNV * pInfo); +typedef void (GLAD_API_PTR *PFN_vkGetPipelineIndirectMemoryRequirementsNV)(VkDevice device, const VkComputePipelineCreateInfo * pCreateInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPipelineKeyKHR)(VkDevice device, const VkPipelineCreateInfoKHR * pPipelineCreateInfo, VkPipelineBinaryKeyKHR * pPipelineKey); +typedef VkResult (GLAD_API_PTR *PFN_vkGetPipelinePropertiesEXT)(VkDevice device, const VkPipelineInfoEXT * pPipelineInfo, VkBaseOutStructure * pPipelineProperties); +typedef void (GLAD_API_PTR *PFN_vkGetPrivateData)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t * pData); +typedef void (GLAD_API_PTR *PFN_vkGetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void * pData, VkDeviceSize stride, VkQueryResultFlags flags); +typedef void (GLAD_API_PTR *PFN_vkGetQueueCheckpointData2NV)(VkQueue queue, uint32_t * pCheckpointDataCount, VkCheckpointData2NV * pCheckpointData); +typedef void (GLAD_API_PTR *PFN_vkGetQueueCheckpointDataNV)(VkQueue queue, uint32_t * pCheckpointDataCount, VkCheckpointDataNV * pCheckpointData); +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +typedef VkResult (GLAD_API_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display * dpy, RROutput rrOutput, VkDisplayKHR * pDisplay); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetRayTracingShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetRayTracingShaderGroupHandlesNV)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData); +typedef VkDeviceSize (GLAD_API_PTR *PFN_vkGetRayTracingShaderGroupStackSizeKHR)(VkDevice device, VkPipeline pipeline, uint32_t group, VkShaderGroupShaderKHR groupShader); +typedef VkResult (GLAD_API_PTR *PFN_vkGetRefreshCycleDurationGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE * pDisplayTimingProperties); +typedef void (GLAD_API_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D * pGranularity); +typedef void (GLAD_API_PTR *PFN_vkGetRenderingAreaGranularity)(VkDevice device, const VkRenderingAreaInfo * pRenderingAreaInfo, VkExtent2D * pGranularity); +typedef void (GLAD_API_PTR *PFN_vkGetRenderingAreaGranularityKHR)(VkDevice device, const VkRenderingAreaInfo * pRenderingAreaInfo, VkExtent2D * pGranularity); +typedef VkResult (GLAD_API_PTR *PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkSamplerCaptureDescriptorDataInfoEXT * pInfo, void * pData); +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +typedef VkResult (GLAD_API_PTR *PFN_vkGetScreenBufferPropertiesQNX)(VkDevice device, const struct _screen_buffer * buffer, VkScreenBufferPropertiesQNX * pProperties); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkGetSemaphoreCounterValue)(VkDevice device, VkSemaphore semaphore, uint64_t * pValue); +typedef VkResult (GLAD_API_PTR *PFN_vkGetSemaphoreCounterValueKHR)(VkDevice device, VkSemaphore semaphore, uint64_t * pValue); +typedef VkResult (GLAD_API_PTR *PFN_vkGetSemaphoreFdKHR)(VkDevice device, const VkSemaphoreGetFdInfoKHR * pGetFdInfo, int * pFd); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR * pGetWin32HandleInfo, HANDLE * pHandle); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkResult (GLAD_API_PTR *PFN_vkGetSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, zx_handle_t * pZirconHandle); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkGetShaderBinaryDataEXT)(VkDevice device, VkShaderEXT shader, size_t * pDataSize, void * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetShaderInfoAMD)(VkDevice device, VkPipeline pipeline, VkShaderStageFlagBits shaderStage, VkShaderInfoTypeAMD infoType, size_t * pInfoSize, void * pInfo); +typedef void (GLAD_API_PTR *PFN_vkGetShaderModuleCreateInfoIdentifierEXT)(VkDevice device, const VkShaderModuleCreateInfo * pCreateInfo, VkShaderModuleIdentifierEXT * pIdentifier); +typedef void (GLAD_API_PTR *PFN_vkGetShaderModuleIdentifierEXT)(VkDevice device, VkShaderModule shaderModule, VkShaderModuleIdentifierEXT * pIdentifier); +typedef VkResult (GLAD_API_PTR *PFN_vkGetSwapchainCounterEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t * pCounterValue); +typedef VkResult (GLAD_API_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t * pSwapchainImageCount, VkImage * pSwapchainImages); +typedef VkResult (GLAD_API_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain); +typedef void (GLAD_API_PTR *PFN_vkGetTensorMemoryRequirementsARM)(VkDevice device, const VkTensorMemoryRequirementsInfoARM * pInfo, VkMemoryRequirements2 * pMemoryRequirements); +typedef VkResult (GLAD_API_PTR *PFN_vkGetTensorOpaqueCaptureDescriptorDataARM)(VkDevice device, const VkTensorCaptureDescriptorDataInfoARM * pInfo, void * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM)(VkDevice device, const VkTensorViewCaptureDescriptorDataInfoARM * pInfo, void * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetValidationCacheDataEXT)(VkDevice device, VkValidationCacheEXT validationCache, size_t * pDataSize, void * pData); +typedef VkResult (GLAD_API_PTR *PFN_vkGetVideoSessionMemoryRequirementsKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t * pMemoryRequirementsCount, VkVideoSessionMemoryRequirementsKHR * pMemoryRequirements); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkGetWinrtDisplayNV)(VkPhysicalDevice physicalDevice, uint32_t deviceRelativeId, VkDisplayKHR * pDisplay); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkImportFenceFdKHR)(VkDevice device, const VkImportFenceFdInfoKHR * pImportFenceFdInfo); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR * pImportFenceWin32HandleInfo); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkImportSemaphoreFdKHR)(VkDevice device, const VkImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR * pImportSemaphoreWin32HandleInfo); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkResult (GLAD_API_PTR *PFN_vkImportSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA * pImportSemaphoreZirconHandleInfo); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkInitializePerformanceApiINTEL)(VkDevice device, const VkInitializePerformanceApiInfoINTEL * pInitializeInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange * pMemoryRanges); +typedef VkResult (GLAD_API_PTR *PFN_vkLatencySleepNV)(VkDevice device, VkSwapchainKHR swapchain, const VkLatencySleepInfoNV * pSleepInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void ** ppData); +typedef VkResult (GLAD_API_PTR *PFN_vkMapMemory2)(VkDevice device, const VkMemoryMapInfo * pMemoryMapInfo, void ** ppData); +typedef VkResult (GLAD_API_PTR *PFN_vkMapMemory2KHR)(VkDevice device, const VkMemoryMapInfo * pMemoryMapInfo, void ** ppData); +typedef VkResult (GLAD_API_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache * pSrcCaches); +typedef VkResult (GLAD_API_PTR *PFN_vkMergeValidationCachesEXT)(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const VkValidationCacheEXT * pSrcCaches); +typedef void (GLAD_API_PTR *PFN_vkQueueBeginDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT * pLabelInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo * pBindInfo, VkFence fence); +typedef void (GLAD_API_PTR *PFN_vkQueueEndDebugUtilsLabelEXT)(VkQueue queue); +typedef void (GLAD_API_PTR *PFN_vkQueueInsertDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT * pLabelInfo); +typedef void (GLAD_API_PTR *PFN_vkQueueNotifyOutOfBandNV)(VkQueue queue, const VkOutOfBandQueueTypeInfoNV * pQueueTypeInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR * pPresentInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkQueueSetPerformanceConfigurationINTEL)(VkQueue queue, VkPerformanceConfigurationINTEL configuration); +typedef VkResult (GLAD_API_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo * pSubmits, VkFence fence); +typedef VkResult (GLAD_API_PTR *PFN_vkQueueSubmit2)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2 * pSubmits, VkFence fence); +typedef VkResult (GLAD_API_PTR *PFN_vkQueueSubmit2KHR)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2 * pSubmits, VkFence fence); +typedef VkResult (GLAD_API_PTR *PFN_vkQueueWaitIdle)(VkQueue queue); +typedef VkResult (GLAD_API_PTR *PFN_vkRegisterDeviceEventEXT)(VkDevice device, const VkDeviceEventInfoEXT * pDeviceEventInfo, const VkAllocationCallbacks * pAllocator, VkFence * pFence); +typedef VkResult (GLAD_API_PTR *PFN_vkRegisterDisplayEventEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT * pDisplayEventInfo, const VkAllocationCallbacks * pAllocator, VkFence * pFence); +typedef VkResult (GLAD_API_PTR *PFN_vkReleaseCapturedPipelineDataKHR)(VkDevice device, const VkReleaseCapturedPipelineDataInfoKHR * pInfo, const VkAllocationCallbacks * pAllocator); +typedef VkResult (GLAD_API_PTR *PFN_vkReleaseDisplayEXT)(VkPhysicalDevice physicalDevice, VkDisplayKHR display); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (GLAD_API_PTR *PFN_vkReleaseFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkReleasePerformanceConfigurationINTEL)(VkDevice device, VkPerformanceConfigurationINTEL configuration); +typedef void (GLAD_API_PTR *PFN_vkReleaseProfilingLockKHR)(VkDevice device); +typedef VkResult (GLAD_API_PTR *PFN_vkReleaseSwapchainImagesEXT)(VkDevice device, const VkReleaseSwapchainImagesInfoKHR * pReleaseInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkReleaseSwapchainImagesKHR)(VkDevice device, const VkReleaseSwapchainImagesInfoKHR * pReleaseInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags); +typedef VkResult (GLAD_API_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags); +typedef VkResult (GLAD_API_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags); +typedef VkResult (GLAD_API_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event); +typedef VkResult (GLAD_API_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence * pFences); +typedef void (GLAD_API_PTR *PFN_vkResetQueryPool)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); +typedef void (GLAD_API_PTR *PFN_vkResetQueryPoolEXT)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkResult (GLAD_API_PTR *PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA * pBufferConstraintsInfo); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +typedef VkResult (GLAD_API_PTR *PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageConstraintsInfoFUCHSIA * pImageConstraintsInfo); + +#endif +typedef VkResult (GLAD_API_PTR *PFN_vkSetDebugUtilsObjectNameEXT)(VkDevice device, const VkDebugUtilsObjectNameInfoEXT * pNameInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkSetDebugUtilsObjectTagEXT)(VkDevice device, const VkDebugUtilsObjectTagInfoEXT * pTagInfo); +typedef void (GLAD_API_PTR *PFN_vkSetDeviceMemoryPriorityEXT)(VkDevice device, VkDeviceMemory memory, float priority); +typedef VkResult (GLAD_API_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event); +typedef void (GLAD_API_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR * pSwapchains, const VkHdrMetadataEXT * pMetadata); +typedef void (GLAD_API_PTR *PFN_vkSetLatencyMarkerNV)(VkDevice device, VkSwapchainKHR swapchain, const VkSetLatencyMarkerInfoNV * pLatencyMarkerInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkSetLatencySleepModeNV)(VkDevice device, VkSwapchainKHR swapchain, const VkLatencySleepModeInfoNV * pSleepModeInfo); +typedef void (GLAD_API_PTR *PFN_vkSetLocalDimmingAMD)(VkDevice device, VkSwapchainKHR swapChain, VkBool32 localDimmingEnable); +typedef VkResult (GLAD_API_PTR *PFN_vkSetPrivateData)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data); +typedef VkResult (GLAD_API_PTR *PFN_vkSetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data); +typedef VkResult (GLAD_API_PTR *PFN_vkSignalSemaphore)(VkDevice device, const VkSemaphoreSignalInfo * pSignalInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkSignalSemaphoreKHR)(VkDevice device, const VkSemaphoreSignalInfo * pSignalInfo); +typedef void (GLAD_API_PTR *PFN_vkSubmitDebugUtilsMessageEXT)(VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT * pCallbackData); +typedef VkResult (GLAD_API_PTR *PFN_vkTransitionImageLayout)(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfo * pTransitions); +typedef VkResult (GLAD_API_PTR *PFN_vkTransitionImageLayoutEXT)(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfo * pTransitions); +typedef void (GLAD_API_PTR *PFN_vkTrimCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); +typedef void (GLAD_API_PTR *PFN_vkTrimCommandPoolKHR)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); +typedef void (GLAD_API_PTR *PFN_vkUninitializePerformanceApiINTEL)(VkDevice device); +typedef void (GLAD_API_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory); +typedef VkResult (GLAD_API_PTR *PFN_vkUnmapMemory2)(VkDevice device, const VkMemoryUnmapInfo * pMemoryUnmapInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkUnmapMemory2KHR)(VkDevice device, const VkMemoryUnmapInfo * pMemoryUnmapInfo); +typedef void (GLAD_API_PTR *PFN_vkUpdateDescriptorSetWithTemplate)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void * pData); +typedef void (GLAD_API_PTR *PFN_vkUpdateDescriptorSetWithTemplateKHR)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void * pData); +typedef void (GLAD_API_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet * pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet * pDescriptorCopies); +typedef void (GLAD_API_PTR *PFN_vkUpdateIndirectExecutionSetPipelineEXT)(VkDevice device, VkIndirectExecutionSetEXT indirectExecutionSet, uint32_t executionSetWriteCount, const VkWriteIndirectExecutionSetPipelineEXT * pExecutionSetWrites); +typedef void (GLAD_API_PTR *PFN_vkUpdateIndirectExecutionSetShaderEXT)(VkDevice device, VkIndirectExecutionSetEXT indirectExecutionSet, uint32_t executionSetWriteCount, const VkWriteIndirectExecutionSetShaderEXT * pExecutionSetWrites); +typedef VkResult (GLAD_API_PTR *PFN_vkUpdateVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR * pUpdateInfo); +typedef VkResult (GLAD_API_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence * pFences, VkBool32 waitAll, uint64_t timeout); +typedef VkResult (GLAD_API_PTR *PFN_vkWaitForPresent2KHR)(VkDevice device, VkSwapchainKHR swapchain, const VkPresentWait2InfoKHR * pPresentWait2Info); +typedef VkResult (GLAD_API_PTR *PFN_vkWaitForPresentKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t presentId, uint64_t timeout); +typedef VkResult (GLAD_API_PTR *PFN_vkWaitSemaphores)(VkDevice device, const VkSemaphoreWaitInfo * pWaitInfo, uint64_t timeout); +typedef VkResult (GLAD_API_PTR *PFN_vkWaitSemaphoresKHR)(VkDevice device, const VkSemaphoreWaitInfo * pWaitInfo, uint64_t timeout); +typedef VkResult (GLAD_API_PTR *PFN_vkWriteAccelerationStructuresPropertiesKHR)(VkDevice device, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR * pAccelerationStructures, VkQueryType queryType, size_t dataSize, void * pData, size_t stride); +typedef VkResult (GLAD_API_PTR *PFN_vkWriteMicromapsPropertiesEXT)(VkDevice device, uint32_t micromapCount, const VkMicromapEXT * pMicromaps, VkQueryType queryType, size_t dataSize, void * pData, size_t stride); + +GLAD_API_CALL PFN_vkAcquireDrmDisplayEXT glad_vkAcquireDrmDisplayEXT; +#define vkAcquireDrmDisplayEXT glad_vkAcquireDrmDisplayEXT +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkAcquireFullScreenExclusiveModeEXT glad_vkAcquireFullScreenExclusiveModeEXT; +#define vkAcquireFullScreenExclusiveModeEXT glad_vkAcquireFullScreenExclusiveModeEXT + +#endif +GLAD_API_CALL PFN_vkAcquireNextImage2KHR glad_vkAcquireNextImage2KHR; +#define vkAcquireNextImage2KHR glad_vkAcquireNextImage2KHR +GLAD_API_CALL PFN_vkAcquireNextImageKHR glad_vkAcquireNextImageKHR; +#define vkAcquireNextImageKHR glad_vkAcquireNextImageKHR +GLAD_API_CALL PFN_vkAcquirePerformanceConfigurationINTEL glad_vkAcquirePerformanceConfigurationINTEL; +#define vkAcquirePerformanceConfigurationINTEL glad_vkAcquirePerformanceConfigurationINTEL +GLAD_API_CALL PFN_vkAcquireProfilingLockKHR glad_vkAcquireProfilingLockKHR; +#define vkAcquireProfilingLockKHR glad_vkAcquireProfilingLockKHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkAcquireWinrtDisplayNV glad_vkAcquireWinrtDisplayNV; +#define vkAcquireWinrtDisplayNV glad_vkAcquireWinrtDisplayNV + +#endif +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +GLAD_API_CALL PFN_vkAcquireXlibDisplayEXT glad_vkAcquireXlibDisplayEXT; +#define vkAcquireXlibDisplayEXT glad_vkAcquireXlibDisplayEXT + +#endif +GLAD_API_CALL PFN_vkAllocateCommandBuffers glad_vkAllocateCommandBuffers; +#define vkAllocateCommandBuffers glad_vkAllocateCommandBuffers +GLAD_API_CALL PFN_vkAllocateDescriptorSets glad_vkAllocateDescriptorSets; +#define vkAllocateDescriptorSets glad_vkAllocateDescriptorSets +GLAD_API_CALL PFN_vkAllocateMemory glad_vkAllocateMemory; +#define vkAllocateMemory glad_vkAllocateMemory +GLAD_API_CALL PFN_vkAntiLagUpdateAMD glad_vkAntiLagUpdateAMD; +#define vkAntiLagUpdateAMD glad_vkAntiLagUpdateAMD +GLAD_API_CALL PFN_vkBeginCommandBuffer glad_vkBeginCommandBuffer; +#define vkBeginCommandBuffer glad_vkBeginCommandBuffer +GLAD_API_CALL PFN_vkBindAccelerationStructureMemoryNV glad_vkBindAccelerationStructureMemoryNV; +#define vkBindAccelerationStructureMemoryNV glad_vkBindAccelerationStructureMemoryNV +GLAD_API_CALL PFN_vkBindBufferMemory glad_vkBindBufferMemory; +#define vkBindBufferMemory glad_vkBindBufferMemory +GLAD_API_CALL PFN_vkBindBufferMemory2 glad_vkBindBufferMemory2; +#define vkBindBufferMemory2 glad_vkBindBufferMemory2 +GLAD_API_CALL PFN_vkBindBufferMemory2KHR glad_vkBindBufferMemory2KHR; +#define vkBindBufferMemory2KHR glad_vkBindBufferMemory2KHR +GLAD_API_CALL PFN_vkBindDataGraphPipelineSessionMemoryARM glad_vkBindDataGraphPipelineSessionMemoryARM; +#define vkBindDataGraphPipelineSessionMemoryARM glad_vkBindDataGraphPipelineSessionMemoryARM +GLAD_API_CALL PFN_vkBindImageMemory glad_vkBindImageMemory; +#define vkBindImageMemory glad_vkBindImageMemory +GLAD_API_CALL PFN_vkBindImageMemory2 glad_vkBindImageMemory2; +#define vkBindImageMemory2 glad_vkBindImageMemory2 +GLAD_API_CALL PFN_vkBindImageMemory2KHR glad_vkBindImageMemory2KHR; +#define vkBindImageMemory2KHR glad_vkBindImageMemory2KHR +GLAD_API_CALL PFN_vkBindOpticalFlowSessionImageNV glad_vkBindOpticalFlowSessionImageNV; +#define vkBindOpticalFlowSessionImageNV glad_vkBindOpticalFlowSessionImageNV +GLAD_API_CALL PFN_vkBindTensorMemoryARM glad_vkBindTensorMemoryARM; +#define vkBindTensorMemoryARM glad_vkBindTensorMemoryARM +GLAD_API_CALL PFN_vkBindVideoSessionMemoryKHR glad_vkBindVideoSessionMemoryKHR; +#define vkBindVideoSessionMemoryKHR glad_vkBindVideoSessionMemoryKHR +GLAD_API_CALL PFN_vkBuildAccelerationStructuresKHR glad_vkBuildAccelerationStructuresKHR; +#define vkBuildAccelerationStructuresKHR glad_vkBuildAccelerationStructuresKHR +GLAD_API_CALL PFN_vkBuildMicromapsEXT glad_vkBuildMicromapsEXT; +#define vkBuildMicromapsEXT glad_vkBuildMicromapsEXT +GLAD_API_CALL PFN_vkCmdBeginConditionalRenderingEXT glad_vkCmdBeginConditionalRenderingEXT; +#define vkCmdBeginConditionalRenderingEXT glad_vkCmdBeginConditionalRenderingEXT +GLAD_API_CALL PFN_vkCmdBeginDebugUtilsLabelEXT glad_vkCmdBeginDebugUtilsLabelEXT; +#define vkCmdBeginDebugUtilsLabelEXT glad_vkCmdBeginDebugUtilsLabelEXT +GLAD_API_CALL PFN_vkCmdBeginPerTileExecutionQCOM glad_vkCmdBeginPerTileExecutionQCOM; +#define vkCmdBeginPerTileExecutionQCOM glad_vkCmdBeginPerTileExecutionQCOM +GLAD_API_CALL PFN_vkCmdBeginQuery glad_vkCmdBeginQuery; +#define vkCmdBeginQuery glad_vkCmdBeginQuery +GLAD_API_CALL PFN_vkCmdBeginQueryIndexedEXT glad_vkCmdBeginQueryIndexedEXT; +#define vkCmdBeginQueryIndexedEXT glad_vkCmdBeginQueryIndexedEXT +GLAD_API_CALL PFN_vkCmdBeginRenderPass glad_vkCmdBeginRenderPass; +#define vkCmdBeginRenderPass glad_vkCmdBeginRenderPass +GLAD_API_CALL PFN_vkCmdBeginRenderPass2 glad_vkCmdBeginRenderPass2; +#define vkCmdBeginRenderPass2 glad_vkCmdBeginRenderPass2 +GLAD_API_CALL PFN_vkCmdBeginRenderPass2KHR glad_vkCmdBeginRenderPass2KHR; +#define vkCmdBeginRenderPass2KHR glad_vkCmdBeginRenderPass2KHR +GLAD_API_CALL PFN_vkCmdBeginRendering glad_vkCmdBeginRendering; +#define vkCmdBeginRendering glad_vkCmdBeginRendering +GLAD_API_CALL PFN_vkCmdBeginRenderingKHR glad_vkCmdBeginRenderingKHR; +#define vkCmdBeginRenderingKHR glad_vkCmdBeginRenderingKHR +GLAD_API_CALL PFN_vkCmdBeginTransformFeedbackEXT glad_vkCmdBeginTransformFeedbackEXT; +#define vkCmdBeginTransformFeedbackEXT glad_vkCmdBeginTransformFeedbackEXT +GLAD_API_CALL PFN_vkCmdBeginVideoCodingKHR glad_vkCmdBeginVideoCodingKHR; +#define vkCmdBeginVideoCodingKHR glad_vkCmdBeginVideoCodingKHR +GLAD_API_CALL PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT glad_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT; +#define vkCmdBindDescriptorBufferEmbeddedSamplers2EXT glad_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT +GLAD_API_CALL PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT glad_vkCmdBindDescriptorBufferEmbeddedSamplersEXT; +#define vkCmdBindDescriptorBufferEmbeddedSamplersEXT glad_vkCmdBindDescriptorBufferEmbeddedSamplersEXT +GLAD_API_CALL PFN_vkCmdBindDescriptorBuffersEXT glad_vkCmdBindDescriptorBuffersEXT; +#define vkCmdBindDescriptorBuffersEXT glad_vkCmdBindDescriptorBuffersEXT +GLAD_API_CALL PFN_vkCmdBindDescriptorSets glad_vkCmdBindDescriptorSets; +#define vkCmdBindDescriptorSets glad_vkCmdBindDescriptorSets +GLAD_API_CALL PFN_vkCmdBindDescriptorSets2 glad_vkCmdBindDescriptorSets2; +#define vkCmdBindDescriptorSets2 glad_vkCmdBindDescriptorSets2 +GLAD_API_CALL PFN_vkCmdBindDescriptorSets2KHR glad_vkCmdBindDescriptorSets2KHR; +#define vkCmdBindDescriptorSets2KHR glad_vkCmdBindDescriptorSets2KHR +GLAD_API_CALL PFN_vkCmdBindIndexBuffer glad_vkCmdBindIndexBuffer; +#define vkCmdBindIndexBuffer glad_vkCmdBindIndexBuffer +GLAD_API_CALL PFN_vkCmdBindIndexBuffer2 glad_vkCmdBindIndexBuffer2; +#define vkCmdBindIndexBuffer2 glad_vkCmdBindIndexBuffer2 +GLAD_API_CALL PFN_vkCmdBindIndexBuffer2KHR glad_vkCmdBindIndexBuffer2KHR; +#define vkCmdBindIndexBuffer2KHR glad_vkCmdBindIndexBuffer2KHR +GLAD_API_CALL PFN_vkCmdBindInvocationMaskHUAWEI glad_vkCmdBindInvocationMaskHUAWEI; +#define vkCmdBindInvocationMaskHUAWEI glad_vkCmdBindInvocationMaskHUAWEI +GLAD_API_CALL PFN_vkCmdBindPipeline glad_vkCmdBindPipeline; +#define vkCmdBindPipeline glad_vkCmdBindPipeline +GLAD_API_CALL PFN_vkCmdBindPipelineShaderGroupNV glad_vkCmdBindPipelineShaderGroupNV; +#define vkCmdBindPipelineShaderGroupNV glad_vkCmdBindPipelineShaderGroupNV +GLAD_API_CALL PFN_vkCmdBindShadersEXT glad_vkCmdBindShadersEXT; +#define vkCmdBindShadersEXT glad_vkCmdBindShadersEXT +GLAD_API_CALL PFN_vkCmdBindShadingRateImageNV glad_vkCmdBindShadingRateImageNV; +#define vkCmdBindShadingRateImageNV glad_vkCmdBindShadingRateImageNV +GLAD_API_CALL PFN_vkCmdBindTileMemoryQCOM glad_vkCmdBindTileMemoryQCOM; +#define vkCmdBindTileMemoryQCOM glad_vkCmdBindTileMemoryQCOM +GLAD_API_CALL PFN_vkCmdBindTransformFeedbackBuffersEXT glad_vkCmdBindTransformFeedbackBuffersEXT; +#define vkCmdBindTransformFeedbackBuffersEXT glad_vkCmdBindTransformFeedbackBuffersEXT +GLAD_API_CALL PFN_vkCmdBindVertexBuffers glad_vkCmdBindVertexBuffers; +#define vkCmdBindVertexBuffers glad_vkCmdBindVertexBuffers +GLAD_API_CALL PFN_vkCmdBindVertexBuffers2 glad_vkCmdBindVertexBuffers2; +#define vkCmdBindVertexBuffers2 glad_vkCmdBindVertexBuffers2 +GLAD_API_CALL PFN_vkCmdBindVertexBuffers2EXT glad_vkCmdBindVertexBuffers2EXT; +#define vkCmdBindVertexBuffers2EXT glad_vkCmdBindVertexBuffers2EXT +GLAD_API_CALL PFN_vkCmdBlitImage glad_vkCmdBlitImage; +#define vkCmdBlitImage glad_vkCmdBlitImage +GLAD_API_CALL PFN_vkCmdBlitImage2 glad_vkCmdBlitImage2; +#define vkCmdBlitImage2 glad_vkCmdBlitImage2 +GLAD_API_CALL PFN_vkCmdBlitImage2KHR glad_vkCmdBlitImage2KHR; +#define vkCmdBlitImage2KHR glad_vkCmdBlitImage2KHR +GLAD_API_CALL PFN_vkCmdBuildAccelerationStructureNV glad_vkCmdBuildAccelerationStructureNV; +#define vkCmdBuildAccelerationStructureNV glad_vkCmdBuildAccelerationStructureNV +GLAD_API_CALL PFN_vkCmdBuildAccelerationStructuresIndirectKHR glad_vkCmdBuildAccelerationStructuresIndirectKHR; +#define vkCmdBuildAccelerationStructuresIndirectKHR glad_vkCmdBuildAccelerationStructuresIndirectKHR +GLAD_API_CALL PFN_vkCmdBuildAccelerationStructuresKHR glad_vkCmdBuildAccelerationStructuresKHR; +#define vkCmdBuildAccelerationStructuresKHR glad_vkCmdBuildAccelerationStructuresKHR +GLAD_API_CALL PFN_vkCmdBuildClusterAccelerationStructureIndirectNV glad_vkCmdBuildClusterAccelerationStructureIndirectNV; +#define vkCmdBuildClusterAccelerationStructureIndirectNV glad_vkCmdBuildClusterAccelerationStructureIndirectNV +GLAD_API_CALL PFN_vkCmdBuildMicromapsEXT glad_vkCmdBuildMicromapsEXT; +#define vkCmdBuildMicromapsEXT glad_vkCmdBuildMicromapsEXT +GLAD_API_CALL PFN_vkCmdBuildPartitionedAccelerationStructuresNV glad_vkCmdBuildPartitionedAccelerationStructuresNV; +#define vkCmdBuildPartitionedAccelerationStructuresNV glad_vkCmdBuildPartitionedAccelerationStructuresNV +GLAD_API_CALL PFN_vkCmdClearAttachments glad_vkCmdClearAttachments; +#define vkCmdClearAttachments glad_vkCmdClearAttachments +GLAD_API_CALL PFN_vkCmdClearColorImage glad_vkCmdClearColorImage; +#define vkCmdClearColorImage glad_vkCmdClearColorImage +GLAD_API_CALL PFN_vkCmdClearDepthStencilImage glad_vkCmdClearDepthStencilImage; +#define vkCmdClearDepthStencilImage glad_vkCmdClearDepthStencilImage +GLAD_API_CALL PFN_vkCmdControlVideoCodingKHR glad_vkCmdControlVideoCodingKHR; +#define vkCmdControlVideoCodingKHR glad_vkCmdControlVideoCodingKHR +GLAD_API_CALL PFN_vkCmdConvertCooperativeVectorMatrixNV glad_vkCmdConvertCooperativeVectorMatrixNV; +#define vkCmdConvertCooperativeVectorMatrixNV glad_vkCmdConvertCooperativeVectorMatrixNV +GLAD_API_CALL PFN_vkCmdCopyAccelerationStructureKHR glad_vkCmdCopyAccelerationStructureKHR; +#define vkCmdCopyAccelerationStructureKHR glad_vkCmdCopyAccelerationStructureKHR +GLAD_API_CALL PFN_vkCmdCopyAccelerationStructureNV glad_vkCmdCopyAccelerationStructureNV; +#define vkCmdCopyAccelerationStructureNV glad_vkCmdCopyAccelerationStructureNV +GLAD_API_CALL PFN_vkCmdCopyAccelerationStructureToMemoryKHR glad_vkCmdCopyAccelerationStructureToMemoryKHR; +#define vkCmdCopyAccelerationStructureToMemoryKHR glad_vkCmdCopyAccelerationStructureToMemoryKHR +GLAD_API_CALL PFN_vkCmdCopyBuffer glad_vkCmdCopyBuffer; +#define vkCmdCopyBuffer glad_vkCmdCopyBuffer +GLAD_API_CALL PFN_vkCmdCopyBuffer2 glad_vkCmdCopyBuffer2; +#define vkCmdCopyBuffer2 glad_vkCmdCopyBuffer2 +GLAD_API_CALL PFN_vkCmdCopyBuffer2KHR glad_vkCmdCopyBuffer2KHR; +#define vkCmdCopyBuffer2KHR glad_vkCmdCopyBuffer2KHR +GLAD_API_CALL PFN_vkCmdCopyBufferToImage glad_vkCmdCopyBufferToImage; +#define vkCmdCopyBufferToImage glad_vkCmdCopyBufferToImage +GLAD_API_CALL PFN_vkCmdCopyBufferToImage2 glad_vkCmdCopyBufferToImage2; +#define vkCmdCopyBufferToImage2 glad_vkCmdCopyBufferToImage2 +GLAD_API_CALL PFN_vkCmdCopyBufferToImage2KHR glad_vkCmdCopyBufferToImage2KHR; +#define vkCmdCopyBufferToImage2KHR glad_vkCmdCopyBufferToImage2KHR +GLAD_API_CALL PFN_vkCmdCopyImage glad_vkCmdCopyImage; +#define vkCmdCopyImage glad_vkCmdCopyImage +GLAD_API_CALL PFN_vkCmdCopyImage2 glad_vkCmdCopyImage2; +#define vkCmdCopyImage2 glad_vkCmdCopyImage2 +GLAD_API_CALL PFN_vkCmdCopyImage2KHR glad_vkCmdCopyImage2KHR; +#define vkCmdCopyImage2KHR glad_vkCmdCopyImage2KHR +GLAD_API_CALL PFN_vkCmdCopyImageToBuffer glad_vkCmdCopyImageToBuffer; +#define vkCmdCopyImageToBuffer glad_vkCmdCopyImageToBuffer +GLAD_API_CALL PFN_vkCmdCopyImageToBuffer2 glad_vkCmdCopyImageToBuffer2; +#define vkCmdCopyImageToBuffer2 glad_vkCmdCopyImageToBuffer2 +GLAD_API_CALL PFN_vkCmdCopyImageToBuffer2KHR glad_vkCmdCopyImageToBuffer2KHR; +#define vkCmdCopyImageToBuffer2KHR glad_vkCmdCopyImageToBuffer2KHR +GLAD_API_CALL PFN_vkCmdCopyMemoryIndirectKHR glad_vkCmdCopyMemoryIndirectKHR; +#define vkCmdCopyMemoryIndirectKHR glad_vkCmdCopyMemoryIndirectKHR +GLAD_API_CALL PFN_vkCmdCopyMemoryIndirectNV glad_vkCmdCopyMemoryIndirectNV; +#define vkCmdCopyMemoryIndirectNV glad_vkCmdCopyMemoryIndirectNV +GLAD_API_CALL PFN_vkCmdCopyMemoryToAccelerationStructureKHR glad_vkCmdCopyMemoryToAccelerationStructureKHR; +#define vkCmdCopyMemoryToAccelerationStructureKHR glad_vkCmdCopyMemoryToAccelerationStructureKHR +GLAD_API_CALL PFN_vkCmdCopyMemoryToImageIndirectKHR glad_vkCmdCopyMemoryToImageIndirectKHR; +#define vkCmdCopyMemoryToImageIndirectKHR glad_vkCmdCopyMemoryToImageIndirectKHR +GLAD_API_CALL PFN_vkCmdCopyMemoryToImageIndirectNV glad_vkCmdCopyMemoryToImageIndirectNV; +#define vkCmdCopyMemoryToImageIndirectNV glad_vkCmdCopyMemoryToImageIndirectNV +GLAD_API_CALL PFN_vkCmdCopyMemoryToMicromapEXT glad_vkCmdCopyMemoryToMicromapEXT; +#define vkCmdCopyMemoryToMicromapEXT glad_vkCmdCopyMemoryToMicromapEXT +GLAD_API_CALL PFN_vkCmdCopyMicromapEXT glad_vkCmdCopyMicromapEXT; +#define vkCmdCopyMicromapEXT glad_vkCmdCopyMicromapEXT +GLAD_API_CALL PFN_vkCmdCopyMicromapToMemoryEXT glad_vkCmdCopyMicromapToMemoryEXT; +#define vkCmdCopyMicromapToMemoryEXT glad_vkCmdCopyMicromapToMemoryEXT +GLAD_API_CALL PFN_vkCmdCopyQueryPoolResults glad_vkCmdCopyQueryPoolResults; +#define vkCmdCopyQueryPoolResults glad_vkCmdCopyQueryPoolResults +GLAD_API_CALL PFN_vkCmdCopyTensorARM glad_vkCmdCopyTensorARM; +#define vkCmdCopyTensorARM glad_vkCmdCopyTensorARM +GLAD_API_CALL PFN_vkCmdCuLaunchKernelNVX glad_vkCmdCuLaunchKernelNVX; +#define vkCmdCuLaunchKernelNVX glad_vkCmdCuLaunchKernelNVX +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkCmdCudaLaunchKernelNV glad_vkCmdCudaLaunchKernelNV; +#define vkCmdCudaLaunchKernelNV glad_vkCmdCudaLaunchKernelNV + +#endif +GLAD_API_CALL PFN_vkCmdDebugMarkerBeginEXT glad_vkCmdDebugMarkerBeginEXT; +#define vkCmdDebugMarkerBeginEXT glad_vkCmdDebugMarkerBeginEXT +GLAD_API_CALL PFN_vkCmdDebugMarkerEndEXT glad_vkCmdDebugMarkerEndEXT; +#define vkCmdDebugMarkerEndEXT glad_vkCmdDebugMarkerEndEXT +GLAD_API_CALL PFN_vkCmdDebugMarkerInsertEXT glad_vkCmdDebugMarkerInsertEXT; +#define vkCmdDebugMarkerInsertEXT glad_vkCmdDebugMarkerInsertEXT +GLAD_API_CALL PFN_vkCmdDecodeVideoKHR glad_vkCmdDecodeVideoKHR; +#define vkCmdDecodeVideoKHR glad_vkCmdDecodeVideoKHR +GLAD_API_CALL PFN_vkCmdDecompressMemoryIndirectCountNV glad_vkCmdDecompressMemoryIndirectCountNV; +#define vkCmdDecompressMemoryIndirectCountNV glad_vkCmdDecompressMemoryIndirectCountNV +GLAD_API_CALL PFN_vkCmdDecompressMemoryNV glad_vkCmdDecompressMemoryNV; +#define vkCmdDecompressMemoryNV glad_vkCmdDecompressMemoryNV +GLAD_API_CALL PFN_vkCmdDispatch glad_vkCmdDispatch; +#define vkCmdDispatch glad_vkCmdDispatch +GLAD_API_CALL PFN_vkCmdDispatchBase glad_vkCmdDispatchBase; +#define vkCmdDispatchBase glad_vkCmdDispatchBase +GLAD_API_CALL PFN_vkCmdDispatchBaseKHR glad_vkCmdDispatchBaseKHR; +#define vkCmdDispatchBaseKHR glad_vkCmdDispatchBaseKHR +GLAD_API_CALL PFN_vkCmdDispatchDataGraphARM glad_vkCmdDispatchDataGraphARM; +#define vkCmdDispatchDataGraphARM glad_vkCmdDispatchDataGraphARM +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkCmdDispatchGraphAMDX glad_vkCmdDispatchGraphAMDX; +#define vkCmdDispatchGraphAMDX glad_vkCmdDispatchGraphAMDX + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkCmdDispatchGraphIndirectAMDX glad_vkCmdDispatchGraphIndirectAMDX; +#define vkCmdDispatchGraphIndirectAMDX glad_vkCmdDispatchGraphIndirectAMDX + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkCmdDispatchGraphIndirectCountAMDX glad_vkCmdDispatchGraphIndirectCountAMDX; +#define vkCmdDispatchGraphIndirectCountAMDX glad_vkCmdDispatchGraphIndirectCountAMDX + +#endif +GLAD_API_CALL PFN_vkCmdDispatchIndirect glad_vkCmdDispatchIndirect; +#define vkCmdDispatchIndirect glad_vkCmdDispatchIndirect +GLAD_API_CALL PFN_vkCmdDispatchTileQCOM glad_vkCmdDispatchTileQCOM; +#define vkCmdDispatchTileQCOM glad_vkCmdDispatchTileQCOM +GLAD_API_CALL PFN_vkCmdDraw glad_vkCmdDraw; +#define vkCmdDraw glad_vkCmdDraw +GLAD_API_CALL PFN_vkCmdDrawClusterHUAWEI glad_vkCmdDrawClusterHUAWEI; +#define vkCmdDrawClusterHUAWEI glad_vkCmdDrawClusterHUAWEI +GLAD_API_CALL PFN_vkCmdDrawClusterIndirectHUAWEI glad_vkCmdDrawClusterIndirectHUAWEI; +#define vkCmdDrawClusterIndirectHUAWEI glad_vkCmdDrawClusterIndirectHUAWEI +GLAD_API_CALL PFN_vkCmdDrawIndexed glad_vkCmdDrawIndexed; +#define vkCmdDrawIndexed glad_vkCmdDrawIndexed +GLAD_API_CALL PFN_vkCmdDrawIndexedIndirect glad_vkCmdDrawIndexedIndirect; +#define vkCmdDrawIndexedIndirect glad_vkCmdDrawIndexedIndirect +GLAD_API_CALL PFN_vkCmdDrawIndexedIndirectCount glad_vkCmdDrawIndexedIndirectCount; +#define vkCmdDrawIndexedIndirectCount glad_vkCmdDrawIndexedIndirectCount +GLAD_API_CALL PFN_vkCmdDrawIndexedIndirectCountAMD glad_vkCmdDrawIndexedIndirectCountAMD; +#define vkCmdDrawIndexedIndirectCountAMD glad_vkCmdDrawIndexedIndirectCountAMD +GLAD_API_CALL PFN_vkCmdDrawIndexedIndirectCountKHR glad_vkCmdDrawIndexedIndirectCountKHR; +#define vkCmdDrawIndexedIndirectCountKHR glad_vkCmdDrawIndexedIndirectCountKHR +GLAD_API_CALL PFN_vkCmdDrawIndirect glad_vkCmdDrawIndirect; +#define vkCmdDrawIndirect glad_vkCmdDrawIndirect +GLAD_API_CALL PFN_vkCmdDrawIndirectByteCountEXT glad_vkCmdDrawIndirectByteCountEXT; +#define vkCmdDrawIndirectByteCountEXT glad_vkCmdDrawIndirectByteCountEXT +GLAD_API_CALL PFN_vkCmdDrawIndirectCount glad_vkCmdDrawIndirectCount; +#define vkCmdDrawIndirectCount glad_vkCmdDrawIndirectCount +GLAD_API_CALL PFN_vkCmdDrawIndirectCountAMD glad_vkCmdDrawIndirectCountAMD; +#define vkCmdDrawIndirectCountAMD glad_vkCmdDrawIndirectCountAMD +GLAD_API_CALL PFN_vkCmdDrawIndirectCountKHR glad_vkCmdDrawIndirectCountKHR; +#define vkCmdDrawIndirectCountKHR glad_vkCmdDrawIndirectCountKHR +GLAD_API_CALL PFN_vkCmdDrawMeshTasksEXT glad_vkCmdDrawMeshTasksEXT; +#define vkCmdDrawMeshTasksEXT glad_vkCmdDrawMeshTasksEXT +GLAD_API_CALL PFN_vkCmdDrawMeshTasksIndirectCountEXT glad_vkCmdDrawMeshTasksIndirectCountEXT; +#define vkCmdDrawMeshTasksIndirectCountEXT glad_vkCmdDrawMeshTasksIndirectCountEXT +GLAD_API_CALL PFN_vkCmdDrawMeshTasksIndirectCountNV glad_vkCmdDrawMeshTasksIndirectCountNV; +#define vkCmdDrawMeshTasksIndirectCountNV glad_vkCmdDrawMeshTasksIndirectCountNV +GLAD_API_CALL PFN_vkCmdDrawMeshTasksIndirectEXT glad_vkCmdDrawMeshTasksIndirectEXT; +#define vkCmdDrawMeshTasksIndirectEXT glad_vkCmdDrawMeshTasksIndirectEXT +GLAD_API_CALL PFN_vkCmdDrawMeshTasksIndirectNV glad_vkCmdDrawMeshTasksIndirectNV; +#define vkCmdDrawMeshTasksIndirectNV glad_vkCmdDrawMeshTasksIndirectNV +GLAD_API_CALL PFN_vkCmdDrawMeshTasksNV glad_vkCmdDrawMeshTasksNV; +#define vkCmdDrawMeshTasksNV glad_vkCmdDrawMeshTasksNV +GLAD_API_CALL PFN_vkCmdDrawMultiEXT glad_vkCmdDrawMultiEXT; +#define vkCmdDrawMultiEXT glad_vkCmdDrawMultiEXT +GLAD_API_CALL PFN_vkCmdDrawMultiIndexedEXT glad_vkCmdDrawMultiIndexedEXT; +#define vkCmdDrawMultiIndexedEXT glad_vkCmdDrawMultiIndexedEXT +GLAD_API_CALL PFN_vkCmdEncodeVideoKHR glad_vkCmdEncodeVideoKHR; +#define vkCmdEncodeVideoKHR glad_vkCmdEncodeVideoKHR +GLAD_API_CALL PFN_vkCmdEndConditionalRenderingEXT glad_vkCmdEndConditionalRenderingEXT; +#define vkCmdEndConditionalRenderingEXT glad_vkCmdEndConditionalRenderingEXT +GLAD_API_CALL PFN_vkCmdEndDebugUtilsLabelEXT glad_vkCmdEndDebugUtilsLabelEXT; +#define vkCmdEndDebugUtilsLabelEXT glad_vkCmdEndDebugUtilsLabelEXT +GLAD_API_CALL PFN_vkCmdEndPerTileExecutionQCOM glad_vkCmdEndPerTileExecutionQCOM; +#define vkCmdEndPerTileExecutionQCOM glad_vkCmdEndPerTileExecutionQCOM +GLAD_API_CALL PFN_vkCmdEndQuery glad_vkCmdEndQuery; +#define vkCmdEndQuery glad_vkCmdEndQuery +GLAD_API_CALL PFN_vkCmdEndQueryIndexedEXT glad_vkCmdEndQueryIndexedEXT; +#define vkCmdEndQueryIndexedEXT glad_vkCmdEndQueryIndexedEXT +GLAD_API_CALL PFN_vkCmdEndRenderPass glad_vkCmdEndRenderPass; +#define vkCmdEndRenderPass glad_vkCmdEndRenderPass +GLAD_API_CALL PFN_vkCmdEndRenderPass2 glad_vkCmdEndRenderPass2; +#define vkCmdEndRenderPass2 glad_vkCmdEndRenderPass2 +GLAD_API_CALL PFN_vkCmdEndRenderPass2KHR glad_vkCmdEndRenderPass2KHR; +#define vkCmdEndRenderPass2KHR glad_vkCmdEndRenderPass2KHR +GLAD_API_CALL PFN_vkCmdEndRendering glad_vkCmdEndRendering; +#define vkCmdEndRendering glad_vkCmdEndRendering +GLAD_API_CALL PFN_vkCmdEndRendering2EXT glad_vkCmdEndRendering2EXT; +#define vkCmdEndRendering2EXT glad_vkCmdEndRendering2EXT +GLAD_API_CALL PFN_vkCmdEndRenderingKHR glad_vkCmdEndRenderingKHR; +#define vkCmdEndRenderingKHR glad_vkCmdEndRenderingKHR +GLAD_API_CALL PFN_vkCmdEndTransformFeedbackEXT glad_vkCmdEndTransformFeedbackEXT; +#define vkCmdEndTransformFeedbackEXT glad_vkCmdEndTransformFeedbackEXT +GLAD_API_CALL PFN_vkCmdEndVideoCodingKHR glad_vkCmdEndVideoCodingKHR; +#define vkCmdEndVideoCodingKHR glad_vkCmdEndVideoCodingKHR +GLAD_API_CALL PFN_vkCmdExecuteCommands glad_vkCmdExecuteCommands; +#define vkCmdExecuteCommands glad_vkCmdExecuteCommands +GLAD_API_CALL PFN_vkCmdExecuteGeneratedCommandsEXT glad_vkCmdExecuteGeneratedCommandsEXT; +#define vkCmdExecuteGeneratedCommandsEXT glad_vkCmdExecuteGeneratedCommandsEXT +GLAD_API_CALL PFN_vkCmdExecuteGeneratedCommandsNV glad_vkCmdExecuteGeneratedCommandsNV; +#define vkCmdExecuteGeneratedCommandsNV glad_vkCmdExecuteGeneratedCommandsNV +GLAD_API_CALL PFN_vkCmdFillBuffer glad_vkCmdFillBuffer; +#define vkCmdFillBuffer glad_vkCmdFillBuffer +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkCmdInitializeGraphScratchMemoryAMDX glad_vkCmdInitializeGraphScratchMemoryAMDX; +#define vkCmdInitializeGraphScratchMemoryAMDX glad_vkCmdInitializeGraphScratchMemoryAMDX + +#endif +GLAD_API_CALL PFN_vkCmdInsertDebugUtilsLabelEXT glad_vkCmdInsertDebugUtilsLabelEXT; +#define vkCmdInsertDebugUtilsLabelEXT glad_vkCmdInsertDebugUtilsLabelEXT +GLAD_API_CALL PFN_vkCmdNextSubpass glad_vkCmdNextSubpass; +#define vkCmdNextSubpass glad_vkCmdNextSubpass +GLAD_API_CALL PFN_vkCmdNextSubpass2 glad_vkCmdNextSubpass2; +#define vkCmdNextSubpass2 glad_vkCmdNextSubpass2 +GLAD_API_CALL PFN_vkCmdNextSubpass2KHR glad_vkCmdNextSubpass2KHR; +#define vkCmdNextSubpass2KHR glad_vkCmdNextSubpass2KHR +GLAD_API_CALL PFN_vkCmdOpticalFlowExecuteNV glad_vkCmdOpticalFlowExecuteNV; +#define vkCmdOpticalFlowExecuteNV glad_vkCmdOpticalFlowExecuteNV +GLAD_API_CALL PFN_vkCmdPipelineBarrier glad_vkCmdPipelineBarrier; +#define vkCmdPipelineBarrier glad_vkCmdPipelineBarrier +GLAD_API_CALL PFN_vkCmdPipelineBarrier2 glad_vkCmdPipelineBarrier2; +#define vkCmdPipelineBarrier2 glad_vkCmdPipelineBarrier2 +GLAD_API_CALL PFN_vkCmdPipelineBarrier2KHR glad_vkCmdPipelineBarrier2KHR; +#define vkCmdPipelineBarrier2KHR glad_vkCmdPipelineBarrier2KHR +GLAD_API_CALL PFN_vkCmdPreprocessGeneratedCommandsEXT glad_vkCmdPreprocessGeneratedCommandsEXT; +#define vkCmdPreprocessGeneratedCommandsEXT glad_vkCmdPreprocessGeneratedCommandsEXT +GLAD_API_CALL PFN_vkCmdPreprocessGeneratedCommandsNV glad_vkCmdPreprocessGeneratedCommandsNV; +#define vkCmdPreprocessGeneratedCommandsNV glad_vkCmdPreprocessGeneratedCommandsNV +GLAD_API_CALL PFN_vkCmdPushConstants glad_vkCmdPushConstants; +#define vkCmdPushConstants glad_vkCmdPushConstants +GLAD_API_CALL PFN_vkCmdPushConstants2 glad_vkCmdPushConstants2; +#define vkCmdPushConstants2 glad_vkCmdPushConstants2 +GLAD_API_CALL PFN_vkCmdPushConstants2KHR glad_vkCmdPushConstants2KHR; +#define vkCmdPushConstants2KHR glad_vkCmdPushConstants2KHR +GLAD_API_CALL PFN_vkCmdPushDescriptorSet glad_vkCmdPushDescriptorSet; +#define vkCmdPushDescriptorSet glad_vkCmdPushDescriptorSet +GLAD_API_CALL PFN_vkCmdPushDescriptorSet2 glad_vkCmdPushDescriptorSet2; +#define vkCmdPushDescriptorSet2 glad_vkCmdPushDescriptorSet2 +GLAD_API_CALL PFN_vkCmdPushDescriptorSet2KHR glad_vkCmdPushDescriptorSet2KHR; +#define vkCmdPushDescriptorSet2KHR glad_vkCmdPushDescriptorSet2KHR +GLAD_API_CALL PFN_vkCmdPushDescriptorSetKHR glad_vkCmdPushDescriptorSetKHR; +#define vkCmdPushDescriptorSetKHR glad_vkCmdPushDescriptorSetKHR +GLAD_API_CALL PFN_vkCmdPushDescriptorSetWithTemplate glad_vkCmdPushDescriptorSetWithTemplate; +#define vkCmdPushDescriptorSetWithTemplate glad_vkCmdPushDescriptorSetWithTemplate +GLAD_API_CALL PFN_vkCmdPushDescriptorSetWithTemplate2 glad_vkCmdPushDescriptorSetWithTemplate2; +#define vkCmdPushDescriptorSetWithTemplate2 glad_vkCmdPushDescriptorSetWithTemplate2 +GLAD_API_CALL PFN_vkCmdPushDescriptorSetWithTemplate2KHR glad_vkCmdPushDescriptorSetWithTemplate2KHR; +#define vkCmdPushDescriptorSetWithTemplate2KHR glad_vkCmdPushDescriptorSetWithTemplate2KHR +GLAD_API_CALL PFN_vkCmdPushDescriptorSetWithTemplateKHR glad_vkCmdPushDescriptorSetWithTemplateKHR; +#define vkCmdPushDescriptorSetWithTemplateKHR glad_vkCmdPushDescriptorSetWithTemplateKHR +GLAD_API_CALL PFN_vkCmdResetEvent glad_vkCmdResetEvent; +#define vkCmdResetEvent glad_vkCmdResetEvent +GLAD_API_CALL PFN_vkCmdResetEvent2 glad_vkCmdResetEvent2; +#define vkCmdResetEvent2 glad_vkCmdResetEvent2 +GLAD_API_CALL PFN_vkCmdResetEvent2KHR glad_vkCmdResetEvent2KHR; +#define vkCmdResetEvent2KHR glad_vkCmdResetEvent2KHR +GLAD_API_CALL PFN_vkCmdResetQueryPool glad_vkCmdResetQueryPool; +#define vkCmdResetQueryPool glad_vkCmdResetQueryPool +GLAD_API_CALL PFN_vkCmdResolveImage glad_vkCmdResolveImage; +#define vkCmdResolveImage glad_vkCmdResolveImage +GLAD_API_CALL PFN_vkCmdResolveImage2 glad_vkCmdResolveImage2; +#define vkCmdResolveImage2 glad_vkCmdResolveImage2 +GLAD_API_CALL PFN_vkCmdResolveImage2KHR glad_vkCmdResolveImage2KHR; +#define vkCmdResolveImage2KHR glad_vkCmdResolveImage2KHR +GLAD_API_CALL PFN_vkCmdSetAlphaToCoverageEnableEXT glad_vkCmdSetAlphaToCoverageEnableEXT; +#define vkCmdSetAlphaToCoverageEnableEXT glad_vkCmdSetAlphaToCoverageEnableEXT +GLAD_API_CALL PFN_vkCmdSetAlphaToOneEnableEXT glad_vkCmdSetAlphaToOneEnableEXT; +#define vkCmdSetAlphaToOneEnableEXT glad_vkCmdSetAlphaToOneEnableEXT +GLAD_API_CALL PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT glad_vkCmdSetAttachmentFeedbackLoopEnableEXT; +#define vkCmdSetAttachmentFeedbackLoopEnableEXT glad_vkCmdSetAttachmentFeedbackLoopEnableEXT +GLAD_API_CALL PFN_vkCmdSetBlendConstants glad_vkCmdSetBlendConstants; +#define vkCmdSetBlendConstants glad_vkCmdSetBlendConstants +GLAD_API_CALL PFN_vkCmdSetCheckpointNV glad_vkCmdSetCheckpointNV; +#define vkCmdSetCheckpointNV glad_vkCmdSetCheckpointNV +GLAD_API_CALL PFN_vkCmdSetCoarseSampleOrderNV glad_vkCmdSetCoarseSampleOrderNV; +#define vkCmdSetCoarseSampleOrderNV glad_vkCmdSetCoarseSampleOrderNV +GLAD_API_CALL PFN_vkCmdSetColorBlendAdvancedEXT glad_vkCmdSetColorBlendAdvancedEXT; +#define vkCmdSetColorBlendAdvancedEXT glad_vkCmdSetColorBlendAdvancedEXT +GLAD_API_CALL PFN_vkCmdSetColorBlendEnableEXT glad_vkCmdSetColorBlendEnableEXT; +#define vkCmdSetColorBlendEnableEXT glad_vkCmdSetColorBlendEnableEXT +GLAD_API_CALL PFN_vkCmdSetColorBlendEquationEXT glad_vkCmdSetColorBlendEquationEXT; +#define vkCmdSetColorBlendEquationEXT glad_vkCmdSetColorBlendEquationEXT +GLAD_API_CALL PFN_vkCmdSetColorWriteEnableEXT glad_vkCmdSetColorWriteEnableEXT; +#define vkCmdSetColorWriteEnableEXT glad_vkCmdSetColorWriteEnableEXT +GLAD_API_CALL PFN_vkCmdSetColorWriteMaskEXT glad_vkCmdSetColorWriteMaskEXT; +#define vkCmdSetColorWriteMaskEXT glad_vkCmdSetColorWriteMaskEXT +GLAD_API_CALL PFN_vkCmdSetConservativeRasterizationModeEXT glad_vkCmdSetConservativeRasterizationModeEXT; +#define vkCmdSetConservativeRasterizationModeEXT glad_vkCmdSetConservativeRasterizationModeEXT +GLAD_API_CALL PFN_vkCmdSetCoverageModulationModeNV glad_vkCmdSetCoverageModulationModeNV; +#define vkCmdSetCoverageModulationModeNV glad_vkCmdSetCoverageModulationModeNV +GLAD_API_CALL PFN_vkCmdSetCoverageModulationTableEnableNV glad_vkCmdSetCoverageModulationTableEnableNV; +#define vkCmdSetCoverageModulationTableEnableNV glad_vkCmdSetCoverageModulationTableEnableNV +GLAD_API_CALL PFN_vkCmdSetCoverageModulationTableNV glad_vkCmdSetCoverageModulationTableNV; +#define vkCmdSetCoverageModulationTableNV glad_vkCmdSetCoverageModulationTableNV +GLAD_API_CALL PFN_vkCmdSetCoverageReductionModeNV glad_vkCmdSetCoverageReductionModeNV; +#define vkCmdSetCoverageReductionModeNV glad_vkCmdSetCoverageReductionModeNV +GLAD_API_CALL PFN_vkCmdSetCoverageToColorEnableNV glad_vkCmdSetCoverageToColorEnableNV; +#define vkCmdSetCoverageToColorEnableNV glad_vkCmdSetCoverageToColorEnableNV +GLAD_API_CALL PFN_vkCmdSetCoverageToColorLocationNV glad_vkCmdSetCoverageToColorLocationNV; +#define vkCmdSetCoverageToColorLocationNV glad_vkCmdSetCoverageToColorLocationNV +GLAD_API_CALL PFN_vkCmdSetCullMode glad_vkCmdSetCullMode; +#define vkCmdSetCullMode glad_vkCmdSetCullMode +GLAD_API_CALL PFN_vkCmdSetCullModeEXT glad_vkCmdSetCullModeEXT; +#define vkCmdSetCullModeEXT glad_vkCmdSetCullModeEXT +GLAD_API_CALL PFN_vkCmdSetDepthBias glad_vkCmdSetDepthBias; +#define vkCmdSetDepthBias glad_vkCmdSetDepthBias +GLAD_API_CALL PFN_vkCmdSetDepthBias2EXT glad_vkCmdSetDepthBias2EXT; +#define vkCmdSetDepthBias2EXT glad_vkCmdSetDepthBias2EXT +GLAD_API_CALL PFN_vkCmdSetDepthBiasEnable glad_vkCmdSetDepthBiasEnable; +#define vkCmdSetDepthBiasEnable glad_vkCmdSetDepthBiasEnable +GLAD_API_CALL PFN_vkCmdSetDepthBiasEnableEXT glad_vkCmdSetDepthBiasEnableEXT; +#define vkCmdSetDepthBiasEnableEXT glad_vkCmdSetDepthBiasEnableEXT +GLAD_API_CALL PFN_vkCmdSetDepthBounds glad_vkCmdSetDepthBounds; +#define vkCmdSetDepthBounds glad_vkCmdSetDepthBounds +GLAD_API_CALL PFN_vkCmdSetDepthBoundsTestEnable glad_vkCmdSetDepthBoundsTestEnable; +#define vkCmdSetDepthBoundsTestEnable glad_vkCmdSetDepthBoundsTestEnable +GLAD_API_CALL PFN_vkCmdSetDepthBoundsTestEnableEXT glad_vkCmdSetDepthBoundsTestEnableEXT; +#define vkCmdSetDepthBoundsTestEnableEXT glad_vkCmdSetDepthBoundsTestEnableEXT +GLAD_API_CALL PFN_vkCmdSetDepthClampEnableEXT glad_vkCmdSetDepthClampEnableEXT; +#define vkCmdSetDepthClampEnableEXT glad_vkCmdSetDepthClampEnableEXT +GLAD_API_CALL PFN_vkCmdSetDepthClampRangeEXT glad_vkCmdSetDepthClampRangeEXT; +#define vkCmdSetDepthClampRangeEXT glad_vkCmdSetDepthClampRangeEXT +GLAD_API_CALL PFN_vkCmdSetDepthClipEnableEXT glad_vkCmdSetDepthClipEnableEXT; +#define vkCmdSetDepthClipEnableEXT glad_vkCmdSetDepthClipEnableEXT +GLAD_API_CALL PFN_vkCmdSetDepthClipNegativeOneToOneEXT glad_vkCmdSetDepthClipNegativeOneToOneEXT; +#define vkCmdSetDepthClipNegativeOneToOneEXT glad_vkCmdSetDepthClipNegativeOneToOneEXT +GLAD_API_CALL PFN_vkCmdSetDepthCompareOp glad_vkCmdSetDepthCompareOp; +#define vkCmdSetDepthCompareOp glad_vkCmdSetDepthCompareOp +GLAD_API_CALL PFN_vkCmdSetDepthCompareOpEXT glad_vkCmdSetDepthCompareOpEXT; +#define vkCmdSetDepthCompareOpEXT glad_vkCmdSetDepthCompareOpEXT +GLAD_API_CALL PFN_vkCmdSetDepthTestEnable glad_vkCmdSetDepthTestEnable; +#define vkCmdSetDepthTestEnable glad_vkCmdSetDepthTestEnable +GLAD_API_CALL PFN_vkCmdSetDepthTestEnableEXT glad_vkCmdSetDepthTestEnableEXT; +#define vkCmdSetDepthTestEnableEXT glad_vkCmdSetDepthTestEnableEXT +GLAD_API_CALL PFN_vkCmdSetDepthWriteEnable glad_vkCmdSetDepthWriteEnable; +#define vkCmdSetDepthWriteEnable glad_vkCmdSetDepthWriteEnable +GLAD_API_CALL PFN_vkCmdSetDepthWriteEnableEXT glad_vkCmdSetDepthWriteEnableEXT; +#define vkCmdSetDepthWriteEnableEXT glad_vkCmdSetDepthWriteEnableEXT +GLAD_API_CALL PFN_vkCmdSetDescriptorBufferOffsets2EXT glad_vkCmdSetDescriptorBufferOffsets2EXT; +#define vkCmdSetDescriptorBufferOffsets2EXT glad_vkCmdSetDescriptorBufferOffsets2EXT +GLAD_API_CALL PFN_vkCmdSetDescriptorBufferOffsetsEXT glad_vkCmdSetDescriptorBufferOffsetsEXT; +#define vkCmdSetDescriptorBufferOffsetsEXT glad_vkCmdSetDescriptorBufferOffsetsEXT +GLAD_API_CALL PFN_vkCmdSetDeviceMask glad_vkCmdSetDeviceMask; +#define vkCmdSetDeviceMask glad_vkCmdSetDeviceMask +GLAD_API_CALL PFN_vkCmdSetDeviceMaskKHR glad_vkCmdSetDeviceMaskKHR; +#define vkCmdSetDeviceMaskKHR glad_vkCmdSetDeviceMaskKHR +GLAD_API_CALL PFN_vkCmdSetDiscardRectangleEXT glad_vkCmdSetDiscardRectangleEXT; +#define vkCmdSetDiscardRectangleEXT glad_vkCmdSetDiscardRectangleEXT +GLAD_API_CALL PFN_vkCmdSetDiscardRectangleEnableEXT glad_vkCmdSetDiscardRectangleEnableEXT; +#define vkCmdSetDiscardRectangleEnableEXT glad_vkCmdSetDiscardRectangleEnableEXT +GLAD_API_CALL PFN_vkCmdSetDiscardRectangleModeEXT glad_vkCmdSetDiscardRectangleModeEXT; +#define vkCmdSetDiscardRectangleModeEXT glad_vkCmdSetDiscardRectangleModeEXT +GLAD_API_CALL PFN_vkCmdSetEvent glad_vkCmdSetEvent; +#define vkCmdSetEvent glad_vkCmdSetEvent +GLAD_API_CALL PFN_vkCmdSetEvent2 glad_vkCmdSetEvent2; +#define vkCmdSetEvent2 glad_vkCmdSetEvent2 +GLAD_API_CALL PFN_vkCmdSetEvent2KHR glad_vkCmdSetEvent2KHR; +#define vkCmdSetEvent2KHR glad_vkCmdSetEvent2KHR +GLAD_API_CALL PFN_vkCmdSetExclusiveScissorEnableNV glad_vkCmdSetExclusiveScissorEnableNV; +#define vkCmdSetExclusiveScissorEnableNV glad_vkCmdSetExclusiveScissorEnableNV +GLAD_API_CALL PFN_vkCmdSetExclusiveScissorNV glad_vkCmdSetExclusiveScissorNV; +#define vkCmdSetExclusiveScissorNV glad_vkCmdSetExclusiveScissorNV +GLAD_API_CALL PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT glad_vkCmdSetExtraPrimitiveOverestimationSizeEXT; +#define vkCmdSetExtraPrimitiveOverestimationSizeEXT glad_vkCmdSetExtraPrimitiveOverestimationSizeEXT +GLAD_API_CALL PFN_vkCmdSetFragmentShadingRateEnumNV glad_vkCmdSetFragmentShadingRateEnumNV; +#define vkCmdSetFragmentShadingRateEnumNV glad_vkCmdSetFragmentShadingRateEnumNV +GLAD_API_CALL PFN_vkCmdSetFragmentShadingRateKHR glad_vkCmdSetFragmentShadingRateKHR; +#define vkCmdSetFragmentShadingRateKHR glad_vkCmdSetFragmentShadingRateKHR +GLAD_API_CALL PFN_vkCmdSetFrontFace glad_vkCmdSetFrontFace; +#define vkCmdSetFrontFace glad_vkCmdSetFrontFace +GLAD_API_CALL PFN_vkCmdSetFrontFaceEXT glad_vkCmdSetFrontFaceEXT; +#define vkCmdSetFrontFaceEXT glad_vkCmdSetFrontFaceEXT +GLAD_API_CALL PFN_vkCmdSetLineRasterizationModeEXT glad_vkCmdSetLineRasterizationModeEXT; +#define vkCmdSetLineRasterizationModeEXT glad_vkCmdSetLineRasterizationModeEXT +GLAD_API_CALL PFN_vkCmdSetLineStipple glad_vkCmdSetLineStipple; +#define vkCmdSetLineStipple glad_vkCmdSetLineStipple +GLAD_API_CALL PFN_vkCmdSetLineStippleEXT glad_vkCmdSetLineStippleEXT; +#define vkCmdSetLineStippleEXT glad_vkCmdSetLineStippleEXT +GLAD_API_CALL PFN_vkCmdSetLineStippleEnableEXT glad_vkCmdSetLineStippleEnableEXT; +#define vkCmdSetLineStippleEnableEXT glad_vkCmdSetLineStippleEnableEXT +GLAD_API_CALL PFN_vkCmdSetLineStippleKHR glad_vkCmdSetLineStippleKHR; +#define vkCmdSetLineStippleKHR glad_vkCmdSetLineStippleKHR +GLAD_API_CALL PFN_vkCmdSetLineWidth glad_vkCmdSetLineWidth; +#define vkCmdSetLineWidth glad_vkCmdSetLineWidth +GLAD_API_CALL PFN_vkCmdSetLogicOpEXT glad_vkCmdSetLogicOpEXT; +#define vkCmdSetLogicOpEXT glad_vkCmdSetLogicOpEXT +GLAD_API_CALL PFN_vkCmdSetLogicOpEnableEXT glad_vkCmdSetLogicOpEnableEXT; +#define vkCmdSetLogicOpEnableEXT glad_vkCmdSetLogicOpEnableEXT +GLAD_API_CALL PFN_vkCmdSetPatchControlPointsEXT glad_vkCmdSetPatchControlPointsEXT; +#define vkCmdSetPatchControlPointsEXT glad_vkCmdSetPatchControlPointsEXT +GLAD_API_CALL PFN_vkCmdSetPerformanceMarkerINTEL glad_vkCmdSetPerformanceMarkerINTEL; +#define vkCmdSetPerformanceMarkerINTEL glad_vkCmdSetPerformanceMarkerINTEL +GLAD_API_CALL PFN_vkCmdSetPerformanceOverrideINTEL glad_vkCmdSetPerformanceOverrideINTEL; +#define vkCmdSetPerformanceOverrideINTEL glad_vkCmdSetPerformanceOverrideINTEL +GLAD_API_CALL PFN_vkCmdSetPerformanceStreamMarkerINTEL glad_vkCmdSetPerformanceStreamMarkerINTEL; +#define vkCmdSetPerformanceStreamMarkerINTEL glad_vkCmdSetPerformanceStreamMarkerINTEL +GLAD_API_CALL PFN_vkCmdSetPolygonModeEXT glad_vkCmdSetPolygonModeEXT; +#define vkCmdSetPolygonModeEXT glad_vkCmdSetPolygonModeEXT +GLAD_API_CALL PFN_vkCmdSetPrimitiveRestartEnable glad_vkCmdSetPrimitiveRestartEnable; +#define vkCmdSetPrimitiveRestartEnable glad_vkCmdSetPrimitiveRestartEnable +GLAD_API_CALL PFN_vkCmdSetPrimitiveRestartEnableEXT glad_vkCmdSetPrimitiveRestartEnableEXT; +#define vkCmdSetPrimitiveRestartEnableEXT glad_vkCmdSetPrimitiveRestartEnableEXT +GLAD_API_CALL PFN_vkCmdSetPrimitiveTopology glad_vkCmdSetPrimitiveTopology; +#define vkCmdSetPrimitiveTopology glad_vkCmdSetPrimitiveTopology +GLAD_API_CALL PFN_vkCmdSetPrimitiveTopologyEXT glad_vkCmdSetPrimitiveTopologyEXT; +#define vkCmdSetPrimitiveTopologyEXT glad_vkCmdSetPrimitiveTopologyEXT +GLAD_API_CALL PFN_vkCmdSetProvokingVertexModeEXT glad_vkCmdSetProvokingVertexModeEXT; +#define vkCmdSetProvokingVertexModeEXT glad_vkCmdSetProvokingVertexModeEXT +GLAD_API_CALL PFN_vkCmdSetRasterizationSamplesEXT glad_vkCmdSetRasterizationSamplesEXT; +#define vkCmdSetRasterizationSamplesEXT glad_vkCmdSetRasterizationSamplesEXT +GLAD_API_CALL PFN_vkCmdSetRasterizationStreamEXT glad_vkCmdSetRasterizationStreamEXT; +#define vkCmdSetRasterizationStreamEXT glad_vkCmdSetRasterizationStreamEXT +GLAD_API_CALL PFN_vkCmdSetRasterizerDiscardEnable glad_vkCmdSetRasterizerDiscardEnable; +#define vkCmdSetRasterizerDiscardEnable glad_vkCmdSetRasterizerDiscardEnable +GLAD_API_CALL PFN_vkCmdSetRasterizerDiscardEnableEXT glad_vkCmdSetRasterizerDiscardEnableEXT; +#define vkCmdSetRasterizerDiscardEnableEXT glad_vkCmdSetRasterizerDiscardEnableEXT +GLAD_API_CALL PFN_vkCmdSetRayTracingPipelineStackSizeKHR glad_vkCmdSetRayTracingPipelineStackSizeKHR; +#define vkCmdSetRayTracingPipelineStackSizeKHR glad_vkCmdSetRayTracingPipelineStackSizeKHR +GLAD_API_CALL PFN_vkCmdSetRenderingAttachmentLocations glad_vkCmdSetRenderingAttachmentLocations; +#define vkCmdSetRenderingAttachmentLocations glad_vkCmdSetRenderingAttachmentLocations +GLAD_API_CALL PFN_vkCmdSetRenderingAttachmentLocationsKHR glad_vkCmdSetRenderingAttachmentLocationsKHR; +#define vkCmdSetRenderingAttachmentLocationsKHR glad_vkCmdSetRenderingAttachmentLocationsKHR +GLAD_API_CALL PFN_vkCmdSetRenderingInputAttachmentIndices glad_vkCmdSetRenderingInputAttachmentIndices; +#define vkCmdSetRenderingInputAttachmentIndices glad_vkCmdSetRenderingInputAttachmentIndices +GLAD_API_CALL PFN_vkCmdSetRenderingInputAttachmentIndicesKHR glad_vkCmdSetRenderingInputAttachmentIndicesKHR; +#define vkCmdSetRenderingInputAttachmentIndicesKHR glad_vkCmdSetRenderingInputAttachmentIndicesKHR +GLAD_API_CALL PFN_vkCmdSetRepresentativeFragmentTestEnableNV glad_vkCmdSetRepresentativeFragmentTestEnableNV; +#define vkCmdSetRepresentativeFragmentTestEnableNV glad_vkCmdSetRepresentativeFragmentTestEnableNV +GLAD_API_CALL PFN_vkCmdSetSampleLocationsEXT glad_vkCmdSetSampleLocationsEXT; +#define vkCmdSetSampleLocationsEXT glad_vkCmdSetSampleLocationsEXT +GLAD_API_CALL PFN_vkCmdSetSampleLocationsEnableEXT glad_vkCmdSetSampleLocationsEnableEXT; +#define vkCmdSetSampleLocationsEnableEXT glad_vkCmdSetSampleLocationsEnableEXT +GLAD_API_CALL PFN_vkCmdSetSampleMaskEXT glad_vkCmdSetSampleMaskEXT; +#define vkCmdSetSampleMaskEXT glad_vkCmdSetSampleMaskEXT +GLAD_API_CALL PFN_vkCmdSetScissor glad_vkCmdSetScissor; +#define vkCmdSetScissor glad_vkCmdSetScissor +GLAD_API_CALL PFN_vkCmdSetScissorWithCount glad_vkCmdSetScissorWithCount; +#define vkCmdSetScissorWithCount glad_vkCmdSetScissorWithCount +GLAD_API_CALL PFN_vkCmdSetScissorWithCountEXT glad_vkCmdSetScissorWithCountEXT; +#define vkCmdSetScissorWithCountEXT glad_vkCmdSetScissorWithCountEXT +GLAD_API_CALL PFN_vkCmdSetShadingRateImageEnableNV glad_vkCmdSetShadingRateImageEnableNV; +#define vkCmdSetShadingRateImageEnableNV glad_vkCmdSetShadingRateImageEnableNV +GLAD_API_CALL PFN_vkCmdSetStencilCompareMask glad_vkCmdSetStencilCompareMask; +#define vkCmdSetStencilCompareMask glad_vkCmdSetStencilCompareMask +GLAD_API_CALL PFN_vkCmdSetStencilOp glad_vkCmdSetStencilOp; +#define vkCmdSetStencilOp glad_vkCmdSetStencilOp +GLAD_API_CALL PFN_vkCmdSetStencilOpEXT glad_vkCmdSetStencilOpEXT; +#define vkCmdSetStencilOpEXT glad_vkCmdSetStencilOpEXT +GLAD_API_CALL PFN_vkCmdSetStencilReference glad_vkCmdSetStencilReference; +#define vkCmdSetStencilReference glad_vkCmdSetStencilReference +GLAD_API_CALL PFN_vkCmdSetStencilTestEnable glad_vkCmdSetStencilTestEnable; +#define vkCmdSetStencilTestEnable glad_vkCmdSetStencilTestEnable +GLAD_API_CALL PFN_vkCmdSetStencilTestEnableEXT glad_vkCmdSetStencilTestEnableEXT; +#define vkCmdSetStencilTestEnableEXT glad_vkCmdSetStencilTestEnableEXT +GLAD_API_CALL PFN_vkCmdSetStencilWriteMask glad_vkCmdSetStencilWriteMask; +#define vkCmdSetStencilWriteMask glad_vkCmdSetStencilWriteMask +GLAD_API_CALL PFN_vkCmdSetTessellationDomainOriginEXT glad_vkCmdSetTessellationDomainOriginEXT; +#define vkCmdSetTessellationDomainOriginEXT glad_vkCmdSetTessellationDomainOriginEXT +GLAD_API_CALL PFN_vkCmdSetVertexInputEXT glad_vkCmdSetVertexInputEXT; +#define vkCmdSetVertexInputEXT glad_vkCmdSetVertexInputEXT +GLAD_API_CALL PFN_vkCmdSetViewport glad_vkCmdSetViewport; +#define vkCmdSetViewport glad_vkCmdSetViewport +GLAD_API_CALL PFN_vkCmdSetViewportShadingRatePaletteNV glad_vkCmdSetViewportShadingRatePaletteNV; +#define vkCmdSetViewportShadingRatePaletteNV glad_vkCmdSetViewportShadingRatePaletteNV +GLAD_API_CALL PFN_vkCmdSetViewportSwizzleNV glad_vkCmdSetViewportSwizzleNV; +#define vkCmdSetViewportSwizzleNV glad_vkCmdSetViewportSwizzleNV +GLAD_API_CALL PFN_vkCmdSetViewportWScalingEnableNV glad_vkCmdSetViewportWScalingEnableNV; +#define vkCmdSetViewportWScalingEnableNV glad_vkCmdSetViewportWScalingEnableNV +GLAD_API_CALL PFN_vkCmdSetViewportWScalingNV glad_vkCmdSetViewportWScalingNV; +#define vkCmdSetViewportWScalingNV glad_vkCmdSetViewportWScalingNV +GLAD_API_CALL PFN_vkCmdSetViewportWithCount glad_vkCmdSetViewportWithCount; +#define vkCmdSetViewportWithCount glad_vkCmdSetViewportWithCount +GLAD_API_CALL PFN_vkCmdSetViewportWithCountEXT glad_vkCmdSetViewportWithCountEXT; +#define vkCmdSetViewportWithCountEXT glad_vkCmdSetViewportWithCountEXT +GLAD_API_CALL PFN_vkCmdSubpassShadingHUAWEI glad_vkCmdSubpassShadingHUAWEI; +#define vkCmdSubpassShadingHUAWEI glad_vkCmdSubpassShadingHUAWEI +GLAD_API_CALL PFN_vkCmdTraceRaysIndirect2KHR glad_vkCmdTraceRaysIndirect2KHR; +#define vkCmdTraceRaysIndirect2KHR glad_vkCmdTraceRaysIndirect2KHR +GLAD_API_CALL PFN_vkCmdTraceRaysIndirectKHR glad_vkCmdTraceRaysIndirectKHR; +#define vkCmdTraceRaysIndirectKHR glad_vkCmdTraceRaysIndirectKHR +GLAD_API_CALL PFN_vkCmdTraceRaysKHR glad_vkCmdTraceRaysKHR; +#define vkCmdTraceRaysKHR glad_vkCmdTraceRaysKHR +GLAD_API_CALL PFN_vkCmdTraceRaysNV glad_vkCmdTraceRaysNV; +#define vkCmdTraceRaysNV glad_vkCmdTraceRaysNV +GLAD_API_CALL PFN_vkCmdUpdateBuffer glad_vkCmdUpdateBuffer; +#define vkCmdUpdateBuffer glad_vkCmdUpdateBuffer +GLAD_API_CALL PFN_vkCmdUpdatePipelineIndirectBufferNV glad_vkCmdUpdatePipelineIndirectBufferNV; +#define vkCmdUpdatePipelineIndirectBufferNV glad_vkCmdUpdatePipelineIndirectBufferNV +GLAD_API_CALL PFN_vkCmdWaitEvents glad_vkCmdWaitEvents; +#define vkCmdWaitEvents glad_vkCmdWaitEvents +GLAD_API_CALL PFN_vkCmdWaitEvents2 glad_vkCmdWaitEvents2; +#define vkCmdWaitEvents2 glad_vkCmdWaitEvents2 +GLAD_API_CALL PFN_vkCmdWaitEvents2KHR glad_vkCmdWaitEvents2KHR; +#define vkCmdWaitEvents2KHR glad_vkCmdWaitEvents2KHR +GLAD_API_CALL PFN_vkCmdWriteAccelerationStructuresPropertiesKHR glad_vkCmdWriteAccelerationStructuresPropertiesKHR; +#define vkCmdWriteAccelerationStructuresPropertiesKHR glad_vkCmdWriteAccelerationStructuresPropertiesKHR +GLAD_API_CALL PFN_vkCmdWriteAccelerationStructuresPropertiesNV glad_vkCmdWriteAccelerationStructuresPropertiesNV; +#define vkCmdWriteAccelerationStructuresPropertiesNV glad_vkCmdWriteAccelerationStructuresPropertiesNV +GLAD_API_CALL PFN_vkCmdWriteBufferMarker2AMD glad_vkCmdWriteBufferMarker2AMD; +#define vkCmdWriteBufferMarker2AMD glad_vkCmdWriteBufferMarker2AMD +GLAD_API_CALL PFN_vkCmdWriteBufferMarkerAMD glad_vkCmdWriteBufferMarkerAMD; +#define vkCmdWriteBufferMarkerAMD glad_vkCmdWriteBufferMarkerAMD +GLAD_API_CALL PFN_vkCmdWriteMicromapsPropertiesEXT glad_vkCmdWriteMicromapsPropertiesEXT; +#define vkCmdWriteMicromapsPropertiesEXT glad_vkCmdWriteMicromapsPropertiesEXT +GLAD_API_CALL PFN_vkCmdWriteTimestamp glad_vkCmdWriteTimestamp; +#define vkCmdWriteTimestamp glad_vkCmdWriteTimestamp +GLAD_API_CALL PFN_vkCmdWriteTimestamp2 glad_vkCmdWriteTimestamp2; +#define vkCmdWriteTimestamp2 glad_vkCmdWriteTimestamp2 +GLAD_API_CALL PFN_vkCmdWriteTimestamp2KHR glad_vkCmdWriteTimestamp2KHR; +#define vkCmdWriteTimestamp2KHR glad_vkCmdWriteTimestamp2KHR +GLAD_API_CALL PFN_vkCompileDeferredNV glad_vkCompileDeferredNV; +#define vkCompileDeferredNV glad_vkCompileDeferredNV +GLAD_API_CALL PFN_vkConvertCooperativeVectorMatrixNV glad_vkConvertCooperativeVectorMatrixNV; +#define vkConvertCooperativeVectorMatrixNV glad_vkConvertCooperativeVectorMatrixNV +GLAD_API_CALL PFN_vkCopyAccelerationStructureKHR glad_vkCopyAccelerationStructureKHR; +#define vkCopyAccelerationStructureKHR glad_vkCopyAccelerationStructureKHR +GLAD_API_CALL PFN_vkCopyAccelerationStructureToMemoryKHR glad_vkCopyAccelerationStructureToMemoryKHR; +#define vkCopyAccelerationStructureToMemoryKHR glad_vkCopyAccelerationStructureToMemoryKHR +GLAD_API_CALL PFN_vkCopyImageToImage glad_vkCopyImageToImage; +#define vkCopyImageToImage glad_vkCopyImageToImage +GLAD_API_CALL PFN_vkCopyImageToImageEXT glad_vkCopyImageToImageEXT; +#define vkCopyImageToImageEXT glad_vkCopyImageToImageEXT +GLAD_API_CALL PFN_vkCopyImageToMemory glad_vkCopyImageToMemory; +#define vkCopyImageToMemory glad_vkCopyImageToMemory +GLAD_API_CALL PFN_vkCopyImageToMemoryEXT glad_vkCopyImageToMemoryEXT; +#define vkCopyImageToMemoryEXT glad_vkCopyImageToMemoryEXT +GLAD_API_CALL PFN_vkCopyMemoryToAccelerationStructureKHR glad_vkCopyMemoryToAccelerationStructureKHR; +#define vkCopyMemoryToAccelerationStructureKHR glad_vkCopyMemoryToAccelerationStructureKHR +GLAD_API_CALL PFN_vkCopyMemoryToImage glad_vkCopyMemoryToImage; +#define vkCopyMemoryToImage glad_vkCopyMemoryToImage +GLAD_API_CALL PFN_vkCopyMemoryToImageEXT glad_vkCopyMemoryToImageEXT; +#define vkCopyMemoryToImageEXT glad_vkCopyMemoryToImageEXT +GLAD_API_CALL PFN_vkCopyMemoryToMicromapEXT glad_vkCopyMemoryToMicromapEXT; +#define vkCopyMemoryToMicromapEXT glad_vkCopyMemoryToMicromapEXT +GLAD_API_CALL PFN_vkCopyMicromapEXT glad_vkCopyMicromapEXT; +#define vkCopyMicromapEXT glad_vkCopyMicromapEXT +GLAD_API_CALL PFN_vkCopyMicromapToMemoryEXT glad_vkCopyMicromapToMemoryEXT; +#define vkCopyMicromapToMemoryEXT glad_vkCopyMicromapToMemoryEXT +GLAD_API_CALL PFN_vkCreateAccelerationStructureKHR glad_vkCreateAccelerationStructureKHR; +#define vkCreateAccelerationStructureKHR glad_vkCreateAccelerationStructureKHR +GLAD_API_CALL PFN_vkCreateAccelerationStructureNV glad_vkCreateAccelerationStructureNV; +#define vkCreateAccelerationStructureNV glad_vkCreateAccelerationStructureNV +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +GLAD_API_CALL PFN_vkCreateAndroidSurfaceKHR glad_vkCreateAndroidSurfaceKHR; +#define vkCreateAndroidSurfaceKHR glad_vkCreateAndroidSurfaceKHR + +#endif +GLAD_API_CALL PFN_vkCreateBuffer glad_vkCreateBuffer; +#define vkCreateBuffer glad_vkCreateBuffer +#if defined(VK_USE_PLATFORM_FUCHSIA) +GLAD_API_CALL PFN_vkCreateBufferCollectionFUCHSIA glad_vkCreateBufferCollectionFUCHSIA; +#define vkCreateBufferCollectionFUCHSIA glad_vkCreateBufferCollectionFUCHSIA + +#endif +GLAD_API_CALL PFN_vkCreateBufferView glad_vkCreateBufferView; +#define vkCreateBufferView glad_vkCreateBufferView +GLAD_API_CALL PFN_vkCreateCommandPool glad_vkCreateCommandPool; +#define vkCreateCommandPool glad_vkCreateCommandPool +GLAD_API_CALL PFN_vkCreateComputePipelines glad_vkCreateComputePipelines; +#define vkCreateComputePipelines glad_vkCreateComputePipelines +GLAD_API_CALL PFN_vkCreateCuFunctionNVX glad_vkCreateCuFunctionNVX; +#define vkCreateCuFunctionNVX glad_vkCreateCuFunctionNVX +GLAD_API_CALL PFN_vkCreateCuModuleNVX glad_vkCreateCuModuleNVX; +#define vkCreateCuModuleNVX glad_vkCreateCuModuleNVX +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkCreateCudaFunctionNV glad_vkCreateCudaFunctionNV; +#define vkCreateCudaFunctionNV glad_vkCreateCudaFunctionNV + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkCreateCudaModuleNV glad_vkCreateCudaModuleNV; +#define vkCreateCudaModuleNV glad_vkCreateCudaModuleNV + +#endif +GLAD_API_CALL PFN_vkCreateDataGraphPipelineSessionARM glad_vkCreateDataGraphPipelineSessionARM; +#define vkCreateDataGraphPipelineSessionARM glad_vkCreateDataGraphPipelineSessionARM +GLAD_API_CALL PFN_vkCreateDataGraphPipelinesARM glad_vkCreateDataGraphPipelinesARM; +#define vkCreateDataGraphPipelinesARM glad_vkCreateDataGraphPipelinesARM +GLAD_API_CALL PFN_vkCreateDebugReportCallbackEXT glad_vkCreateDebugReportCallbackEXT; +#define vkCreateDebugReportCallbackEXT glad_vkCreateDebugReportCallbackEXT +GLAD_API_CALL PFN_vkCreateDebugUtilsMessengerEXT glad_vkCreateDebugUtilsMessengerEXT; +#define vkCreateDebugUtilsMessengerEXT glad_vkCreateDebugUtilsMessengerEXT +GLAD_API_CALL PFN_vkCreateDeferredOperationKHR glad_vkCreateDeferredOperationKHR; +#define vkCreateDeferredOperationKHR glad_vkCreateDeferredOperationKHR +GLAD_API_CALL PFN_vkCreateDescriptorPool glad_vkCreateDescriptorPool; +#define vkCreateDescriptorPool glad_vkCreateDescriptorPool +GLAD_API_CALL PFN_vkCreateDescriptorSetLayout glad_vkCreateDescriptorSetLayout; +#define vkCreateDescriptorSetLayout glad_vkCreateDescriptorSetLayout +GLAD_API_CALL PFN_vkCreateDescriptorUpdateTemplate glad_vkCreateDescriptorUpdateTemplate; +#define vkCreateDescriptorUpdateTemplate glad_vkCreateDescriptorUpdateTemplate +GLAD_API_CALL PFN_vkCreateDescriptorUpdateTemplateKHR glad_vkCreateDescriptorUpdateTemplateKHR; +#define vkCreateDescriptorUpdateTemplateKHR glad_vkCreateDescriptorUpdateTemplateKHR +GLAD_API_CALL PFN_vkCreateDevice glad_vkCreateDevice; +#define vkCreateDevice glad_vkCreateDevice +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +GLAD_API_CALL PFN_vkCreateDirectFBSurfaceEXT glad_vkCreateDirectFBSurfaceEXT; +#define vkCreateDirectFBSurfaceEXT glad_vkCreateDirectFBSurfaceEXT + +#endif +GLAD_API_CALL PFN_vkCreateDisplayModeKHR glad_vkCreateDisplayModeKHR; +#define vkCreateDisplayModeKHR glad_vkCreateDisplayModeKHR +GLAD_API_CALL PFN_vkCreateDisplayPlaneSurfaceKHR glad_vkCreateDisplayPlaneSurfaceKHR; +#define vkCreateDisplayPlaneSurfaceKHR glad_vkCreateDisplayPlaneSurfaceKHR +GLAD_API_CALL PFN_vkCreateEvent glad_vkCreateEvent; +#define vkCreateEvent glad_vkCreateEvent +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkCreateExecutionGraphPipelinesAMDX glad_vkCreateExecutionGraphPipelinesAMDX; +#define vkCreateExecutionGraphPipelinesAMDX glad_vkCreateExecutionGraphPipelinesAMDX + +#endif +GLAD_API_CALL PFN_vkCreateExternalComputeQueueNV glad_vkCreateExternalComputeQueueNV; +#define vkCreateExternalComputeQueueNV glad_vkCreateExternalComputeQueueNV +GLAD_API_CALL PFN_vkCreateFence glad_vkCreateFence; +#define vkCreateFence glad_vkCreateFence +GLAD_API_CALL PFN_vkCreateFramebuffer glad_vkCreateFramebuffer; +#define vkCreateFramebuffer glad_vkCreateFramebuffer +GLAD_API_CALL PFN_vkCreateGraphicsPipelines glad_vkCreateGraphicsPipelines; +#define vkCreateGraphicsPipelines glad_vkCreateGraphicsPipelines +GLAD_API_CALL PFN_vkCreateHeadlessSurfaceEXT glad_vkCreateHeadlessSurfaceEXT; +#define vkCreateHeadlessSurfaceEXT glad_vkCreateHeadlessSurfaceEXT +#if defined(VK_USE_PLATFORM_IOS_MVK) +GLAD_API_CALL PFN_vkCreateIOSSurfaceMVK glad_vkCreateIOSSurfaceMVK; +#define vkCreateIOSSurfaceMVK glad_vkCreateIOSSurfaceMVK + +#endif +GLAD_API_CALL PFN_vkCreateImage glad_vkCreateImage; +#define vkCreateImage glad_vkCreateImage +#if defined(VK_USE_PLATFORM_FUCHSIA) +GLAD_API_CALL PFN_vkCreateImagePipeSurfaceFUCHSIA glad_vkCreateImagePipeSurfaceFUCHSIA; +#define vkCreateImagePipeSurfaceFUCHSIA glad_vkCreateImagePipeSurfaceFUCHSIA + +#endif +GLAD_API_CALL PFN_vkCreateImageView glad_vkCreateImageView; +#define vkCreateImageView glad_vkCreateImageView +GLAD_API_CALL PFN_vkCreateIndirectCommandsLayoutEXT glad_vkCreateIndirectCommandsLayoutEXT; +#define vkCreateIndirectCommandsLayoutEXT glad_vkCreateIndirectCommandsLayoutEXT +GLAD_API_CALL PFN_vkCreateIndirectCommandsLayoutNV glad_vkCreateIndirectCommandsLayoutNV; +#define vkCreateIndirectCommandsLayoutNV glad_vkCreateIndirectCommandsLayoutNV +GLAD_API_CALL PFN_vkCreateIndirectExecutionSetEXT glad_vkCreateIndirectExecutionSetEXT; +#define vkCreateIndirectExecutionSetEXT glad_vkCreateIndirectExecutionSetEXT +GLAD_API_CALL PFN_vkCreateInstance glad_vkCreateInstance; +#define vkCreateInstance glad_vkCreateInstance +#if defined(VK_USE_PLATFORM_MACOS_MVK) +GLAD_API_CALL PFN_vkCreateMacOSSurfaceMVK glad_vkCreateMacOSSurfaceMVK; +#define vkCreateMacOSSurfaceMVK glad_vkCreateMacOSSurfaceMVK + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +GLAD_API_CALL PFN_vkCreateMetalSurfaceEXT glad_vkCreateMetalSurfaceEXT; +#define vkCreateMetalSurfaceEXT glad_vkCreateMetalSurfaceEXT + +#endif +GLAD_API_CALL PFN_vkCreateMicromapEXT glad_vkCreateMicromapEXT; +#define vkCreateMicromapEXT glad_vkCreateMicromapEXT +GLAD_API_CALL PFN_vkCreateOpticalFlowSessionNV glad_vkCreateOpticalFlowSessionNV; +#define vkCreateOpticalFlowSessionNV glad_vkCreateOpticalFlowSessionNV +GLAD_API_CALL PFN_vkCreatePipelineBinariesKHR glad_vkCreatePipelineBinariesKHR; +#define vkCreatePipelineBinariesKHR glad_vkCreatePipelineBinariesKHR +GLAD_API_CALL PFN_vkCreatePipelineCache glad_vkCreatePipelineCache; +#define vkCreatePipelineCache glad_vkCreatePipelineCache +GLAD_API_CALL PFN_vkCreatePipelineLayout glad_vkCreatePipelineLayout; +#define vkCreatePipelineLayout glad_vkCreatePipelineLayout +GLAD_API_CALL PFN_vkCreatePrivateDataSlot glad_vkCreatePrivateDataSlot; +#define vkCreatePrivateDataSlot glad_vkCreatePrivateDataSlot +GLAD_API_CALL PFN_vkCreatePrivateDataSlotEXT glad_vkCreatePrivateDataSlotEXT; +#define vkCreatePrivateDataSlotEXT glad_vkCreatePrivateDataSlotEXT +GLAD_API_CALL PFN_vkCreateQueryPool glad_vkCreateQueryPool; +#define vkCreateQueryPool glad_vkCreateQueryPool +GLAD_API_CALL PFN_vkCreateRayTracingPipelinesKHR glad_vkCreateRayTracingPipelinesKHR; +#define vkCreateRayTracingPipelinesKHR glad_vkCreateRayTracingPipelinesKHR +GLAD_API_CALL PFN_vkCreateRayTracingPipelinesNV glad_vkCreateRayTracingPipelinesNV; +#define vkCreateRayTracingPipelinesNV glad_vkCreateRayTracingPipelinesNV +GLAD_API_CALL PFN_vkCreateRenderPass glad_vkCreateRenderPass; +#define vkCreateRenderPass glad_vkCreateRenderPass +GLAD_API_CALL PFN_vkCreateRenderPass2 glad_vkCreateRenderPass2; +#define vkCreateRenderPass2 glad_vkCreateRenderPass2 +GLAD_API_CALL PFN_vkCreateRenderPass2KHR glad_vkCreateRenderPass2KHR; +#define vkCreateRenderPass2KHR glad_vkCreateRenderPass2KHR +GLAD_API_CALL PFN_vkCreateSampler glad_vkCreateSampler; +#define vkCreateSampler glad_vkCreateSampler +GLAD_API_CALL PFN_vkCreateSamplerYcbcrConversion glad_vkCreateSamplerYcbcrConversion; +#define vkCreateSamplerYcbcrConversion glad_vkCreateSamplerYcbcrConversion +GLAD_API_CALL PFN_vkCreateSamplerYcbcrConversionKHR glad_vkCreateSamplerYcbcrConversionKHR; +#define vkCreateSamplerYcbcrConversionKHR glad_vkCreateSamplerYcbcrConversionKHR +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +GLAD_API_CALL PFN_vkCreateScreenSurfaceQNX glad_vkCreateScreenSurfaceQNX; +#define vkCreateScreenSurfaceQNX glad_vkCreateScreenSurfaceQNX + +#endif +GLAD_API_CALL PFN_vkCreateSemaphore glad_vkCreateSemaphore; +#define vkCreateSemaphore glad_vkCreateSemaphore +GLAD_API_CALL PFN_vkCreateShaderModule glad_vkCreateShaderModule; +#define vkCreateShaderModule glad_vkCreateShaderModule +GLAD_API_CALL PFN_vkCreateShadersEXT glad_vkCreateShadersEXT; +#define vkCreateShadersEXT glad_vkCreateShadersEXT +GLAD_API_CALL PFN_vkCreateSharedSwapchainsKHR glad_vkCreateSharedSwapchainsKHR; +#define vkCreateSharedSwapchainsKHR glad_vkCreateSharedSwapchainsKHR +#if defined(VK_USE_PLATFORM_GGP) +GLAD_API_CALL PFN_vkCreateStreamDescriptorSurfaceGGP glad_vkCreateStreamDescriptorSurfaceGGP; +#define vkCreateStreamDescriptorSurfaceGGP glad_vkCreateStreamDescriptorSurfaceGGP + +#endif +#if defined(VK_USE_PLATFORM_OHOS) +GLAD_API_CALL PFN_vkCreateSurfaceOHOS glad_vkCreateSurfaceOHOS; +#define vkCreateSurfaceOHOS glad_vkCreateSurfaceOHOS + +#endif +GLAD_API_CALL PFN_vkCreateSwapchainKHR glad_vkCreateSwapchainKHR; +#define vkCreateSwapchainKHR glad_vkCreateSwapchainKHR +GLAD_API_CALL PFN_vkCreateTensorARM glad_vkCreateTensorARM; +#define vkCreateTensorARM glad_vkCreateTensorARM +GLAD_API_CALL PFN_vkCreateTensorViewARM glad_vkCreateTensorViewARM; +#define vkCreateTensorViewARM glad_vkCreateTensorViewARM +GLAD_API_CALL PFN_vkCreateValidationCacheEXT glad_vkCreateValidationCacheEXT; +#define vkCreateValidationCacheEXT glad_vkCreateValidationCacheEXT +#if defined(VK_USE_PLATFORM_VI_NN) +GLAD_API_CALL PFN_vkCreateViSurfaceNN glad_vkCreateViSurfaceNN; +#define vkCreateViSurfaceNN glad_vkCreateViSurfaceNN + +#endif +GLAD_API_CALL PFN_vkCreateVideoSessionKHR glad_vkCreateVideoSessionKHR; +#define vkCreateVideoSessionKHR glad_vkCreateVideoSessionKHR +GLAD_API_CALL PFN_vkCreateVideoSessionParametersKHR glad_vkCreateVideoSessionParametersKHR; +#define vkCreateVideoSessionParametersKHR glad_vkCreateVideoSessionParametersKHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +GLAD_API_CALL PFN_vkCreateWaylandSurfaceKHR glad_vkCreateWaylandSurfaceKHR; +#define vkCreateWaylandSurfaceKHR glad_vkCreateWaylandSurfaceKHR + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkCreateWin32SurfaceKHR glad_vkCreateWin32SurfaceKHR; +#define vkCreateWin32SurfaceKHR glad_vkCreateWin32SurfaceKHR + +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) +GLAD_API_CALL PFN_vkCreateXcbSurfaceKHR glad_vkCreateXcbSurfaceKHR; +#define vkCreateXcbSurfaceKHR glad_vkCreateXcbSurfaceKHR + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +GLAD_API_CALL PFN_vkCreateXlibSurfaceKHR glad_vkCreateXlibSurfaceKHR; +#define vkCreateXlibSurfaceKHR glad_vkCreateXlibSurfaceKHR + +#endif +GLAD_API_CALL PFN_vkDebugMarkerSetObjectNameEXT glad_vkDebugMarkerSetObjectNameEXT; +#define vkDebugMarkerSetObjectNameEXT glad_vkDebugMarkerSetObjectNameEXT +GLAD_API_CALL PFN_vkDebugMarkerSetObjectTagEXT glad_vkDebugMarkerSetObjectTagEXT; +#define vkDebugMarkerSetObjectTagEXT glad_vkDebugMarkerSetObjectTagEXT +GLAD_API_CALL PFN_vkDebugReportMessageEXT glad_vkDebugReportMessageEXT; +#define vkDebugReportMessageEXT glad_vkDebugReportMessageEXT +GLAD_API_CALL PFN_vkDeferredOperationJoinKHR glad_vkDeferredOperationJoinKHR; +#define vkDeferredOperationJoinKHR glad_vkDeferredOperationJoinKHR +GLAD_API_CALL PFN_vkDestroyAccelerationStructureKHR glad_vkDestroyAccelerationStructureKHR; +#define vkDestroyAccelerationStructureKHR glad_vkDestroyAccelerationStructureKHR +GLAD_API_CALL PFN_vkDestroyAccelerationStructureNV glad_vkDestroyAccelerationStructureNV; +#define vkDestroyAccelerationStructureNV glad_vkDestroyAccelerationStructureNV +GLAD_API_CALL PFN_vkDestroyBuffer glad_vkDestroyBuffer; +#define vkDestroyBuffer glad_vkDestroyBuffer +#if defined(VK_USE_PLATFORM_FUCHSIA) +GLAD_API_CALL PFN_vkDestroyBufferCollectionFUCHSIA glad_vkDestroyBufferCollectionFUCHSIA; +#define vkDestroyBufferCollectionFUCHSIA glad_vkDestroyBufferCollectionFUCHSIA + +#endif +GLAD_API_CALL PFN_vkDestroyBufferView glad_vkDestroyBufferView; +#define vkDestroyBufferView glad_vkDestroyBufferView +GLAD_API_CALL PFN_vkDestroyCommandPool glad_vkDestroyCommandPool; +#define vkDestroyCommandPool glad_vkDestroyCommandPool +GLAD_API_CALL PFN_vkDestroyCuFunctionNVX glad_vkDestroyCuFunctionNVX; +#define vkDestroyCuFunctionNVX glad_vkDestroyCuFunctionNVX +GLAD_API_CALL PFN_vkDestroyCuModuleNVX glad_vkDestroyCuModuleNVX; +#define vkDestroyCuModuleNVX glad_vkDestroyCuModuleNVX +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkDestroyCudaFunctionNV glad_vkDestroyCudaFunctionNV; +#define vkDestroyCudaFunctionNV glad_vkDestroyCudaFunctionNV + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkDestroyCudaModuleNV glad_vkDestroyCudaModuleNV; +#define vkDestroyCudaModuleNV glad_vkDestroyCudaModuleNV + +#endif +GLAD_API_CALL PFN_vkDestroyDataGraphPipelineSessionARM glad_vkDestroyDataGraphPipelineSessionARM; +#define vkDestroyDataGraphPipelineSessionARM glad_vkDestroyDataGraphPipelineSessionARM +GLAD_API_CALL PFN_vkDestroyDebugReportCallbackEXT glad_vkDestroyDebugReportCallbackEXT; +#define vkDestroyDebugReportCallbackEXT glad_vkDestroyDebugReportCallbackEXT +GLAD_API_CALL PFN_vkDestroyDebugUtilsMessengerEXT glad_vkDestroyDebugUtilsMessengerEXT; +#define vkDestroyDebugUtilsMessengerEXT glad_vkDestroyDebugUtilsMessengerEXT +GLAD_API_CALL PFN_vkDestroyDeferredOperationKHR glad_vkDestroyDeferredOperationKHR; +#define vkDestroyDeferredOperationKHR glad_vkDestroyDeferredOperationKHR +GLAD_API_CALL PFN_vkDestroyDescriptorPool glad_vkDestroyDescriptorPool; +#define vkDestroyDescriptorPool glad_vkDestroyDescriptorPool +GLAD_API_CALL PFN_vkDestroyDescriptorSetLayout glad_vkDestroyDescriptorSetLayout; +#define vkDestroyDescriptorSetLayout glad_vkDestroyDescriptorSetLayout +GLAD_API_CALL PFN_vkDestroyDescriptorUpdateTemplate glad_vkDestroyDescriptorUpdateTemplate; +#define vkDestroyDescriptorUpdateTemplate glad_vkDestroyDescriptorUpdateTemplate +GLAD_API_CALL PFN_vkDestroyDescriptorUpdateTemplateKHR glad_vkDestroyDescriptorUpdateTemplateKHR; +#define vkDestroyDescriptorUpdateTemplateKHR glad_vkDestroyDescriptorUpdateTemplateKHR +GLAD_API_CALL PFN_vkDestroyDevice glad_vkDestroyDevice; +#define vkDestroyDevice glad_vkDestroyDevice +GLAD_API_CALL PFN_vkDestroyEvent glad_vkDestroyEvent; +#define vkDestroyEvent glad_vkDestroyEvent +GLAD_API_CALL PFN_vkDestroyExternalComputeQueueNV glad_vkDestroyExternalComputeQueueNV; +#define vkDestroyExternalComputeQueueNV glad_vkDestroyExternalComputeQueueNV +GLAD_API_CALL PFN_vkDestroyFence glad_vkDestroyFence; +#define vkDestroyFence glad_vkDestroyFence +GLAD_API_CALL PFN_vkDestroyFramebuffer glad_vkDestroyFramebuffer; +#define vkDestroyFramebuffer glad_vkDestroyFramebuffer +GLAD_API_CALL PFN_vkDestroyImage glad_vkDestroyImage; +#define vkDestroyImage glad_vkDestroyImage +GLAD_API_CALL PFN_vkDestroyImageView glad_vkDestroyImageView; +#define vkDestroyImageView glad_vkDestroyImageView +GLAD_API_CALL PFN_vkDestroyIndirectCommandsLayoutEXT glad_vkDestroyIndirectCommandsLayoutEXT; +#define vkDestroyIndirectCommandsLayoutEXT glad_vkDestroyIndirectCommandsLayoutEXT +GLAD_API_CALL PFN_vkDestroyIndirectCommandsLayoutNV glad_vkDestroyIndirectCommandsLayoutNV; +#define vkDestroyIndirectCommandsLayoutNV glad_vkDestroyIndirectCommandsLayoutNV +GLAD_API_CALL PFN_vkDestroyIndirectExecutionSetEXT glad_vkDestroyIndirectExecutionSetEXT; +#define vkDestroyIndirectExecutionSetEXT glad_vkDestroyIndirectExecutionSetEXT +GLAD_API_CALL PFN_vkDestroyInstance glad_vkDestroyInstance; +#define vkDestroyInstance glad_vkDestroyInstance +GLAD_API_CALL PFN_vkDestroyMicromapEXT glad_vkDestroyMicromapEXT; +#define vkDestroyMicromapEXT glad_vkDestroyMicromapEXT +GLAD_API_CALL PFN_vkDestroyOpticalFlowSessionNV glad_vkDestroyOpticalFlowSessionNV; +#define vkDestroyOpticalFlowSessionNV glad_vkDestroyOpticalFlowSessionNV +GLAD_API_CALL PFN_vkDestroyPipeline glad_vkDestroyPipeline; +#define vkDestroyPipeline glad_vkDestroyPipeline +GLAD_API_CALL PFN_vkDestroyPipelineBinaryKHR glad_vkDestroyPipelineBinaryKHR; +#define vkDestroyPipelineBinaryKHR glad_vkDestroyPipelineBinaryKHR +GLAD_API_CALL PFN_vkDestroyPipelineCache glad_vkDestroyPipelineCache; +#define vkDestroyPipelineCache glad_vkDestroyPipelineCache +GLAD_API_CALL PFN_vkDestroyPipelineLayout glad_vkDestroyPipelineLayout; +#define vkDestroyPipelineLayout glad_vkDestroyPipelineLayout +GLAD_API_CALL PFN_vkDestroyPrivateDataSlot glad_vkDestroyPrivateDataSlot; +#define vkDestroyPrivateDataSlot glad_vkDestroyPrivateDataSlot +GLAD_API_CALL PFN_vkDestroyPrivateDataSlotEXT glad_vkDestroyPrivateDataSlotEXT; +#define vkDestroyPrivateDataSlotEXT glad_vkDestroyPrivateDataSlotEXT +GLAD_API_CALL PFN_vkDestroyQueryPool glad_vkDestroyQueryPool; +#define vkDestroyQueryPool glad_vkDestroyQueryPool +GLAD_API_CALL PFN_vkDestroyRenderPass glad_vkDestroyRenderPass; +#define vkDestroyRenderPass glad_vkDestroyRenderPass +GLAD_API_CALL PFN_vkDestroySampler glad_vkDestroySampler; +#define vkDestroySampler glad_vkDestroySampler +GLAD_API_CALL PFN_vkDestroySamplerYcbcrConversion glad_vkDestroySamplerYcbcrConversion; +#define vkDestroySamplerYcbcrConversion glad_vkDestroySamplerYcbcrConversion +GLAD_API_CALL PFN_vkDestroySamplerYcbcrConversionKHR glad_vkDestroySamplerYcbcrConversionKHR; +#define vkDestroySamplerYcbcrConversionKHR glad_vkDestroySamplerYcbcrConversionKHR +GLAD_API_CALL PFN_vkDestroySemaphore glad_vkDestroySemaphore; +#define vkDestroySemaphore glad_vkDestroySemaphore +GLAD_API_CALL PFN_vkDestroyShaderEXT glad_vkDestroyShaderEXT; +#define vkDestroyShaderEXT glad_vkDestroyShaderEXT +GLAD_API_CALL PFN_vkDestroyShaderModule glad_vkDestroyShaderModule; +#define vkDestroyShaderModule glad_vkDestroyShaderModule +GLAD_API_CALL PFN_vkDestroySurfaceKHR glad_vkDestroySurfaceKHR; +#define vkDestroySurfaceKHR glad_vkDestroySurfaceKHR +GLAD_API_CALL PFN_vkDestroySwapchainKHR glad_vkDestroySwapchainKHR; +#define vkDestroySwapchainKHR glad_vkDestroySwapchainKHR +GLAD_API_CALL PFN_vkDestroyTensorARM glad_vkDestroyTensorARM; +#define vkDestroyTensorARM glad_vkDestroyTensorARM +GLAD_API_CALL PFN_vkDestroyTensorViewARM glad_vkDestroyTensorViewARM; +#define vkDestroyTensorViewARM glad_vkDestroyTensorViewARM +GLAD_API_CALL PFN_vkDestroyValidationCacheEXT glad_vkDestroyValidationCacheEXT; +#define vkDestroyValidationCacheEXT glad_vkDestroyValidationCacheEXT +GLAD_API_CALL PFN_vkDestroyVideoSessionKHR glad_vkDestroyVideoSessionKHR; +#define vkDestroyVideoSessionKHR glad_vkDestroyVideoSessionKHR +GLAD_API_CALL PFN_vkDestroyVideoSessionParametersKHR glad_vkDestroyVideoSessionParametersKHR; +#define vkDestroyVideoSessionParametersKHR glad_vkDestroyVideoSessionParametersKHR +GLAD_API_CALL PFN_vkDeviceWaitIdle glad_vkDeviceWaitIdle; +#define vkDeviceWaitIdle glad_vkDeviceWaitIdle +GLAD_API_CALL PFN_vkDisplayPowerControlEXT glad_vkDisplayPowerControlEXT; +#define vkDisplayPowerControlEXT glad_vkDisplayPowerControlEXT +GLAD_API_CALL PFN_vkEndCommandBuffer glad_vkEndCommandBuffer; +#define vkEndCommandBuffer glad_vkEndCommandBuffer +GLAD_API_CALL PFN_vkEnumerateDeviceExtensionProperties glad_vkEnumerateDeviceExtensionProperties; +#define vkEnumerateDeviceExtensionProperties glad_vkEnumerateDeviceExtensionProperties +GLAD_API_CALL PFN_vkEnumerateDeviceLayerProperties glad_vkEnumerateDeviceLayerProperties; +#define vkEnumerateDeviceLayerProperties glad_vkEnumerateDeviceLayerProperties +GLAD_API_CALL PFN_vkEnumerateInstanceExtensionProperties glad_vkEnumerateInstanceExtensionProperties; +#define vkEnumerateInstanceExtensionProperties glad_vkEnumerateInstanceExtensionProperties +GLAD_API_CALL PFN_vkEnumerateInstanceLayerProperties glad_vkEnumerateInstanceLayerProperties; +#define vkEnumerateInstanceLayerProperties glad_vkEnumerateInstanceLayerProperties +GLAD_API_CALL PFN_vkEnumerateInstanceVersion glad_vkEnumerateInstanceVersion; +#define vkEnumerateInstanceVersion glad_vkEnumerateInstanceVersion +GLAD_API_CALL PFN_vkEnumeratePhysicalDeviceGroups glad_vkEnumeratePhysicalDeviceGroups; +#define vkEnumeratePhysicalDeviceGroups glad_vkEnumeratePhysicalDeviceGroups +GLAD_API_CALL PFN_vkEnumeratePhysicalDeviceGroupsKHR glad_vkEnumeratePhysicalDeviceGroupsKHR; +#define vkEnumeratePhysicalDeviceGroupsKHR glad_vkEnumeratePhysicalDeviceGroupsKHR +GLAD_API_CALL PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR glad_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR; +#define vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR glad_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR +GLAD_API_CALL PFN_vkEnumeratePhysicalDevices glad_vkEnumeratePhysicalDevices; +#define vkEnumeratePhysicalDevices glad_vkEnumeratePhysicalDevices +#if defined(VK_USE_PLATFORM_METAL_EXT) +GLAD_API_CALL PFN_vkExportMetalObjectsEXT glad_vkExportMetalObjectsEXT; +#define vkExportMetalObjectsEXT glad_vkExportMetalObjectsEXT + +#endif +GLAD_API_CALL PFN_vkFlushMappedMemoryRanges glad_vkFlushMappedMemoryRanges; +#define vkFlushMappedMemoryRanges glad_vkFlushMappedMemoryRanges +GLAD_API_CALL PFN_vkFreeCommandBuffers glad_vkFreeCommandBuffers; +#define vkFreeCommandBuffers glad_vkFreeCommandBuffers +GLAD_API_CALL PFN_vkFreeDescriptorSets glad_vkFreeDescriptorSets; +#define vkFreeDescriptorSets glad_vkFreeDescriptorSets +GLAD_API_CALL PFN_vkFreeMemory glad_vkFreeMemory; +#define vkFreeMemory glad_vkFreeMemory +GLAD_API_CALL PFN_vkGetAccelerationStructureBuildSizesKHR glad_vkGetAccelerationStructureBuildSizesKHR; +#define vkGetAccelerationStructureBuildSizesKHR glad_vkGetAccelerationStructureBuildSizesKHR +GLAD_API_CALL PFN_vkGetAccelerationStructureDeviceAddressKHR glad_vkGetAccelerationStructureDeviceAddressKHR; +#define vkGetAccelerationStructureDeviceAddressKHR glad_vkGetAccelerationStructureDeviceAddressKHR +GLAD_API_CALL PFN_vkGetAccelerationStructureHandleNV glad_vkGetAccelerationStructureHandleNV; +#define vkGetAccelerationStructureHandleNV glad_vkGetAccelerationStructureHandleNV +GLAD_API_CALL PFN_vkGetAccelerationStructureMemoryRequirementsNV glad_vkGetAccelerationStructureMemoryRequirementsNV; +#define vkGetAccelerationStructureMemoryRequirementsNV glad_vkGetAccelerationStructureMemoryRequirementsNV +GLAD_API_CALL PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT glad_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT; +#define vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT glad_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +GLAD_API_CALL PFN_vkGetAndroidHardwareBufferPropertiesANDROID glad_vkGetAndroidHardwareBufferPropertiesANDROID; +#define vkGetAndroidHardwareBufferPropertiesANDROID glad_vkGetAndroidHardwareBufferPropertiesANDROID + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +GLAD_API_CALL PFN_vkGetBufferCollectionPropertiesFUCHSIA glad_vkGetBufferCollectionPropertiesFUCHSIA; +#define vkGetBufferCollectionPropertiesFUCHSIA glad_vkGetBufferCollectionPropertiesFUCHSIA + +#endif +GLAD_API_CALL PFN_vkGetBufferDeviceAddress glad_vkGetBufferDeviceAddress; +#define vkGetBufferDeviceAddress glad_vkGetBufferDeviceAddress +GLAD_API_CALL PFN_vkGetBufferDeviceAddressEXT glad_vkGetBufferDeviceAddressEXT; +#define vkGetBufferDeviceAddressEXT glad_vkGetBufferDeviceAddressEXT +GLAD_API_CALL PFN_vkGetBufferDeviceAddressKHR glad_vkGetBufferDeviceAddressKHR; +#define vkGetBufferDeviceAddressKHR glad_vkGetBufferDeviceAddressKHR +GLAD_API_CALL PFN_vkGetBufferMemoryRequirements glad_vkGetBufferMemoryRequirements; +#define vkGetBufferMemoryRequirements glad_vkGetBufferMemoryRequirements +GLAD_API_CALL PFN_vkGetBufferMemoryRequirements2 glad_vkGetBufferMemoryRequirements2; +#define vkGetBufferMemoryRequirements2 glad_vkGetBufferMemoryRequirements2 +GLAD_API_CALL PFN_vkGetBufferMemoryRequirements2KHR glad_vkGetBufferMemoryRequirements2KHR; +#define vkGetBufferMemoryRequirements2KHR glad_vkGetBufferMemoryRequirements2KHR +GLAD_API_CALL PFN_vkGetBufferOpaqueCaptureAddress glad_vkGetBufferOpaqueCaptureAddress; +#define vkGetBufferOpaqueCaptureAddress glad_vkGetBufferOpaqueCaptureAddress +GLAD_API_CALL PFN_vkGetBufferOpaqueCaptureAddressKHR glad_vkGetBufferOpaqueCaptureAddressKHR; +#define vkGetBufferOpaqueCaptureAddressKHR glad_vkGetBufferOpaqueCaptureAddressKHR +GLAD_API_CALL PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT glad_vkGetBufferOpaqueCaptureDescriptorDataEXT; +#define vkGetBufferOpaqueCaptureDescriptorDataEXT glad_vkGetBufferOpaqueCaptureDescriptorDataEXT +GLAD_API_CALL PFN_vkGetCalibratedTimestampsEXT glad_vkGetCalibratedTimestampsEXT; +#define vkGetCalibratedTimestampsEXT glad_vkGetCalibratedTimestampsEXT +GLAD_API_CALL PFN_vkGetCalibratedTimestampsKHR glad_vkGetCalibratedTimestampsKHR; +#define vkGetCalibratedTimestampsKHR glad_vkGetCalibratedTimestampsKHR +GLAD_API_CALL PFN_vkGetClusterAccelerationStructureBuildSizesNV glad_vkGetClusterAccelerationStructureBuildSizesNV; +#define vkGetClusterAccelerationStructureBuildSizesNV glad_vkGetClusterAccelerationStructureBuildSizesNV +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkGetCudaModuleCacheNV glad_vkGetCudaModuleCacheNV; +#define vkGetCudaModuleCacheNV glad_vkGetCudaModuleCacheNV + +#endif +GLAD_API_CALL PFN_vkGetDataGraphPipelineAvailablePropertiesARM glad_vkGetDataGraphPipelineAvailablePropertiesARM; +#define vkGetDataGraphPipelineAvailablePropertiesARM glad_vkGetDataGraphPipelineAvailablePropertiesARM +GLAD_API_CALL PFN_vkGetDataGraphPipelinePropertiesARM glad_vkGetDataGraphPipelinePropertiesARM; +#define vkGetDataGraphPipelinePropertiesARM glad_vkGetDataGraphPipelinePropertiesARM +GLAD_API_CALL PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM glad_vkGetDataGraphPipelineSessionBindPointRequirementsARM; +#define vkGetDataGraphPipelineSessionBindPointRequirementsARM glad_vkGetDataGraphPipelineSessionBindPointRequirementsARM +GLAD_API_CALL PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM glad_vkGetDataGraphPipelineSessionMemoryRequirementsARM; +#define vkGetDataGraphPipelineSessionMemoryRequirementsARM glad_vkGetDataGraphPipelineSessionMemoryRequirementsARM +GLAD_API_CALL PFN_vkGetDeferredOperationMaxConcurrencyKHR glad_vkGetDeferredOperationMaxConcurrencyKHR; +#define vkGetDeferredOperationMaxConcurrencyKHR glad_vkGetDeferredOperationMaxConcurrencyKHR +GLAD_API_CALL PFN_vkGetDeferredOperationResultKHR glad_vkGetDeferredOperationResultKHR; +#define vkGetDeferredOperationResultKHR glad_vkGetDeferredOperationResultKHR +GLAD_API_CALL PFN_vkGetDescriptorEXT glad_vkGetDescriptorEXT; +#define vkGetDescriptorEXT glad_vkGetDescriptorEXT +GLAD_API_CALL PFN_vkGetDescriptorSetHostMappingVALVE glad_vkGetDescriptorSetHostMappingVALVE; +#define vkGetDescriptorSetHostMappingVALVE glad_vkGetDescriptorSetHostMappingVALVE +GLAD_API_CALL PFN_vkGetDescriptorSetLayoutBindingOffsetEXT glad_vkGetDescriptorSetLayoutBindingOffsetEXT; +#define vkGetDescriptorSetLayoutBindingOffsetEXT glad_vkGetDescriptorSetLayoutBindingOffsetEXT +GLAD_API_CALL PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE glad_vkGetDescriptorSetLayoutHostMappingInfoVALVE; +#define vkGetDescriptorSetLayoutHostMappingInfoVALVE glad_vkGetDescriptorSetLayoutHostMappingInfoVALVE +GLAD_API_CALL PFN_vkGetDescriptorSetLayoutSizeEXT glad_vkGetDescriptorSetLayoutSizeEXT; +#define vkGetDescriptorSetLayoutSizeEXT glad_vkGetDescriptorSetLayoutSizeEXT +GLAD_API_CALL PFN_vkGetDescriptorSetLayoutSupport glad_vkGetDescriptorSetLayoutSupport; +#define vkGetDescriptorSetLayoutSupport glad_vkGetDescriptorSetLayoutSupport +GLAD_API_CALL PFN_vkGetDescriptorSetLayoutSupportKHR glad_vkGetDescriptorSetLayoutSupportKHR; +#define vkGetDescriptorSetLayoutSupportKHR glad_vkGetDescriptorSetLayoutSupportKHR +GLAD_API_CALL PFN_vkGetDeviceAccelerationStructureCompatibilityKHR glad_vkGetDeviceAccelerationStructureCompatibilityKHR; +#define vkGetDeviceAccelerationStructureCompatibilityKHR glad_vkGetDeviceAccelerationStructureCompatibilityKHR +GLAD_API_CALL PFN_vkGetDeviceBufferMemoryRequirements glad_vkGetDeviceBufferMemoryRequirements; +#define vkGetDeviceBufferMemoryRequirements glad_vkGetDeviceBufferMemoryRequirements +GLAD_API_CALL PFN_vkGetDeviceBufferMemoryRequirementsKHR glad_vkGetDeviceBufferMemoryRequirementsKHR; +#define vkGetDeviceBufferMemoryRequirementsKHR glad_vkGetDeviceBufferMemoryRequirementsKHR +GLAD_API_CALL PFN_vkGetDeviceFaultInfoEXT glad_vkGetDeviceFaultInfoEXT; +#define vkGetDeviceFaultInfoEXT glad_vkGetDeviceFaultInfoEXT +GLAD_API_CALL PFN_vkGetDeviceGroupPeerMemoryFeatures glad_vkGetDeviceGroupPeerMemoryFeatures; +#define vkGetDeviceGroupPeerMemoryFeatures glad_vkGetDeviceGroupPeerMemoryFeatures +GLAD_API_CALL PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR glad_vkGetDeviceGroupPeerMemoryFeaturesKHR; +#define vkGetDeviceGroupPeerMemoryFeaturesKHR glad_vkGetDeviceGroupPeerMemoryFeaturesKHR +GLAD_API_CALL PFN_vkGetDeviceGroupPresentCapabilitiesKHR glad_vkGetDeviceGroupPresentCapabilitiesKHR; +#define vkGetDeviceGroupPresentCapabilitiesKHR glad_vkGetDeviceGroupPresentCapabilitiesKHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkGetDeviceGroupSurfacePresentModes2EXT glad_vkGetDeviceGroupSurfacePresentModes2EXT; +#define vkGetDeviceGroupSurfacePresentModes2EXT glad_vkGetDeviceGroupSurfacePresentModes2EXT + +#endif +GLAD_API_CALL PFN_vkGetDeviceGroupSurfacePresentModesKHR glad_vkGetDeviceGroupSurfacePresentModesKHR; +#define vkGetDeviceGroupSurfacePresentModesKHR glad_vkGetDeviceGroupSurfacePresentModesKHR +GLAD_API_CALL PFN_vkGetDeviceImageMemoryRequirements glad_vkGetDeviceImageMemoryRequirements; +#define vkGetDeviceImageMemoryRequirements glad_vkGetDeviceImageMemoryRequirements +GLAD_API_CALL PFN_vkGetDeviceImageMemoryRequirementsKHR glad_vkGetDeviceImageMemoryRequirementsKHR; +#define vkGetDeviceImageMemoryRequirementsKHR glad_vkGetDeviceImageMemoryRequirementsKHR +GLAD_API_CALL PFN_vkGetDeviceImageSparseMemoryRequirements glad_vkGetDeviceImageSparseMemoryRequirements; +#define vkGetDeviceImageSparseMemoryRequirements glad_vkGetDeviceImageSparseMemoryRequirements +GLAD_API_CALL PFN_vkGetDeviceImageSparseMemoryRequirementsKHR glad_vkGetDeviceImageSparseMemoryRequirementsKHR; +#define vkGetDeviceImageSparseMemoryRequirementsKHR glad_vkGetDeviceImageSparseMemoryRequirementsKHR +GLAD_API_CALL PFN_vkGetDeviceImageSubresourceLayout glad_vkGetDeviceImageSubresourceLayout; +#define vkGetDeviceImageSubresourceLayout glad_vkGetDeviceImageSubresourceLayout +GLAD_API_CALL PFN_vkGetDeviceImageSubresourceLayoutKHR glad_vkGetDeviceImageSubresourceLayoutKHR; +#define vkGetDeviceImageSubresourceLayoutKHR glad_vkGetDeviceImageSubresourceLayoutKHR +GLAD_API_CALL PFN_vkGetDeviceMemoryCommitment glad_vkGetDeviceMemoryCommitment; +#define vkGetDeviceMemoryCommitment glad_vkGetDeviceMemoryCommitment +GLAD_API_CALL PFN_vkGetDeviceMemoryOpaqueCaptureAddress glad_vkGetDeviceMemoryOpaqueCaptureAddress; +#define vkGetDeviceMemoryOpaqueCaptureAddress glad_vkGetDeviceMemoryOpaqueCaptureAddress +GLAD_API_CALL PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR glad_vkGetDeviceMemoryOpaqueCaptureAddressKHR; +#define vkGetDeviceMemoryOpaqueCaptureAddressKHR glad_vkGetDeviceMemoryOpaqueCaptureAddressKHR +GLAD_API_CALL PFN_vkGetDeviceMicromapCompatibilityEXT glad_vkGetDeviceMicromapCompatibilityEXT; +#define vkGetDeviceMicromapCompatibilityEXT glad_vkGetDeviceMicromapCompatibilityEXT +GLAD_API_CALL PFN_vkGetDeviceProcAddr glad_vkGetDeviceProcAddr; +#define vkGetDeviceProcAddr glad_vkGetDeviceProcAddr +GLAD_API_CALL PFN_vkGetDeviceQueue glad_vkGetDeviceQueue; +#define vkGetDeviceQueue glad_vkGetDeviceQueue +GLAD_API_CALL PFN_vkGetDeviceQueue2 glad_vkGetDeviceQueue2; +#define vkGetDeviceQueue2 glad_vkGetDeviceQueue2 +GLAD_API_CALL PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI glad_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI; +#define vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI glad_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI +GLAD_API_CALL PFN_vkGetDeviceTensorMemoryRequirementsARM glad_vkGetDeviceTensorMemoryRequirementsARM; +#define vkGetDeviceTensorMemoryRequirementsARM glad_vkGetDeviceTensorMemoryRequirementsARM +GLAD_API_CALL PFN_vkGetDisplayModeProperties2KHR glad_vkGetDisplayModeProperties2KHR; +#define vkGetDisplayModeProperties2KHR glad_vkGetDisplayModeProperties2KHR +GLAD_API_CALL PFN_vkGetDisplayModePropertiesKHR glad_vkGetDisplayModePropertiesKHR; +#define vkGetDisplayModePropertiesKHR glad_vkGetDisplayModePropertiesKHR +GLAD_API_CALL PFN_vkGetDisplayPlaneCapabilities2KHR glad_vkGetDisplayPlaneCapabilities2KHR; +#define vkGetDisplayPlaneCapabilities2KHR glad_vkGetDisplayPlaneCapabilities2KHR +GLAD_API_CALL PFN_vkGetDisplayPlaneCapabilitiesKHR glad_vkGetDisplayPlaneCapabilitiesKHR; +#define vkGetDisplayPlaneCapabilitiesKHR glad_vkGetDisplayPlaneCapabilitiesKHR +GLAD_API_CALL PFN_vkGetDisplayPlaneSupportedDisplaysKHR glad_vkGetDisplayPlaneSupportedDisplaysKHR; +#define vkGetDisplayPlaneSupportedDisplaysKHR glad_vkGetDisplayPlaneSupportedDisplaysKHR +GLAD_API_CALL PFN_vkGetDrmDisplayEXT glad_vkGetDrmDisplayEXT; +#define vkGetDrmDisplayEXT glad_vkGetDrmDisplayEXT +GLAD_API_CALL PFN_vkGetDynamicRenderingTilePropertiesQCOM glad_vkGetDynamicRenderingTilePropertiesQCOM; +#define vkGetDynamicRenderingTilePropertiesQCOM glad_vkGetDynamicRenderingTilePropertiesQCOM +GLAD_API_CALL PFN_vkGetEncodedVideoSessionParametersKHR glad_vkGetEncodedVideoSessionParametersKHR; +#define vkGetEncodedVideoSessionParametersKHR glad_vkGetEncodedVideoSessionParametersKHR +GLAD_API_CALL PFN_vkGetEventStatus glad_vkGetEventStatus; +#define vkGetEventStatus glad_vkGetEventStatus +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkGetExecutionGraphPipelineNodeIndexAMDX glad_vkGetExecutionGraphPipelineNodeIndexAMDX; +#define vkGetExecutionGraphPipelineNodeIndexAMDX glad_vkGetExecutionGraphPipelineNodeIndexAMDX + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +GLAD_API_CALL PFN_vkGetExecutionGraphPipelineScratchSizeAMDX glad_vkGetExecutionGraphPipelineScratchSizeAMDX; +#define vkGetExecutionGraphPipelineScratchSizeAMDX glad_vkGetExecutionGraphPipelineScratchSizeAMDX + +#endif +GLAD_API_CALL PFN_vkGetExternalComputeQueueDataNV glad_vkGetExternalComputeQueueDataNV; +#define vkGetExternalComputeQueueDataNV glad_vkGetExternalComputeQueueDataNV +GLAD_API_CALL PFN_vkGetFenceFdKHR glad_vkGetFenceFdKHR; +#define vkGetFenceFdKHR glad_vkGetFenceFdKHR +GLAD_API_CALL PFN_vkGetFenceStatus glad_vkGetFenceStatus; +#define vkGetFenceStatus glad_vkGetFenceStatus +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkGetFenceWin32HandleKHR glad_vkGetFenceWin32HandleKHR; +#define vkGetFenceWin32HandleKHR glad_vkGetFenceWin32HandleKHR + +#endif +GLAD_API_CALL PFN_vkGetFramebufferTilePropertiesQCOM glad_vkGetFramebufferTilePropertiesQCOM; +#define vkGetFramebufferTilePropertiesQCOM glad_vkGetFramebufferTilePropertiesQCOM +GLAD_API_CALL PFN_vkGetGeneratedCommandsMemoryRequirementsEXT glad_vkGetGeneratedCommandsMemoryRequirementsEXT; +#define vkGetGeneratedCommandsMemoryRequirementsEXT glad_vkGetGeneratedCommandsMemoryRequirementsEXT +GLAD_API_CALL PFN_vkGetGeneratedCommandsMemoryRequirementsNV glad_vkGetGeneratedCommandsMemoryRequirementsNV; +#define vkGetGeneratedCommandsMemoryRequirementsNV glad_vkGetGeneratedCommandsMemoryRequirementsNV +GLAD_API_CALL PFN_vkGetImageDrmFormatModifierPropertiesEXT glad_vkGetImageDrmFormatModifierPropertiesEXT; +#define vkGetImageDrmFormatModifierPropertiesEXT glad_vkGetImageDrmFormatModifierPropertiesEXT +GLAD_API_CALL PFN_vkGetImageMemoryRequirements glad_vkGetImageMemoryRequirements; +#define vkGetImageMemoryRequirements glad_vkGetImageMemoryRequirements +GLAD_API_CALL PFN_vkGetImageMemoryRequirements2 glad_vkGetImageMemoryRequirements2; +#define vkGetImageMemoryRequirements2 glad_vkGetImageMemoryRequirements2 +GLAD_API_CALL PFN_vkGetImageMemoryRequirements2KHR glad_vkGetImageMemoryRequirements2KHR; +#define vkGetImageMemoryRequirements2KHR glad_vkGetImageMemoryRequirements2KHR +GLAD_API_CALL PFN_vkGetImageOpaqueCaptureDescriptorDataEXT glad_vkGetImageOpaqueCaptureDescriptorDataEXT; +#define vkGetImageOpaqueCaptureDescriptorDataEXT glad_vkGetImageOpaqueCaptureDescriptorDataEXT +GLAD_API_CALL PFN_vkGetImageSparseMemoryRequirements glad_vkGetImageSparseMemoryRequirements; +#define vkGetImageSparseMemoryRequirements glad_vkGetImageSparseMemoryRequirements +GLAD_API_CALL PFN_vkGetImageSparseMemoryRequirements2 glad_vkGetImageSparseMemoryRequirements2; +#define vkGetImageSparseMemoryRequirements2 glad_vkGetImageSparseMemoryRequirements2 +GLAD_API_CALL PFN_vkGetImageSparseMemoryRequirements2KHR glad_vkGetImageSparseMemoryRequirements2KHR; +#define vkGetImageSparseMemoryRequirements2KHR glad_vkGetImageSparseMemoryRequirements2KHR +GLAD_API_CALL PFN_vkGetImageSubresourceLayout glad_vkGetImageSubresourceLayout; +#define vkGetImageSubresourceLayout glad_vkGetImageSubresourceLayout +GLAD_API_CALL PFN_vkGetImageSubresourceLayout2 glad_vkGetImageSubresourceLayout2; +#define vkGetImageSubresourceLayout2 glad_vkGetImageSubresourceLayout2 +GLAD_API_CALL PFN_vkGetImageSubresourceLayout2EXT glad_vkGetImageSubresourceLayout2EXT; +#define vkGetImageSubresourceLayout2EXT glad_vkGetImageSubresourceLayout2EXT +GLAD_API_CALL PFN_vkGetImageSubresourceLayout2KHR glad_vkGetImageSubresourceLayout2KHR; +#define vkGetImageSubresourceLayout2KHR glad_vkGetImageSubresourceLayout2KHR +GLAD_API_CALL PFN_vkGetImageViewAddressNVX glad_vkGetImageViewAddressNVX; +#define vkGetImageViewAddressNVX glad_vkGetImageViewAddressNVX +GLAD_API_CALL PFN_vkGetImageViewHandle64NVX glad_vkGetImageViewHandle64NVX; +#define vkGetImageViewHandle64NVX glad_vkGetImageViewHandle64NVX +GLAD_API_CALL PFN_vkGetImageViewHandleNVX glad_vkGetImageViewHandleNVX; +#define vkGetImageViewHandleNVX glad_vkGetImageViewHandleNVX +GLAD_API_CALL PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT glad_vkGetImageViewOpaqueCaptureDescriptorDataEXT; +#define vkGetImageViewOpaqueCaptureDescriptorDataEXT glad_vkGetImageViewOpaqueCaptureDescriptorDataEXT +GLAD_API_CALL PFN_vkGetInstanceProcAddr glad_vkGetInstanceProcAddr; +#define vkGetInstanceProcAddr glad_vkGetInstanceProcAddr +GLAD_API_CALL PFN_vkGetLatencyTimingsNV glad_vkGetLatencyTimingsNV; +#define vkGetLatencyTimingsNV glad_vkGetLatencyTimingsNV +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +GLAD_API_CALL PFN_vkGetMemoryAndroidHardwareBufferANDROID glad_vkGetMemoryAndroidHardwareBufferANDROID; +#define vkGetMemoryAndroidHardwareBufferANDROID glad_vkGetMemoryAndroidHardwareBufferANDROID + +#endif +GLAD_API_CALL PFN_vkGetMemoryFdKHR glad_vkGetMemoryFdKHR; +#define vkGetMemoryFdKHR glad_vkGetMemoryFdKHR +GLAD_API_CALL PFN_vkGetMemoryFdPropertiesKHR glad_vkGetMemoryFdPropertiesKHR; +#define vkGetMemoryFdPropertiesKHR glad_vkGetMemoryFdPropertiesKHR +GLAD_API_CALL PFN_vkGetMemoryHostPointerPropertiesEXT glad_vkGetMemoryHostPointerPropertiesEXT; +#define vkGetMemoryHostPointerPropertiesEXT glad_vkGetMemoryHostPointerPropertiesEXT +#if defined(VK_USE_PLATFORM_METAL_EXT) +GLAD_API_CALL PFN_vkGetMemoryMetalHandleEXT glad_vkGetMemoryMetalHandleEXT; +#define vkGetMemoryMetalHandleEXT glad_vkGetMemoryMetalHandleEXT + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +GLAD_API_CALL PFN_vkGetMemoryMetalHandlePropertiesEXT glad_vkGetMemoryMetalHandlePropertiesEXT; +#define vkGetMemoryMetalHandlePropertiesEXT glad_vkGetMemoryMetalHandlePropertiesEXT + +#endif +GLAD_API_CALL PFN_vkGetMemoryRemoteAddressNV glad_vkGetMemoryRemoteAddressNV; +#define vkGetMemoryRemoteAddressNV glad_vkGetMemoryRemoteAddressNV +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkGetMemoryWin32HandleKHR glad_vkGetMemoryWin32HandleKHR; +#define vkGetMemoryWin32HandleKHR glad_vkGetMemoryWin32HandleKHR + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkGetMemoryWin32HandleNV glad_vkGetMemoryWin32HandleNV; +#define vkGetMemoryWin32HandleNV glad_vkGetMemoryWin32HandleNV + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkGetMemoryWin32HandlePropertiesKHR glad_vkGetMemoryWin32HandlePropertiesKHR; +#define vkGetMemoryWin32HandlePropertiesKHR glad_vkGetMemoryWin32HandlePropertiesKHR + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +GLAD_API_CALL PFN_vkGetMemoryZirconHandleFUCHSIA glad_vkGetMemoryZirconHandleFUCHSIA; +#define vkGetMemoryZirconHandleFUCHSIA glad_vkGetMemoryZirconHandleFUCHSIA + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +GLAD_API_CALL PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA glad_vkGetMemoryZirconHandlePropertiesFUCHSIA; +#define vkGetMemoryZirconHandlePropertiesFUCHSIA glad_vkGetMemoryZirconHandlePropertiesFUCHSIA + +#endif +GLAD_API_CALL PFN_vkGetMicromapBuildSizesEXT glad_vkGetMicromapBuildSizesEXT; +#define vkGetMicromapBuildSizesEXT glad_vkGetMicromapBuildSizesEXT +GLAD_API_CALL PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV glad_vkGetPartitionedAccelerationStructuresBuildSizesNV; +#define vkGetPartitionedAccelerationStructuresBuildSizesNV glad_vkGetPartitionedAccelerationStructuresBuildSizesNV +GLAD_API_CALL PFN_vkGetPastPresentationTimingGOOGLE glad_vkGetPastPresentationTimingGOOGLE; +#define vkGetPastPresentationTimingGOOGLE glad_vkGetPastPresentationTimingGOOGLE +GLAD_API_CALL PFN_vkGetPerformanceParameterINTEL glad_vkGetPerformanceParameterINTEL; +#define vkGetPerformanceParameterINTEL glad_vkGetPerformanceParameterINTEL +GLAD_API_CALL PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT glad_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT; +#define vkGetPhysicalDeviceCalibrateableTimeDomainsEXT glad_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT +GLAD_API_CALL PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR glad_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR; +#define vkGetPhysicalDeviceCalibrateableTimeDomainsKHR glad_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV glad_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV; +#define vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV glad_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV +GLAD_API_CALL PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR glad_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR; +#define vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR glad_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV glad_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV; +#define vkGetPhysicalDeviceCooperativeMatrixPropertiesNV glad_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV +GLAD_API_CALL PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV glad_vkGetPhysicalDeviceCooperativeVectorPropertiesNV; +#define vkGetPhysicalDeviceCooperativeVectorPropertiesNV glad_vkGetPhysicalDeviceCooperativeVectorPropertiesNV +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +GLAD_API_CALL PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT glad_vkGetPhysicalDeviceDirectFBPresentationSupportEXT; +#define vkGetPhysicalDeviceDirectFBPresentationSupportEXT glad_vkGetPhysicalDeviceDirectFBPresentationSupportEXT + +#endif +GLAD_API_CALL PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR glad_vkGetPhysicalDeviceDisplayPlaneProperties2KHR; +#define vkGetPhysicalDeviceDisplayPlaneProperties2KHR glad_vkGetPhysicalDeviceDisplayPlaneProperties2KHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR glad_vkGetPhysicalDeviceDisplayPlanePropertiesKHR; +#define vkGetPhysicalDeviceDisplayPlanePropertiesKHR glad_vkGetPhysicalDeviceDisplayPlanePropertiesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceDisplayProperties2KHR glad_vkGetPhysicalDeviceDisplayProperties2KHR; +#define vkGetPhysicalDeviceDisplayProperties2KHR glad_vkGetPhysicalDeviceDisplayProperties2KHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceDisplayPropertiesKHR glad_vkGetPhysicalDeviceDisplayPropertiesKHR; +#define vkGetPhysicalDeviceDisplayPropertiesKHR glad_vkGetPhysicalDeviceDisplayPropertiesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceExternalBufferProperties glad_vkGetPhysicalDeviceExternalBufferProperties; +#define vkGetPhysicalDeviceExternalBufferProperties glad_vkGetPhysicalDeviceExternalBufferProperties +GLAD_API_CALL PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR glad_vkGetPhysicalDeviceExternalBufferPropertiesKHR; +#define vkGetPhysicalDeviceExternalBufferPropertiesKHR glad_vkGetPhysicalDeviceExternalBufferPropertiesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceExternalFenceProperties glad_vkGetPhysicalDeviceExternalFenceProperties; +#define vkGetPhysicalDeviceExternalFenceProperties glad_vkGetPhysicalDeviceExternalFenceProperties +GLAD_API_CALL PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR glad_vkGetPhysicalDeviceExternalFencePropertiesKHR; +#define vkGetPhysicalDeviceExternalFencePropertiesKHR glad_vkGetPhysicalDeviceExternalFencePropertiesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV glad_vkGetPhysicalDeviceExternalImageFormatPropertiesNV; +#define vkGetPhysicalDeviceExternalImageFormatPropertiesNV glad_vkGetPhysicalDeviceExternalImageFormatPropertiesNV +GLAD_API_CALL PFN_vkGetPhysicalDeviceExternalSemaphoreProperties glad_vkGetPhysicalDeviceExternalSemaphoreProperties; +#define vkGetPhysicalDeviceExternalSemaphoreProperties glad_vkGetPhysicalDeviceExternalSemaphoreProperties +GLAD_API_CALL PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR glad_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; +#define vkGetPhysicalDeviceExternalSemaphorePropertiesKHR glad_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM glad_vkGetPhysicalDeviceExternalTensorPropertiesARM; +#define vkGetPhysicalDeviceExternalTensorPropertiesARM glad_vkGetPhysicalDeviceExternalTensorPropertiesARM +GLAD_API_CALL PFN_vkGetPhysicalDeviceFeatures glad_vkGetPhysicalDeviceFeatures; +#define vkGetPhysicalDeviceFeatures glad_vkGetPhysicalDeviceFeatures +GLAD_API_CALL PFN_vkGetPhysicalDeviceFeatures2 glad_vkGetPhysicalDeviceFeatures2; +#define vkGetPhysicalDeviceFeatures2 glad_vkGetPhysicalDeviceFeatures2 +GLAD_API_CALL PFN_vkGetPhysicalDeviceFeatures2KHR glad_vkGetPhysicalDeviceFeatures2KHR; +#define vkGetPhysicalDeviceFeatures2KHR glad_vkGetPhysicalDeviceFeatures2KHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceFormatProperties glad_vkGetPhysicalDeviceFormatProperties; +#define vkGetPhysicalDeviceFormatProperties glad_vkGetPhysicalDeviceFormatProperties +GLAD_API_CALL PFN_vkGetPhysicalDeviceFormatProperties2 glad_vkGetPhysicalDeviceFormatProperties2; +#define vkGetPhysicalDeviceFormatProperties2 glad_vkGetPhysicalDeviceFormatProperties2 +GLAD_API_CALL PFN_vkGetPhysicalDeviceFormatProperties2KHR glad_vkGetPhysicalDeviceFormatProperties2KHR; +#define vkGetPhysicalDeviceFormatProperties2KHR glad_vkGetPhysicalDeviceFormatProperties2KHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR glad_vkGetPhysicalDeviceFragmentShadingRatesKHR; +#define vkGetPhysicalDeviceFragmentShadingRatesKHR glad_vkGetPhysicalDeviceFragmentShadingRatesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceImageFormatProperties glad_vkGetPhysicalDeviceImageFormatProperties; +#define vkGetPhysicalDeviceImageFormatProperties glad_vkGetPhysicalDeviceImageFormatProperties +GLAD_API_CALL PFN_vkGetPhysicalDeviceImageFormatProperties2 glad_vkGetPhysicalDeviceImageFormatProperties2; +#define vkGetPhysicalDeviceImageFormatProperties2 glad_vkGetPhysicalDeviceImageFormatProperties2 +GLAD_API_CALL PFN_vkGetPhysicalDeviceImageFormatProperties2KHR glad_vkGetPhysicalDeviceImageFormatProperties2KHR; +#define vkGetPhysicalDeviceImageFormatProperties2KHR glad_vkGetPhysicalDeviceImageFormatProperties2KHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceMemoryProperties glad_vkGetPhysicalDeviceMemoryProperties; +#define vkGetPhysicalDeviceMemoryProperties glad_vkGetPhysicalDeviceMemoryProperties +GLAD_API_CALL PFN_vkGetPhysicalDeviceMemoryProperties2 glad_vkGetPhysicalDeviceMemoryProperties2; +#define vkGetPhysicalDeviceMemoryProperties2 glad_vkGetPhysicalDeviceMemoryProperties2 +GLAD_API_CALL PFN_vkGetPhysicalDeviceMemoryProperties2KHR glad_vkGetPhysicalDeviceMemoryProperties2KHR; +#define vkGetPhysicalDeviceMemoryProperties2KHR glad_vkGetPhysicalDeviceMemoryProperties2KHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT glad_vkGetPhysicalDeviceMultisamplePropertiesEXT; +#define vkGetPhysicalDeviceMultisamplePropertiesEXT glad_vkGetPhysicalDeviceMultisamplePropertiesEXT +GLAD_API_CALL PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV glad_vkGetPhysicalDeviceOpticalFlowImageFormatsNV; +#define vkGetPhysicalDeviceOpticalFlowImageFormatsNV glad_vkGetPhysicalDeviceOpticalFlowImageFormatsNV +GLAD_API_CALL PFN_vkGetPhysicalDevicePresentRectanglesKHR glad_vkGetPhysicalDevicePresentRectanglesKHR; +#define vkGetPhysicalDevicePresentRectanglesKHR glad_vkGetPhysicalDevicePresentRectanglesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceProperties glad_vkGetPhysicalDeviceProperties; +#define vkGetPhysicalDeviceProperties glad_vkGetPhysicalDeviceProperties +GLAD_API_CALL PFN_vkGetPhysicalDeviceProperties2 glad_vkGetPhysicalDeviceProperties2; +#define vkGetPhysicalDeviceProperties2 glad_vkGetPhysicalDeviceProperties2 +GLAD_API_CALL PFN_vkGetPhysicalDeviceProperties2KHR glad_vkGetPhysicalDeviceProperties2KHR; +#define vkGetPhysicalDeviceProperties2KHR glad_vkGetPhysicalDeviceProperties2KHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM glad_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM; +#define vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM glad_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM +GLAD_API_CALL PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM glad_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM; +#define vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM glad_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM +GLAD_API_CALL PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR glad_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR; +#define vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR glad_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceQueueFamilyProperties glad_vkGetPhysicalDeviceQueueFamilyProperties; +#define vkGetPhysicalDeviceQueueFamilyProperties glad_vkGetPhysicalDeviceQueueFamilyProperties +GLAD_API_CALL PFN_vkGetPhysicalDeviceQueueFamilyProperties2 glad_vkGetPhysicalDeviceQueueFamilyProperties2; +#define vkGetPhysicalDeviceQueueFamilyProperties2 glad_vkGetPhysicalDeviceQueueFamilyProperties2 +GLAD_API_CALL PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR glad_vkGetPhysicalDeviceQueueFamilyProperties2KHR; +#define vkGetPhysicalDeviceQueueFamilyProperties2KHR glad_vkGetPhysicalDeviceQueueFamilyProperties2KHR +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +GLAD_API_CALL PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX glad_vkGetPhysicalDeviceScreenPresentationSupportQNX; +#define vkGetPhysicalDeviceScreenPresentationSupportQNX glad_vkGetPhysicalDeviceScreenPresentationSupportQNX + +#endif +GLAD_API_CALL PFN_vkGetPhysicalDeviceSparseImageFormatProperties glad_vkGetPhysicalDeviceSparseImageFormatProperties; +#define vkGetPhysicalDeviceSparseImageFormatProperties glad_vkGetPhysicalDeviceSparseImageFormatProperties +GLAD_API_CALL PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 glad_vkGetPhysicalDeviceSparseImageFormatProperties2; +#define vkGetPhysicalDeviceSparseImageFormatProperties2 glad_vkGetPhysicalDeviceSparseImageFormatProperties2 +GLAD_API_CALL PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR glad_vkGetPhysicalDeviceSparseImageFormatProperties2KHR; +#define vkGetPhysicalDeviceSparseImageFormatProperties2KHR glad_vkGetPhysicalDeviceSparseImageFormatProperties2KHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV glad_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV; +#define vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV glad_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV +GLAD_API_CALL PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT glad_vkGetPhysicalDeviceSurfaceCapabilities2EXT; +#define vkGetPhysicalDeviceSurfaceCapabilities2EXT glad_vkGetPhysicalDeviceSurfaceCapabilities2EXT +GLAD_API_CALL PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR glad_vkGetPhysicalDeviceSurfaceCapabilities2KHR; +#define vkGetPhysicalDeviceSurfaceCapabilities2KHR glad_vkGetPhysicalDeviceSurfaceCapabilities2KHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR glad_vkGetPhysicalDeviceSurfaceCapabilitiesKHR; +#define vkGetPhysicalDeviceSurfaceCapabilitiesKHR glad_vkGetPhysicalDeviceSurfaceCapabilitiesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceSurfaceFormats2KHR glad_vkGetPhysicalDeviceSurfaceFormats2KHR; +#define vkGetPhysicalDeviceSurfaceFormats2KHR glad_vkGetPhysicalDeviceSurfaceFormats2KHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceSurfaceFormatsKHR glad_vkGetPhysicalDeviceSurfaceFormatsKHR; +#define vkGetPhysicalDeviceSurfaceFormatsKHR glad_vkGetPhysicalDeviceSurfaceFormatsKHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT glad_vkGetPhysicalDeviceSurfacePresentModes2EXT; +#define vkGetPhysicalDeviceSurfacePresentModes2EXT glad_vkGetPhysicalDeviceSurfacePresentModes2EXT + +#endif +GLAD_API_CALL PFN_vkGetPhysicalDeviceSurfacePresentModesKHR glad_vkGetPhysicalDeviceSurfacePresentModesKHR; +#define vkGetPhysicalDeviceSurfacePresentModesKHR glad_vkGetPhysicalDeviceSurfacePresentModesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceSurfaceSupportKHR glad_vkGetPhysicalDeviceSurfaceSupportKHR; +#define vkGetPhysicalDeviceSurfaceSupportKHR glad_vkGetPhysicalDeviceSurfaceSupportKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceToolProperties glad_vkGetPhysicalDeviceToolProperties; +#define vkGetPhysicalDeviceToolProperties glad_vkGetPhysicalDeviceToolProperties +GLAD_API_CALL PFN_vkGetPhysicalDeviceToolPropertiesEXT glad_vkGetPhysicalDeviceToolPropertiesEXT; +#define vkGetPhysicalDeviceToolPropertiesEXT glad_vkGetPhysicalDeviceToolPropertiesEXT +GLAD_API_CALL PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR glad_vkGetPhysicalDeviceVideoCapabilitiesKHR; +#define vkGetPhysicalDeviceVideoCapabilitiesKHR glad_vkGetPhysicalDeviceVideoCapabilitiesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR glad_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR; +#define vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR glad_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR +GLAD_API_CALL PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR glad_vkGetPhysicalDeviceVideoFormatPropertiesKHR; +#define vkGetPhysicalDeviceVideoFormatPropertiesKHR glad_vkGetPhysicalDeviceVideoFormatPropertiesKHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +GLAD_API_CALL PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR glad_vkGetPhysicalDeviceWaylandPresentationSupportKHR; +#define vkGetPhysicalDeviceWaylandPresentationSupportKHR glad_vkGetPhysicalDeviceWaylandPresentationSupportKHR + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR glad_vkGetPhysicalDeviceWin32PresentationSupportKHR; +#define vkGetPhysicalDeviceWin32PresentationSupportKHR glad_vkGetPhysicalDeviceWin32PresentationSupportKHR + +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) +GLAD_API_CALL PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR glad_vkGetPhysicalDeviceXcbPresentationSupportKHR; +#define vkGetPhysicalDeviceXcbPresentationSupportKHR glad_vkGetPhysicalDeviceXcbPresentationSupportKHR + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +GLAD_API_CALL PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR glad_vkGetPhysicalDeviceXlibPresentationSupportKHR; +#define vkGetPhysicalDeviceXlibPresentationSupportKHR glad_vkGetPhysicalDeviceXlibPresentationSupportKHR + +#endif +GLAD_API_CALL PFN_vkGetPipelineBinaryDataKHR glad_vkGetPipelineBinaryDataKHR; +#define vkGetPipelineBinaryDataKHR glad_vkGetPipelineBinaryDataKHR +GLAD_API_CALL PFN_vkGetPipelineCacheData glad_vkGetPipelineCacheData; +#define vkGetPipelineCacheData glad_vkGetPipelineCacheData +GLAD_API_CALL PFN_vkGetPipelineExecutableInternalRepresentationsKHR glad_vkGetPipelineExecutableInternalRepresentationsKHR; +#define vkGetPipelineExecutableInternalRepresentationsKHR glad_vkGetPipelineExecutableInternalRepresentationsKHR +GLAD_API_CALL PFN_vkGetPipelineExecutablePropertiesKHR glad_vkGetPipelineExecutablePropertiesKHR; +#define vkGetPipelineExecutablePropertiesKHR glad_vkGetPipelineExecutablePropertiesKHR +GLAD_API_CALL PFN_vkGetPipelineExecutableStatisticsKHR glad_vkGetPipelineExecutableStatisticsKHR; +#define vkGetPipelineExecutableStatisticsKHR glad_vkGetPipelineExecutableStatisticsKHR +GLAD_API_CALL PFN_vkGetPipelineIndirectDeviceAddressNV glad_vkGetPipelineIndirectDeviceAddressNV; +#define vkGetPipelineIndirectDeviceAddressNV glad_vkGetPipelineIndirectDeviceAddressNV +GLAD_API_CALL PFN_vkGetPipelineIndirectMemoryRequirementsNV glad_vkGetPipelineIndirectMemoryRequirementsNV; +#define vkGetPipelineIndirectMemoryRequirementsNV glad_vkGetPipelineIndirectMemoryRequirementsNV +GLAD_API_CALL PFN_vkGetPipelineKeyKHR glad_vkGetPipelineKeyKHR; +#define vkGetPipelineKeyKHR glad_vkGetPipelineKeyKHR +GLAD_API_CALL PFN_vkGetPipelinePropertiesEXT glad_vkGetPipelinePropertiesEXT; +#define vkGetPipelinePropertiesEXT glad_vkGetPipelinePropertiesEXT +GLAD_API_CALL PFN_vkGetPrivateData glad_vkGetPrivateData; +#define vkGetPrivateData glad_vkGetPrivateData +GLAD_API_CALL PFN_vkGetPrivateDataEXT glad_vkGetPrivateDataEXT; +#define vkGetPrivateDataEXT glad_vkGetPrivateDataEXT +GLAD_API_CALL PFN_vkGetQueryPoolResults glad_vkGetQueryPoolResults; +#define vkGetQueryPoolResults glad_vkGetQueryPoolResults +GLAD_API_CALL PFN_vkGetQueueCheckpointData2NV glad_vkGetQueueCheckpointData2NV; +#define vkGetQueueCheckpointData2NV glad_vkGetQueueCheckpointData2NV +GLAD_API_CALL PFN_vkGetQueueCheckpointDataNV glad_vkGetQueueCheckpointDataNV; +#define vkGetQueueCheckpointDataNV glad_vkGetQueueCheckpointDataNV +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +GLAD_API_CALL PFN_vkGetRandROutputDisplayEXT glad_vkGetRandROutputDisplayEXT; +#define vkGetRandROutputDisplayEXT glad_vkGetRandROutputDisplayEXT + +#endif +GLAD_API_CALL PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR glad_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR; +#define vkGetRayTracingCaptureReplayShaderGroupHandlesKHR glad_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR +GLAD_API_CALL PFN_vkGetRayTracingShaderGroupHandlesKHR glad_vkGetRayTracingShaderGroupHandlesKHR; +#define vkGetRayTracingShaderGroupHandlesKHR glad_vkGetRayTracingShaderGroupHandlesKHR +GLAD_API_CALL PFN_vkGetRayTracingShaderGroupHandlesNV glad_vkGetRayTracingShaderGroupHandlesNV; +#define vkGetRayTracingShaderGroupHandlesNV glad_vkGetRayTracingShaderGroupHandlesNV +GLAD_API_CALL PFN_vkGetRayTracingShaderGroupStackSizeKHR glad_vkGetRayTracingShaderGroupStackSizeKHR; +#define vkGetRayTracingShaderGroupStackSizeKHR glad_vkGetRayTracingShaderGroupStackSizeKHR +GLAD_API_CALL PFN_vkGetRefreshCycleDurationGOOGLE glad_vkGetRefreshCycleDurationGOOGLE; +#define vkGetRefreshCycleDurationGOOGLE glad_vkGetRefreshCycleDurationGOOGLE +GLAD_API_CALL PFN_vkGetRenderAreaGranularity glad_vkGetRenderAreaGranularity; +#define vkGetRenderAreaGranularity glad_vkGetRenderAreaGranularity +GLAD_API_CALL PFN_vkGetRenderingAreaGranularity glad_vkGetRenderingAreaGranularity; +#define vkGetRenderingAreaGranularity glad_vkGetRenderingAreaGranularity +GLAD_API_CALL PFN_vkGetRenderingAreaGranularityKHR glad_vkGetRenderingAreaGranularityKHR; +#define vkGetRenderingAreaGranularityKHR glad_vkGetRenderingAreaGranularityKHR +GLAD_API_CALL PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT glad_vkGetSamplerOpaqueCaptureDescriptorDataEXT; +#define vkGetSamplerOpaqueCaptureDescriptorDataEXT glad_vkGetSamplerOpaqueCaptureDescriptorDataEXT +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +GLAD_API_CALL PFN_vkGetScreenBufferPropertiesQNX glad_vkGetScreenBufferPropertiesQNX; +#define vkGetScreenBufferPropertiesQNX glad_vkGetScreenBufferPropertiesQNX + +#endif +GLAD_API_CALL PFN_vkGetSemaphoreCounterValue glad_vkGetSemaphoreCounterValue; +#define vkGetSemaphoreCounterValue glad_vkGetSemaphoreCounterValue +GLAD_API_CALL PFN_vkGetSemaphoreCounterValueKHR glad_vkGetSemaphoreCounterValueKHR; +#define vkGetSemaphoreCounterValueKHR glad_vkGetSemaphoreCounterValueKHR +GLAD_API_CALL PFN_vkGetSemaphoreFdKHR glad_vkGetSemaphoreFdKHR; +#define vkGetSemaphoreFdKHR glad_vkGetSemaphoreFdKHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkGetSemaphoreWin32HandleKHR glad_vkGetSemaphoreWin32HandleKHR; +#define vkGetSemaphoreWin32HandleKHR glad_vkGetSemaphoreWin32HandleKHR + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +GLAD_API_CALL PFN_vkGetSemaphoreZirconHandleFUCHSIA glad_vkGetSemaphoreZirconHandleFUCHSIA; +#define vkGetSemaphoreZirconHandleFUCHSIA glad_vkGetSemaphoreZirconHandleFUCHSIA + +#endif +GLAD_API_CALL PFN_vkGetShaderBinaryDataEXT glad_vkGetShaderBinaryDataEXT; +#define vkGetShaderBinaryDataEXT glad_vkGetShaderBinaryDataEXT +GLAD_API_CALL PFN_vkGetShaderInfoAMD glad_vkGetShaderInfoAMD; +#define vkGetShaderInfoAMD glad_vkGetShaderInfoAMD +GLAD_API_CALL PFN_vkGetShaderModuleCreateInfoIdentifierEXT glad_vkGetShaderModuleCreateInfoIdentifierEXT; +#define vkGetShaderModuleCreateInfoIdentifierEXT glad_vkGetShaderModuleCreateInfoIdentifierEXT +GLAD_API_CALL PFN_vkGetShaderModuleIdentifierEXT glad_vkGetShaderModuleIdentifierEXT; +#define vkGetShaderModuleIdentifierEXT glad_vkGetShaderModuleIdentifierEXT +GLAD_API_CALL PFN_vkGetSwapchainCounterEXT glad_vkGetSwapchainCounterEXT; +#define vkGetSwapchainCounterEXT glad_vkGetSwapchainCounterEXT +GLAD_API_CALL PFN_vkGetSwapchainImagesKHR glad_vkGetSwapchainImagesKHR; +#define vkGetSwapchainImagesKHR glad_vkGetSwapchainImagesKHR +GLAD_API_CALL PFN_vkGetSwapchainStatusKHR glad_vkGetSwapchainStatusKHR; +#define vkGetSwapchainStatusKHR glad_vkGetSwapchainStatusKHR +GLAD_API_CALL PFN_vkGetTensorMemoryRequirementsARM glad_vkGetTensorMemoryRequirementsARM; +#define vkGetTensorMemoryRequirementsARM glad_vkGetTensorMemoryRequirementsARM +GLAD_API_CALL PFN_vkGetTensorOpaqueCaptureDescriptorDataARM glad_vkGetTensorOpaqueCaptureDescriptorDataARM; +#define vkGetTensorOpaqueCaptureDescriptorDataARM glad_vkGetTensorOpaqueCaptureDescriptorDataARM +GLAD_API_CALL PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM glad_vkGetTensorViewOpaqueCaptureDescriptorDataARM; +#define vkGetTensorViewOpaqueCaptureDescriptorDataARM glad_vkGetTensorViewOpaqueCaptureDescriptorDataARM +GLAD_API_CALL PFN_vkGetValidationCacheDataEXT glad_vkGetValidationCacheDataEXT; +#define vkGetValidationCacheDataEXT glad_vkGetValidationCacheDataEXT +GLAD_API_CALL PFN_vkGetVideoSessionMemoryRequirementsKHR glad_vkGetVideoSessionMemoryRequirementsKHR; +#define vkGetVideoSessionMemoryRequirementsKHR glad_vkGetVideoSessionMemoryRequirementsKHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkGetWinrtDisplayNV glad_vkGetWinrtDisplayNV; +#define vkGetWinrtDisplayNV glad_vkGetWinrtDisplayNV + +#endif +GLAD_API_CALL PFN_vkImportFenceFdKHR glad_vkImportFenceFdKHR; +#define vkImportFenceFdKHR glad_vkImportFenceFdKHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkImportFenceWin32HandleKHR glad_vkImportFenceWin32HandleKHR; +#define vkImportFenceWin32HandleKHR glad_vkImportFenceWin32HandleKHR + +#endif +GLAD_API_CALL PFN_vkImportSemaphoreFdKHR glad_vkImportSemaphoreFdKHR; +#define vkImportSemaphoreFdKHR glad_vkImportSemaphoreFdKHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkImportSemaphoreWin32HandleKHR glad_vkImportSemaphoreWin32HandleKHR; +#define vkImportSemaphoreWin32HandleKHR glad_vkImportSemaphoreWin32HandleKHR + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +GLAD_API_CALL PFN_vkImportSemaphoreZirconHandleFUCHSIA glad_vkImportSemaphoreZirconHandleFUCHSIA; +#define vkImportSemaphoreZirconHandleFUCHSIA glad_vkImportSemaphoreZirconHandleFUCHSIA + +#endif +GLAD_API_CALL PFN_vkInitializePerformanceApiINTEL glad_vkInitializePerformanceApiINTEL; +#define vkInitializePerformanceApiINTEL glad_vkInitializePerformanceApiINTEL +GLAD_API_CALL PFN_vkInvalidateMappedMemoryRanges glad_vkInvalidateMappedMemoryRanges; +#define vkInvalidateMappedMemoryRanges glad_vkInvalidateMappedMemoryRanges +GLAD_API_CALL PFN_vkLatencySleepNV glad_vkLatencySleepNV; +#define vkLatencySleepNV glad_vkLatencySleepNV +GLAD_API_CALL PFN_vkMapMemory glad_vkMapMemory; +#define vkMapMemory glad_vkMapMemory +GLAD_API_CALL PFN_vkMapMemory2 glad_vkMapMemory2; +#define vkMapMemory2 glad_vkMapMemory2 +GLAD_API_CALL PFN_vkMapMemory2KHR glad_vkMapMemory2KHR; +#define vkMapMemory2KHR glad_vkMapMemory2KHR +GLAD_API_CALL PFN_vkMergePipelineCaches glad_vkMergePipelineCaches; +#define vkMergePipelineCaches glad_vkMergePipelineCaches +GLAD_API_CALL PFN_vkMergeValidationCachesEXT glad_vkMergeValidationCachesEXT; +#define vkMergeValidationCachesEXT glad_vkMergeValidationCachesEXT +GLAD_API_CALL PFN_vkQueueBeginDebugUtilsLabelEXT glad_vkQueueBeginDebugUtilsLabelEXT; +#define vkQueueBeginDebugUtilsLabelEXT glad_vkQueueBeginDebugUtilsLabelEXT +GLAD_API_CALL PFN_vkQueueBindSparse glad_vkQueueBindSparse; +#define vkQueueBindSparse glad_vkQueueBindSparse +GLAD_API_CALL PFN_vkQueueEndDebugUtilsLabelEXT glad_vkQueueEndDebugUtilsLabelEXT; +#define vkQueueEndDebugUtilsLabelEXT glad_vkQueueEndDebugUtilsLabelEXT +GLAD_API_CALL PFN_vkQueueInsertDebugUtilsLabelEXT glad_vkQueueInsertDebugUtilsLabelEXT; +#define vkQueueInsertDebugUtilsLabelEXT glad_vkQueueInsertDebugUtilsLabelEXT +GLAD_API_CALL PFN_vkQueueNotifyOutOfBandNV glad_vkQueueNotifyOutOfBandNV; +#define vkQueueNotifyOutOfBandNV glad_vkQueueNotifyOutOfBandNV +GLAD_API_CALL PFN_vkQueuePresentKHR glad_vkQueuePresentKHR; +#define vkQueuePresentKHR glad_vkQueuePresentKHR +GLAD_API_CALL PFN_vkQueueSetPerformanceConfigurationINTEL glad_vkQueueSetPerformanceConfigurationINTEL; +#define vkQueueSetPerformanceConfigurationINTEL glad_vkQueueSetPerformanceConfigurationINTEL +GLAD_API_CALL PFN_vkQueueSubmit glad_vkQueueSubmit; +#define vkQueueSubmit glad_vkQueueSubmit +GLAD_API_CALL PFN_vkQueueSubmit2 glad_vkQueueSubmit2; +#define vkQueueSubmit2 glad_vkQueueSubmit2 +GLAD_API_CALL PFN_vkQueueSubmit2KHR glad_vkQueueSubmit2KHR; +#define vkQueueSubmit2KHR glad_vkQueueSubmit2KHR +GLAD_API_CALL PFN_vkQueueWaitIdle glad_vkQueueWaitIdle; +#define vkQueueWaitIdle glad_vkQueueWaitIdle +GLAD_API_CALL PFN_vkRegisterDeviceEventEXT glad_vkRegisterDeviceEventEXT; +#define vkRegisterDeviceEventEXT glad_vkRegisterDeviceEventEXT +GLAD_API_CALL PFN_vkRegisterDisplayEventEXT glad_vkRegisterDisplayEventEXT; +#define vkRegisterDisplayEventEXT glad_vkRegisterDisplayEventEXT +GLAD_API_CALL PFN_vkReleaseCapturedPipelineDataKHR glad_vkReleaseCapturedPipelineDataKHR; +#define vkReleaseCapturedPipelineDataKHR glad_vkReleaseCapturedPipelineDataKHR +GLAD_API_CALL PFN_vkReleaseDisplayEXT glad_vkReleaseDisplayEXT; +#define vkReleaseDisplayEXT glad_vkReleaseDisplayEXT +#if defined(VK_USE_PLATFORM_WIN32_KHR) +GLAD_API_CALL PFN_vkReleaseFullScreenExclusiveModeEXT glad_vkReleaseFullScreenExclusiveModeEXT; +#define vkReleaseFullScreenExclusiveModeEXT glad_vkReleaseFullScreenExclusiveModeEXT + +#endif +GLAD_API_CALL PFN_vkReleasePerformanceConfigurationINTEL glad_vkReleasePerformanceConfigurationINTEL; +#define vkReleasePerformanceConfigurationINTEL glad_vkReleasePerformanceConfigurationINTEL +GLAD_API_CALL PFN_vkReleaseProfilingLockKHR glad_vkReleaseProfilingLockKHR; +#define vkReleaseProfilingLockKHR glad_vkReleaseProfilingLockKHR +GLAD_API_CALL PFN_vkReleaseSwapchainImagesEXT glad_vkReleaseSwapchainImagesEXT; +#define vkReleaseSwapchainImagesEXT glad_vkReleaseSwapchainImagesEXT +GLAD_API_CALL PFN_vkReleaseSwapchainImagesKHR glad_vkReleaseSwapchainImagesKHR; +#define vkReleaseSwapchainImagesKHR glad_vkReleaseSwapchainImagesKHR +GLAD_API_CALL PFN_vkResetCommandBuffer glad_vkResetCommandBuffer; +#define vkResetCommandBuffer glad_vkResetCommandBuffer +GLAD_API_CALL PFN_vkResetCommandPool glad_vkResetCommandPool; +#define vkResetCommandPool glad_vkResetCommandPool +GLAD_API_CALL PFN_vkResetDescriptorPool glad_vkResetDescriptorPool; +#define vkResetDescriptorPool glad_vkResetDescriptorPool +GLAD_API_CALL PFN_vkResetEvent glad_vkResetEvent; +#define vkResetEvent glad_vkResetEvent +GLAD_API_CALL PFN_vkResetFences glad_vkResetFences; +#define vkResetFences glad_vkResetFences +GLAD_API_CALL PFN_vkResetQueryPool glad_vkResetQueryPool; +#define vkResetQueryPool glad_vkResetQueryPool +GLAD_API_CALL PFN_vkResetQueryPoolEXT glad_vkResetQueryPoolEXT; +#define vkResetQueryPoolEXT glad_vkResetQueryPoolEXT +#if defined(VK_USE_PLATFORM_FUCHSIA) +GLAD_API_CALL PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA glad_vkSetBufferCollectionBufferConstraintsFUCHSIA; +#define vkSetBufferCollectionBufferConstraintsFUCHSIA glad_vkSetBufferCollectionBufferConstraintsFUCHSIA + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +GLAD_API_CALL PFN_vkSetBufferCollectionImageConstraintsFUCHSIA glad_vkSetBufferCollectionImageConstraintsFUCHSIA; +#define vkSetBufferCollectionImageConstraintsFUCHSIA glad_vkSetBufferCollectionImageConstraintsFUCHSIA + +#endif +GLAD_API_CALL PFN_vkSetDebugUtilsObjectNameEXT glad_vkSetDebugUtilsObjectNameEXT; +#define vkSetDebugUtilsObjectNameEXT glad_vkSetDebugUtilsObjectNameEXT +GLAD_API_CALL PFN_vkSetDebugUtilsObjectTagEXT glad_vkSetDebugUtilsObjectTagEXT; +#define vkSetDebugUtilsObjectTagEXT glad_vkSetDebugUtilsObjectTagEXT +GLAD_API_CALL PFN_vkSetDeviceMemoryPriorityEXT glad_vkSetDeviceMemoryPriorityEXT; +#define vkSetDeviceMemoryPriorityEXT glad_vkSetDeviceMemoryPriorityEXT +GLAD_API_CALL PFN_vkSetEvent glad_vkSetEvent; +#define vkSetEvent glad_vkSetEvent +GLAD_API_CALL PFN_vkSetHdrMetadataEXT glad_vkSetHdrMetadataEXT; +#define vkSetHdrMetadataEXT glad_vkSetHdrMetadataEXT +GLAD_API_CALL PFN_vkSetLatencyMarkerNV glad_vkSetLatencyMarkerNV; +#define vkSetLatencyMarkerNV glad_vkSetLatencyMarkerNV +GLAD_API_CALL PFN_vkSetLatencySleepModeNV glad_vkSetLatencySleepModeNV; +#define vkSetLatencySleepModeNV glad_vkSetLatencySleepModeNV +GLAD_API_CALL PFN_vkSetLocalDimmingAMD glad_vkSetLocalDimmingAMD; +#define vkSetLocalDimmingAMD glad_vkSetLocalDimmingAMD +GLAD_API_CALL PFN_vkSetPrivateData glad_vkSetPrivateData; +#define vkSetPrivateData glad_vkSetPrivateData +GLAD_API_CALL PFN_vkSetPrivateDataEXT glad_vkSetPrivateDataEXT; +#define vkSetPrivateDataEXT glad_vkSetPrivateDataEXT +GLAD_API_CALL PFN_vkSignalSemaphore glad_vkSignalSemaphore; +#define vkSignalSemaphore glad_vkSignalSemaphore +GLAD_API_CALL PFN_vkSignalSemaphoreKHR glad_vkSignalSemaphoreKHR; +#define vkSignalSemaphoreKHR glad_vkSignalSemaphoreKHR +GLAD_API_CALL PFN_vkSubmitDebugUtilsMessageEXT glad_vkSubmitDebugUtilsMessageEXT; +#define vkSubmitDebugUtilsMessageEXT glad_vkSubmitDebugUtilsMessageEXT +GLAD_API_CALL PFN_vkTransitionImageLayout glad_vkTransitionImageLayout; +#define vkTransitionImageLayout glad_vkTransitionImageLayout +GLAD_API_CALL PFN_vkTransitionImageLayoutEXT glad_vkTransitionImageLayoutEXT; +#define vkTransitionImageLayoutEXT glad_vkTransitionImageLayoutEXT +GLAD_API_CALL PFN_vkTrimCommandPool glad_vkTrimCommandPool; +#define vkTrimCommandPool glad_vkTrimCommandPool +GLAD_API_CALL PFN_vkTrimCommandPoolKHR glad_vkTrimCommandPoolKHR; +#define vkTrimCommandPoolKHR glad_vkTrimCommandPoolKHR +GLAD_API_CALL PFN_vkUninitializePerformanceApiINTEL glad_vkUninitializePerformanceApiINTEL; +#define vkUninitializePerformanceApiINTEL glad_vkUninitializePerformanceApiINTEL +GLAD_API_CALL PFN_vkUnmapMemory glad_vkUnmapMemory; +#define vkUnmapMemory glad_vkUnmapMemory +GLAD_API_CALL PFN_vkUnmapMemory2 glad_vkUnmapMemory2; +#define vkUnmapMemory2 glad_vkUnmapMemory2 +GLAD_API_CALL PFN_vkUnmapMemory2KHR glad_vkUnmapMemory2KHR; +#define vkUnmapMemory2KHR glad_vkUnmapMemory2KHR +GLAD_API_CALL PFN_vkUpdateDescriptorSetWithTemplate glad_vkUpdateDescriptorSetWithTemplate; +#define vkUpdateDescriptorSetWithTemplate glad_vkUpdateDescriptorSetWithTemplate +GLAD_API_CALL PFN_vkUpdateDescriptorSetWithTemplateKHR glad_vkUpdateDescriptorSetWithTemplateKHR; +#define vkUpdateDescriptorSetWithTemplateKHR glad_vkUpdateDescriptorSetWithTemplateKHR +GLAD_API_CALL PFN_vkUpdateDescriptorSets glad_vkUpdateDescriptorSets; +#define vkUpdateDescriptorSets glad_vkUpdateDescriptorSets +GLAD_API_CALL PFN_vkUpdateIndirectExecutionSetPipelineEXT glad_vkUpdateIndirectExecutionSetPipelineEXT; +#define vkUpdateIndirectExecutionSetPipelineEXT glad_vkUpdateIndirectExecutionSetPipelineEXT +GLAD_API_CALL PFN_vkUpdateIndirectExecutionSetShaderEXT glad_vkUpdateIndirectExecutionSetShaderEXT; +#define vkUpdateIndirectExecutionSetShaderEXT glad_vkUpdateIndirectExecutionSetShaderEXT +GLAD_API_CALL PFN_vkUpdateVideoSessionParametersKHR glad_vkUpdateVideoSessionParametersKHR; +#define vkUpdateVideoSessionParametersKHR glad_vkUpdateVideoSessionParametersKHR +GLAD_API_CALL PFN_vkWaitForFences glad_vkWaitForFences; +#define vkWaitForFences glad_vkWaitForFences +GLAD_API_CALL PFN_vkWaitForPresent2KHR glad_vkWaitForPresent2KHR; +#define vkWaitForPresent2KHR glad_vkWaitForPresent2KHR +GLAD_API_CALL PFN_vkWaitForPresentKHR glad_vkWaitForPresentKHR; +#define vkWaitForPresentKHR glad_vkWaitForPresentKHR +GLAD_API_CALL PFN_vkWaitSemaphores glad_vkWaitSemaphores; +#define vkWaitSemaphores glad_vkWaitSemaphores +GLAD_API_CALL PFN_vkWaitSemaphoresKHR glad_vkWaitSemaphoresKHR; +#define vkWaitSemaphoresKHR glad_vkWaitSemaphoresKHR +GLAD_API_CALL PFN_vkWriteAccelerationStructuresPropertiesKHR glad_vkWriteAccelerationStructuresPropertiesKHR; +#define vkWriteAccelerationStructuresPropertiesKHR glad_vkWriteAccelerationStructuresPropertiesKHR +GLAD_API_CALL PFN_vkWriteMicromapsPropertiesEXT glad_vkWriteMicromapsPropertiesEXT; +#define vkWriteMicromapsPropertiesEXT glad_vkWriteMicromapsPropertiesEXT + + + + + +GLAD_API_CALL int gladLoadVulkanUserPtr( VkPhysicalDevice physical_device, GLADuserptrloadfunc load, void *userptr); +GLAD_API_CALL int gladLoadVulkan( VkPhysicalDevice physical_device, GLADloadfunc load); + + +#ifdef GLAD_VULKAN + +GLAD_API_CALL int gladLoaderLoadVulkan( VkInstance instance, VkPhysicalDevice physical_device, VkDevice device); +GLAD_API_CALL void gladLoaderUnloadVulkan(void); + + + +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/3rdparty/glad/include/vk_platform.h b/3rdparty/glad/include/vk_platform.h new file mode 100644 index 000000000000..f570181e33ac --- /dev/null +++ b/3rdparty/glad/include/vk_platform.h @@ -0,0 +1,84 @@ +/* */ +/* File: vk_platform.h */ +/* */ +/* +** Copyright 2014-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + + +#ifndef VK_PLATFORM_H_ +#define VK_PLATFORM_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* +*************************************************************************************************** +* Platform-specific directives and type declarations +*************************************************************************************************** +*/ + +/* Platform-specific calling convention macros. + * + * Platforms should define these so that Vulkan clients call Vulkan commands + * with the same calling conventions that the Vulkan implementation expects. + * + * VKAPI_ATTR - Placed before the return type in function declarations. + * Useful for C++11 and GCC/Clang-style function attribute syntax. + * VKAPI_CALL - Placed after the return type in function declarations. + * Useful for MSVC-style calling convention syntax. + * VKAPI_PTR - Placed between the '(' and '*' in function pointer types. + * + * Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void); + * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void); + */ +#if defined(_WIN32) + /* On Windows, Vulkan commands use the stdcall convention */ + #define VKAPI_ATTR + #define VKAPI_CALL __stdcall + #define VKAPI_PTR VKAPI_CALL +#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7 + #error "Vulkan is not supported for the 'armeabi' NDK ABI" +#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE) + /* On Android 32-bit ARM targets, Vulkan functions use the "hardfloat" */ + /* calling convention, i.e. float parameters are passed in registers. This */ + /* is true even if the rest of the application passes floats on the stack, */ + /* as it does by default when compiling for the armeabi-v7a NDK ABI. */ + #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp"))) + #define VKAPI_CALL + #define VKAPI_PTR VKAPI_ATTR +#else + /* On other platforms, use the default calling convention */ + #define VKAPI_ATTR + #define VKAPI_CALL + #define VKAPI_PTR +#endif + +#if !defined(VK_NO_STDDEF_H) + #include +#endif /* !defined(VK_NO_STDDEF_H) */ + +#if !defined(VK_NO_STDINT_H) + #if defined(_MSC_VER) && (_MSC_VER < 1600) + typedef signed __int8 int8_t; + typedef unsigned __int8 uint8_t; + typedef signed __int16 int16_t; + typedef unsigned __int16 uint16_t; + typedef signed __int32 int32_t; + typedef unsigned __int32 uint32_t; + typedef signed __int64 int64_t; + typedef unsigned __int64 uint64_t; + #else + #include + #endif +#endif /* !defined(VK_NO_STDINT_H) */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codec_av1std.h b/3rdparty/glad/include/vk_video/vulkan_video_codec_av1std.h new file mode 100644 index 000000000000..932d0f66c43a --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codec_av1std.h @@ -0,0 +1,394 @@ +#ifndef VULKAN_VIDEO_CODEC_AV1STD_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_av1std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_av1std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_AV1_NUM_REF_FRAMES 8U +#define STD_VIDEO_AV1_REFS_PER_FRAME 7U +#define STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME 8U +#define STD_VIDEO_AV1_MAX_TILE_COLS 64U +#define STD_VIDEO_AV1_MAX_TILE_ROWS 64U +#define STD_VIDEO_AV1_MAX_SEGMENTS 8U +#define STD_VIDEO_AV1_SEG_LVL_MAX 8U +#define STD_VIDEO_AV1_PRIMARY_REF_NONE 7U +#define STD_VIDEO_AV1_SELECT_INTEGER_MV 2U +#define STD_VIDEO_AV1_SELECT_SCREEN_CONTENT_TOOLS 2U +#define STD_VIDEO_AV1_SKIP_MODE_FRAMES 2U +#define STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS 4U +#define STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS 2U +#define STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS 8U +#define STD_VIDEO_AV1_MAX_NUM_PLANES 3U +#define STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS 6U +#define STD_VIDEO_AV1_MAX_NUM_Y_POINTS 14U +#define STD_VIDEO_AV1_MAX_NUM_CB_POINTS 10U +#define STD_VIDEO_AV1_MAX_NUM_CR_POINTS 10U +#define STD_VIDEO_AV1_MAX_NUM_POS_LUMA 24U +#define STD_VIDEO_AV1_MAX_NUM_POS_CHROMA 25U + +typedef enum StdVideoAV1Profile { + STD_VIDEO_AV1_PROFILE_MAIN = 0, + STD_VIDEO_AV1_PROFILE_HIGH = 1, + STD_VIDEO_AV1_PROFILE_PROFESSIONAL = 2, + STD_VIDEO_AV1_PROFILE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_PROFILE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1Profile; + +typedef enum StdVideoAV1Level { + STD_VIDEO_AV1_LEVEL_2_0 = 0, + STD_VIDEO_AV1_LEVEL_2_1 = 1, + STD_VIDEO_AV1_LEVEL_2_2 = 2, + STD_VIDEO_AV1_LEVEL_2_3 = 3, + STD_VIDEO_AV1_LEVEL_3_0 = 4, + STD_VIDEO_AV1_LEVEL_3_1 = 5, + STD_VIDEO_AV1_LEVEL_3_2 = 6, + STD_VIDEO_AV1_LEVEL_3_3 = 7, + STD_VIDEO_AV1_LEVEL_4_0 = 8, + STD_VIDEO_AV1_LEVEL_4_1 = 9, + STD_VIDEO_AV1_LEVEL_4_2 = 10, + STD_VIDEO_AV1_LEVEL_4_3 = 11, + STD_VIDEO_AV1_LEVEL_5_0 = 12, + STD_VIDEO_AV1_LEVEL_5_1 = 13, + STD_VIDEO_AV1_LEVEL_5_2 = 14, + STD_VIDEO_AV1_LEVEL_5_3 = 15, + STD_VIDEO_AV1_LEVEL_6_0 = 16, + STD_VIDEO_AV1_LEVEL_6_1 = 17, + STD_VIDEO_AV1_LEVEL_6_2 = 18, + STD_VIDEO_AV1_LEVEL_6_3 = 19, + STD_VIDEO_AV1_LEVEL_7_0 = 20, + STD_VIDEO_AV1_LEVEL_7_1 = 21, + STD_VIDEO_AV1_LEVEL_7_2 = 22, + STD_VIDEO_AV1_LEVEL_7_3 = 23, + STD_VIDEO_AV1_LEVEL_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_LEVEL_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1Level; + +typedef enum StdVideoAV1FrameType { + STD_VIDEO_AV1_FRAME_TYPE_KEY = 0, + STD_VIDEO_AV1_FRAME_TYPE_INTER = 1, + STD_VIDEO_AV1_FRAME_TYPE_INTRA_ONLY = 2, + STD_VIDEO_AV1_FRAME_TYPE_SWITCH = 3, + STD_VIDEO_AV1_FRAME_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_FRAME_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1FrameType; + +typedef enum StdVideoAV1ReferenceName { + STD_VIDEO_AV1_REFERENCE_NAME_INTRA_FRAME = 0, + STD_VIDEO_AV1_REFERENCE_NAME_LAST_FRAME = 1, + STD_VIDEO_AV1_REFERENCE_NAME_LAST2_FRAME = 2, + STD_VIDEO_AV1_REFERENCE_NAME_LAST3_FRAME = 3, + STD_VIDEO_AV1_REFERENCE_NAME_GOLDEN_FRAME = 4, + STD_VIDEO_AV1_REFERENCE_NAME_BWDREF_FRAME = 5, + STD_VIDEO_AV1_REFERENCE_NAME_ALTREF2_FRAME = 6, + STD_VIDEO_AV1_REFERENCE_NAME_ALTREF_FRAME = 7, + STD_VIDEO_AV1_REFERENCE_NAME_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_REFERENCE_NAME_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1ReferenceName; + +typedef enum StdVideoAV1InterpolationFilter { + STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP = 0, + STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1, + STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2, + STD_VIDEO_AV1_INTERPOLATION_FILTER_BILINEAR = 3, + STD_VIDEO_AV1_INTERPOLATION_FILTER_SWITCHABLE = 4, + STD_VIDEO_AV1_INTERPOLATION_FILTER_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_INTERPOLATION_FILTER_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1InterpolationFilter; + +typedef enum StdVideoAV1TxMode { + STD_VIDEO_AV1_TX_MODE_ONLY_4X4 = 0, + STD_VIDEO_AV1_TX_MODE_LARGEST = 1, + STD_VIDEO_AV1_TX_MODE_SELECT = 2, + STD_VIDEO_AV1_TX_MODE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_TX_MODE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1TxMode; + +typedef enum StdVideoAV1FrameRestorationType { + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_NONE = 0, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_WIENER = 1, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SGRPROJ = 2, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SWITCHABLE = 3, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1FrameRestorationType; + +typedef enum StdVideoAV1ColorPrimaries { + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_709 = 1, + STD_VIDEO_AV1_COLOR_PRIMARIES_UNSPECIFIED = 2, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_M = 4, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_B_G = 5, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_601 = 6, + STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_240 = 7, + STD_VIDEO_AV1_COLOR_PRIMARIES_GENERIC_FILM = 8, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_2020 = 9, + STD_VIDEO_AV1_COLOR_PRIMARIES_XYZ = 10, + STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_431 = 11, + STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_432 = 12, + STD_VIDEO_AV1_COLOR_PRIMARIES_EBU_3213 = 22, + STD_VIDEO_AV1_COLOR_PRIMARIES_INVALID = 0x7FFFFFFF, + // STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED is a legacy alias + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED = STD_VIDEO_AV1_COLOR_PRIMARIES_UNSPECIFIED, + STD_VIDEO_AV1_COLOR_PRIMARIES_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1ColorPrimaries; + +typedef enum StdVideoAV1TransferCharacteristics { + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_RESERVED_0 = 0, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_709 = 1, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_UNSPECIFIED = 2, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_RESERVED_3 = 3, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_470_M = 4, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_470_B_G = 5, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_601 = 6, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_240 = 7, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LINEAR = 8, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LOG_100 = 9, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LOG_100_SQRT10 = 10, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_IEC_61966 = 11, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_1361 = 12, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SRGB = 13, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_2020_10_BIT = 14, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_2020_12_BIT = 15, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_2084 = 16, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_428 = 17, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_HLG = 18, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1TransferCharacteristics; + +typedef enum StdVideoAV1MatrixCoefficients { + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_IDENTITY = 0, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_709 = 1, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_UNSPECIFIED = 2, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_RESERVED_3 = 3, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_FCC = 4, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_470_B_G = 5, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_601 = 6, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_240 = 7, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_YCGCO = 8, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_2020_NCL = 9, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_2020_CL = 10, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_2085 = 11, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_CHROMAT_NCL = 12, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_CHROMAT_CL = 13, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_ICTCP = 14, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1MatrixCoefficients; + +typedef enum StdVideoAV1ChromaSamplePosition { + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_UNKNOWN = 0, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_VERTICAL = 1, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_COLOCATED = 2, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_RESERVED = 3, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1ChromaSamplePosition; +typedef struct StdVideoAV1ColorConfigFlags { + uint32_t mono_chrome : 1; + uint32_t color_range : 1; + uint32_t separate_uv_delta_q : 1; + uint32_t color_description_present_flag : 1; + uint32_t reserved : 28; +} StdVideoAV1ColorConfigFlags; + +typedef struct StdVideoAV1ColorConfig { + StdVideoAV1ColorConfigFlags flags; + uint8_t BitDepth; + uint8_t subsampling_x; + uint8_t subsampling_y; + uint8_t reserved1; + StdVideoAV1ColorPrimaries color_primaries; + StdVideoAV1TransferCharacteristics transfer_characteristics; + StdVideoAV1MatrixCoefficients matrix_coefficients; + StdVideoAV1ChromaSamplePosition chroma_sample_position; +} StdVideoAV1ColorConfig; + +typedef struct StdVideoAV1TimingInfoFlags { + uint32_t equal_picture_interval : 1; + uint32_t reserved : 31; +} StdVideoAV1TimingInfoFlags; + +typedef struct StdVideoAV1TimingInfo { + StdVideoAV1TimingInfoFlags flags; + uint32_t num_units_in_display_tick; + uint32_t time_scale; + uint32_t num_ticks_per_picture_minus_1; +} StdVideoAV1TimingInfo; + +typedef struct StdVideoAV1LoopFilterFlags { + uint32_t loop_filter_delta_enabled : 1; + uint32_t loop_filter_delta_update : 1; + uint32_t reserved : 30; +} StdVideoAV1LoopFilterFlags; + +typedef struct StdVideoAV1LoopFilter { + StdVideoAV1LoopFilterFlags flags; + uint8_t loop_filter_level[STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS]; + uint8_t loop_filter_sharpness; + uint8_t update_ref_delta; + int8_t loop_filter_ref_deltas[STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME]; + uint8_t update_mode_delta; + int8_t loop_filter_mode_deltas[STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS]; +} StdVideoAV1LoopFilter; + +typedef struct StdVideoAV1QuantizationFlags { + uint32_t using_qmatrix : 1; + uint32_t diff_uv_delta : 1; + uint32_t reserved : 30; +} StdVideoAV1QuantizationFlags; + +typedef struct StdVideoAV1Quantization { + StdVideoAV1QuantizationFlags flags; + uint8_t base_q_idx; + int8_t DeltaQYDc; + int8_t DeltaQUDc; + int8_t DeltaQUAc; + int8_t DeltaQVDc; + int8_t DeltaQVAc; + uint8_t qm_y; + uint8_t qm_u; + uint8_t qm_v; +} StdVideoAV1Quantization; + +typedef struct StdVideoAV1Segmentation { + uint8_t FeatureEnabled[STD_VIDEO_AV1_MAX_SEGMENTS]; + int16_t FeatureData[STD_VIDEO_AV1_MAX_SEGMENTS][STD_VIDEO_AV1_SEG_LVL_MAX]; +} StdVideoAV1Segmentation; + +typedef struct StdVideoAV1TileInfoFlags { + uint32_t uniform_tile_spacing_flag : 1; + uint32_t reserved : 31; +} StdVideoAV1TileInfoFlags; + +typedef struct StdVideoAV1TileInfo { + StdVideoAV1TileInfoFlags flags; + uint8_t TileCols; + uint8_t TileRows; + uint16_t context_update_tile_id; + uint8_t tile_size_bytes_minus_1; + uint8_t reserved1[7]; + const uint16_t* pMiColStarts; + const uint16_t* pMiRowStarts; + const uint16_t* pWidthInSbsMinus1; + const uint16_t* pHeightInSbsMinus1; +} StdVideoAV1TileInfo; + +typedef struct StdVideoAV1CDEF { + uint8_t cdef_damping_minus_3; + uint8_t cdef_bits; + uint8_t cdef_y_pri_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; + uint8_t cdef_y_sec_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; + uint8_t cdef_uv_pri_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; + uint8_t cdef_uv_sec_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; +} StdVideoAV1CDEF; + +typedef struct StdVideoAV1LoopRestoration { + StdVideoAV1FrameRestorationType FrameRestorationType[STD_VIDEO_AV1_MAX_NUM_PLANES]; + uint16_t LoopRestorationSize[STD_VIDEO_AV1_MAX_NUM_PLANES]; +} StdVideoAV1LoopRestoration; + +typedef struct StdVideoAV1GlobalMotion { + uint8_t GmType[STD_VIDEO_AV1_NUM_REF_FRAMES]; + int32_t gm_params[STD_VIDEO_AV1_NUM_REF_FRAMES][STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS]; +} StdVideoAV1GlobalMotion; + +typedef struct StdVideoAV1FilmGrainFlags { + uint32_t chroma_scaling_from_luma : 1; + uint32_t overlap_flag : 1; + uint32_t clip_to_restricted_range : 1; + uint32_t update_grain : 1; + uint32_t reserved : 28; +} StdVideoAV1FilmGrainFlags; + +typedef struct StdVideoAV1FilmGrain { + StdVideoAV1FilmGrainFlags flags; + uint8_t grain_scaling_minus_8; + uint8_t ar_coeff_lag; + uint8_t ar_coeff_shift_minus_6; + uint8_t grain_scale_shift; + uint16_t grain_seed; + uint8_t film_grain_params_ref_idx; + uint8_t num_y_points; + uint8_t point_y_value[STD_VIDEO_AV1_MAX_NUM_Y_POINTS]; + uint8_t point_y_scaling[STD_VIDEO_AV1_MAX_NUM_Y_POINTS]; + uint8_t num_cb_points; + uint8_t point_cb_value[STD_VIDEO_AV1_MAX_NUM_CB_POINTS]; + uint8_t point_cb_scaling[STD_VIDEO_AV1_MAX_NUM_CB_POINTS]; + uint8_t num_cr_points; + uint8_t point_cr_value[STD_VIDEO_AV1_MAX_NUM_CR_POINTS]; + uint8_t point_cr_scaling[STD_VIDEO_AV1_MAX_NUM_CR_POINTS]; + int8_t ar_coeffs_y_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_LUMA]; + int8_t ar_coeffs_cb_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_CHROMA]; + int8_t ar_coeffs_cr_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_CHROMA]; + uint8_t cb_mult; + uint8_t cb_luma_mult; + uint16_t cb_offset; + uint8_t cr_mult; + uint8_t cr_luma_mult; + uint16_t cr_offset; +} StdVideoAV1FilmGrain; + +typedef struct StdVideoAV1SequenceHeaderFlags { + uint32_t still_picture : 1; + uint32_t reduced_still_picture_header : 1; + uint32_t use_128x128_superblock : 1; + uint32_t enable_filter_intra : 1; + uint32_t enable_intra_edge_filter : 1; + uint32_t enable_interintra_compound : 1; + uint32_t enable_masked_compound : 1; + uint32_t enable_warped_motion : 1; + uint32_t enable_dual_filter : 1; + uint32_t enable_order_hint : 1; + uint32_t enable_jnt_comp : 1; + uint32_t enable_ref_frame_mvs : 1; + uint32_t frame_id_numbers_present_flag : 1; + uint32_t enable_superres : 1; + uint32_t enable_cdef : 1; + uint32_t enable_restoration : 1; + uint32_t film_grain_params_present : 1; + uint32_t timing_info_present_flag : 1; + uint32_t initial_display_delay_present_flag : 1; + uint32_t reserved : 13; +} StdVideoAV1SequenceHeaderFlags; + +typedef struct StdVideoAV1SequenceHeader { + StdVideoAV1SequenceHeaderFlags flags; + StdVideoAV1Profile seq_profile; + uint8_t frame_width_bits_minus_1; + uint8_t frame_height_bits_minus_1; + uint16_t max_frame_width_minus_1; + uint16_t max_frame_height_minus_1; + uint8_t delta_frame_id_length_minus_2; + uint8_t additional_frame_id_length_minus_1; + uint8_t order_hint_bits_minus_1; + uint8_t seq_force_integer_mv; + uint8_t seq_force_screen_content_tools; + uint8_t reserved1[5]; + const StdVideoAV1ColorConfig* pColorConfig; + const StdVideoAV1TimingInfo* pTimingInfo; +} StdVideoAV1SequenceHeader; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codec_av1std_decode.h b/3rdparty/glad/include/vk_video/vulkan_video_codec_av1std_decode.h new file mode 100644 index 000000000000..522628e86d1d --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codec_av1std_decode.h @@ -0,0 +1,109 @@ +#ifndef VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_av1std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_av1std_decode 1 +#include "vulkan_video_codec_av1std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_av1_decode" +typedef struct StdVideoDecodeAV1PictureInfoFlags { + uint32_t error_resilient_mode : 1; + uint32_t disable_cdf_update : 1; + uint32_t use_superres : 1; + uint32_t render_and_frame_size_different : 1; + uint32_t allow_screen_content_tools : 1; + uint32_t is_filter_switchable : 1; + uint32_t force_integer_mv : 1; + uint32_t frame_size_override_flag : 1; + uint32_t buffer_removal_time_present_flag : 1; + uint32_t allow_intrabc : 1; + uint32_t frame_refs_short_signaling : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t is_motion_mode_switchable : 1; + uint32_t use_ref_frame_mvs : 1; + uint32_t disable_frame_end_update_cdf : 1; + uint32_t allow_warped_motion : 1; + uint32_t reduced_tx_set : 1; + uint32_t reference_select : 1; + uint32_t skip_mode_present : 1; + uint32_t delta_q_present : 1; + uint32_t delta_lf_present : 1; + uint32_t delta_lf_multi : 1; + uint32_t segmentation_enabled : 1; + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t UsesLr : 1; + uint32_t usesChromaLr : 1; + uint32_t apply_grain : 1; + uint32_t reserved : 3; +} StdVideoDecodeAV1PictureInfoFlags; + +typedef struct StdVideoDecodeAV1PictureInfo { + StdVideoDecodeAV1PictureInfoFlags flags; + StdVideoAV1FrameType frame_type; + uint32_t current_frame_id; + uint8_t OrderHint; + uint8_t primary_ref_frame; + uint8_t refresh_frame_flags; + uint8_t reserved1; + StdVideoAV1InterpolationFilter interpolation_filter; + StdVideoAV1TxMode TxMode; + uint8_t delta_q_res; + uint8_t delta_lf_res; + uint8_t SkipModeFrame[STD_VIDEO_AV1_SKIP_MODE_FRAMES]; + uint8_t coded_denom; + uint8_t reserved2[3]; + uint8_t OrderHints[STD_VIDEO_AV1_NUM_REF_FRAMES]; + uint32_t expectedFrameId[STD_VIDEO_AV1_NUM_REF_FRAMES]; + const StdVideoAV1TileInfo* pTileInfo; + const StdVideoAV1Quantization* pQuantization; + const StdVideoAV1Segmentation* pSegmentation; + const StdVideoAV1LoopFilter* pLoopFilter; + const StdVideoAV1CDEF* pCDEF; + const StdVideoAV1LoopRestoration* pLoopRestoration; + const StdVideoAV1GlobalMotion* pGlobalMotion; + const StdVideoAV1FilmGrain* pFilmGrain; +} StdVideoDecodeAV1PictureInfo; + +typedef struct StdVideoDecodeAV1ReferenceInfoFlags { + uint32_t disable_frame_end_update_cdf : 1; + uint32_t segmentation_enabled : 1; + uint32_t reserved : 30; +} StdVideoDecodeAV1ReferenceInfoFlags; + +typedef struct StdVideoDecodeAV1ReferenceInfo { + StdVideoDecodeAV1ReferenceInfoFlags flags; + uint8_t frame_type; + uint8_t RefFrameSignBias; + uint8_t OrderHint; + uint8_t SavedOrderHints[STD_VIDEO_AV1_NUM_REF_FRAMES]; +} StdVideoDecodeAV1ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codec_av1std_encode.h b/3rdparty/glad/include/vk_video/vulkan_video_codec_av1std_encode.h new file mode 100644 index 000000000000..ca5f6f474ea1 --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codec_av1std_encode.h @@ -0,0 +1,143 @@ +#ifndef VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_av1std_encode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_av1std_encode 1 +#include "vulkan_video_codec_av1std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_av1_encode" +typedef struct StdVideoEncodeAV1DecoderModelInfo { + uint8_t buffer_delay_length_minus_1; + uint8_t buffer_removal_time_length_minus_1; + uint8_t frame_presentation_time_length_minus_1; + uint8_t reserved1; + uint32_t num_units_in_decoding_tick; +} StdVideoEncodeAV1DecoderModelInfo; + +typedef struct StdVideoEncodeAV1ExtensionHeader { + uint8_t temporal_id; + uint8_t spatial_id; +} StdVideoEncodeAV1ExtensionHeader; + +typedef struct StdVideoEncodeAV1OperatingPointInfoFlags { + uint32_t decoder_model_present_for_this_op : 1; + uint32_t low_delay_mode_flag : 1; + uint32_t initial_display_delay_present_for_this_op : 1; + uint32_t reserved : 29; +} StdVideoEncodeAV1OperatingPointInfoFlags; + +typedef struct StdVideoEncodeAV1OperatingPointInfo { + StdVideoEncodeAV1OperatingPointInfoFlags flags; + uint16_t operating_point_idc; + uint8_t seq_level_idx; + uint8_t seq_tier; + uint32_t decoder_buffer_delay; + uint32_t encoder_buffer_delay; + uint8_t initial_display_delay_minus_1; +} StdVideoEncodeAV1OperatingPointInfo; + +typedef struct StdVideoEncodeAV1PictureInfoFlags { + uint32_t error_resilient_mode : 1; + uint32_t disable_cdf_update : 1; + uint32_t use_superres : 1; + uint32_t render_and_frame_size_different : 1; + uint32_t allow_screen_content_tools : 1; + uint32_t is_filter_switchable : 1; + uint32_t force_integer_mv : 1; + uint32_t frame_size_override_flag : 1; + uint32_t buffer_removal_time_present_flag : 1; + uint32_t allow_intrabc : 1; + uint32_t frame_refs_short_signaling : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t is_motion_mode_switchable : 1; + uint32_t use_ref_frame_mvs : 1; + uint32_t disable_frame_end_update_cdf : 1; + uint32_t allow_warped_motion : 1; + uint32_t reduced_tx_set : 1; + uint32_t skip_mode_present : 1; + uint32_t delta_q_present : 1; + uint32_t delta_lf_present : 1; + uint32_t delta_lf_multi : 1; + uint32_t segmentation_enabled : 1; + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t UsesLr : 1; + uint32_t usesChromaLr : 1; + uint32_t show_frame : 1; + uint32_t showable_frame : 1; + uint32_t reserved : 3; +} StdVideoEncodeAV1PictureInfoFlags; + +typedef struct StdVideoEncodeAV1PictureInfo { + StdVideoEncodeAV1PictureInfoFlags flags; + StdVideoAV1FrameType frame_type; + uint32_t frame_presentation_time; + uint32_t current_frame_id; + uint8_t order_hint; + uint8_t primary_ref_frame; + uint8_t refresh_frame_flags; + uint8_t coded_denom; + uint16_t render_width_minus_1; + uint16_t render_height_minus_1; + StdVideoAV1InterpolationFilter interpolation_filter; + StdVideoAV1TxMode TxMode; + uint8_t delta_q_res; + uint8_t delta_lf_res; + uint8_t ref_order_hint[STD_VIDEO_AV1_NUM_REF_FRAMES]; + int8_t ref_frame_idx[STD_VIDEO_AV1_REFS_PER_FRAME]; + uint8_t reserved1[3]; + uint32_t delta_frame_id_minus_1[STD_VIDEO_AV1_REFS_PER_FRAME]; + const StdVideoAV1TileInfo* pTileInfo; + const StdVideoAV1Quantization* pQuantization; + const StdVideoAV1Segmentation* pSegmentation; + const StdVideoAV1LoopFilter* pLoopFilter; + const StdVideoAV1CDEF* pCDEF; + const StdVideoAV1LoopRestoration* pLoopRestoration; + const StdVideoAV1GlobalMotion* pGlobalMotion; + const StdVideoEncodeAV1ExtensionHeader* pExtensionHeader; + const uint32_t* pBufferRemovalTimes; +} StdVideoEncodeAV1PictureInfo; + +typedef struct StdVideoEncodeAV1ReferenceInfoFlags { + uint32_t disable_frame_end_update_cdf : 1; + uint32_t segmentation_enabled : 1; + uint32_t reserved : 30; +} StdVideoEncodeAV1ReferenceInfoFlags; + +typedef struct StdVideoEncodeAV1ReferenceInfo { + StdVideoEncodeAV1ReferenceInfoFlags flags; + uint32_t RefFrameId; + StdVideoAV1FrameType frame_type; + uint8_t OrderHint; + uint8_t reserved1[3]; + const StdVideoEncodeAV1ExtensionHeader* pExtensionHeader; +} StdVideoEncodeAV1ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codec_h264std.h b/3rdparty/glad/include/vk_video/vulkan_video_codec_h264std.h new file mode 100644 index 000000000000..7e8da7d23729 --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codec_h264std.h @@ -0,0 +1,312 @@ +#ifndef VULKAN_VIDEO_CODEC_H264STD_H_ +#define VULKAN_VIDEO_CODEC_H264STD_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h264std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h264std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_H264_CPB_CNT_LIST_SIZE 32U +#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS 6U +#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS 16U +#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS 6U +#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS 64U +#define STD_VIDEO_H264_MAX_NUM_LIST_REF 32U +#define STD_VIDEO_H264_MAX_CHROMA_PLANES 2U +#define STD_VIDEO_H264_NO_REFERENCE_PICTURE 0xFFU + +typedef enum StdVideoH264ChromaFormatIdc { + STD_VIDEO_H264_CHROMA_FORMAT_IDC_MONOCHROME = 0, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_420 = 1, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_422 = 2, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_444 = 3, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264ChromaFormatIdc; + +typedef enum StdVideoH264ProfileIdc { + STD_VIDEO_H264_PROFILE_IDC_BASELINE = 66, + STD_VIDEO_H264_PROFILE_IDC_MAIN = 77, + STD_VIDEO_H264_PROFILE_IDC_HIGH = 100, + STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE = 244, + STD_VIDEO_H264_PROFILE_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_PROFILE_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264ProfileIdc; + +typedef enum StdVideoH264LevelIdc { + STD_VIDEO_H264_LEVEL_IDC_1_0 = 0, + STD_VIDEO_H264_LEVEL_IDC_1_1 = 1, + STD_VIDEO_H264_LEVEL_IDC_1_2 = 2, + STD_VIDEO_H264_LEVEL_IDC_1_3 = 3, + STD_VIDEO_H264_LEVEL_IDC_2_0 = 4, + STD_VIDEO_H264_LEVEL_IDC_2_1 = 5, + STD_VIDEO_H264_LEVEL_IDC_2_2 = 6, + STD_VIDEO_H264_LEVEL_IDC_3_0 = 7, + STD_VIDEO_H264_LEVEL_IDC_3_1 = 8, + STD_VIDEO_H264_LEVEL_IDC_3_2 = 9, + STD_VIDEO_H264_LEVEL_IDC_4_0 = 10, + STD_VIDEO_H264_LEVEL_IDC_4_1 = 11, + STD_VIDEO_H264_LEVEL_IDC_4_2 = 12, + STD_VIDEO_H264_LEVEL_IDC_5_0 = 13, + STD_VIDEO_H264_LEVEL_IDC_5_1 = 14, + STD_VIDEO_H264_LEVEL_IDC_5_2 = 15, + STD_VIDEO_H264_LEVEL_IDC_6_0 = 16, + STD_VIDEO_H264_LEVEL_IDC_6_1 = 17, + STD_VIDEO_H264_LEVEL_IDC_6_2 = 18, + STD_VIDEO_H264_LEVEL_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_LEVEL_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264LevelIdc; + +typedef enum StdVideoH264PocType { + STD_VIDEO_H264_POC_TYPE_0 = 0, + STD_VIDEO_H264_POC_TYPE_1 = 1, + STD_VIDEO_H264_POC_TYPE_2 = 2, + STD_VIDEO_H264_POC_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_POC_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264PocType; + +typedef enum StdVideoH264AspectRatioIdc { + STD_VIDEO_H264_ASPECT_RATIO_IDC_UNSPECIFIED = 0, + STD_VIDEO_H264_ASPECT_RATIO_IDC_SQUARE = 1, + STD_VIDEO_H264_ASPECT_RATIO_IDC_12_11 = 2, + STD_VIDEO_H264_ASPECT_RATIO_IDC_10_11 = 3, + STD_VIDEO_H264_ASPECT_RATIO_IDC_16_11 = 4, + STD_VIDEO_H264_ASPECT_RATIO_IDC_40_33 = 5, + STD_VIDEO_H264_ASPECT_RATIO_IDC_24_11 = 6, + STD_VIDEO_H264_ASPECT_RATIO_IDC_20_11 = 7, + STD_VIDEO_H264_ASPECT_RATIO_IDC_32_11 = 8, + STD_VIDEO_H264_ASPECT_RATIO_IDC_80_33 = 9, + STD_VIDEO_H264_ASPECT_RATIO_IDC_18_11 = 10, + STD_VIDEO_H264_ASPECT_RATIO_IDC_15_11 = 11, + STD_VIDEO_H264_ASPECT_RATIO_IDC_64_33 = 12, + STD_VIDEO_H264_ASPECT_RATIO_IDC_160_99 = 13, + STD_VIDEO_H264_ASPECT_RATIO_IDC_4_3 = 14, + STD_VIDEO_H264_ASPECT_RATIO_IDC_3_2 = 15, + STD_VIDEO_H264_ASPECT_RATIO_IDC_2_1 = 16, + STD_VIDEO_H264_ASPECT_RATIO_IDC_EXTENDED_SAR = 255, + STD_VIDEO_H264_ASPECT_RATIO_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_ASPECT_RATIO_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264AspectRatioIdc; + +typedef enum StdVideoH264WeightedBipredIdc { + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_DEFAULT = 0, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_EXPLICIT = 1, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_IMPLICIT = 2, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264WeightedBipredIdc; + +typedef enum StdVideoH264ModificationOfPicNumsIdc { + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_SUBTRACT = 0, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_ADD = 1, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_LONG_TERM = 2, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_END = 3, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264ModificationOfPicNumsIdc; + +typedef enum StdVideoH264MemMgmtControlOp { + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_END = 0, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_SHORT_TERM = 1, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_LONG_TERM = 2, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_LONG_TERM = 3, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_SET_MAX_LONG_TERM_INDEX = 4, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_ALL = 5, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_CURRENT_AS_LONG_TERM = 6, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264MemMgmtControlOp; + +typedef enum StdVideoH264CabacInitIdc { + STD_VIDEO_H264_CABAC_INIT_IDC_0 = 0, + STD_VIDEO_H264_CABAC_INIT_IDC_1 = 1, + STD_VIDEO_H264_CABAC_INIT_IDC_2 = 2, + STD_VIDEO_H264_CABAC_INIT_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_CABAC_INIT_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264CabacInitIdc; + +typedef enum StdVideoH264DisableDeblockingFilterIdc { + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED = 0, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED = 1, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_PARTIAL = 2, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264DisableDeblockingFilterIdc; + +typedef enum StdVideoH264SliceType { + STD_VIDEO_H264_SLICE_TYPE_P = 0, + STD_VIDEO_H264_SLICE_TYPE_B = 1, + STD_VIDEO_H264_SLICE_TYPE_I = 2, + STD_VIDEO_H264_SLICE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_SLICE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264SliceType; + +typedef enum StdVideoH264PictureType { + STD_VIDEO_H264_PICTURE_TYPE_P = 0, + STD_VIDEO_H264_PICTURE_TYPE_B = 1, + STD_VIDEO_H264_PICTURE_TYPE_I = 2, + STD_VIDEO_H264_PICTURE_TYPE_IDR = 5, + STD_VIDEO_H264_PICTURE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_PICTURE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264PictureType; + +typedef enum StdVideoH264NonVclNaluType { + STD_VIDEO_H264_NON_VCL_NALU_TYPE_SPS = 0, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_PPS = 1, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_AUD = 2, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_PREFIX = 3, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_SEQUENCE = 4, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_STREAM = 5, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_PRECODED = 6, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264NonVclNaluType; +typedef struct StdVideoH264SpsVuiFlags { + uint32_t aspect_ratio_info_present_flag : 1; + uint32_t overscan_info_present_flag : 1; + uint32_t overscan_appropriate_flag : 1; + uint32_t video_signal_type_present_flag : 1; + uint32_t video_full_range_flag : 1; + uint32_t color_description_present_flag : 1; + uint32_t chroma_loc_info_present_flag : 1; + uint32_t timing_info_present_flag : 1; + uint32_t fixed_frame_rate_flag : 1; + uint32_t bitstream_restriction_flag : 1; + uint32_t nal_hrd_parameters_present_flag : 1; + uint32_t vcl_hrd_parameters_present_flag : 1; +} StdVideoH264SpsVuiFlags; + +typedef struct StdVideoH264HrdParameters { + uint8_t cpb_cnt_minus1; + uint8_t bit_rate_scale; + uint8_t cpb_size_scale; + uint8_t reserved1; + uint32_t bit_rate_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; + uint32_t cpb_size_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; + uint8_t cbr_flag[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; + uint32_t initial_cpb_removal_delay_length_minus1; + uint32_t cpb_removal_delay_length_minus1; + uint32_t dpb_output_delay_length_minus1; + uint32_t time_offset_length; +} StdVideoH264HrdParameters; + +typedef struct StdVideoH264SequenceParameterSetVui { + StdVideoH264SpsVuiFlags flags; + StdVideoH264AspectRatioIdc aspect_ratio_idc; + uint16_t sar_width; + uint16_t sar_height; + uint8_t video_format; + uint8_t colour_primaries; + uint8_t transfer_characteristics; + uint8_t matrix_coefficients; + uint32_t num_units_in_tick; + uint32_t time_scale; + uint8_t max_num_reorder_frames; + uint8_t max_dec_frame_buffering; + uint8_t chroma_sample_loc_type_top_field; + uint8_t chroma_sample_loc_type_bottom_field; + uint32_t reserved1; + const StdVideoH264HrdParameters* pHrdParameters; +} StdVideoH264SequenceParameterSetVui; + +typedef struct StdVideoH264SpsFlags { + uint32_t constraint_set0_flag : 1; + uint32_t constraint_set1_flag : 1; + uint32_t constraint_set2_flag : 1; + uint32_t constraint_set3_flag : 1; + uint32_t constraint_set4_flag : 1; + uint32_t constraint_set5_flag : 1; + uint32_t direct_8x8_inference_flag : 1; + uint32_t mb_adaptive_frame_field_flag : 1; + uint32_t frame_mbs_only_flag : 1; + uint32_t delta_pic_order_always_zero_flag : 1; + uint32_t separate_colour_plane_flag : 1; + uint32_t gaps_in_frame_num_value_allowed_flag : 1; + uint32_t qpprime_y_zero_transform_bypass_flag : 1; + uint32_t frame_cropping_flag : 1; + uint32_t seq_scaling_matrix_present_flag : 1; + uint32_t vui_parameters_present_flag : 1; +} StdVideoH264SpsFlags; + +typedef struct StdVideoH264ScalingLists { + uint16_t scaling_list_present_mask; + uint16_t use_default_scaling_matrix_mask; + uint8_t ScalingList4x4[STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS]; + uint8_t ScalingList8x8[STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS]; +} StdVideoH264ScalingLists; + +typedef struct StdVideoH264SequenceParameterSet { + StdVideoH264SpsFlags flags; + StdVideoH264ProfileIdc profile_idc; + StdVideoH264LevelIdc level_idc; + StdVideoH264ChromaFormatIdc chroma_format_idc; + uint8_t seq_parameter_set_id; + uint8_t bit_depth_luma_minus8; + uint8_t bit_depth_chroma_minus8; + uint8_t log2_max_frame_num_minus4; + StdVideoH264PocType pic_order_cnt_type; + int32_t offset_for_non_ref_pic; + int32_t offset_for_top_to_bottom_field; + uint8_t log2_max_pic_order_cnt_lsb_minus4; + uint8_t num_ref_frames_in_pic_order_cnt_cycle; + uint8_t max_num_ref_frames; + uint8_t reserved1; + uint32_t pic_width_in_mbs_minus1; + uint32_t pic_height_in_map_units_minus1; + uint32_t frame_crop_left_offset; + uint32_t frame_crop_right_offset; + uint32_t frame_crop_top_offset; + uint32_t frame_crop_bottom_offset; + uint32_t reserved2; + const int32_t* pOffsetForRefFrame; + const StdVideoH264ScalingLists* pScalingLists; + const StdVideoH264SequenceParameterSetVui* pSequenceParameterSetVui; +} StdVideoH264SequenceParameterSet; + +typedef struct StdVideoH264PpsFlags { + uint32_t transform_8x8_mode_flag : 1; + uint32_t redundant_pic_cnt_present_flag : 1; + uint32_t constrained_intra_pred_flag : 1; + uint32_t deblocking_filter_control_present_flag : 1; + uint32_t weighted_pred_flag : 1; + uint32_t bottom_field_pic_order_in_frame_present_flag : 1; + uint32_t entropy_coding_mode_flag : 1; + uint32_t pic_scaling_matrix_present_flag : 1; +} StdVideoH264PpsFlags; + +typedef struct StdVideoH264PictureParameterSet { + StdVideoH264PpsFlags flags; + uint8_t seq_parameter_set_id; + uint8_t pic_parameter_set_id; + uint8_t num_ref_idx_l0_default_active_minus1; + uint8_t num_ref_idx_l1_default_active_minus1; + StdVideoH264WeightedBipredIdc weighted_bipred_idc; + int8_t pic_init_qp_minus26; + int8_t pic_init_qs_minus26; + int8_t chroma_qp_index_offset; + int8_t second_chroma_qp_index_offset; + const StdVideoH264ScalingLists* pScalingLists; +} StdVideoH264PictureParameterSet; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codec_h264std_decode.h b/3rdparty/glad/include/vk_video/vulkan_video_codec_h264std_decode.h new file mode 100644 index 000000000000..01facd732068 --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codec_h264std_decode.h @@ -0,0 +1,77 @@ +#ifndef VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h264std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h264std_decode 1 +#include "vulkan_video_codec_h264std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_decode" +#define STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE 2U + +typedef enum StdVideoDecodeH264FieldOrderCount { + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_TOP = 0, + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_BOTTOM = 1, + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_INVALID = 0x7FFFFFFF, + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_MAX_ENUM = 0x7FFFFFFF +} StdVideoDecodeH264FieldOrderCount; +typedef struct StdVideoDecodeH264PictureInfoFlags { + uint32_t field_pic_flag : 1; + uint32_t is_intra : 1; + uint32_t IdrPicFlag : 1; + uint32_t bottom_field_flag : 1; + uint32_t is_reference : 1; + uint32_t complementary_field_pair : 1; +} StdVideoDecodeH264PictureInfoFlags; + +typedef struct StdVideoDecodeH264PictureInfo { + StdVideoDecodeH264PictureInfoFlags flags; + uint8_t seq_parameter_set_id; + uint8_t pic_parameter_set_id; + uint8_t reserved1; + uint8_t reserved2; + uint16_t frame_num; + uint16_t idr_pic_id; + int32_t PicOrderCnt[STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE]; +} StdVideoDecodeH264PictureInfo; + +typedef struct StdVideoDecodeH264ReferenceInfoFlags { + uint32_t top_field_flag : 1; + uint32_t bottom_field_flag : 1; + uint32_t used_for_long_term_reference : 1; + uint32_t is_non_existing : 1; +} StdVideoDecodeH264ReferenceInfoFlags; + +typedef struct StdVideoDecodeH264ReferenceInfo { + StdVideoDecodeH264ReferenceInfoFlags flags; + uint16_t FrameNum; + uint16_t reserved; + int32_t PicOrderCnt[STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE]; +} StdVideoDecodeH264ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codec_h264std_encode.h b/3rdparty/glad/include/vk_video/vulkan_video_codec_h264std_encode.h new file mode 100644 index 000000000000..410b1b254987 --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codec_h264std_encode.h @@ -0,0 +1,147 @@ +#ifndef VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ +#define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h264std_encode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h264std_encode 1 +#include "vulkan_video_codec_h264std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_encode" +typedef struct StdVideoEncodeH264WeightTableFlags { + uint32_t luma_weight_l0_flag; + uint32_t chroma_weight_l0_flag; + uint32_t luma_weight_l1_flag; + uint32_t chroma_weight_l1_flag; +} StdVideoEncodeH264WeightTableFlags; + +typedef struct StdVideoEncodeH264WeightTable { + StdVideoEncodeH264WeightTableFlags flags; + uint8_t luma_log2_weight_denom; + uint8_t chroma_log2_weight_denom; + int8_t luma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t luma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t chroma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; + int8_t chroma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; + int8_t luma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t luma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t chroma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; + int8_t chroma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; +} StdVideoEncodeH264WeightTable; + +typedef struct StdVideoEncodeH264SliceHeaderFlags { + uint32_t direct_spatial_mv_pred_flag : 1; + uint32_t num_ref_idx_active_override_flag : 1; + uint32_t reserved : 30; +} StdVideoEncodeH264SliceHeaderFlags; + +typedef struct StdVideoEncodeH264PictureInfoFlags { + uint32_t IdrPicFlag : 1; + uint32_t is_reference : 1; + uint32_t no_output_of_prior_pics_flag : 1; + uint32_t long_term_reference_flag : 1; + uint32_t adaptive_ref_pic_marking_mode_flag : 1; + uint32_t reserved : 27; +} StdVideoEncodeH264PictureInfoFlags; + +typedef struct StdVideoEncodeH264ReferenceInfoFlags { + uint32_t used_for_long_term_reference : 1; + uint32_t reserved : 31; +} StdVideoEncodeH264ReferenceInfoFlags; + +typedef struct StdVideoEncodeH264ReferenceListsInfoFlags { + uint32_t ref_pic_list_modification_flag_l0 : 1; + uint32_t ref_pic_list_modification_flag_l1 : 1; + uint32_t reserved : 30; +} StdVideoEncodeH264ReferenceListsInfoFlags; + +typedef struct StdVideoEncodeH264RefListModEntry { + StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc; + uint16_t abs_diff_pic_num_minus1; + uint16_t long_term_pic_num; +} StdVideoEncodeH264RefListModEntry; + +typedef struct StdVideoEncodeH264RefPicMarkingEntry { + StdVideoH264MemMgmtControlOp memory_management_control_operation; + uint16_t difference_of_pic_nums_minus1; + uint16_t long_term_pic_num; + uint16_t long_term_frame_idx; + uint16_t max_long_term_frame_idx_plus1; +} StdVideoEncodeH264RefPicMarkingEntry; + +typedef struct StdVideoEncodeH264ReferenceListsInfo { + StdVideoEncodeH264ReferenceListsInfoFlags flags; + uint8_t num_ref_idx_l0_active_minus1; + uint8_t num_ref_idx_l1_active_minus1; + uint8_t RefPicList0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + uint8_t RefPicList1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + uint8_t refList0ModOpCount; + uint8_t refList1ModOpCount; + uint8_t refPicMarkingOpCount; + uint8_t reserved1[7]; + const StdVideoEncodeH264RefListModEntry* pRefList0ModOperations; + const StdVideoEncodeH264RefListModEntry* pRefList1ModOperations; + const StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperations; +} StdVideoEncodeH264ReferenceListsInfo; + +typedef struct StdVideoEncodeH264PictureInfo { + StdVideoEncodeH264PictureInfoFlags flags; + uint8_t seq_parameter_set_id; + uint8_t pic_parameter_set_id; + uint16_t idr_pic_id; + StdVideoH264PictureType primary_pic_type; + uint32_t frame_num; + int32_t PicOrderCnt; + uint8_t temporal_id; + uint8_t reserved1[3]; + const StdVideoEncodeH264ReferenceListsInfo* pRefLists; +} StdVideoEncodeH264PictureInfo; + +typedef struct StdVideoEncodeH264ReferenceInfo { + StdVideoEncodeH264ReferenceInfoFlags flags; + StdVideoH264PictureType primary_pic_type; + uint32_t FrameNum; + int32_t PicOrderCnt; + uint16_t long_term_pic_num; + uint16_t long_term_frame_idx; + uint8_t temporal_id; +} StdVideoEncodeH264ReferenceInfo; + +typedef struct StdVideoEncodeH264SliceHeader { + StdVideoEncodeH264SliceHeaderFlags flags; + uint32_t first_mb_in_slice; + StdVideoH264SliceType slice_type; + int8_t slice_alpha_c0_offset_div2; + int8_t slice_beta_offset_div2; + int8_t slice_qp_delta; + uint8_t reserved1; + StdVideoH264CabacInitIdc cabac_init_idc; + StdVideoH264DisableDeblockingFilterIdc disable_deblocking_filter_idc; + const StdVideoEncodeH264WeightTable* pWeightTable; +} StdVideoEncodeH264SliceHeader; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codec_h265std.h b/3rdparty/glad/include/vk_video/vulkan_video_codec_h265std.h new file mode 100644 index 000000000000..20e97e399e97 --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codec_h265std.h @@ -0,0 +1,446 @@ +#ifndef VULKAN_VIDEO_CODEC_H265STD_H_ +#define VULKAN_VIDEO_CODEC_H265STD_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h265std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h265std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32U +#define STD_VIDEO_H265_SUBLAYERS_LIST_SIZE 7U +#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS 6U +#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS 16U +#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS 6U +#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS 64U +#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS 6U +#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS 64U +#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS 2U +#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64U +#define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6U +#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19U +#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21U +#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3U +#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128U +#define STD_VIDEO_H265_MAX_NUM_LIST_REF 15U +#define STD_VIDEO_H265_MAX_CHROMA_PLANES 2U +#define STD_VIDEO_H265_MAX_SHORT_TERM_REF_PIC_SETS 64U +#define STD_VIDEO_H265_MAX_DPB_SIZE 16U +#define STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS 32U +#define STD_VIDEO_H265_MAX_LONG_TERM_PICS 16U +#define STD_VIDEO_H265_MAX_DELTA_POC 48U +#define STD_VIDEO_H265_NO_REFERENCE_PICTURE 0xFFU + +typedef enum StdVideoH265ChromaFormatIdc { + STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME = 0, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_420 = 1, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_422 = 2, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_444 = 3, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265ChromaFormatIdc; + +typedef enum StdVideoH265ProfileIdc { + STD_VIDEO_H265_PROFILE_IDC_MAIN = 1, + STD_VIDEO_H265_PROFILE_IDC_MAIN_10 = 2, + STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE = 3, + STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS = 4, + STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS = 9, + STD_VIDEO_H265_PROFILE_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_PROFILE_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265ProfileIdc; + +typedef enum StdVideoH265LevelIdc { + STD_VIDEO_H265_LEVEL_IDC_1_0 = 0, + STD_VIDEO_H265_LEVEL_IDC_2_0 = 1, + STD_VIDEO_H265_LEVEL_IDC_2_1 = 2, + STD_VIDEO_H265_LEVEL_IDC_3_0 = 3, + STD_VIDEO_H265_LEVEL_IDC_3_1 = 4, + STD_VIDEO_H265_LEVEL_IDC_4_0 = 5, + STD_VIDEO_H265_LEVEL_IDC_4_1 = 6, + STD_VIDEO_H265_LEVEL_IDC_5_0 = 7, + STD_VIDEO_H265_LEVEL_IDC_5_1 = 8, + STD_VIDEO_H265_LEVEL_IDC_5_2 = 9, + STD_VIDEO_H265_LEVEL_IDC_6_0 = 10, + STD_VIDEO_H265_LEVEL_IDC_6_1 = 11, + STD_VIDEO_H265_LEVEL_IDC_6_2 = 12, + STD_VIDEO_H265_LEVEL_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_LEVEL_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265LevelIdc; + +typedef enum StdVideoH265SliceType { + STD_VIDEO_H265_SLICE_TYPE_B = 0, + STD_VIDEO_H265_SLICE_TYPE_P = 1, + STD_VIDEO_H265_SLICE_TYPE_I = 2, + STD_VIDEO_H265_SLICE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_SLICE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265SliceType; + +typedef enum StdVideoH265PictureType { + STD_VIDEO_H265_PICTURE_TYPE_P = 0, + STD_VIDEO_H265_PICTURE_TYPE_B = 1, + STD_VIDEO_H265_PICTURE_TYPE_I = 2, + STD_VIDEO_H265_PICTURE_TYPE_IDR = 3, + STD_VIDEO_H265_PICTURE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_PICTURE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265PictureType; + +typedef enum StdVideoH265AspectRatioIdc { + STD_VIDEO_H265_ASPECT_RATIO_IDC_UNSPECIFIED = 0, + STD_VIDEO_H265_ASPECT_RATIO_IDC_SQUARE = 1, + STD_VIDEO_H265_ASPECT_RATIO_IDC_12_11 = 2, + STD_VIDEO_H265_ASPECT_RATIO_IDC_10_11 = 3, + STD_VIDEO_H265_ASPECT_RATIO_IDC_16_11 = 4, + STD_VIDEO_H265_ASPECT_RATIO_IDC_40_33 = 5, + STD_VIDEO_H265_ASPECT_RATIO_IDC_24_11 = 6, + STD_VIDEO_H265_ASPECT_RATIO_IDC_20_11 = 7, + STD_VIDEO_H265_ASPECT_RATIO_IDC_32_11 = 8, + STD_VIDEO_H265_ASPECT_RATIO_IDC_80_33 = 9, + STD_VIDEO_H265_ASPECT_RATIO_IDC_18_11 = 10, + STD_VIDEO_H265_ASPECT_RATIO_IDC_15_11 = 11, + STD_VIDEO_H265_ASPECT_RATIO_IDC_64_33 = 12, + STD_VIDEO_H265_ASPECT_RATIO_IDC_160_99 = 13, + STD_VIDEO_H265_ASPECT_RATIO_IDC_4_3 = 14, + STD_VIDEO_H265_ASPECT_RATIO_IDC_3_2 = 15, + STD_VIDEO_H265_ASPECT_RATIO_IDC_2_1 = 16, + STD_VIDEO_H265_ASPECT_RATIO_IDC_EXTENDED_SAR = 255, + STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_ASPECT_RATIO_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265AspectRatioIdc; +typedef struct StdVideoH265DecPicBufMgr { + uint32_t max_latency_increase_plus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint8_t max_dec_pic_buffering_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint8_t max_num_reorder_pics[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; +} StdVideoH265DecPicBufMgr; + +typedef struct StdVideoH265SubLayerHrdParameters { + uint32_t bit_rate_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t cpb_size_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t cpb_size_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t bit_rate_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t cbr_flag; +} StdVideoH265SubLayerHrdParameters; + +typedef struct StdVideoH265HrdFlags { + uint32_t nal_hrd_parameters_present_flag : 1; + uint32_t vcl_hrd_parameters_present_flag : 1; + uint32_t sub_pic_hrd_params_present_flag : 1; + uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1; + uint32_t fixed_pic_rate_general_flag : 8; + uint32_t fixed_pic_rate_within_cvs_flag : 8; + uint32_t low_delay_hrd_flag : 8; +} StdVideoH265HrdFlags; + +typedef struct StdVideoH265HrdParameters { + StdVideoH265HrdFlags flags; + uint8_t tick_divisor_minus2; + uint8_t du_cpb_removal_delay_increment_length_minus1; + uint8_t dpb_output_delay_du_length_minus1; + uint8_t bit_rate_scale; + uint8_t cpb_size_scale; + uint8_t cpb_size_du_scale; + uint8_t initial_cpb_removal_delay_length_minus1; + uint8_t au_cpb_removal_delay_length_minus1; + uint8_t dpb_output_delay_length_minus1; + uint8_t cpb_cnt_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint16_t elemental_duration_in_tc_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint16_t reserved[3]; + const StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersNal; + const StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersVcl; +} StdVideoH265HrdParameters; + +typedef struct StdVideoH265VpsFlags { + uint32_t vps_temporal_id_nesting_flag : 1; + uint32_t vps_sub_layer_ordering_info_present_flag : 1; + uint32_t vps_timing_info_present_flag : 1; + uint32_t vps_poc_proportional_to_timing_flag : 1; +} StdVideoH265VpsFlags; + +typedef struct StdVideoH265ProfileTierLevelFlags { + uint32_t general_tier_flag : 1; + uint32_t general_progressive_source_flag : 1; + uint32_t general_interlaced_source_flag : 1; + uint32_t general_non_packed_constraint_flag : 1; + uint32_t general_frame_only_constraint_flag : 1; +} StdVideoH265ProfileTierLevelFlags; + +typedef struct StdVideoH265ProfileTierLevel { + StdVideoH265ProfileTierLevelFlags flags; + StdVideoH265ProfileIdc general_profile_idc; + StdVideoH265LevelIdc general_level_idc; +} StdVideoH265ProfileTierLevel; + +typedef struct StdVideoH265VideoParameterSet { + StdVideoH265VpsFlags flags; + uint8_t vps_video_parameter_set_id; + uint8_t vps_max_sub_layers_minus1; + uint8_t reserved1; + uint8_t reserved2; + uint32_t vps_num_units_in_tick; + uint32_t vps_time_scale; + uint32_t vps_num_ticks_poc_diff_one_minus1; + uint32_t reserved3; + const StdVideoH265DecPicBufMgr* pDecPicBufMgr; + const StdVideoH265HrdParameters* pHrdParameters; + const StdVideoH265ProfileTierLevel* pProfileTierLevel; +} StdVideoH265VideoParameterSet; + +typedef struct StdVideoH265ScalingLists { + uint8_t ScalingList4x4[STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS]; + uint8_t ScalingList8x8[STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS]; + uint8_t ScalingList16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS]; + uint8_t ScalingList32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS]; + uint8_t ScalingListDCCoef16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS]; + uint8_t ScalingListDCCoef32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS]; +} StdVideoH265ScalingLists; + +typedef struct StdVideoH265SpsVuiFlags { + uint32_t aspect_ratio_info_present_flag : 1; + uint32_t overscan_info_present_flag : 1; + uint32_t overscan_appropriate_flag : 1; + uint32_t video_signal_type_present_flag : 1; + uint32_t video_full_range_flag : 1; + uint32_t colour_description_present_flag : 1; + uint32_t chroma_loc_info_present_flag : 1; + uint32_t neutral_chroma_indication_flag : 1; + uint32_t field_seq_flag : 1; + uint32_t frame_field_info_present_flag : 1; + uint32_t default_display_window_flag : 1; + uint32_t vui_timing_info_present_flag : 1; + uint32_t vui_poc_proportional_to_timing_flag : 1; + uint32_t vui_hrd_parameters_present_flag : 1; + uint32_t bitstream_restriction_flag : 1; + uint32_t tiles_fixed_structure_flag : 1; + uint32_t motion_vectors_over_pic_boundaries_flag : 1; + uint32_t restricted_ref_pic_lists_flag : 1; +} StdVideoH265SpsVuiFlags; + +typedef struct StdVideoH265SequenceParameterSetVui { + StdVideoH265SpsVuiFlags flags; + StdVideoH265AspectRatioIdc aspect_ratio_idc; + uint16_t sar_width; + uint16_t sar_height; + uint8_t video_format; + uint8_t colour_primaries; + uint8_t transfer_characteristics; + uint8_t matrix_coeffs; + uint8_t chroma_sample_loc_type_top_field; + uint8_t chroma_sample_loc_type_bottom_field; + uint8_t reserved1; + uint8_t reserved2; + uint16_t def_disp_win_left_offset; + uint16_t def_disp_win_right_offset; + uint16_t def_disp_win_top_offset; + uint16_t def_disp_win_bottom_offset; + uint32_t vui_num_units_in_tick; + uint32_t vui_time_scale; + uint32_t vui_num_ticks_poc_diff_one_minus1; + uint16_t min_spatial_segmentation_idc; + uint16_t reserved3; + uint8_t max_bytes_per_pic_denom; + uint8_t max_bits_per_min_cu_denom; + uint8_t log2_max_mv_length_horizontal; + uint8_t log2_max_mv_length_vertical; + const StdVideoH265HrdParameters* pHrdParameters; +} StdVideoH265SequenceParameterSetVui; + +typedef struct StdVideoH265PredictorPaletteEntries { + uint16_t PredictorPaletteEntries[STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE][STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE]; +} StdVideoH265PredictorPaletteEntries; + +typedef struct StdVideoH265SpsFlags { + uint32_t sps_temporal_id_nesting_flag : 1; + uint32_t separate_colour_plane_flag : 1; + uint32_t conformance_window_flag : 1; + uint32_t sps_sub_layer_ordering_info_present_flag : 1; + uint32_t scaling_list_enabled_flag : 1; + uint32_t sps_scaling_list_data_present_flag : 1; + uint32_t amp_enabled_flag : 1; + uint32_t sample_adaptive_offset_enabled_flag : 1; + uint32_t pcm_enabled_flag : 1; + uint32_t pcm_loop_filter_disabled_flag : 1; + uint32_t long_term_ref_pics_present_flag : 1; + uint32_t sps_temporal_mvp_enabled_flag : 1; + uint32_t strong_intra_smoothing_enabled_flag : 1; + uint32_t vui_parameters_present_flag : 1; + uint32_t sps_extension_present_flag : 1; + uint32_t sps_range_extension_flag : 1; + uint32_t transform_skip_rotation_enabled_flag : 1; + uint32_t transform_skip_context_enabled_flag : 1; + uint32_t implicit_rdpcm_enabled_flag : 1; + uint32_t explicit_rdpcm_enabled_flag : 1; + uint32_t extended_precision_processing_flag : 1; + uint32_t intra_smoothing_disabled_flag : 1; + uint32_t high_precision_offsets_enabled_flag : 1; + uint32_t persistent_rice_adaptation_enabled_flag : 1; + uint32_t cabac_bypass_alignment_enabled_flag : 1; + uint32_t sps_scc_extension_flag : 1; + uint32_t sps_curr_pic_ref_enabled_flag : 1; + uint32_t palette_mode_enabled_flag : 1; + uint32_t sps_palette_predictor_initializers_present_flag : 1; + uint32_t intra_boundary_filtering_disabled_flag : 1; +} StdVideoH265SpsFlags; + +typedef struct StdVideoH265ShortTermRefPicSetFlags { + uint32_t inter_ref_pic_set_prediction_flag : 1; + uint32_t delta_rps_sign : 1; +} StdVideoH265ShortTermRefPicSetFlags; + +typedef struct StdVideoH265ShortTermRefPicSet { + StdVideoH265ShortTermRefPicSetFlags flags; + uint32_t delta_idx_minus1; + uint16_t use_delta_flag; + uint16_t abs_delta_rps_minus1; + uint16_t used_by_curr_pic_flag; + uint16_t used_by_curr_pic_s0_flag; + uint16_t used_by_curr_pic_s1_flag; + uint16_t reserved1; + uint8_t reserved2; + uint8_t reserved3; + uint8_t num_negative_pics; + uint8_t num_positive_pics; + uint16_t delta_poc_s0_minus1[STD_VIDEO_H265_MAX_DPB_SIZE]; + uint16_t delta_poc_s1_minus1[STD_VIDEO_H265_MAX_DPB_SIZE]; +} StdVideoH265ShortTermRefPicSet; + +typedef struct StdVideoH265LongTermRefPicsSps { + uint32_t used_by_curr_pic_lt_sps_flag; + uint32_t lt_ref_pic_poc_lsb_sps[STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS]; +} StdVideoH265LongTermRefPicsSps; + +typedef struct StdVideoH265SequenceParameterSet { + StdVideoH265SpsFlags flags; + StdVideoH265ChromaFormatIdc chroma_format_idc; + uint32_t pic_width_in_luma_samples; + uint32_t pic_height_in_luma_samples; + uint8_t sps_video_parameter_set_id; + uint8_t sps_max_sub_layers_minus1; + uint8_t sps_seq_parameter_set_id; + uint8_t bit_depth_luma_minus8; + uint8_t bit_depth_chroma_minus8; + uint8_t log2_max_pic_order_cnt_lsb_minus4; + uint8_t log2_min_luma_coding_block_size_minus3; + uint8_t log2_diff_max_min_luma_coding_block_size; + uint8_t log2_min_luma_transform_block_size_minus2; + uint8_t log2_diff_max_min_luma_transform_block_size; + uint8_t max_transform_hierarchy_depth_inter; + uint8_t max_transform_hierarchy_depth_intra; + uint8_t num_short_term_ref_pic_sets; + uint8_t num_long_term_ref_pics_sps; + uint8_t pcm_sample_bit_depth_luma_minus1; + uint8_t pcm_sample_bit_depth_chroma_minus1; + uint8_t log2_min_pcm_luma_coding_block_size_minus3; + uint8_t log2_diff_max_min_pcm_luma_coding_block_size; + uint8_t reserved1; + uint8_t reserved2; + uint8_t palette_max_size; + uint8_t delta_palette_max_predictor_size; + uint8_t motion_vector_resolution_control_idc; + uint8_t sps_num_palette_predictor_initializers_minus1; + uint32_t conf_win_left_offset; + uint32_t conf_win_right_offset; + uint32_t conf_win_top_offset; + uint32_t conf_win_bottom_offset; + const StdVideoH265ProfileTierLevel* pProfileTierLevel; + const StdVideoH265DecPicBufMgr* pDecPicBufMgr; + const StdVideoH265ScalingLists* pScalingLists; + const StdVideoH265ShortTermRefPicSet* pShortTermRefPicSet; + const StdVideoH265LongTermRefPicsSps* pLongTermRefPicsSps; + const StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVui; + const StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; +} StdVideoH265SequenceParameterSet; + +typedef struct StdVideoH265PpsFlags { + uint32_t dependent_slice_segments_enabled_flag : 1; + uint32_t output_flag_present_flag : 1; + uint32_t sign_data_hiding_enabled_flag : 1; + uint32_t cabac_init_present_flag : 1; + uint32_t constrained_intra_pred_flag : 1; + uint32_t transform_skip_enabled_flag : 1; + uint32_t cu_qp_delta_enabled_flag : 1; + uint32_t pps_slice_chroma_qp_offsets_present_flag : 1; + uint32_t weighted_pred_flag : 1; + uint32_t weighted_bipred_flag : 1; + uint32_t transquant_bypass_enabled_flag : 1; + uint32_t tiles_enabled_flag : 1; + uint32_t entropy_coding_sync_enabled_flag : 1; + uint32_t uniform_spacing_flag : 1; + uint32_t loop_filter_across_tiles_enabled_flag : 1; + uint32_t pps_loop_filter_across_slices_enabled_flag : 1; + uint32_t deblocking_filter_control_present_flag : 1; + uint32_t deblocking_filter_override_enabled_flag : 1; + uint32_t pps_deblocking_filter_disabled_flag : 1; + uint32_t pps_scaling_list_data_present_flag : 1; + uint32_t lists_modification_present_flag : 1; + uint32_t slice_segment_header_extension_present_flag : 1; + uint32_t pps_extension_present_flag : 1; + uint32_t cross_component_prediction_enabled_flag : 1; + uint32_t chroma_qp_offset_list_enabled_flag : 1; + uint32_t pps_curr_pic_ref_enabled_flag : 1; + uint32_t residual_adaptive_colour_transform_enabled_flag : 1; + uint32_t pps_slice_act_qp_offsets_present_flag : 1; + uint32_t pps_palette_predictor_initializers_present_flag : 1; + uint32_t monochrome_palette_flag : 1; + uint32_t pps_range_extension_flag : 1; +} StdVideoH265PpsFlags; + +typedef struct StdVideoH265PictureParameterSet { + StdVideoH265PpsFlags flags; + uint8_t pps_pic_parameter_set_id; + uint8_t pps_seq_parameter_set_id; + uint8_t sps_video_parameter_set_id; + uint8_t num_extra_slice_header_bits; + uint8_t num_ref_idx_l0_default_active_minus1; + uint8_t num_ref_idx_l1_default_active_minus1; + int8_t init_qp_minus26; + uint8_t diff_cu_qp_delta_depth; + int8_t pps_cb_qp_offset; + int8_t pps_cr_qp_offset; + int8_t pps_beta_offset_div2; + int8_t pps_tc_offset_div2; + uint8_t log2_parallel_merge_level_minus2; + uint8_t log2_max_transform_skip_block_size_minus2; + uint8_t diff_cu_chroma_qp_offset_depth; + uint8_t chroma_qp_offset_list_len_minus1; + int8_t cb_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE]; + int8_t cr_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE]; + uint8_t log2_sao_offset_scale_luma; + uint8_t log2_sao_offset_scale_chroma; + int8_t pps_act_y_qp_offset_plus5; + int8_t pps_act_cb_qp_offset_plus5; + int8_t pps_act_cr_qp_offset_plus3; + uint8_t pps_num_palette_predictor_initializers; + uint8_t luma_bit_depth_entry_minus8; + uint8_t chroma_bit_depth_entry_minus8; + uint8_t num_tile_columns_minus1; + uint8_t num_tile_rows_minus1; + uint8_t reserved1; + uint8_t reserved2; + uint16_t column_width_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE]; + uint16_t row_height_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE]; + uint32_t reserved3; + const StdVideoH265ScalingLists* pScalingLists; + const StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; +} StdVideoH265PictureParameterSet; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codec_h265std_decode.h b/3rdparty/glad/include/vk_video/vulkan_video_codec_h265std_decode.h new file mode 100644 index 000000000000..a2ddcaa469ea --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codec_h265std_decode.h @@ -0,0 +1,67 @@ +#ifndef VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h265std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h265std_decode 1 +#include "vulkan_video_codec_h265std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_decode" +#define STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE 8U +typedef struct StdVideoDecodeH265PictureInfoFlags { + uint32_t IrapPicFlag : 1; + uint32_t IdrPicFlag : 1; + uint32_t IsReference : 1; + uint32_t short_term_ref_pic_set_sps_flag : 1; +} StdVideoDecodeH265PictureInfoFlags; + +typedef struct StdVideoDecodeH265PictureInfo { + StdVideoDecodeH265PictureInfoFlags flags; + uint8_t sps_video_parameter_set_id; + uint8_t pps_seq_parameter_set_id; + uint8_t pps_pic_parameter_set_id; + uint8_t NumDeltaPocsOfRefRpsIdx; + int32_t PicOrderCntVal; + uint16_t NumBitsForSTRefPicSetInSlice; + uint16_t reserved; + uint8_t RefPicSetStCurrBefore[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; + uint8_t RefPicSetStCurrAfter[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; + uint8_t RefPicSetLtCurr[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; +} StdVideoDecodeH265PictureInfo; + +typedef struct StdVideoDecodeH265ReferenceInfoFlags { + uint32_t used_for_long_term_reference : 1; + uint32_t unused_for_reference : 1; +} StdVideoDecodeH265ReferenceInfoFlags; + +typedef struct StdVideoDecodeH265ReferenceInfo { + StdVideoDecodeH265ReferenceInfoFlags flags; + int32_t PicOrderCntVal; +} StdVideoDecodeH265ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codec_h265std_encode.h b/3rdparty/glad/include/vk_video/vulkan_video_codec_h265std_encode.h new file mode 100644 index 000000000000..fe2f28d57f6b --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codec_h265std_encode.h @@ -0,0 +1,157 @@ +#ifndef VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ +#define VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h265std_encode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h265std_encode 1 +#include "vulkan_video_codec_h265std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_encode" +typedef struct StdVideoEncodeH265WeightTableFlags { + uint16_t luma_weight_l0_flag; + uint16_t chroma_weight_l0_flag; + uint16_t luma_weight_l1_flag; + uint16_t chroma_weight_l1_flag; +} StdVideoEncodeH265WeightTableFlags; + +typedef struct StdVideoEncodeH265WeightTable { + StdVideoEncodeH265WeightTableFlags flags; + uint8_t luma_log2_weight_denom; + int8_t delta_chroma_log2_weight_denom; + int8_t delta_luma_weight_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t luma_offset_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t delta_chroma_weight_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; + int8_t delta_chroma_offset_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; + int8_t delta_luma_weight_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t luma_offset_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t delta_chroma_weight_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; + int8_t delta_chroma_offset_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; +} StdVideoEncodeH265WeightTable; + +typedef struct StdVideoEncodeH265SliceSegmentHeaderFlags { + uint32_t first_slice_segment_in_pic_flag : 1; + uint32_t dependent_slice_segment_flag : 1; + uint32_t slice_sao_luma_flag : 1; + uint32_t slice_sao_chroma_flag : 1; + uint32_t num_ref_idx_active_override_flag : 1; + uint32_t mvd_l1_zero_flag : 1; + uint32_t cabac_init_flag : 1; + uint32_t cu_chroma_qp_offset_enabled_flag : 1; + uint32_t deblocking_filter_override_flag : 1; + uint32_t slice_deblocking_filter_disabled_flag : 1; + uint32_t collocated_from_l0_flag : 1; + uint32_t slice_loop_filter_across_slices_enabled_flag : 1; + uint32_t reserved : 20; +} StdVideoEncodeH265SliceSegmentHeaderFlags; + +typedef struct StdVideoEncodeH265SliceSegmentHeader { + StdVideoEncodeH265SliceSegmentHeaderFlags flags; + StdVideoH265SliceType slice_type; + uint32_t slice_segment_address; + uint8_t collocated_ref_idx; + uint8_t MaxNumMergeCand; + int8_t slice_cb_qp_offset; + int8_t slice_cr_qp_offset; + int8_t slice_beta_offset_div2; + int8_t slice_tc_offset_div2; + int8_t slice_act_y_qp_offset; + int8_t slice_act_cb_qp_offset; + int8_t slice_act_cr_qp_offset; + int8_t slice_qp_delta; + uint16_t reserved1; + const StdVideoEncodeH265WeightTable* pWeightTable; +} StdVideoEncodeH265SliceSegmentHeader; + +typedef struct StdVideoEncodeH265ReferenceListsInfoFlags { + uint32_t ref_pic_list_modification_flag_l0 : 1; + uint32_t ref_pic_list_modification_flag_l1 : 1; + uint32_t reserved : 30; +} StdVideoEncodeH265ReferenceListsInfoFlags; + +typedef struct StdVideoEncodeH265ReferenceListsInfo { + StdVideoEncodeH265ReferenceListsInfoFlags flags; + uint8_t num_ref_idx_l0_active_minus1; + uint8_t num_ref_idx_l1_active_minus1; + uint8_t RefPicList0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + uint8_t RefPicList1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + uint8_t list_entry_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + uint8_t list_entry_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; +} StdVideoEncodeH265ReferenceListsInfo; + +typedef struct StdVideoEncodeH265PictureInfoFlags { + uint32_t is_reference : 1; + uint32_t IrapPicFlag : 1; + uint32_t used_for_long_term_reference : 1; + uint32_t discardable_flag : 1; + uint32_t cross_layer_bla_flag : 1; + uint32_t pic_output_flag : 1; + uint32_t no_output_of_prior_pics_flag : 1; + uint32_t short_term_ref_pic_set_sps_flag : 1; + uint32_t slice_temporal_mvp_enabled_flag : 1; + uint32_t reserved : 23; +} StdVideoEncodeH265PictureInfoFlags; + +typedef struct StdVideoEncodeH265LongTermRefPics { + uint8_t num_long_term_sps; + uint8_t num_long_term_pics; + uint8_t lt_idx_sps[STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS]; + uint8_t poc_lsb_lt[STD_VIDEO_H265_MAX_LONG_TERM_PICS]; + uint16_t used_by_curr_pic_lt_flag; + uint8_t delta_poc_msb_present_flag[STD_VIDEO_H265_MAX_DELTA_POC]; + uint8_t delta_poc_msb_cycle_lt[STD_VIDEO_H265_MAX_DELTA_POC]; +} StdVideoEncodeH265LongTermRefPics; + +typedef struct StdVideoEncodeH265PictureInfo { + StdVideoEncodeH265PictureInfoFlags flags; + StdVideoH265PictureType pic_type; + uint8_t sps_video_parameter_set_id; + uint8_t pps_seq_parameter_set_id; + uint8_t pps_pic_parameter_set_id; + uint8_t short_term_ref_pic_set_idx; + int32_t PicOrderCntVal; + uint8_t TemporalId; + uint8_t reserved1[7]; + const StdVideoEncodeH265ReferenceListsInfo* pRefLists; + const StdVideoH265ShortTermRefPicSet* pShortTermRefPicSet; + const StdVideoEncodeH265LongTermRefPics* pLongTermRefPics; +} StdVideoEncodeH265PictureInfo; + +typedef struct StdVideoEncodeH265ReferenceInfoFlags { + uint32_t used_for_long_term_reference : 1; + uint32_t unused_for_reference : 1; + uint32_t reserved : 30; +} StdVideoEncodeH265ReferenceInfoFlags; + +typedef struct StdVideoEncodeH265ReferenceInfo { + StdVideoEncodeH265ReferenceInfoFlags flags; + StdVideoH265PictureType pic_type; + int32_t PicOrderCntVal; + uint8_t TemporalId; +} StdVideoEncodeH265ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codec_vp9std.h b/3rdparty/glad/include/vk_video/vulkan_video_codec_vp9std.h new file mode 100644 index 000000000000..3d10e39d6765 --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codec_vp9std.h @@ -0,0 +1,151 @@ +#ifndef VULKAN_VIDEO_CODEC_VP9STD_H_ +#define VULKAN_VIDEO_CODEC_VP9STD_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_vp9std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_vp9std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_VP9_NUM_REF_FRAMES 8U +#define STD_VIDEO_VP9_REFS_PER_FRAME 3U +#define STD_VIDEO_VP9_MAX_REF_FRAMES 4U +#define STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS 2U +#define STD_VIDEO_VP9_MAX_SEGMENTS 8U +#define STD_VIDEO_VP9_SEG_LVL_MAX 4U +#define STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS 7U +#define STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB 3U + +typedef enum StdVideoVP9Profile { + STD_VIDEO_VP9_PROFILE_0 = 0, + STD_VIDEO_VP9_PROFILE_1 = 1, + STD_VIDEO_VP9_PROFILE_2 = 2, + STD_VIDEO_VP9_PROFILE_3 = 3, + STD_VIDEO_VP9_PROFILE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_PROFILE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9Profile; + +typedef enum StdVideoVP9Level { + STD_VIDEO_VP9_LEVEL_1_0 = 0, + STD_VIDEO_VP9_LEVEL_1_1 = 1, + STD_VIDEO_VP9_LEVEL_2_0 = 2, + STD_VIDEO_VP9_LEVEL_2_1 = 3, + STD_VIDEO_VP9_LEVEL_3_0 = 4, + STD_VIDEO_VP9_LEVEL_3_1 = 5, + STD_VIDEO_VP9_LEVEL_4_0 = 6, + STD_VIDEO_VP9_LEVEL_4_1 = 7, + STD_VIDEO_VP9_LEVEL_5_0 = 8, + STD_VIDEO_VP9_LEVEL_5_1 = 9, + STD_VIDEO_VP9_LEVEL_5_2 = 10, + STD_VIDEO_VP9_LEVEL_6_0 = 11, + STD_VIDEO_VP9_LEVEL_6_1 = 12, + STD_VIDEO_VP9_LEVEL_6_2 = 13, + STD_VIDEO_VP9_LEVEL_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_LEVEL_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9Level; + +typedef enum StdVideoVP9FrameType { + STD_VIDEO_VP9_FRAME_TYPE_KEY = 0, + STD_VIDEO_VP9_FRAME_TYPE_NON_KEY = 1, + STD_VIDEO_VP9_FRAME_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_FRAME_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9FrameType; + +typedef enum StdVideoVP9ReferenceName { + STD_VIDEO_VP9_REFERENCE_NAME_INTRA_FRAME = 0, + STD_VIDEO_VP9_REFERENCE_NAME_LAST_FRAME = 1, + STD_VIDEO_VP9_REFERENCE_NAME_GOLDEN_FRAME = 2, + STD_VIDEO_VP9_REFERENCE_NAME_ALTREF_FRAME = 3, + STD_VIDEO_VP9_REFERENCE_NAME_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_REFERENCE_NAME_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9ReferenceName; + +typedef enum StdVideoVP9InterpolationFilter { + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP = 0, + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1, + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2, + STD_VIDEO_VP9_INTERPOLATION_FILTER_BILINEAR = 3, + STD_VIDEO_VP9_INTERPOLATION_FILTER_SWITCHABLE = 4, + STD_VIDEO_VP9_INTERPOLATION_FILTER_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_INTERPOLATION_FILTER_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9InterpolationFilter; + +typedef enum StdVideoVP9ColorSpace { + STD_VIDEO_VP9_COLOR_SPACE_UNKNOWN = 0, + STD_VIDEO_VP9_COLOR_SPACE_BT_601 = 1, + STD_VIDEO_VP9_COLOR_SPACE_BT_709 = 2, + STD_VIDEO_VP9_COLOR_SPACE_SMPTE_170 = 3, + STD_VIDEO_VP9_COLOR_SPACE_SMPTE_240 = 4, + STD_VIDEO_VP9_COLOR_SPACE_BT_2020 = 5, + STD_VIDEO_VP9_COLOR_SPACE_RESERVED = 6, + STD_VIDEO_VP9_COLOR_SPACE_RGB = 7, + STD_VIDEO_VP9_COLOR_SPACE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_COLOR_SPACE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9ColorSpace; +typedef struct StdVideoVP9ColorConfigFlags { + uint32_t color_range : 1; + uint32_t reserved : 31; +} StdVideoVP9ColorConfigFlags; + +typedef struct StdVideoVP9ColorConfig { + StdVideoVP9ColorConfigFlags flags; + uint8_t BitDepth; + uint8_t subsampling_x; + uint8_t subsampling_y; + uint8_t reserved1; + StdVideoVP9ColorSpace color_space; +} StdVideoVP9ColorConfig; + +typedef struct StdVideoVP9LoopFilterFlags { + uint32_t loop_filter_delta_enabled : 1; + uint32_t loop_filter_delta_update : 1; + uint32_t reserved : 30; +} StdVideoVP9LoopFilterFlags; + +typedef struct StdVideoVP9LoopFilter { + StdVideoVP9LoopFilterFlags flags; + uint8_t loop_filter_level; + uint8_t loop_filter_sharpness; + uint8_t update_ref_delta; + int8_t loop_filter_ref_deltas[STD_VIDEO_VP9_MAX_REF_FRAMES]; + uint8_t update_mode_delta; + int8_t loop_filter_mode_deltas[STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS]; +} StdVideoVP9LoopFilter; + +typedef struct StdVideoVP9SegmentationFlags { + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t segmentation_abs_or_delta_update : 1; + uint32_t reserved : 28; +} StdVideoVP9SegmentationFlags; + +typedef struct StdVideoVP9Segmentation { + StdVideoVP9SegmentationFlags flags; + uint8_t segmentation_tree_probs[STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS]; + uint8_t segmentation_pred_prob[STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB]; + uint8_t FeatureEnabled[STD_VIDEO_VP9_MAX_SEGMENTS]; + int16_t FeatureData[STD_VIDEO_VP9_MAX_SEGMENTS][STD_VIDEO_VP9_SEG_LVL_MAX]; +} StdVideoVP9Segmentation; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codec_vp9std_decode.h b/3rdparty/glad/include/vk_video/vulkan_video_codec_vp9std_decode.h new file mode 100644 index 000000000000..42b9bd3fb9ca --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codec_vp9std_decode.h @@ -0,0 +1,68 @@ +#ifndef VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_vp9std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_vp9std_decode 1 +#include "vulkan_video_codec_vp9std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_vp9_decode" +typedef struct StdVideoDecodeVP9PictureInfoFlags { + uint32_t error_resilient_mode : 1; + uint32_t intra_only : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t refresh_frame_context : 1; + uint32_t frame_parallel_decoding_mode : 1; + uint32_t segmentation_enabled : 1; + uint32_t show_frame : 1; + uint32_t UsePrevFrameMvs : 1; + uint32_t reserved : 24; +} StdVideoDecodeVP9PictureInfoFlags; + +typedef struct StdVideoDecodeVP9PictureInfo { + StdVideoDecodeVP9PictureInfoFlags flags; + StdVideoVP9Profile profile; + StdVideoVP9FrameType frame_type; + uint8_t frame_context_idx; + uint8_t reset_frame_context; + uint8_t refresh_frame_flags; + uint8_t ref_frame_sign_bias_mask; + StdVideoVP9InterpolationFilter interpolation_filter; + uint8_t base_q_idx; + int8_t delta_q_y_dc; + int8_t delta_q_uv_dc; + int8_t delta_q_uv_ac; + uint8_t tile_cols_log2; + uint8_t tile_rows_log2; + uint16_t reserved1[3]; + const StdVideoVP9ColorConfig* pColorConfig; + const StdVideoVP9LoopFilter* pLoopFilter; + const StdVideoVP9Segmentation* pSegmentation; +} StdVideoDecodeVP9PictureInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/include/vk_video/vulkan_video_codecs_common.h b/3rdparty/glad/include/vk_video/vulkan_video_codecs_common.h new file mode 100644 index 000000000000..a5f0f3d94098 --- /dev/null +++ b/3rdparty/glad/include/vk_video/vulkan_video_codecs_common.h @@ -0,0 +1,36 @@ +#ifndef VULKAN_VIDEO_CODECS_COMMON_H_ +#define VULKAN_VIDEO_CODECS_COMMON_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codecs_common is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codecs_common 1 +#if !defined(VK_NO_STDINT_H) + #include +#endif + +#define VK_MAKE_VIDEO_STD_VERSION(major, minor, patch) \ + ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch))) + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/glad/src/gl.c b/3rdparty/glad/src/gl.c index c0bf9e94fe1e..ffb98557e746 100644 --- a/3rdparty/glad/src/gl.c +++ b/3rdparty/glad/src/gl.c @@ -308,6 +308,7 @@ int GLAD_GL_EXT_draw_instanced = 0; int GLAD_GL_EXT_draw_range_elements = 0; int GLAD_GL_EXT_external_buffer = 0; int GLAD_GL_EXT_fog_coord = 0; +int GLAD_GL_EXT_fragment_shading_rate = 0; int GLAD_GL_EXT_framebuffer_blit = 0; int GLAD_GL_EXT_framebuffer_blit_layers = 0; int GLAD_GL_EXT_framebuffer_multisample = 0; @@ -326,6 +327,7 @@ int GLAD_GL_EXT_light_texture = 0; int GLAD_GL_EXT_memory_object = 0; int GLAD_GL_EXT_memory_object_fd = 0; int GLAD_GL_EXT_memory_object_win32 = 0; +int GLAD_GL_EXT_mesh_shader = 0; int GLAD_GL_EXT_misc_attribute = 0; int GLAD_GL_EXT_multi_draw_arrays = 0; int GLAD_GL_EXT_multisample = 0; @@ -444,6 +446,7 @@ int GLAD_GL_MESA_pack_invert = 0; int GLAD_GL_MESA_program_binary_formats = 0; int GLAD_GL_MESA_resize_buffers = 0; int GLAD_GL_MESA_shader_integer_functions = 0; +int GLAD_GL_MESA_texture_const_bandwidth = 0; int GLAD_GL_MESA_tile_raster_order = 0; int GLAD_GL_MESA_window_pos = 0; int GLAD_GL_MESA_ycbcr_texture = 0; @@ -708,7 +711,6 @@ int GLAD_GL_EXT_draw_buffers_indexed = 0; int GLAD_GL_EXT_draw_elements_base_vertex = 0; int GLAD_GL_EXT_draw_transform_feedback = 0; int GLAD_GL_EXT_float_blend = 0; -int GLAD_GL_EXT_fragment_shading_rate = 0; int GLAD_GL_EXT_geometry_point_size = 0; int GLAD_GL_EXT_geometry_shader = 0; int GLAD_GL_EXT_gpu_shader5 = 0; @@ -736,6 +738,7 @@ int GLAD_GL_EXT_shader_non_constant_global_initializers = 0; int GLAD_GL_EXT_shader_pixel_local_storage = 0; int GLAD_GL_EXT_shader_pixel_local_storage2 = 0; int GLAD_GL_EXT_shader_texture_lod = 0; +int GLAD_GL_EXT_shader_texture_samples = 0; int GLAD_GL_EXT_shadow_samplers = 0; int GLAD_GL_EXT_sparse_texture = 0; int GLAD_GL_EXT_tessellation_point_size = 0; @@ -758,6 +761,8 @@ int GLAD_GL_EXT_texture_type_2_10_10_10_REV = 0; int GLAD_GL_EXT_texture_view = 0; int GLAD_GL_EXT_unpack_subimage = 0; int GLAD_GL_FJ_shader_binary_GCCSO = 0; +int GLAD_GL_HUAWEI_program_binary = 0; +int GLAD_GL_HUAWEI_shader_binary = 0; int GLAD_GL_IMG_bindless_texture = 0; int GLAD_GL_IMG_framebuffer_downsample = 0; int GLAD_GL_IMG_multisampled_render_to_texture = 0; @@ -1311,6 +1316,8 @@ PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance = NULL; PFNGLDRAWELEMENTSINSTANCEDEXTPROC glad_glDrawElementsInstancedEXT = NULL; PFNGLDRAWMESHARRAYSSUNPROC glad_glDrawMeshArraysSUN = NULL; +PFNGLDRAWMESHTASKSEXTPROC glad_glDrawMeshTasksEXT = NULL; +PFNGLDRAWMESHTASKSINDIRECTEXTPROC glad_glDrawMeshTasksIndirectEXT = NULL; PFNGLDRAWMESHTASKSINDIRECTNVPROC glad_glDrawMeshTasksIndirectNV = NULL; PFNGLDRAWMESHTASKSNVPROC glad_glDrawMeshTasksNV = NULL; PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC glad_glDrawRangeElementArrayAPPLE = NULL; @@ -1425,6 +1432,7 @@ PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT = NULL; PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glFramebufferSampleLocationsfvARB = NULL; PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glFramebufferSampleLocationsfvNV = NULL; PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC glad_glFramebufferSamplePositionsfvAMD = NULL; +PFNGLFRAMEBUFFERSHADINGRATEEXTPROC glad_glFramebufferShadingRateEXT = NULL; PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT = NULL; @@ -1560,6 +1568,7 @@ PFNGLGETFRAGMENTLIGHTFVSGIXPROC glad_glGetFragmentLightfvSGIX = NULL; PFNGLGETFRAGMENTLIGHTIVSGIXPROC glad_glGetFragmentLightivSGIX = NULL; PFNGLGETFRAGMENTMATERIALFVSGIXPROC glad_glGetFragmentMaterialfvSGIX = NULL; PFNGLGETFRAGMENTMATERIALIVSGIXPROC glad_glGetFragmentMaterialivSGIX = NULL; +PFNGLGETFRAGMENTSHADINGRATESEXTPROC glad_glGetFragmentShadingRatesEXT = NULL; PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT = NULL; PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC glad_glGetFramebufferParameterfvAMD = NULL; @@ -2079,7 +2088,9 @@ PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC glad_glMultiDrawElementsIndirectAMD = NULL PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC glad_glMultiDrawElementsIndirectBindlessCountNV = NULL; PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC glad_glMultiDrawElementsIndirectBindlessNV = NULL; PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glad_glMultiDrawElementsIndirectCountARB = NULL; +PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTEXTPROC glad_glMultiDrawMeshTasksIndirectCountEXT = NULL; PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC glad_glMultiDrawMeshTasksIndirectCountNV = NULL; +PFNGLMULTIDRAWMESHTASKSINDIRECTEXTPROC glad_glMultiDrawMeshTasksIndirectEXT = NULL; PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC glad_glMultiDrawMeshTasksIndirectNV = NULL; PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC glad_glMultiDrawRangeElementArrayAPPLE = NULL; PFNGLMULTIMODEDRAWARRAYSIBMPROC glad_glMultiModeDrawArraysIBM = NULL; @@ -2640,6 +2651,8 @@ PFNGLSHADEROP3EXTPROC glad_glShaderOp3EXT = NULL; PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; PFNGLSHADERSOURCEARBPROC glad_glShaderSourceARB = NULL; PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding = NULL; +PFNGLSHADINGRATECOMBINEROPSEXTPROC glad_glShadingRateCombinerOpsEXT = NULL; +PFNGLSHADINGRATEEXTPROC glad_glShadingRateEXT = NULL; PFNGLSHADINGRATEIMAGEBARRIERNVPROC glad_glShadingRateImageBarrierNV = NULL; PFNGLSHADINGRATEIMAGEPALETTENVPROC glad_glShadingRateImagePaletteNV = NULL; PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC glad_glShadingRateSampleOrderCustomNV = NULL; @@ -3493,7 +3506,6 @@ PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC glad_glFramebufferFetchBarrierQCOM = NULL; PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC glad_glFramebufferFoveationConfigQCOM = NULL; PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC glad_glFramebufferFoveationParametersQCOM = NULL; PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC glad_glFramebufferPixelLocalStorageSizeEXT = NULL; -PFNGLFRAMEBUFFERSHADINGRATEEXTPROC glad_glFramebufferShadingRateEXT = NULL; PFNGLFRAMEBUFFERTEXTURE2DDOWNSAMPLEIMGPROC glad_glFramebufferTexture2DDownsampleIMG = NULL; PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC glad_glFramebufferTexture2DMultisampleEXT = NULL; PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC glad_glFramebufferTexture2DMultisampleIMG = NULL; @@ -3511,7 +3523,6 @@ PFNGLGETDRIVERCONTROLSQCOMPROC glad_glGetDriverControlsQCOM = NULL; PFNGLGETFLOATI_VNVPROC glad_glGetFloati_vNV = NULL; PFNGLGETFLOATI_VOESPROC glad_glGetFloati_vOES = NULL; PFNGLGETFRAGDATAINDEXEXTPROC glad_glGetFragDataIndexEXT = NULL; -PFNGLGETFRAGMENTSHADINGRATESEXTPROC glad_glGetFragmentShadingRatesEXT = NULL; PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC glad_glGetFramebufferPixelLocalStorageSizeEXT = NULL; PFNGLGETGRAPHICSRESETSTATUSEXTPROC glad_glGetGraphicsResetStatusEXT = NULL; PFNGLGETGRAPHICSRESETSTATUSKHRPROC glad_glGetGraphicsResetStatusKHR = NULL; @@ -3589,8 +3600,6 @@ PFNGLSCISSORINDEXEDNVPROC glad_glScissorIndexedNV = NULL; PFNGLSCISSORINDEXEDOESPROC glad_glScissorIndexedOES = NULL; PFNGLSCISSORINDEXEDVNVPROC glad_glScissorIndexedvNV = NULL; PFNGLSCISSORINDEXEDVOESPROC glad_glScissorIndexedvOES = NULL; -PFNGLSHADINGRATECOMBINEROPSEXTPROC glad_glShadingRateCombinerOpsEXT = NULL; -PFNGLSHADINGRATEEXTPROC glad_glShadingRateEXT = NULL; PFNGLSHADINGRATEQCOMPROC glad_glShadingRateQCOM = NULL; PFNGLSTARTTILINGQCOMPROC glad_glStartTilingQCOM = NULL; PFNGLTEXBUFFEROESPROC glad_glTexBufferOES = NULL; @@ -4267,13 +4276,6 @@ static void glad_gl_load_GL_ES_VERSION_3_0( GLADuserptrloadfunc load, void* user glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC) load(userptr, "glVertexAttribI4uiv"); glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC) load(userptr, "glVertexAttribIPointer"); glad_glWaitSync = (PFNGLWAITSYNCPROC) load(userptr, "glWaitSync"); - - // axmol spec, load GLES-3.1 vertex attrib binding APIs - glad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC) load(userptr, "glVertexAttribBinding"); - glad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC) load(userptr, "glVertexAttribFormat"); - glad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC) load(userptr, "glVertexAttribIFormat"); - glad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC) load(userptr, "glBindVertexBuffer"); - glad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC) load(userptr, "glVertexBindingDivisor"); } static void glad_gl_load_GL_3DFX_tbuffer( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_3DFX_tbuffer) return; @@ -5965,6 +5967,13 @@ static void glad_gl_load_GL_EXT_fog_coord( GLADuserptrloadfunc load, void* userp glad_glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC) load(userptr, "glFogCoordfEXT"); glad_glFogCoordfvEXT = (PFNGLFOGCOORDFVEXTPROC) load(userptr, "glFogCoordfvEXT"); } +static void glad_gl_load_GL_EXT_fragment_shading_rate( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_fragment_shading_rate) return; + glad_glFramebufferShadingRateEXT = (PFNGLFRAMEBUFFERSHADINGRATEEXTPROC) load(userptr, "glFramebufferShadingRateEXT"); + glad_glGetFragmentShadingRatesEXT = (PFNGLGETFRAGMENTSHADINGRATESEXTPROC) load(userptr, "glGetFragmentShadingRatesEXT"); + glad_glShadingRateCombinerOpsEXT = (PFNGLSHADINGRATECOMBINEROPSEXTPROC) load(userptr, "glShadingRateCombinerOpsEXT"); + glad_glShadingRateEXT = (PFNGLSHADINGRATEEXTPROC) load(userptr, "glShadingRateEXT"); +} static void glad_gl_load_GL_EXT_framebuffer_blit( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_EXT_framebuffer_blit) return; glad_glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC) load(userptr, "glBlitFramebufferEXT"); @@ -6102,6 +6111,13 @@ static void glad_gl_load_GL_EXT_memory_object_win32( GLADuserptrloadfunc load, v glad_glImportMemoryWin32HandleEXT = (PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) load(userptr, "glImportMemoryWin32HandleEXT"); glad_glImportMemoryWin32NameEXT = (PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) load(userptr, "glImportMemoryWin32NameEXT"); } +static void glad_gl_load_GL_EXT_mesh_shader( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_mesh_shader) return; + glad_glDrawMeshTasksEXT = (PFNGLDRAWMESHTASKSEXTPROC) load(userptr, "glDrawMeshTasksEXT"); + glad_glDrawMeshTasksIndirectEXT = (PFNGLDRAWMESHTASKSINDIRECTEXTPROC) load(userptr, "glDrawMeshTasksIndirectEXT"); + glad_glMultiDrawMeshTasksIndirectCountEXT = (PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTEXTPROC) load(userptr, "glMultiDrawMeshTasksIndirectCountEXT"); + glad_glMultiDrawMeshTasksIndirectEXT = (PFNGLMULTIDRAWMESHTASKSINDIRECTEXTPROC) load(userptr, "glMultiDrawMeshTasksIndirectEXT"); +} static void glad_gl_load_GL_EXT_multi_draw_arrays( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_EXT_multi_draw_arrays) return; glad_glMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC) load(userptr, "glMultiDrawArraysEXT"); @@ -7787,13 +7803,6 @@ static void glad_gl_load_GL_EXT_draw_transform_feedback( GLADuserptrloadfunc loa glad_glDrawTransformFeedbackEXT = (PFNGLDRAWTRANSFORMFEEDBACKEXTPROC) load(userptr, "glDrawTransformFeedbackEXT"); glad_glDrawTransformFeedbackInstancedEXT = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDEXTPROC) load(userptr, "glDrawTransformFeedbackInstancedEXT"); } -static void glad_gl_load_GL_EXT_fragment_shading_rate( GLADuserptrloadfunc load, void* userptr) { - if(!GLAD_GL_EXT_fragment_shading_rate) return; - glad_glFramebufferShadingRateEXT = (PFNGLFRAMEBUFFERSHADINGRATEEXTPROC) load(userptr, "glFramebufferShadingRateEXT"); - glad_glGetFragmentShadingRatesEXT = (PFNGLGETFRAGMENTSHADINGRATESEXTPROC) load(userptr, "glGetFragmentShadingRatesEXT"); - glad_glShadingRateCombinerOpsEXT = (PFNGLSHADINGRATECOMBINEROPSEXTPROC) load(userptr, "glShadingRateCombinerOpsEXT"); - glad_glShadingRateEXT = (PFNGLSHADINGRATEEXTPROC) load(userptr, "glShadingRateEXT"); -} static void glad_gl_load_GL_EXT_geometry_shader( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_EXT_geometry_shader) return; glad_glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTUREEXTPROC) load(userptr, "glFramebufferTextureEXT"); @@ -7984,6 +7993,10 @@ static void glad_gl_load_GL_OES_EGL_image( GLADuserptrloadfunc load, void* userp glad_glEGLImageTargetRenderbufferStorageOES = (PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) load(userptr, "glEGLImageTargetRenderbufferStorageOES"); glad_glEGLImageTargetTexture2DOES = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) load(userptr, "glEGLImageTargetTexture2DOES"); } +static void glad_gl_load_GL_OES_EGL_image_external( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_OES_EGL_image_external) return; + glad_glEGLImageTargetTexture2DOES = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) load(userptr, "glEGLImageTargetTexture2DOES"); +} static void glad_gl_load_GL_OES_copy_image( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_OES_copy_image) return; glad_glCopyImageSubDataOES = (PFNGLCOPYIMAGESUBDATAOESPROC) load(userptr, "glCopyImageSubDataOES"); @@ -9762,6 +9775,7 @@ static int glad_gl_find_extensions_gl(void) { GLAD_GL_EXT_draw_range_elements = glad_gl_has_extension(exts, exts_i, "GL_EXT_draw_range_elements"); GLAD_GL_EXT_external_buffer = glad_gl_has_extension(exts, exts_i, "GL_EXT_external_buffer"); GLAD_GL_EXT_fog_coord = glad_gl_has_extension(exts, exts_i, "GL_EXT_fog_coord"); + GLAD_GL_EXT_fragment_shading_rate = glad_gl_has_extension(exts, exts_i, "GL_EXT_fragment_shading_rate"); GLAD_GL_EXT_framebuffer_blit = glad_gl_has_extension(exts, exts_i, "GL_EXT_framebuffer_blit"); GLAD_GL_EXT_framebuffer_blit_layers = glad_gl_has_extension(exts, exts_i, "GL_EXT_framebuffer_blit_layers"); GLAD_GL_EXT_framebuffer_multisample = glad_gl_has_extension(exts, exts_i, "GL_EXT_framebuffer_multisample"); @@ -9780,6 +9794,7 @@ static int glad_gl_find_extensions_gl(void) { GLAD_GL_EXT_memory_object = glad_gl_has_extension(exts, exts_i, "GL_EXT_memory_object"); GLAD_GL_EXT_memory_object_fd = glad_gl_has_extension(exts, exts_i, "GL_EXT_memory_object_fd"); GLAD_GL_EXT_memory_object_win32 = glad_gl_has_extension(exts, exts_i, "GL_EXT_memory_object_win32"); + GLAD_GL_EXT_mesh_shader = glad_gl_has_extension(exts, exts_i, "GL_EXT_mesh_shader"); GLAD_GL_EXT_misc_attribute = glad_gl_has_extension(exts, exts_i, "GL_EXT_misc_attribute"); GLAD_GL_EXT_multi_draw_arrays = glad_gl_has_extension(exts, exts_i, "GL_EXT_multi_draw_arrays"); GLAD_GL_EXT_multisample = glad_gl_has_extension(exts, exts_i, "GL_EXT_multisample"); @@ -9898,6 +9913,7 @@ static int glad_gl_find_extensions_gl(void) { GLAD_GL_MESA_program_binary_formats = glad_gl_has_extension(exts, exts_i, "GL_MESA_program_binary_formats"); GLAD_GL_MESA_resize_buffers = glad_gl_has_extension(exts, exts_i, "GL_MESA_resize_buffers"); GLAD_GL_MESA_shader_integer_functions = glad_gl_has_extension(exts, exts_i, "GL_MESA_shader_integer_functions"); + GLAD_GL_MESA_texture_const_bandwidth = glad_gl_has_extension(exts, exts_i, "GL_MESA_texture_const_bandwidth"); GLAD_GL_MESA_tile_raster_order = glad_gl_has_extension(exts, exts_i, "GL_MESA_tile_raster_order"); GLAD_GL_MESA_window_pos = glad_gl_has_extension(exts, exts_i, "GL_MESA_window_pos"); GLAD_GL_MESA_ycbcr_texture = glad_gl_has_extension(exts, exts_i, "GL_MESA_ycbcr_texture"); @@ -10320,6 +10336,7 @@ int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr) { glad_gl_load_GL_EXT_draw_range_elements(load, userptr); glad_gl_load_GL_EXT_external_buffer(load, userptr); glad_gl_load_GL_EXT_fog_coord(load, userptr); + glad_gl_load_GL_EXT_fragment_shading_rate(load, userptr); glad_gl_load_GL_EXT_framebuffer_blit(load, userptr); glad_gl_load_GL_EXT_framebuffer_blit_layers(load, userptr); glad_gl_load_GL_EXT_framebuffer_multisample(load, userptr); @@ -10334,6 +10351,7 @@ int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr) { glad_gl_load_GL_EXT_memory_object(load, userptr); glad_gl_load_GL_EXT_memory_object_fd(load, userptr); glad_gl_load_GL_EXT_memory_object_win32(load, userptr); + glad_gl_load_GL_EXT_mesh_shader(load, userptr); glad_gl_load_GL_EXT_multi_draw_arrays(load, userptr); glad_gl_load_GL_EXT_multisample(load, userptr); glad_gl_load_GL_EXT_paletted_texture(load, userptr); @@ -10511,10 +10529,12 @@ static int glad_gl_find_extensions_gles2(void) { GLAD_GL_EXT_debug_marker = glad_gl_has_extension(exts, exts_i, "GL_EXT_debug_marker"); GLAD_GL_EXT_draw_instanced = glad_gl_has_extension(exts, exts_i, "GL_EXT_draw_instanced"); GLAD_GL_EXT_external_buffer = glad_gl_has_extension(exts, exts_i, "GL_EXT_external_buffer"); + GLAD_GL_EXT_fragment_shading_rate = glad_gl_has_extension(exts, exts_i, "GL_EXT_fragment_shading_rate"); GLAD_GL_EXT_framebuffer_blit_layers = glad_gl_has_extension(exts, exts_i, "GL_EXT_framebuffer_blit_layers"); GLAD_GL_EXT_memory_object = glad_gl_has_extension(exts, exts_i, "GL_EXT_memory_object"); GLAD_GL_EXT_memory_object_fd = glad_gl_has_extension(exts, exts_i, "GL_EXT_memory_object_fd"); GLAD_GL_EXT_memory_object_win32 = glad_gl_has_extension(exts, exts_i, "GL_EXT_memory_object_win32"); + GLAD_GL_EXT_mesh_shader = glad_gl_has_extension(exts, exts_i, "GL_EXT_mesh_shader"); GLAD_GL_EXT_multi_draw_arrays = glad_gl_has_extension(exts, exts_i, "GL_EXT_multi_draw_arrays"); GLAD_GL_EXT_multiview_tessellation_geometry_shader = glad_gl_has_extension(exts, exts_i, "GL_EXT_multiview_tessellation_geometry_shader"); GLAD_GL_EXT_multiview_texture_multisample = glad_gl_has_extension(exts, exts_i, "GL_EXT_multiview_texture_multisample"); @@ -10563,6 +10583,7 @@ static int glad_gl_find_extensions_gles2(void) { GLAD_GL_MESA_framebuffer_swap_xy = glad_gl_has_extension(exts, exts_i, "GL_MESA_framebuffer_swap_xy"); GLAD_GL_MESA_program_binary_formats = glad_gl_has_extension(exts, exts_i, "GL_MESA_program_binary_formats"); GLAD_GL_MESA_shader_integer_functions = glad_gl_has_extension(exts, exts_i, "GL_MESA_shader_integer_functions"); + GLAD_GL_MESA_texture_const_bandwidth = glad_gl_has_extension(exts, exts_i, "GL_MESA_texture_const_bandwidth"); GLAD_GL_NVX_blend_equation_advanced_multi_draw_buffers = glad_gl_has_extension(exts, exts_i, "GL_NVX_blend_equation_advanced_multi_draw_buffers"); GLAD_GL_NV_bindless_texture = glad_gl_has_extension(exts, exts_i, "GL_NV_bindless_texture"); GLAD_GL_NV_blend_equation_advanced = glad_gl_has_extension(exts, exts_i, "GL_NV_blend_equation_advanced"); @@ -10599,6 +10620,7 @@ static int glad_gl_find_extensions_gles2(void) { GLAD_GL_NV_shader_texture_footprint = glad_gl_has_extension(exts, exts_i, "GL_NV_shader_texture_footprint"); GLAD_GL_NV_shading_rate_image = glad_gl_has_extension(exts, exts_i, "GL_NV_shading_rate_image"); GLAD_GL_NV_stereo_view_rendering = glad_gl_has_extension(exts, exts_i, "GL_NV_stereo_view_rendering"); + GLAD_GL_NV_texture_barrier = glad_gl_has_extension(exts, exts_i, "GL_NV_texture_barrier"); GLAD_GL_NV_timeline_semaphore = glad_gl_has_extension(exts, exts_i, "GL_NV_timeline_semaphore"); GLAD_GL_NV_viewport_array2 = glad_gl_has_extension(exts, exts_i, "GL_NV_viewport_array2"); GLAD_GL_NV_viewport_swizzle = glad_gl_has_extension(exts, exts_i, "GL_NV_viewport_swizzle"); @@ -10657,7 +10679,6 @@ static int glad_gl_find_extensions_gles2(void) { GLAD_GL_EXT_draw_elements_base_vertex = glad_gl_has_extension(exts, exts_i, "GL_EXT_draw_elements_base_vertex"); GLAD_GL_EXT_draw_transform_feedback = glad_gl_has_extension(exts, exts_i, "GL_EXT_draw_transform_feedback"); GLAD_GL_EXT_float_blend = glad_gl_has_extension(exts, exts_i, "GL_EXT_float_blend"); - GLAD_GL_EXT_fragment_shading_rate = glad_gl_has_extension(exts, exts_i, "GL_EXT_fragment_shading_rate"); GLAD_GL_EXT_geometry_point_size = glad_gl_has_extension(exts, exts_i, "GL_EXT_geometry_point_size"); GLAD_GL_EXT_geometry_shader = glad_gl_has_extension(exts, exts_i, "GL_EXT_geometry_shader"); GLAD_GL_EXT_gpu_shader5 = glad_gl_has_extension(exts, exts_i, "GL_EXT_gpu_shader5"); @@ -10685,6 +10706,7 @@ static int glad_gl_find_extensions_gles2(void) { GLAD_GL_EXT_shader_pixel_local_storage = glad_gl_has_extension(exts, exts_i, "GL_EXT_shader_pixel_local_storage"); GLAD_GL_EXT_shader_pixel_local_storage2 = glad_gl_has_extension(exts, exts_i, "GL_EXT_shader_pixel_local_storage2"); GLAD_GL_EXT_shader_texture_lod = glad_gl_has_extension(exts, exts_i, "GL_EXT_shader_texture_lod"); + GLAD_GL_EXT_shader_texture_samples = glad_gl_has_extension(exts, exts_i, "GL_EXT_shader_texture_samples"); GLAD_GL_EXT_shadow_samplers = glad_gl_has_extension(exts, exts_i, "GL_EXT_shadow_samplers"); GLAD_GL_EXT_sparse_texture = glad_gl_has_extension(exts, exts_i, "GL_EXT_sparse_texture"); GLAD_GL_EXT_tessellation_point_size = glad_gl_has_extension(exts, exts_i, "GL_EXT_tessellation_point_size"); @@ -10707,6 +10729,8 @@ static int glad_gl_find_extensions_gles2(void) { GLAD_GL_EXT_texture_view = glad_gl_has_extension(exts, exts_i, "GL_EXT_texture_view"); GLAD_GL_EXT_unpack_subimage = glad_gl_has_extension(exts, exts_i, "GL_EXT_unpack_subimage"); GLAD_GL_FJ_shader_binary_GCCSO = glad_gl_has_extension(exts, exts_i, "GL_FJ_shader_binary_GCCSO"); + GLAD_GL_HUAWEI_program_binary = glad_gl_has_extension(exts, exts_i, "GL_HUAWEI_program_binary"); + GLAD_GL_HUAWEI_shader_binary = glad_gl_has_extension(exts, exts_i, "GL_HUAWEI_shader_binary"); GLAD_GL_IMG_bindless_texture = glad_gl_has_extension(exts, exts_i, "GL_IMG_bindless_texture"); GLAD_GL_IMG_framebuffer_downsample = glad_gl_has_extension(exts, exts_i, "GL_IMG_framebuffer_downsample"); GLAD_GL_IMG_multisampled_render_to_texture = glad_gl_has_extension(exts, exts_i, "GL_IMG_multisampled_render_to_texture"); @@ -10877,10 +10901,12 @@ int gladLoadGLES2UserPtr( GLADuserptrloadfunc load, void *userptr) { glad_gl_load_GL_EXT_debug_marker(load, userptr); glad_gl_load_GL_EXT_draw_instanced(load, userptr); glad_gl_load_GL_EXT_external_buffer(load, userptr); + glad_gl_load_GL_EXT_fragment_shading_rate(load, userptr); glad_gl_load_GL_EXT_framebuffer_blit_layers(load, userptr); glad_gl_load_GL_EXT_memory_object(load, userptr); glad_gl_load_GL_EXT_memory_object_fd(load, userptr); glad_gl_load_GL_EXT_memory_object_win32(load, userptr); + glad_gl_load_GL_EXT_mesh_shader(load, userptr); glad_gl_load_GL_EXT_multi_draw_arrays(load, userptr); glad_gl_load_GL_EXT_polygon_offset_clamp(load, userptr); glad_gl_load_GL_EXT_raster_multisample(load, userptr); @@ -10918,6 +10944,7 @@ int gladLoadGLES2UserPtr( GLADuserptrloadfunc load, void *userptr) { glad_gl_load_GL_NV_sample_locations(load, userptr); glad_gl_load_GL_NV_scissor_exclusive(load, userptr); glad_gl_load_GL_NV_shading_rate_image(load, userptr); + glad_gl_load_GL_NV_texture_barrier(load, userptr); glad_gl_load_GL_NV_timeline_semaphore(load, userptr); glad_gl_load_GL_NV_viewport_swizzle(load, userptr); glad_gl_load_GL_OVR_multiview(load, userptr); @@ -10941,7 +10968,6 @@ int gladLoadGLES2UserPtr( GLADuserptrloadfunc load, void *userptr) { glad_gl_load_GL_EXT_draw_buffers_indexed(load, userptr); glad_gl_load_GL_EXT_draw_elements_base_vertex(load, userptr); glad_gl_load_GL_EXT_draw_transform_feedback(load, userptr); - glad_gl_load_GL_EXT_fragment_shading_rate(load, userptr); glad_gl_load_GL_EXT_geometry_shader(load, userptr); glad_gl_load_GL_EXT_instanced_arrays(load, userptr); glad_gl_load_GL_EXT_map_buffer_range(load, userptr); @@ -10974,6 +11000,7 @@ int gladLoadGLES2UserPtr( GLADuserptrloadfunc load, void *userptr) { glad_gl_load_GL_NV_read_buffer(load, userptr); glad_gl_load_GL_NV_viewport_array(load, userptr); glad_gl_load_GL_OES_EGL_image(load, userptr); + glad_gl_load_GL_OES_EGL_image_external(load, userptr); glad_gl_load_GL_OES_copy_image(load, userptr); glad_gl_load_GL_OES_draw_buffers_indexed(load, userptr); glad_gl_load_GL_OES_draw_elements_base_vertex(load, userptr); @@ -11278,7 +11305,7 @@ static GLADapiproc glad_gles2_get_proc(void *vuserptr, const char* name) { GLADapiproc result = NULL; #if GLAD_PLATFORM_EMSCRIPTEN - GLAD_UNUSED(glad_dlsym_handle); + GLAD_UNUSED(&glad_dlsym_handle); #else result = glad_dlsym_handle(userptr.handle, name); #endif @@ -11302,7 +11329,7 @@ static void* glad_gles2_dlopen_handle(void) { #endif #if GLAD_PLATFORM_EMSCRIPTEN - GLAD_UNUSED(glad_get_dlopen_handle); + GLAD_UNUSED(&glad_get_dlopen_handle); return NULL; #else if (_glad_GLES2_loader_handle == NULL) { @@ -11334,8 +11361,8 @@ int gladLoaderLoadGLES2(void) { #if GLAD_PLATFORM_EMSCRIPTEN GLAD_UNUSED(handle); GLAD_UNUSED(did_load); - GLAD_UNUSED(glad_gles2_dlopen_handle); - GLAD_UNUSED(glad_gles2_build_userptr); + GLAD_UNUSED(&glad_gles2_dlopen_handle); + GLAD_UNUSED(&glad_gles2_build_userptr); userptr.get_proc_address_ptr = emscripten_GetProcAddress; version = gladLoadGLES2UserPtr(glad_gles2_get_proc, &userptr); #else diff --git a/3rdparty/glad/src/vulkan.c b/3rdparty/glad/src/vulkan.c new file mode 100644 index 000000000000..f302ee951962 --- /dev/null +++ b/3rdparty/glad/src/vulkan.c @@ -0,0 +1,5192 @@ +/** + * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 + */ +#include +#include +#include +#include + +#ifndef GLAD_IMPL_UTIL_C_ +#define GLAD_IMPL_UTIL_C_ + +#ifdef _MSC_VER +#define GLAD_IMPL_UTIL_SSCANF sscanf_s +#else +#define GLAD_IMPL_UTIL_SSCANF sscanf +#endif + +#endif /* GLAD_IMPL_UTIL_C_ */ + +#ifdef __cplusplus +extern "C" { +#endif + + + +int GLAD_VK_VERSION_1_0 = 0; +int GLAD_VK_VERSION_1_1 = 0; +int GLAD_VK_VERSION_1_2 = 0; +int GLAD_VK_VERSION_1_3 = 0; +int GLAD_VK_VERSION_1_4 = 0; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +int GLAD_VK_AMDX_dense_geometry_format = 0; + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +int GLAD_VK_AMDX_shader_enqueue = 0; + +#endif +int GLAD_VK_AMD_anti_lag = 0; +int GLAD_VK_AMD_buffer_marker = 0; +int GLAD_VK_AMD_device_coherent_memory = 0; +int GLAD_VK_AMD_display_native_hdr = 0; +int GLAD_VK_AMD_draw_indirect_count = 0; +int GLAD_VK_AMD_gcn_shader = 0; +int GLAD_VK_AMD_gpu_shader_half_float = 0; +int GLAD_VK_AMD_gpu_shader_int16 = 0; +int GLAD_VK_AMD_memory_overallocation_behavior = 0; +int GLAD_VK_AMD_mixed_attachment_samples = 0; +int GLAD_VK_AMD_negative_viewport_height = 0; +int GLAD_VK_AMD_pipeline_compiler_control = 0; +int GLAD_VK_AMD_rasterization_order = 0; +int GLAD_VK_AMD_shader_ballot = 0; +int GLAD_VK_AMD_shader_core_properties = 0; +int GLAD_VK_AMD_shader_core_properties2 = 0; +int GLAD_VK_AMD_shader_early_and_late_fragment_tests = 0; +int GLAD_VK_AMD_shader_explicit_vertex_parameter = 0; +int GLAD_VK_AMD_shader_fragment_mask = 0; +int GLAD_VK_AMD_shader_image_load_store_lod = 0; +int GLAD_VK_AMD_shader_info = 0; +int GLAD_VK_AMD_shader_trinary_minmax = 0; +int GLAD_VK_AMD_texture_gather_bias_lod = 0; +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +int GLAD_VK_ANDROID_external_format_resolve = 0; + +#endif +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +int GLAD_VK_ANDROID_external_memory_android_hardware_buffer = 0; + +#endif +int GLAD_VK_ARM_data_graph = 0; +int GLAD_VK_ARM_format_pack = 0; +int GLAD_VK_ARM_pipeline_opacity_micromap = 0; +int GLAD_VK_ARM_rasterization_order_attachment_access = 0; +int GLAD_VK_ARM_render_pass_striped = 0; +int GLAD_VK_ARM_scheduling_controls = 0; +int GLAD_VK_ARM_shader_core_builtins = 0; +int GLAD_VK_ARM_shader_core_properties = 0; +int GLAD_VK_ARM_tensors = 0; +int GLAD_VK_EXT_4444_formats = 0; +int GLAD_VK_EXT_acquire_drm_display = 0; +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +int GLAD_VK_EXT_acquire_xlib_display = 0; + +#endif +int GLAD_VK_EXT_astc_decode_mode = 0; +int GLAD_VK_EXT_attachment_feedback_loop_dynamic_state = 0; +int GLAD_VK_EXT_attachment_feedback_loop_layout = 0; +int GLAD_VK_EXT_blend_operation_advanced = 0; +int GLAD_VK_EXT_border_color_swizzle = 0; +int GLAD_VK_EXT_buffer_device_address = 0; +int GLAD_VK_EXT_calibrated_timestamps = 0; +int GLAD_VK_EXT_color_write_enable = 0; +int GLAD_VK_EXT_conditional_rendering = 0; +int GLAD_VK_EXT_conservative_rasterization = 0; +int GLAD_VK_EXT_custom_border_color = 0; +int GLAD_VK_EXT_debug_marker = 0; +int GLAD_VK_EXT_debug_report = 0; +int GLAD_VK_EXT_debug_utils = 0; +int GLAD_VK_EXT_depth_bias_control = 0; +int GLAD_VK_EXT_depth_clamp_control = 0; +int GLAD_VK_EXT_depth_clamp_zero_one = 0; +int GLAD_VK_EXT_depth_clip_control = 0; +int GLAD_VK_EXT_depth_clip_enable = 0; +int GLAD_VK_EXT_depth_range_unrestricted = 0; +int GLAD_VK_EXT_descriptor_buffer = 0; +int GLAD_VK_EXT_descriptor_indexing = 0; +int GLAD_VK_EXT_device_address_binding_report = 0; +int GLAD_VK_EXT_device_fault = 0; +int GLAD_VK_EXT_device_generated_commands = 0; +int GLAD_VK_EXT_device_memory_report = 0; +int GLAD_VK_EXT_direct_mode_display = 0; +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +int GLAD_VK_EXT_directfb_surface = 0; + +#endif +int GLAD_VK_EXT_discard_rectangles = 0; +int GLAD_VK_EXT_display_control = 0; +int GLAD_VK_EXT_display_surface_counter = 0; +int GLAD_VK_EXT_dynamic_rendering_unused_attachments = 0; +int GLAD_VK_EXT_extended_dynamic_state = 0; +int GLAD_VK_EXT_extended_dynamic_state2 = 0; +int GLAD_VK_EXT_extended_dynamic_state3 = 0; +int GLAD_VK_EXT_external_memory_acquire_unmodified = 0; +int GLAD_VK_EXT_external_memory_dma_buf = 0; +int GLAD_VK_EXT_external_memory_host = 0; +#if defined(VK_USE_PLATFORM_METAL_EXT) +int GLAD_VK_EXT_external_memory_metal = 0; + +#endif +int GLAD_VK_EXT_filter_cubic = 0; +int GLAD_VK_EXT_fragment_density_map = 0; +int GLAD_VK_EXT_fragment_density_map2 = 0; +int GLAD_VK_EXT_fragment_density_map_offset = 0; +int GLAD_VK_EXT_fragment_shader_interlock = 0; +int GLAD_VK_EXT_frame_boundary = 0; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +int GLAD_VK_EXT_full_screen_exclusive = 0; + +#endif +int GLAD_VK_EXT_global_priority = 0; +int GLAD_VK_EXT_global_priority_query = 0; +int GLAD_VK_EXT_graphics_pipeline_library = 0; +int GLAD_VK_EXT_hdr_metadata = 0; +int GLAD_VK_EXT_headless_surface = 0; +int GLAD_VK_EXT_host_image_copy = 0; +int GLAD_VK_EXT_host_query_reset = 0; +int GLAD_VK_EXT_image_2d_view_of_3d = 0; +int GLAD_VK_EXT_image_compression_control = 0; +int GLAD_VK_EXT_image_compression_control_swapchain = 0; +int GLAD_VK_EXT_image_drm_format_modifier = 0; +int GLAD_VK_EXT_image_robustness = 0; +int GLAD_VK_EXT_image_sliced_view_of_3d = 0; +int GLAD_VK_EXT_image_view_min_lod = 0; +int GLAD_VK_EXT_index_type_uint8 = 0; +int GLAD_VK_EXT_inline_uniform_block = 0; +int GLAD_VK_EXT_layer_settings = 0; +int GLAD_VK_EXT_legacy_dithering = 0; +int GLAD_VK_EXT_legacy_vertex_attributes = 0; +int GLAD_VK_EXT_line_rasterization = 0; +int GLAD_VK_EXT_load_store_op_none = 0; +int GLAD_VK_EXT_map_memory_placed = 0; +int GLAD_VK_EXT_memory_budget = 0; +int GLAD_VK_EXT_memory_priority = 0; +int GLAD_VK_EXT_mesh_shader = 0; +#if defined(VK_USE_PLATFORM_METAL_EXT) +int GLAD_VK_EXT_metal_objects = 0; + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +int GLAD_VK_EXT_metal_surface = 0; + +#endif +int GLAD_VK_EXT_multi_draw = 0; +int GLAD_VK_EXT_multisampled_render_to_single_sampled = 0; +int GLAD_VK_EXT_mutable_descriptor_type = 0; +int GLAD_VK_EXT_nested_command_buffer = 0; +int GLAD_VK_EXT_non_seamless_cube_map = 0; +int GLAD_VK_EXT_opacity_micromap = 0; +int GLAD_VK_EXT_pageable_device_local_memory = 0; +int GLAD_VK_EXT_pci_bus_info = 0; +int GLAD_VK_EXT_physical_device_drm = 0; +int GLAD_VK_EXT_pipeline_creation_cache_control = 0; +int GLAD_VK_EXT_pipeline_creation_feedback = 0; +int GLAD_VK_EXT_pipeline_library_group_handles = 0; +int GLAD_VK_EXT_pipeline_properties = 0; +int GLAD_VK_EXT_pipeline_protected_access = 0; +int GLAD_VK_EXT_pipeline_robustness = 0; +int GLAD_VK_EXT_post_depth_coverage = 0; +int GLAD_VK_EXT_present_mode_fifo_latest_ready = 0; +int GLAD_VK_EXT_primitive_topology_list_restart = 0; +int GLAD_VK_EXT_primitives_generated_query = 0; +int GLAD_VK_EXT_private_data = 0; +int GLAD_VK_EXT_provoking_vertex = 0; +int GLAD_VK_EXT_queue_family_foreign = 0; +int GLAD_VK_EXT_rasterization_order_attachment_access = 0; +int GLAD_VK_EXT_rgba10x6_formats = 0; +int GLAD_VK_EXT_robustness2 = 0; +int GLAD_VK_EXT_sample_locations = 0; +int GLAD_VK_EXT_sampler_filter_minmax = 0; +int GLAD_VK_EXT_scalar_block_layout = 0; +int GLAD_VK_EXT_separate_stencil_usage = 0; +int GLAD_VK_EXT_shader_atomic_float = 0; +int GLAD_VK_EXT_shader_atomic_float2 = 0; +int GLAD_VK_EXT_shader_demote_to_helper_invocation = 0; +int GLAD_VK_EXT_shader_float8 = 0; +int GLAD_VK_EXT_shader_image_atomic_int64 = 0; +int GLAD_VK_EXT_shader_module_identifier = 0; +int GLAD_VK_EXT_shader_object = 0; +int GLAD_VK_EXT_shader_replicated_composites = 0; +int GLAD_VK_EXT_shader_stencil_export = 0; +int GLAD_VK_EXT_shader_subgroup_ballot = 0; +int GLAD_VK_EXT_shader_subgroup_vote = 0; +int GLAD_VK_EXT_shader_tile_image = 0; +int GLAD_VK_EXT_shader_viewport_index_layer = 0; +int GLAD_VK_EXT_subgroup_size_control = 0; +int GLAD_VK_EXT_subpass_merge_feedback = 0; +int GLAD_VK_EXT_surface_maintenance1 = 0; +int GLAD_VK_EXT_swapchain_colorspace = 0; +int GLAD_VK_EXT_swapchain_maintenance1 = 0; +int GLAD_VK_EXT_texel_buffer_alignment = 0; +int GLAD_VK_EXT_texture_compression_astc_hdr = 0; +int GLAD_VK_EXT_tooling_info = 0; +int GLAD_VK_EXT_transform_feedback = 0; +int GLAD_VK_EXT_validation_cache = 0; +int GLAD_VK_EXT_validation_features = 0; +int GLAD_VK_EXT_validation_flags = 0; +int GLAD_VK_EXT_vertex_attribute_divisor = 0; +int GLAD_VK_EXT_vertex_attribute_robustness = 0; +int GLAD_VK_EXT_vertex_input_dynamic_state = 0; +int GLAD_VK_EXT_ycbcr_2plane_444_formats = 0; +int GLAD_VK_EXT_ycbcr_image_arrays = 0; +int GLAD_VK_EXT_zero_initialize_device_memory = 0; +#if defined(VK_USE_PLATFORM_FUCHSIA) +int GLAD_VK_FUCHSIA_buffer_collection = 0; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +int GLAD_VK_FUCHSIA_external_memory = 0; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +int GLAD_VK_FUCHSIA_external_semaphore = 0; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +int GLAD_VK_FUCHSIA_imagepipe_surface = 0; + +#endif +#if defined(VK_USE_PLATFORM_GGP) +int GLAD_VK_GGP_frame_token = 0; + +#endif +#if defined(VK_USE_PLATFORM_GGP) +int GLAD_VK_GGP_stream_descriptor_surface = 0; + +#endif +int GLAD_VK_GOOGLE_decorate_string = 0; +int GLAD_VK_GOOGLE_display_timing = 0; +int GLAD_VK_GOOGLE_hlsl_functionality1 = 0; +int GLAD_VK_GOOGLE_surfaceless_query = 0; +int GLAD_VK_GOOGLE_user_type = 0; +int GLAD_VK_HUAWEI_cluster_culling_shader = 0; +int GLAD_VK_HUAWEI_hdr_vivid = 0; +int GLAD_VK_HUAWEI_invocation_mask = 0; +int GLAD_VK_HUAWEI_subpass_shading = 0; +int GLAD_VK_IMG_filter_cubic = 0; +int GLAD_VK_IMG_format_pvrtc = 0; +int GLAD_VK_IMG_relaxed_line_rasterization = 0; +int GLAD_VK_INTEL_performance_query = 0; +int GLAD_VK_INTEL_shader_integer_functions2 = 0; +int GLAD_VK_KHR_16bit_storage = 0; +int GLAD_VK_KHR_8bit_storage = 0; +int GLAD_VK_KHR_acceleration_structure = 0; +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +int GLAD_VK_KHR_android_surface = 0; + +#endif +int GLAD_VK_KHR_bind_memory2 = 0; +int GLAD_VK_KHR_buffer_device_address = 0; +int GLAD_VK_KHR_calibrated_timestamps = 0; +int GLAD_VK_KHR_compute_shader_derivatives = 0; +int GLAD_VK_KHR_cooperative_matrix = 0; +int GLAD_VK_KHR_copy_commands2 = 0; +int GLAD_VK_KHR_copy_memory_indirect = 0; +int GLAD_VK_KHR_create_renderpass2 = 0; +int GLAD_VK_KHR_dedicated_allocation = 0; +int GLAD_VK_KHR_deferred_host_operations = 0; +int GLAD_VK_KHR_depth_clamp_zero_one = 0; +int GLAD_VK_KHR_depth_stencil_resolve = 0; +int GLAD_VK_KHR_descriptor_update_template = 0; +int GLAD_VK_KHR_device_group = 0; +int GLAD_VK_KHR_device_group_creation = 0; +int GLAD_VK_KHR_display = 0; +int GLAD_VK_KHR_display_swapchain = 0; +int GLAD_VK_KHR_draw_indirect_count = 0; +int GLAD_VK_KHR_driver_properties = 0; +int GLAD_VK_KHR_dynamic_rendering = 0; +int GLAD_VK_KHR_dynamic_rendering_local_read = 0; +int GLAD_VK_KHR_external_fence = 0; +int GLAD_VK_KHR_external_fence_capabilities = 0; +int GLAD_VK_KHR_external_fence_fd = 0; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +int GLAD_VK_KHR_external_fence_win32 = 0; + +#endif +int GLAD_VK_KHR_external_memory = 0; +int GLAD_VK_KHR_external_memory_capabilities = 0; +int GLAD_VK_KHR_external_memory_fd = 0; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +int GLAD_VK_KHR_external_memory_win32 = 0; + +#endif +int GLAD_VK_KHR_external_semaphore = 0; +int GLAD_VK_KHR_external_semaphore_capabilities = 0; +int GLAD_VK_KHR_external_semaphore_fd = 0; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +int GLAD_VK_KHR_external_semaphore_win32 = 0; + +#endif +int GLAD_VK_KHR_format_feature_flags2 = 0; +int GLAD_VK_KHR_fragment_shader_barycentric = 0; +int GLAD_VK_KHR_fragment_shading_rate = 0; +int GLAD_VK_KHR_get_display_properties2 = 0; +int GLAD_VK_KHR_get_memory_requirements2 = 0; +int GLAD_VK_KHR_get_physical_device_properties2 = 0; +int GLAD_VK_KHR_get_surface_capabilities2 = 0; +int GLAD_VK_KHR_global_priority = 0; +int GLAD_VK_KHR_image_format_list = 0; +int GLAD_VK_KHR_imageless_framebuffer = 0; +int GLAD_VK_KHR_incremental_present = 0; +int GLAD_VK_KHR_index_type_uint8 = 0; +int GLAD_VK_KHR_line_rasterization = 0; +int GLAD_VK_KHR_load_store_op_none = 0; +int GLAD_VK_KHR_maintenance1 = 0; +int GLAD_VK_KHR_maintenance2 = 0; +int GLAD_VK_KHR_maintenance3 = 0; +int GLAD_VK_KHR_maintenance4 = 0; +int GLAD_VK_KHR_maintenance5 = 0; +int GLAD_VK_KHR_maintenance6 = 0; +int GLAD_VK_KHR_maintenance7 = 0; +int GLAD_VK_KHR_maintenance8 = 0; +int GLAD_VK_KHR_maintenance9 = 0; +int GLAD_VK_KHR_map_memory2 = 0; +int GLAD_VK_KHR_multiview = 0; +int GLAD_VK_KHR_performance_query = 0; +int GLAD_VK_KHR_pipeline_binary = 0; +int GLAD_VK_KHR_pipeline_executable_properties = 0; +int GLAD_VK_KHR_pipeline_library = 0; +int GLAD_VK_KHR_portability_enumeration = 0; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +int GLAD_VK_KHR_portability_subset = 0; + +#endif +int GLAD_VK_KHR_present_id = 0; +int GLAD_VK_KHR_present_id2 = 0; +int GLAD_VK_KHR_present_mode_fifo_latest_ready = 0; +int GLAD_VK_KHR_present_wait = 0; +int GLAD_VK_KHR_present_wait2 = 0; +int GLAD_VK_KHR_push_descriptor = 0; +int GLAD_VK_KHR_ray_query = 0; +int GLAD_VK_KHR_ray_tracing_maintenance1 = 0; +int GLAD_VK_KHR_ray_tracing_pipeline = 0; +int GLAD_VK_KHR_ray_tracing_position_fetch = 0; +int GLAD_VK_KHR_relaxed_block_layout = 0; +int GLAD_VK_KHR_robustness2 = 0; +int GLAD_VK_KHR_sampler_mirror_clamp_to_edge = 0; +int GLAD_VK_KHR_sampler_ycbcr_conversion = 0; +int GLAD_VK_KHR_separate_depth_stencil_layouts = 0; +int GLAD_VK_KHR_shader_atomic_int64 = 0; +int GLAD_VK_KHR_shader_bfloat16 = 0; +int GLAD_VK_KHR_shader_clock = 0; +int GLAD_VK_KHR_shader_draw_parameters = 0; +int GLAD_VK_KHR_shader_expect_assume = 0; +int GLAD_VK_KHR_shader_float16_int8 = 0; +int GLAD_VK_KHR_shader_float_controls = 0; +int GLAD_VK_KHR_shader_float_controls2 = 0; +int GLAD_VK_KHR_shader_fma = 0; +int GLAD_VK_KHR_shader_integer_dot_product = 0; +int GLAD_VK_KHR_shader_maximal_reconvergence = 0; +int GLAD_VK_KHR_shader_non_semantic_info = 0; +int GLAD_VK_KHR_shader_quad_control = 0; +int GLAD_VK_KHR_shader_relaxed_extended_instruction = 0; +int GLAD_VK_KHR_shader_subgroup_extended_types = 0; +int GLAD_VK_KHR_shader_subgroup_rotate = 0; +int GLAD_VK_KHR_shader_subgroup_uniform_control_flow = 0; +int GLAD_VK_KHR_shader_terminate_invocation = 0; +int GLAD_VK_KHR_shader_untyped_pointers = 0; +int GLAD_VK_KHR_shared_presentable_image = 0; +int GLAD_VK_KHR_spirv_1_4 = 0; +int GLAD_VK_KHR_storage_buffer_storage_class = 0; +int GLAD_VK_KHR_surface = 0; +int GLAD_VK_KHR_surface_maintenance1 = 0; +int GLAD_VK_KHR_surface_protected_capabilities = 0; +int GLAD_VK_KHR_swapchain = 0; +int GLAD_VK_KHR_swapchain_maintenance1 = 0; +int GLAD_VK_KHR_swapchain_mutable_format = 0; +int GLAD_VK_KHR_synchronization2 = 0; +int GLAD_VK_KHR_timeline_semaphore = 0; +int GLAD_VK_KHR_unified_image_layouts = 0; +int GLAD_VK_KHR_uniform_buffer_standard_layout = 0; +int GLAD_VK_KHR_variable_pointers = 0; +int GLAD_VK_KHR_vertex_attribute_divisor = 0; +int GLAD_VK_KHR_video_decode_av1 = 0; +int GLAD_VK_KHR_video_decode_h264 = 0; +int GLAD_VK_KHR_video_decode_h265 = 0; +int GLAD_VK_KHR_video_decode_queue = 0; +int GLAD_VK_KHR_video_decode_vp9 = 0; +int GLAD_VK_KHR_video_encode_av1 = 0; +int GLAD_VK_KHR_video_encode_h264 = 0; +int GLAD_VK_KHR_video_encode_h265 = 0; +int GLAD_VK_KHR_video_encode_intra_refresh = 0; +int GLAD_VK_KHR_video_encode_quantization_map = 0; +int GLAD_VK_KHR_video_encode_queue = 0; +int GLAD_VK_KHR_video_maintenance1 = 0; +int GLAD_VK_KHR_video_maintenance2 = 0; +int GLAD_VK_KHR_video_queue = 0; +int GLAD_VK_KHR_vulkan_memory_model = 0; +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +int GLAD_VK_KHR_wayland_surface = 0; + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +int GLAD_VK_KHR_win32_keyed_mutex = 0; + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +int GLAD_VK_KHR_win32_surface = 0; + +#endif +int GLAD_VK_KHR_workgroup_memory_explicit_layout = 0; +#if defined(VK_USE_PLATFORM_XCB_KHR) +int GLAD_VK_KHR_xcb_surface = 0; + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +int GLAD_VK_KHR_xlib_surface = 0; + +#endif +int GLAD_VK_KHR_zero_initialize_workgroup_memory = 0; +int GLAD_VK_LUNARG_direct_driver_loading = 0; +int GLAD_VK_MESA_image_alignment_control = 0; +int GLAD_VK_MSFT_layered_driver = 0; +#if defined(VK_USE_PLATFORM_IOS_MVK) +int GLAD_VK_MVK_ios_surface = 0; + +#endif +#if defined(VK_USE_PLATFORM_MACOS_MVK) +int GLAD_VK_MVK_macos_surface = 0; + +#endif +#if defined(VK_USE_PLATFORM_VI_NN) +int GLAD_VK_NN_vi_surface = 0; + +#endif +int GLAD_VK_NVX_binary_import = 0; +int GLAD_VK_NVX_image_view_handle = 0; +int GLAD_VK_NVX_multiview_per_view_attributes = 0; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +int GLAD_VK_NV_acquire_winrt_display = 0; + +#endif +int GLAD_VK_NV_clip_space_w_scaling = 0; +int GLAD_VK_NV_cluster_acceleration_structure = 0; +int GLAD_VK_NV_command_buffer_inheritance = 0; +int GLAD_VK_NV_compute_shader_derivatives = 0; +int GLAD_VK_NV_cooperative_matrix = 0; +int GLAD_VK_NV_cooperative_matrix2 = 0; +int GLAD_VK_NV_cooperative_vector = 0; +int GLAD_VK_NV_copy_memory_indirect = 0; +int GLAD_VK_NV_corner_sampled_image = 0; +int GLAD_VK_NV_coverage_reduction_mode = 0; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +int GLAD_VK_NV_cuda_kernel_launch = 0; + +#endif +int GLAD_VK_NV_dedicated_allocation = 0; +int GLAD_VK_NV_dedicated_allocation_image_aliasing = 0; +int GLAD_VK_NV_descriptor_pool_overallocation = 0; +int GLAD_VK_NV_device_diagnostic_checkpoints = 0; +int GLAD_VK_NV_device_diagnostics_config = 0; +int GLAD_VK_NV_device_generated_commands = 0; +int GLAD_VK_NV_device_generated_commands_compute = 0; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +int GLAD_VK_NV_displacement_micromap = 0; + +#endif +int GLAD_VK_NV_display_stereo = 0; +int GLAD_VK_NV_extended_sparse_address_space = 0; +int GLAD_VK_NV_external_compute_queue = 0; +int GLAD_VK_NV_external_memory = 0; +int GLAD_VK_NV_external_memory_capabilities = 0; +int GLAD_VK_NV_external_memory_rdma = 0; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +int GLAD_VK_NV_external_memory_win32 = 0; + +#endif +int GLAD_VK_NV_fill_rectangle = 0; +int GLAD_VK_NV_fragment_coverage_to_color = 0; +int GLAD_VK_NV_fragment_shader_barycentric = 0; +int GLAD_VK_NV_fragment_shading_rate_enums = 0; +int GLAD_VK_NV_framebuffer_mixed_samples = 0; +int GLAD_VK_NV_geometry_shader_passthrough = 0; +int GLAD_VK_NV_glsl_shader = 0; +int GLAD_VK_NV_inherited_viewport_scissor = 0; +int GLAD_VK_NV_linear_color_attachment = 0; +int GLAD_VK_NV_low_latency = 0; +int GLAD_VK_NV_low_latency2 = 0; +int GLAD_VK_NV_memory_decompression = 0; +int GLAD_VK_NV_mesh_shader = 0; +int GLAD_VK_NV_optical_flow = 0; +int GLAD_VK_NV_partitioned_acceleration_structure = 0; +int GLAD_VK_NV_per_stage_descriptor_set = 0; +int GLAD_VK_NV_present_barrier = 0; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +int GLAD_VK_NV_present_metering = 0; + +#endif +int GLAD_VK_NV_raw_access_chains = 0; +int GLAD_VK_NV_ray_tracing = 0; +int GLAD_VK_NV_ray_tracing_invocation_reorder = 0; +int GLAD_VK_NV_ray_tracing_linear_swept_spheres = 0; +int GLAD_VK_NV_ray_tracing_motion_blur = 0; +int GLAD_VK_NV_ray_tracing_validation = 0; +int GLAD_VK_NV_representative_fragment_test = 0; +int GLAD_VK_NV_sample_mask_override_coverage = 0; +int GLAD_VK_NV_scissor_exclusive = 0; +int GLAD_VK_NV_shader_atomic_float16_vector = 0; +int GLAD_VK_NV_shader_image_footprint = 0; +int GLAD_VK_NV_shader_sm_builtins = 0; +int GLAD_VK_NV_shader_subgroup_partitioned = 0; +int GLAD_VK_NV_shading_rate_image = 0; +int GLAD_VK_NV_viewport_array2 = 0; +int GLAD_VK_NV_viewport_swizzle = 0; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +int GLAD_VK_NV_win32_keyed_mutex = 0; + +#endif +#if defined(VK_USE_PLATFORM_OHOS) +int GLAD_VK_OHOS_surface = 0; + +#endif +int GLAD_VK_QCOM_filter_cubic_clamp = 0; +int GLAD_VK_QCOM_filter_cubic_weights = 0; +int GLAD_VK_QCOM_fragment_density_map_offset = 0; +int GLAD_VK_QCOM_image_processing = 0; +int GLAD_VK_QCOM_image_processing2 = 0; +int GLAD_VK_QCOM_multiview_per_view_render_areas = 0; +int GLAD_VK_QCOM_multiview_per_view_viewports = 0; +int GLAD_VK_QCOM_render_pass_shader_resolve = 0; +int GLAD_VK_QCOM_render_pass_store_ops = 0; +int GLAD_VK_QCOM_render_pass_transform = 0; +int GLAD_VK_QCOM_rotated_copy_commands = 0; +int GLAD_VK_QCOM_tile_memory_heap = 0; +int GLAD_VK_QCOM_tile_properties = 0; +int GLAD_VK_QCOM_tile_shading = 0; +int GLAD_VK_QCOM_ycbcr_degamma = 0; +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +int GLAD_VK_QNX_external_memory_screen_buffer = 0; + +#endif +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +int GLAD_VK_QNX_screen_surface = 0; + +#endif +int GLAD_VK_SEC_amigo_profiling = 0; +int GLAD_VK_SEC_pipeline_cache_incremental_mode = 0; +int GLAD_VK_VALVE_descriptor_set_host_mapping = 0; +int GLAD_VK_VALVE_fragment_density_map_layered = 0; +int GLAD_VK_VALVE_mutable_descriptor_type = 0; +int GLAD_VK_VALVE_video_encode_rgb_conversion = 0; + + + +PFN_vkAcquireDrmDisplayEXT glad_vkAcquireDrmDisplayEXT = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkAcquireFullScreenExclusiveModeEXT glad_vkAcquireFullScreenExclusiveModeEXT = NULL; + +#endif +PFN_vkAcquireNextImage2KHR glad_vkAcquireNextImage2KHR = NULL; +PFN_vkAcquireNextImageKHR glad_vkAcquireNextImageKHR = NULL; +PFN_vkAcquirePerformanceConfigurationINTEL glad_vkAcquirePerformanceConfigurationINTEL = NULL; +PFN_vkAcquireProfilingLockKHR glad_vkAcquireProfilingLockKHR = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkAcquireWinrtDisplayNV glad_vkAcquireWinrtDisplayNV = NULL; + +#endif +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +PFN_vkAcquireXlibDisplayEXT glad_vkAcquireXlibDisplayEXT = NULL; + +#endif +PFN_vkAllocateCommandBuffers glad_vkAllocateCommandBuffers = NULL; +PFN_vkAllocateDescriptorSets glad_vkAllocateDescriptorSets = NULL; +PFN_vkAllocateMemory glad_vkAllocateMemory = NULL; +PFN_vkAntiLagUpdateAMD glad_vkAntiLagUpdateAMD = NULL; +PFN_vkBeginCommandBuffer glad_vkBeginCommandBuffer = NULL; +PFN_vkBindAccelerationStructureMemoryNV glad_vkBindAccelerationStructureMemoryNV = NULL; +PFN_vkBindBufferMemory glad_vkBindBufferMemory = NULL; +PFN_vkBindBufferMemory2 glad_vkBindBufferMemory2 = NULL; +PFN_vkBindBufferMemory2KHR glad_vkBindBufferMemory2KHR = NULL; +PFN_vkBindDataGraphPipelineSessionMemoryARM glad_vkBindDataGraphPipelineSessionMemoryARM = NULL; +PFN_vkBindImageMemory glad_vkBindImageMemory = NULL; +PFN_vkBindImageMemory2 glad_vkBindImageMemory2 = NULL; +PFN_vkBindImageMemory2KHR glad_vkBindImageMemory2KHR = NULL; +PFN_vkBindOpticalFlowSessionImageNV glad_vkBindOpticalFlowSessionImageNV = NULL; +PFN_vkBindTensorMemoryARM glad_vkBindTensorMemoryARM = NULL; +PFN_vkBindVideoSessionMemoryKHR glad_vkBindVideoSessionMemoryKHR = NULL; +PFN_vkBuildAccelerationStructuresKHR glad_vkBuildAccelerationStructuresKHR = NULL; +PFN_vkBuildMicromapsEXT glad_vkBuildMicromapsEXT = NULL; +PFN_vkCmdBeginConditionalRenderingEXT glad_vkCmdBeginConditionalRenderingEXT = NULL; +PFN_vkCmdBeginDebugUtilsLabelEXT glad_vkCmdBeginDebugUtilsLabelEXT = NULL; +PFN_vkCmdBeginPerTileExecutionQCOM glad_vkCmdBeginPerTileExecutionQCOM = NULL; +PFN_vkCmdBeginQuery glad_vkCmdBeginQuery = NULL; +PFN_vkCmdBeginQueryIndexedEXT glad_vkCmdBeginQueryIndexedEXT = NULL; +PFN_vkCmdBeginRenderPass glad_vkCmdBeginRenderPass = NULL; +PFN_vkCmdBeginRenderPass2 glad_vkCmdBeginRenderPass2 = NULL; +PFN_vkCmdBeginRenderPass2KHR glad_vkCmdBeginRenderPass2KHR = NULL; +PFN_vkCmdBeginRendering glad_vkCmdBeginRendering = NULL; +PFN_vkCmdBeginRenderingKHR glad_vkCmdBeginRenderingKHR = NULL; +PFN_vkCmdBeginTransformFeedbackEXT glad_vkCmdBeginTransformFeedbackEXT = NULL; +PFN_vkCmdBeginVideoCodingKHR glad_vkCmdBeginVideoCodingKHR = NULL; +PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT glad_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT = NULL; +PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT glad_vkCmdBindDescriptorBufferEmbeddedSamplersEXT = NULL; +PFN_vkCmdBindDescriptorBuffersEXT glad_vkCmdBindDescriptorBuffersEXT = NULL; +PFN_vkCmdBindDescriptorSets glad_vkCmdBindDescriptorSets = NULL; +PFN_vkCmdBindDescriptorSets2 glad_vkCmdBindDescriptorSets2 = NULL; +PFN_vkCmdBindDescriptorSets2KHR glad_vkCmdBindDescriptorSets2KHR = NULL; +PFN_vkCmdBindIndexBuffer glad_vkCmdBindIndexBuffer = NULL; +PFN_vkCmdBindIndexBuffer2 glad_vkCmdBindIndexBuffer2 = NULL; +PFN_vkCmdBindIndexBuffer2KHR glad_vkCmdBindIndexBuffer2KHR = NULL; +PFN_vkCmdBindInvocationMaskHUAWEI glad_vkCmdBindInvocationMaskHUAWEI = NULL; +PFN_vkCmdBindPipeline glad_vkCmdBindPipeline = NULL; +PFN_vkCmdBindPipelineShaderGroupNV glad_vkCmdBindPipelineShaderGroupNV = NULL; +PFN_vkCmdBindShadersEXT glad_vkCmdBindShadersEXT = NULL; +PFN_vkCmdBindShadingRateImageNV glad_vkCmdBindShadingRateImageNV = NULL; +PFN_vkCmdBindTileMemoryQCOM glad_vkCmdBindTileMemoryQCOM = NULL; +PFN_vkCmdBindTransformFeedbackBuffersEXT glad_vkCmdBindTransformFeedbackBuffersEXT = NULL; +PFN_vkCmdBindVertexBuffers glad_vkCmdBindVertexBuffers = NULL; +PFN_vkCmdBindVertexBuffers2 glad_vkCmdBindVertexBuffers2 = NULL; +PFN_vkCmdBindVertexBuffers2EXT glad_vkCmdBindVertexBuffers2EXT = NULL; +PFN_vkCmdBlitImage glad_vkCmdBlitImage = NULL; +PFN_vkCmdBlitImage2 glad_vkCmdBlitImage2 = NULL; +PFN_vkCmdBlitImage2KHR glad_vkCmdBlitImage2KHR = NULL; +PFN_vkCmdBuildAccelerationStructureNV glad_vkCmdBuildAccelerationStructureNV = NULL; +PFN_vkCmdBuildAccelerationStructuresIndirectKHR glad_vkCmdBuildAccelerationStructuresIndirectKHR = NULL; +PFN_vkCmdBuildAccelerationStructuresKHR glad_vkCmdBuildAccelerationStructuresKHR = NULL; +PFN_vkCmdBuildClusterAccelerationStructureIndirectNV glad_vkCmdBuildClusterAccelerationStructureIndirectNV = NULL; +PFN_vkCmdBuildMicromapsEXT glad_vkCmdBuildMicromapsEXT = NULL; +PFN_vkCmdBuildPartitionedAccelerationStructuresNV glad_vkCmdBuildPartitionedAccelerationStructuresNV = NULL; +PFN_vkCmdClearAttachments glad_vkCmdClearAttachments = NULL; +PFN_vkCmdClearColorImage glad_vkCmdClearColorImage = NULL; +PFN_vkCmdClearDepthStencilImage glad_vkCmdClearDepthStencilImage = NULL; +PFN_vkCmdControlVideoCodingKHR glad_vkCmdControlVideoCodingKHR = NULL; +PFN_vkCmdConvertCooperativeVectorMatrixNV glad_vkCmdConvertCooperativeVectorMatrixNV = NULL; +PFN_vkCmdCopyAccelerationStructureKHR glad_vkCmdCopyAccelerationStructureKHR = NULL; +PFN_vkCmdCopyAccelerationStructureNV glad_vkCmdCopyAccelerationStructureNV = NULL; +PFN_vkCmdCopyAccelerationStructureToMemoryKHR glad_vkCmdCopyAccelerationStructureToMemoryKHR = NULL; +PFN_vkCmdCopyBuffer glad_vkCmdCopyBuffer = NULL; +PFN_vkCmdCopyBuffer2 glad_vkCmdCopyBuffer2 = NULL; +PFN_vkCmdCopyBuffer2KHR glad_vkCmdCopyBuffer2KHR = NULL; +PFN_vkCmdCopyBufferToImage glad_vkCmdCopyBufferToImage = NULL; +PFN_vkCmdCopyBufferToImage2 glad_vkCmdCopyBufferToImage2 = NULL; +PFN_vkCmdCopyBufferToImage2KHR glad_vkCmdCopyBufferToImage2KHR = NULL; +PFN_vkCmdCopyImage glad_vkCmdCopyImage = NULL; +PFN_vkCmdCopyImage2 glad_vkCmdCopyImage2 = NULL; +PFN_vkCmdCopyImage2KHR glad_vkCmdCopyImage2KHR = NULL; +PFN_vkCmdCopyImageToBuffer glad_vkCmdCopyImageToBuffer = NULL; +PFN_vkCmdCopyImageToBuffer2 glad_vkCmdCopyImageToBuffer2 = NULL; +PFN_vkCmdCopyImageToBuffer2KHR glad_vkCmdCopyImageToBuffer2KHR = NULL; +PFN_vkCmdCopyMemoryIndirectKHR glad_vkCmdCopyMemoryIndirectKHR = NULL; +PFN_vkCmdCopyMemoryIndirectNV glad_vkCmdCopyMemoryIndirectNV = NULL; +PFN_vkCmdCopyMemoryToAccelerationStructureKHR glad_vkCmdCopyMemoryToAccelerationStructureKHR = NULL; +PFN_vkCmdCopyMemoryToImageIndirectKHR glad_vkCmdCopyMemoryToImageIndirectKHR = NULL; +PFN_vkCmdCopyMemoryToImageIndirectNV glad_vkCmdCopyMemoryToImageIndirectNV = NULL; +PFN_vkCmdCopyMemoryToMicromapEXT glad_vkCmdCopyMemoryToMicromapEXT = NULL; +PFN_vkCmdCopyMicromapEXT glad_vkCmdCopyMicromapEXT = NULL; +PFN_vkCmdCopyMicromapToMemoryEXT glad_vkCmdCopyMicromapToMemoryEXT = NULL; +PFN_vkCmdCopyQueryPoolResults glad_vkCmdCopyQueryPoolResults = NULL; +PFN_vkCmdCopyTensorARM glad_vkCmdCopyTensorARM = NULL; +PFN_vkCmdCuLaunchKernelNVX glad_vkCmdCuLaunchKernelNVX = NULL; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkCmdCudaLaunchKernelNV glad_vkCmdCudaLaunchKernelNV = NULL; + +#endif +PFN_vkCmdDebugMarkerBeginEXT glad_vkCmdDebugMarkerBeginEXT = NULL; +PFN_vkCmdDebugMarkerEndEXT glad_vkCmdDebugMarkerEndEXT = NULL; +PFN_vkCmdDebugMarkerInsertEXT glad_vkCmdDebugMarkerInsertEXT = NULL; +PFN_vkCmdDecodeVideoKHR glad_vkCmdDecodeVideoKHR = NULL; +PFN_vkCmdDecompressMemoryIndirectCountNV glad_vkCmdDecompressMemoryIndirectCountNV = NULL; +PFN_vkCmdDecompressMemoryNV glad_vkCmdDecompressMemoryNV = NULL; +PFN_vkCmdDispatch glad_vkCmdDispatch = NULL; +PFN_vkCmdDispatchBase glad_vkCmdDispatchBase = NULL; +PFN_vkCmdDispatchBaseKHR glad_vkCmdDispatchBaseKHR = NULL; +PFN_vkCmdDispatchDataGraphARM glad_vkCmdDispatchDataGraphARM = NULL; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkCmdDispatchGraphAMDX glad_vkCmdDispatchGraphAMDX = NULL; + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkCmdDispatchGraphIndirectAMDX glad_vkCmdDispatchGraphIndirectAMDX = NULL; + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkCmdDispatchGraphIndirectCountAMDX glad_vkCmdDispatchGraphIndirectCountAMDX = NULL; + +#endif +PFN_vkCmdDispatchIndirect glad_vkCmdDispatchIndirect = NULL; +PFN_vkCmdDispatchTileQCOM glad_vkCmdDispatchTileQCOM = NULL; +PFN_vkCmdDraw glad_vkCmdDraw = NULL; +PFN_vkCmdDrawClusterHUAWEI glad_vkCmdDrawClusterHUAWEI = NULL; +PFN_vkCmdDrawClusterIndirectHUAWEI glad_vkCmdDrawClusterIndirectHUAWEI = NULL; +PFN_vkCmdDrawIndexed glad_vkCmdDrawIndexed = NULL; +PFN_vkCmdDrawIndexedIndirect glad_vkCmdDrawIndexedIndirect = NULL; +PFN_vkCmdDrawIndexedIndirectCount glad_vkCmdDrawIndexedIndirectCount = NULL; +PFN_vkCmdDrawIndexedIndirectCountAMD glad_vkCmdDrawIndexedIndirectCountAMD = NULL; +PFN_vkCmdDrawIndexedIndirectCountKHR glad_vkCmdDrawIndexedIndirectCountKHR = NULL; +PFN_vkCmdDrawIndirect glad_vkCmdDrawIndirect = NULL; +PFN_vkCmdDrawIndirectByteCountEXT glad_vkCmdDrawIndirectByteCountEXT = NULL; +PFN_vkCmdDrawIndirectCount glad_vkCmdDrawIndirectCount = NULL; +PFN_vkCmdDrawIndirectCountAMD glad_vkCmdDrawIndirectCountAMD = NULL; +PFN_vkCmdDrawIndirectCountKHR glad_vkCmdDrawIndirectCountKHR = NULL; +PFN_vkCmdDrawMeshTasksEXT glad_vkCmdDrawMeshTasksEXT = NULL; +PFN_vkCmdDrawMeshTasksIndirectCountEXT glad_vkCmdDrawMeshTasksIndirectCountEXT = NULL; +PFN_vkCmdDrawMeshTasksIndirectCountNV glad_vkCmdDrawMeshTasksIndirectCountNV = NULL; +PFN_vkCmdDrawMeshTasksIndirectEXT glad_vkCmdDrawMeshTasksIndirectEXT = NULL; +PFN_vkCmdDrawMeshTasksIndirectNV glad_vkCmdDrawMeshTasksIndirectNV = NULL; +PFN_vkCmdDrawMeshTasksNV glad_vkCmdDrawMeshTasksNV = NULL; +PFN_vkCmdDrawMultiEXT glad_vkCmdDrawMultiEXT = NULL; +PFN_vkCmdDrawMultiIndexedEXT glad_vkCmdDrawMultiIndexedEXT = NULL; +PFN_vkCmdEncodeVideoKHR glad_vkCmdEncodeVideoKHR = NULL; +PFN_vkCmdEndConditionalRenderingEXT glad_vkCmdEndConditionalRenderingEXT = NULL; +PFN_vkCmdEndDebugUtilsLabelEXT glad_vkCmdEndDebugUtilsLabelEXT = NULL; +PFN_vkCmdEndPerTileExecutionQCOM glad_vkCmdEndPerTileExecutionQCOM = NULL; +PFN_vkCmdEndQuery glad_vkCmdEndQuery = NULL; +PFN_vkCmdEndQueryIndexedEXT glad_vkCmdEndQueryIndexedEXT = NULL; +PFN_vkCmdEndRenderPass glad_vkCmdEndRenderPass = NULL; +PFN_vkCmdEndRenderPass2 glad_vkCmdEndRenderPass2 = NULL; +PFN_vkCmdEndRenderPass2KHR glad_vkCmdEndRenderPass2KHR = NULL; +PFN_vkCmdEndRendering glad_vkCmdEndRendering = NULL; +PFN_vkCmdEndRendering2EXT glad_vkCmdEndRendering2EXT = NULL; +PFN_vkCmdEndRenderingKHR glad_vkCmdEndRenderingKHR = NULL; +PFN_vkCmdEndTransformFeedbackEXT glad_vkCmdEndTransformFeedbackEXT = NULL; +PFN_vkCmdEndVideoCodingKHR glad_vkCmdEndVideoCodingKHR = NULL; +PFN_vkCmdExecuteCommands glad_vkCmdExecuteCommands = NULL; +PFN_vkCmdExecuteGeneratedCommandsEXT glad_vkCmdExecuteGeneratedCommandsEXT = NULL; +PFN_vkCmdExecuteGeneratedCommandsNV glad_vkCmdExecuteGeneratedCommandsNV = NULL; +PFN_vkCmdFillBuffer glad_vkCmdFillBuffer = NULL; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkCmdInitializeGraphScratchMemoryAMDX glad_vkCmdInitializeGraphScratchMemoryAMDX = NULL; + +#endif +PFN_vkCmdInsertDebugUtilsLabelEXT glad_vkCmdInsertDebugUtilsLabelEXT = NULL; +PFN_vkCmdNextSubpass glad_vkCmdNextSubpass = NULL; +PFN_vkCmdNextSubpass2 glad_vkCmdNextSubpass2 = NULL; +PFN_vkCmdNextSubpass2KHR glad_vkCmdNextSubpass2KHR = NULL; +PFN_vkCmdOpticalFlowExecuteNV glad_vkCmdOpticalFlowExecuteNV = NULL; +PFN_vkCmdPipelineBarrier glad_vkCmdPipelineBarrier = NULL; +PFN_vkCmdPipelineBarrier2 glad_vkCmdPipelineBarrier2 = NULL; +PFN_vkCmdPipelineBarrier2KHR glad_vkCmdPipelineBarrier2KHR = NULL; +PFN_vkCmdPreprocessGeneratedCommandsEXT glad_vkCmdPreprocessGeneratedCommandsEXT = NULL; +PFN_vkCmdPreprocessGeneratedCommandsNV glad_vkCmdPreprocessGeneratedCommandsNV = NULL; +PFN_vkCmdPushConstants glad_vkCmdPushConstants = NULL; +PFN_vkCmdPushConstants2 glad_vkCmdPushConstants2 = NULL; +PFN_vkCmdPushConstants2KHR glad_vkCmdPushConstants2KHR = NULL; +PFN_vkCmdPushDescriptorSet glad_vkCmdPushDescriptorSet = NULL; +PFN_vkCmdPushDescriptorSet2 glad_vkCmdPushDescriptorSet2 = NULL; +PFN_vkCmdPushDescriptorSet2KHR glad_vkCmdPushDescriptorSet2KHR = NULL; +PFN_vkCmdPushDescriptorSetKHR glad_vkCmdPushDescriptorSetKHR = NULL; +PFN_vkCmdPushDescriptorSetWithTemplate glad_vkCmdPushDescriptorSetWithTemplate = NULL; +PFN_vkCmdPushDescriptorSetWithTemplate2 glad_vkCmdPushDescriptorSetWithTemplate2 = NULL; +PFN_vkCmdPushDescriptorSetWithTemplate2KHR glad_vkCmdPushDescriptorSetWithTemplate2KHR = NULL; +PFN_vkCmdPushDescriptorSetWithTemplateKHR glad_vkCmdPushDescriptorSetWithTemplateKHR = NULL; +PFN_vkCmdResetEvent glad_vkCmdResetEvent = NULL; +PFN_vkCmdResetEvent2 glad_vkCmdResetEvent2 = NULL; +PFN_vkCmdResetEvent2KHR glad_vkCmdResetEvent2KHR = NULL; +PFN_vkCmdResetQueryPool glad_vkCmdResetQueryPool = NULL; +PFN_vkCmdResolveImage glad_vkCmdResolveImage = NULL; +PFN_vkCmdResolveImage2 glad_vkCmdResolveImage2 = NULL; +PFN_vkCmdResolveImage2KHR glad_vkCmdResolveImage2KHR = NULL; +PFN_vkCmdSetAlphaToCoverageEnableEXT glad_vkCmdSetAlphaToCoverageEnableEXT = NULL; +PFN_vkCmdSetAlphaToOneEnableEXT glad_vkCmdSetAlphaToOneEnableEXT = NULL; +PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT glad_vkCmdSetAttachmentFeedbackLoopEnableEXT = NULL; +PFN_vkCmdSetBlendConstants glad_vkCmdSetBlendConstants = NULL; +PFN_vkCmdSetCheckpointNV glad_vkCmdSetCheckpointNV = NULL; +PFN_vkCmdSetCoarseSampleOrderNV glad_vkCmdSetCoarseSampleOrderNV = NULL; +PFN_vkCmdSetColorBlendAdvancedEXT glad_vkCmdSetColorBlendAdvancedEXT = NULL; +PFN_vkCmdSetColorBlendEnableEXT glad_vkCmdSetColorBlendEnableEXT = NULL; +PFN_vkCmdSetColorBlendEquationEXT glad_vkCmdSetColorBlendEquationEXT = NULL; +PFN_vkCmdSetColorWriteEnableEXT glad_vkCmdSetColorWriteEnableEXT = NULL; +PFN_vkCmdSetColorWriteMaskEXT glad_vkCmdSetColorWriteMaskEXT = NULL; +PFN_vkCmdSetConservativeRasterizationModeEXT glad_vkCmdSetConservativeRasterizationModeEXT = NULL; +PFN_vkCmdSetCoverageModulationModeNV glad_vkCmdSetCoverageModulationModeNV = NULL; +PFN_vkCmdSetCoverageModulationTableEnableNV glad_vkCmdSetCoverageModulationTableEnableNV = NULL; +PFN_vkCmdSetCoverageModulationTableNV glad_vkCmdSetCoverageModulationTableNV = NULL; +PFN_vkCmdSetCoverageReductionModeNV glad_vkCmdSetCoverageReductionModeNV = NULL; +PFN_vkCmdSetCoverageToColorEnableNV glad_vkCmdSetCoverageToColorEnableNV = NULL; +PFN_vkCmdSetCoverageToColorLocationNV glad_vkCmdSetCoverageToColorLocationNV = NULL; +PFN_vkCmdSetCullMode glad_vkCmdSetCullMode = NULL; +PFN_vkCmdSetCullModeEXT glad_vkCmdSetCullModeEXT = NULL; +PFN_vkCmdSetDepthBias glad_vkCmdSetDepthBias = NULL; +PFN_vkCmdSetDepthBias2EXT glad_vkCmdSetDepthBias2EXT = NULL; +PFN_vkCmdSetDepthBiasEnable glad_vkCmdSetDepthBiasEnable = NULL; +PFN_vkCmdSetDepthBiasEnableEXT glad_vkCmdSetDepthBiasEnableEXT = NULL; +PFN_vkCmdSetDepthBounds glad_vkCmdSetDepthBounds = NULL; +PFN_vkCmdSetDepthBoundsTestEnable glad_vkCmdSetDepthBoundsTestEnable = NULL; +PFN_vkCmdSetDepthBoundsTestEnableEXT glad_vkCmdSetDepthBoundsTestEnableEXT = NULL; +PFN_vkCmdSetDepthClampEnableEXT glad_vkCmdSetDepthClampEnableEXT = NULL; +PFN_vkCmdSetDepthClampRangeEXT glad_vkCmdSetDepthClampRangeEXT = NULL; +PFN_vkCmdSetDepthClipEnableEXT glad_vkCmdSetDepthClipEnableEXT = NULL; +PFN_vkCmdSetDepthClipNegativeOneToOneEXT glad_vkCmdSetDepthClipNegativeOneToOneEXT = NULL; +PFN_vkCmdSetDepthCompareOp glad_vkCmdSetDepthCompareOp = NULL; +PFN_vkCmdSetDepthCompareOpEXT glad_vkCmdSetDepthCompareOpEXT = NULL; +PFN_vkCmdSetDepthTestEnable glad_vkCmdSetDepthTestEnable = NULL; +PFN_vkCmdSetDepthTestEnableEXT glad_vkCmdSetDepthTestEnableEXT = NULL; +PFN_vkCmdSetDepthWriteEnable glad_vkCmdSetDepthWriteEnable = NULL; +PFN_vkCmdSetDepthWriteEnableEXT glad_vkCmdSetDepthWriteEnableEXT = NULL; +PFN_vkCmdSetDescriptorBufferOffsets2EXT glad_vkCmdSetDescriptorBufferOffsets2EXT = NULL; +PFN_vkCmdSetDescriptorBufferOffsetsEXT glad_vkCmdSetDescriptorBufferOffsetsEXT = NULL; +PFN_vkCmdSetDeviceMask glad_vkCmdSetDeviceMask = NULL; +PFN_vkCmdSetDeviceMaskKHR glad_vkCmdSetDeviceMaskKHR = NULL; +PFN_vkCmdSetDiscardRectangleEXT glad_vkCmdSetDiscardRectangleEXT = NULL; +PFN_vkCmdSetDiscardRectangleEnableEXT glad_vkCmdSetDiscardRectangleEnableEXT = NULL; +PFN_vkCmdSetDiscardRectangleModeEXT glad_vkCmdSetDiscardRectangleModeEXT = NULL; +PFN_vkCmdSetEvent glad_vkCmdSetEvent = NULL; +PFN_vkCmdSetEvent2 glad_vkCmdSetEvent2 = NULL; +PFN_vkCmdSetEvent2KHR glad_vkCmdSetEvent2KHR = NULL; +PFN_vkCmdSetExclusiveScissorEnableNV glad_vkCmdSetExclusiveScissorEnableNV = NULL; +PFN_vkCmdSetExclusiveScissorNV glad_vkCmdSetExclusiveScissorNV = NULL; +PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT glad_vkCmdSetExtraPrimitiveOverestimationSizeEXT = NULL; +PFN_vkCmdSetFragmentShadingRateEnumNV glad_vkCmdSetFragmentShadingRateEnumNV = NULL; +PFN_vkCmdSetFragmentShadingRateKHR glad_vkCmdSetFragmentShadingRateKHR = NULL; +PFN_vkCmdSetFrontFace glad_vkCmdSetFrontFace = NULL; +PFN_vkCmdSetFrontFaceEXT glad_vkCmdSetFrontFaceEXT = NULL; +PFN_vkCmdSetLineRasterizationModeEXT glad_vkCmdSetLineRasterizationModeEXT = NULL; +PFN_vkCmdSetLineStipple glad_vkCmdSetLineStipple = NULL; +PFN_vkCmdSetLineStippleEXT glad_vkCmdSetLineStippleEXT = NULL; +PFN_vkCmdSetLineStippleEnableEXT glad_vkCmdSetLineStippleEnableEXT = NULL; +PFN_vkCmdSetLineStippleKHR glad_vkCmdSetLineStippleKHR = NULL; +PFN_vkCmdSetLineWidth glad_vkCmdSetLineWidth = NULL; +PFN_vkCmdSetLogicOpEXT glad_vkCmdSetLogicOpEXT = NULL; +PFN_vkCmdSetLogicOpEnableEXT glad_vkCmdSetLogicOpEnableEXT = NULL; +PFN_vkCmdSetPatchControlPointsEXT glad_vkCmdSetPatchControlPointsEXT = NULL; +PFN_vkCmdSetPerformanceMarkerINTEL glad_vkCmdSetPerformanceMarkerINTEL = NULL; +PFN_vkCmdSetPerformanceOverrideINTEL glad_vkCmdSetPerformanceOverrideINTEL = NULL; +PFN_vkCmdSetPerformanceStreamMarkerINTEL glad_vkCmdSetPerformanceStreamMarkerINTEL = NULL; +PFN_vkCmdSetPolygonModeEXT glad_vkCmdSetPolygonModeEXT = NULL; +PFN_vkCmdSetPrimitiveRestartEnable glad_vkCmdSetPrimitiveRestartEnable = NULL; +PFN_vkCmdSetPrimitiveRestartEnableEXT glad_vkCmdSetPrimitiveRestartEnableEXT = NULL; +PFN_vkCmdSetPrimitiveTopology glad_vkCmdSetPrimitiveTopology = NULL; +PFN_vkCmdSetPrimitiveTopologyEXT glad_vkCmdSetPrimitiveTopologyEXT = NULL; +PFN_vkCmdSetProvokingVertexModeEXT glad_vkCmdSetProvokingVertexModeEXT = NULL; +PFN_vkCmdSetRasterizationSamplesEXT glad_vkCmdSetRasterizationSamplesEXT = NULL; +PFN_vkCmdSetRasterizationStreamEXT glad_vkCmdSetRasterizationStreamEXT = NULL; +PFN_vkCmdSetRasterizerDiscardEnable glad_vkCmdSetRasterizerDiscardEnable = NULL; +PFN_vkCmdSetRasterizerDiscardEnableEXT glad_vkCmdSetRasterizerDiscardEnableEXT = NULL; +PFN_vkCmdSetRayTracingPipelineStackSizeKHR glad_vkCmdSetRayTracingPipelineStackSizeKHR = NULL; +PFN_vkCmdSetRenderingAttachmentLocations glad_vkCmdSetRenderingAttachmentLocations = NULL; +PFN_vkCmdSetRenderingAttachmentLocationsKHR glad_vkCmdSetRenderingAttachmentLocationsKHR = NULL; +PFN_vkCmdSetRenderingInputAttachmentIndices glad_vkCmdSetRenderingInputAttachmentIndices = NULL; +PFN_vkCmdSetRenderingInputAttachmentIndicesKHR glad_vkCmdSetRenderingInputAttachmentIndicesKHR = NULL; +PFN_vkCmdSetRepresentativeFragmentTestEnableNV glad_vkCmdSetRepresentativeFragmentTestEnableNV = NULL; +PFN_vkCmdSetSampleLocationsEXT glad_vkCmdSetSampleLocationsEXT = NULL; +PFN_vkCmdSetSampleLocationsEnableEXT glad_vkCmdSetSampleLocationsEnableEXT = NULL; +PFN_vkCmdSetSampleMaskEXT glad_vkCmdSetSampleMaskEXT = NULL; +PFN_vkCmdSetScissor glad_vkCmdSetScissor = NULL; +PFN_vkCmdSetScissorWithCount glad_vkCmdSetScissorWithCount = NULL; +PFN_vkCmdSetScissorWithCountEXT glad_vkCmdSetScissorWithCountEXT = NULL; +PFN_vkCmdSetShadingRateImageEnableNV glad_vkCmdSetShadingRateImageEnableNV = NULL; +PFN_vkCmdSetStencilCompareMask glad_vkCmdSetStencilCompareMask = NULL; +PFN_vkCmdSetStencilOp glad_vkCmdSetStencilOp = NULL; +PFN_vkCmdSetStencilOpEXT glad_vkCmdSetStencilOpEXT = NULL; +PFN_vkCmdSetStencilReference glad_vkCmdSetStencilReference = NULL; +PFN_vkCmdSetStencilTestEnable glad_vkCmdSetStencilTestEnable = NULL; +PFN_vkCmdSetStencilTestEnableEXT glad_vkCmdSetStencilTestEnableEXT = NULL; +PFN_vkCmdSetStencilWriteMask glad_vkCmdSetStencilWriteMask = NULL; +PFN_vkCmdSetTessellationDomainOriginEXT glad_vkCmdSetTessellationDomainOriginEXT = NULL; +PFN_vkCmdSetVertexInputEXT glad_vkCmdSetVertexInputEXT = NULL; +PFN_vkCmdSetViewport glad_vkCmdSetViewport = NULL; +PFN_vkCmdSetViewportShadingRatePaletteNV glad_vkCmdSetViewportShadingRatePaletteNV = NULL; +PFN_vkCmdSetViewportSwizzleNV glad_vkCmdSetViewportSwizzleNV = NULL; +PFN_vkCmdSetViewportWScalingEnableNV glad_vkCmdSetViewportWScalingEnableNV = NULL; +PFN_vkCmdSetViewportWScalingNV glad_vkCmdSetViewportWScalingNV = NULL; +PFN_vkCmdSetViewportWithCount glad_vkCmdSetViewportWithCount = NULL; +PFN_vkCmdSetViewportWithCountEXT glad_vkCmdSetViewportWithCountEXT = NULL; +PFN_vkCmdSubpassShadingHUAWEI glad_vkCmdSubpassShadingHUAWEI = NULL; +PFN_vkCmdTraceRaysIndirect2KHR glad_vkCmdTraceRaysIndirect2KHR = NULL; +PFN_vkCmdTraceRaysIndirectKHR glad_vkCmdTraceRaysIndirectKHR = NULL; +PFN_vkCmdTraceRaysKHR glad_vkCmdTraceRaysKHR = NULL; +PFN_vkCmdTraceRaysNV glad_vkCmdTraceRaysNV = NULL; +PFN_vkCmdUpdateBuffer glad_vkCmdUpdateBuffer = NULL; +PFN_vkCmdUpdatePipelineIndirectBufferNV glad_vkCmdUpdatePipelineIndirectBufferNV = NULL; +PFN_vkCmdWaitEvents glad_vkCmdWaitEvents = NULL; +PFN_vkCmdWaitEvents2 glad_vkCmdWaitEvents2 = NULL; +PFN_vkCmdWaitEvents2KHR glad_vkCmdWaitEvents2KHR = NULL; +PFN_vkCmdWriteAccelerationStructuresPropertiesKHR glad_vkCmdWriteAccelerationStructuresPropertiesKHR = NULL; +PFN_vkCmdWriteAccelerationStructuresPropertiesNV glad_vkCmdWriteAccelerationStructuresPropertiesNV = NULL; +PFN_vkCmdWriteBufferMarker2AMD glad_vkCmdWriteBufferMarker2AMD = NULL; +PFN_vkCmdWriteBufferMarkerAMD glad_vkCmdWriteBufferMarkerAMD = NULL; +PFN_vkCmdWriteMicromapsPropertiesEXT glad_vkCmdWriteMicromapsPropertiesEXT = NULL; +PFN_vkCmdWriteTimestamp glad_vkCmdWriteTimestamp = NULL; +PFN_vkCmdWriteTimestamp2 glad_vkCmdWriteTimestamp2 = NULL; +PFN_vkCmdWriteTimestamp2KHR glad_vkCmdWriteTimestamp2KHR = NULL; +PFN_vkCompileDeferredNV glad_vkCompileDeferredNV = NULL; +PFN_vkConvertCooperativeVectorMatrixNV glad_vkConvertCooperativeVectorMatrixNV = NULL; +PFN_vkCopyAccelerationStructureKHR glad_vkCopyAccelerationStructureKHR = NULL; +PFN_vkCopyAccelerationStructureToMemoryKHR glad_vkCopyAccelerationStructureToMemoryKHR = NULL; +PFN_vkCopyImageToImage glad_vkCopyImageToImage = NULL; +PFN_vkCopyImageToImageEXT glad_vkCopyImageToImageEXT = NULL; +PFN_vkCopyImageToMemory glad_vkCopyImageToMemory = NULL; +PFN_vkCopyImageToMemoryEXT glad_vkCopyImageToMemoryEXT = NULL; +PFN_vkCopyMemoryToAccelerationStructureKHR glad_vkCopyMemoryToAccelerationStructureKHR = NULL; +PFN_vkCopyMemoryToImage glad_vkCopyMemoryToImage = NULL; +PFN_vkCopyMemoryToImageEXT glad_vkCopyMemoryToImageEXT = NULL; +PFN_vkCopyMemoryToMicromapEXT glad_vkCopyMemoryToMicromapEXT = NULL; +PFN_vkCopyMicromapEXT glad_vkCopyMicromapEXT = NULL; +PFN_vkCopyMicromapToMemoryEXT glad_vkCopyMicromapToMemoryEXT = NULL; +PFN_vkCreateAccelerationStructureKHR glad_vkCreateAccelerationStructureKHR = NULL; +PFN_vkCreateAccelerationStructureNV glad_vkCreateAccelerationStructureNV = NULL; +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +PFN_vkCreateAndroidSurfaceKHR glad_vkCreateAndroidSurfaceKHR = NULL; + +#endif +PFN_vkCreateBuffer glad_vkCreateBuffer = NULL; +#if defined(VK_USE_PLATFORM_FUCHSIA) +PFN_vkCreateBufferCollectionFUCHSIA glad_vkCreateBufferCollectionFUCHSIA = NULL; + +#endif +PFN_vkCreateBufferView glad_vkCreateBufferView = NULL; +PFN_vkCreateCommandPool glad_vkCreateCommandPool = NULL; +PFN_vkCreateComputePipelines glad_vkCreateComputePipelines = NULL; +PFN_vkCreateCuFunctionNVX glad_vkCreateCuFunctionNVX = NULL; +PFN_vkCreateCuModuleNVX glad_vkCreateCuModuleNVX = NULL; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkCreateCudaFunctionNV glad_vkCreateCudaFunctionNV = NULL; + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkCreateCudaModuleNV glad_vkCreateCudaModuleNV = NULL; + +#endif +PFN_vkCreateDataGraphPipelineSessionARM glad_vkCreateDataGraphPipelineSessionARM = NULL; +PFN_vkCreateDataGraphPipelinesARM glad_vkCreateDataGraphPipelinesARM = NULL; +PFN_vkCreateDebugReportCallbackEXT glad_vkCreateDebugReportCallbackEXT = NULL; +PFN_vkCreateDebugUtilsMessengerEXT glad_vkCreateDebugUtilsMessengerEXT = NULL; +PFN_vkCreateDeferredOperationKHR glad_vkCreateDeferredOperationKHR = NULL; +PFN_vkCreateDescriptorPool glad_vkCreateDescriptorPool = NULL; +PFN_vkCreateDescriptorSetLayout glad_vkCreateDescriptorSetLayout = NULL; +PFN_vkCreateDescriptorUpdateTemplate glad_vkCreateDescriptorUpdateTemplate = NULL; +PFN_vkCreateDescriptorUpdateTemplateKHR glad_vkCreateDescriptorUpdateTemplateKHR = NULL; +PFN_vkCreateDevice glad_vkCreateDevice = NULL; +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +PFN_vkCreateDirectFBSurfaceEXT glad_vkCreateDirectFBSurfaceEXT = NULL; + +#endif +PFN_vkCreateDisplayModeKHR glad_vkCreateDisplayModeKHR = NULL; +PFN_vkCreateDisplayPlaneSurfaceKHR glad_vkCreateDisplayPlaneSurfaceKHR = NULL; +PFN_vkCreateEvent glad_vkCreateEvent = NULL; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkCreateExecutionGraphPipelinesAMDX glad_vkCreateExecutionGraphPipelinesAMDX = NULL; + +#endif +PFN_vkCreateExternalComputeQueueNV glad_vkCreateExternalComputeQueueNV = NULL; +PFN_vkCreateFence glad_vkCreateFence = NULL; +PFN_vkCreateFramebuffer glad_vkCreateFramebuffer = NULL; +PFN_vkCreateGraphicsPipelines glad_vkCreateGraphicsPipelines = NULL; +PFN_vkCreateHeadlessSurfaceEXT glad_vkCreateHeadlessSurfaceEXT = NULL; +#if defined(VK_USE_PLATFORM_IOS_MVK) +PFN_vkCreateIOSSurfaceMVK glad_vkCreateIOSSurfaceMVK = NULL; + +#endif +PFN_vkCreateImage glad_vkCreateImage = NULL; +#if defined(VK_USE_PLATFORM_FUCHSIA) +PFN_vkCreateImagePipeSurfaceFUCHSIA glad_vkCreateImagePipeSurfaceFUCHSIA = NULL; + +#endif +PFN_vkCreateImageView glad_vkCreateImageView = NULL; +PFN_vkCreateIndirectCommandsLayoutEXT glad_vkCreateIndirectCommandsLayoutEXT = NULL; +PFN_vkCreateIndirectCommandsLayoutNV glad_vkCreateIndirectCommandsLayoutNV = NULL; +PFN_vkCreateIndirectExecutionSetEXT glad_vkCreateIndirectExecutionSetEXT = NULL; +PFN_vkCreateInstance glad_vkCreateInstance = NULL; +#if defined(VK_USE_PLATFORM_MACOS_MVK) +PFN_vkCreateMacOSSurfaceMVK glad_vkCreateMacOSSurfaceMVK = NULL; + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +PFN_vkCreateMetalSurfaceEXT glad_vkCreateMetalSurfaceEXT = NULL; + +#endif +PFN_vkCreateMicromapEXT glad_vkCreateMicromapEXT = NULL; +PFN_vkCreateOpticalFlowSessionNV glad_vkCreateOpticalFlowSessionNV = NULL; +PFN_vkCreatePipelineBinariesKHR glad_vkCreatePipelineBinariesKHR = NULL; +PFN_vkCreatePipelineCache glad_vkCreatePipelineCache = NULL; +PFN_vkCreatePipelineLayout glad_vkCreatePipelineLayout = NULL; +PFN_vkCreatePrivateDataSlot glad_vkCreatePrivateDataSlot = NULL; +PFN_vkCreatePrivateDataSlotEXT glad_vkCreatePrivateDataSlotEXT = NULL; +PFN_vkCreateQueryPool glad_vkCreateQueryPool = NULL; +PFN_vkCreateRayTracingPipelinesKHR glad_vkCreateRayTracingPipelinesKHR = NULL; +PFN_vkCreateRayTracingPipelinesNV glad_vkCreateRayTracingPipelinesNV = NULL; +PFN_vkCreateRenderPass glad_vkCreateRenderPass = NULL; +PFN_vkCreateRenderPass2 glad_vkCreateRenderPass2 = NULL; +PFN_vkCreateRenderPass2KHR glad_vkCreateRenderPass2KHR = NULL; +PFN_vkCreateSampler glad_vkCreateSampler = NULL; +PFN_vkCreateSamplerYcbcrConversion glad_vkCreateSamplerYcbcrConversion = NULL; +PFN_vkCreateSamplerYcbcrConversionKHR glad_vkCreateSamplerYcbcrConversionKHR = NULL; +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +PFN_vkCreateScreenSurfaceQNX glad_vkCreateScreenSurfaceQNX = NULL; + +#endif +PFN_vkCreateSemaphore glad_vkCreateSemaphore = NULL; +PFN_vkCreateShaderModule glad_vkCreateShaderModule = NULL; +PFN_vkCreateShadersEXT glad_vkCreateShadersEXT = NULL; +PFN_vkCreateSharedSwapchainsKHR glad_vkCreateSharedSwapchainsKHR = NULL; +#if defined(VK_USE_PLATFORM_GGP) +PFN_vkCreateStreamDescriptorSurfaceGGP glad_vkCreateStreamDescriptorSurfaceGGP = NULL; + +#endif +#if defined(VK_USE_PLATFORM_OHOS) +PFN_vkCreateSurfaceOHOS glad_vkCreateSurfaceOHOS = NULL; + +#endif +PFN_vkCreateSwapchainKHR glad_vkCreateSwapchainKHR = NULL; +PFN_vkCreateTensorARM glad_vkCreateTensorARM = NULL; +PFN_vkCreateTensorViewARM glad_vkCreateTensorViewARM = NULL; +PFN_vkCreateValidationCacheEXT glad_vkCreateValidationCacheEXT = NULL; +#if defined(VK_USE_PLATFORM_VI_NN) +PFN_vkCreateViSurfaceNN glad_vkCreateViSurfaceNN = NULL; + +#endif +PFN_vkCreateVideoSessionKHR glad_vkCreateVideoSessionKHR = NULL; +PFN_vkCreateVideoSessionParametersKHR glad_vkCreateVideoSessionParametersKHR = NULL; +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +PFN_vkCreateWaylandSurfaceKHR glad_vkCreateWaylandSurfaceKHR = NULL; + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkCreateWin32SurfaceKHR glad_vkCreateWin32SurfaceKHR = NULL; + +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) +PFN_vkCreateXcbSurfaceKHR glad_vkCreateXcbSurfaceKHR = NULL; + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +PFN_vkCreateXlibSurfaceKHR glad_vkCreateXlibSurfaceKHR = NULL; + +#endif +PFN_vkDebugMarkerSetObjectNameEXT glad_vkDebugMarkerSetObjectNameEXT = NULL; +PFN_vkDebugMarkerSetObjectTagEXT glad_vkDebugMarkerSetObjectTagEXT = NULL; +PFN_vkDebugReportMessageEXT glad_vkDebugReportMessageEXT = NULL; +PFN_vkDeferredOperationJoinKHR glad_vkDeferredOperationJoinKHR = NULL; +PFN_vkDestroyAccelerationStructureKHR glad_vkDestroyAccelerationStructureKHR = NULL; +PFN_vkDestroyAccelerationStructureNV glad_vkDestroyAccelerationStructureNV = NULL; +PFN_vkDestroyBuffer glad_vkDestroyBuffer = NULL; +#if defined(VK_USE_PLATFORM_FUCHSIA) +PFN_vkDestroyBufferCollectionFUCHSIA glad_vkDestroyBufferCollectionFUCHSIA = NULL; + +#endif +PFN_vkDestroyBufferView glad_vkDestroyBufferView = NULL; +PFN_vkDestroyCommandPool glad_vkDestroyCommandPool = NULL; +PFN_vkDestroyCuFunctionNVX glad_vkDestroyCuFunctionNVX = NULL; +PFN_vkDestroyCuModuleNVX glad_vkDestroyCuModuleNVX = NULL; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkDestroyCudaFunctionNV glad_vkDestroyCudaFunctionNV = NULL; + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkDestroyCudaModuleNV glad_vkDestroyCudaModuleNV = NULL; + +#endif +PFN_vkDestroyDataGraphPipelineSessionARM glad_vkDestroyDataGraphPipelineSessionARM = NULL; +PFN_vkDestroyDebugReportCallbackEXT glad_vkDestroyDebugReportCallbackEXT = NULL; +PFN_vkDestroyDebugUtilsMessengerEXT glad_vkDestroyDebugUtilsMessengerEXT = NULL; +PFN_vkDestroyDeferredOperationKHR glad_vkDestroyDeferredOperationKHR = NULL; +PFN_vkDestroyDescriptorPool glad_vkDestroyDescriptorPool = NULL; +PFN_vkDestroyDescriptorSetLayout glad_vkDestroyDescriptorSetLayout = NULL; +PFN_vkDestroyDescriptorUpdateTemplate glad_vkDestroyDescriptorUpdateTemplate = NULL; +PFN_vkDestroyDescriptorUpdateTemplateKHR glad_vkDestroyDescriptorUpdateTemplateKHR = NULL; +PFN_vkDestroyDevice glad_vkDestroyDevice = NULL; +PFN_vkDestroyEvent glad_vkDestroyEvent = NULL; +PFN_vkDestroyExternalComputeQueueNV glad_vkDestroyExternalComputeQueueNV = NULL; +PFN_vkDestroyFence glad_vkDestroyFence = NULL; +PFN_vkDestroyFramebuffer glad_vkDestroyFramebuffer = NULL; +PFN_vkDestroyImage glad_vkDestroyImage = NULL; +PFN_vkDestroyImageView glad_vkDestroyImageView = NULL; +PFN_vkDestroyIndirectCommandsLayoutEXT glad_vkDestroyIndirectCommandsLayoutEXT = NULL; +PFN_vkDestroyIndirectCommandsLayoutNV glad_vkDestroyIndirectCommandsLayoutNV = NULL; +PFN_vkDestroyIndirectExecutionSetEXT glad_vkDestroyIndirectExecutionSetEXT = NULL; +PFN_vkDestroyInstance glad_vkDestroyInstance = NULL; +PFN_vkDestroyMicromapEXT glad_vkDestroyMicromapEXT = NULL; +PFN_vkDestroyOpticalFlowSessionNV glad_vkDestroyOpticalFlowSessionNV = NULL; +PFN_vkDestroyPipeline glad_vkDestroyPipeline = NULL; +PFN_vkDestroyPipelineBinaryKHR glad_vkDestroyPipelineBinaryKHR = NULL; +PFN_vkDestroyPipelineCache glad_vkDestroyPipelineCache = NULL; +PFN_vkDestroyPipelineLayout glad_vkDestroyPipelineLayout = NULL; +PFN_vkDestroyPrivateDataSlot glad_vkDestroyPrivateDataSlot = NULL; +PFN_vkDestroyPrivateDataSlotEXT glad_vkDestroyPrivateDataSlotEXT = NULL; +PFN_vkDestroyQueryPool glad_vkDestroyQueryPool = NULL; +PFN_vkDestroyRenderPass glad_vkDestroyRenderPass = NULL; +PFN_vkDestroySampler glad_vkDestroySampler = NULL; +PFN_vkDestroySamplerYcbcrConversion glad_vkDestroySamplerYcbcrConversion = NULL; +PFN_vkDestroySamplerYcbcrConversionKHR glad_vkDestroySamplerYcbcrConversionKHR = NULL; +PFN_vkDestroySemaphore glad_vkDestroySemaphore = NULL; +PFN_vkDestroyShaderEXT glad_vkDestroyShaderEXT = NULL; +PFN_vkDestroyShaderModule glad_vkDestroyShaderModule = NULL; +PFN_vkDestroySurfaceKHR glad_vkDestroySurfaceKHR = NULL; +PFN_vkDestroySwapchainKHR glad_vkDestroySwapchainKHR = NULL; +PFN_vkDestroyTensorARM glad_vkDestroyTensorARM = NULL; +PFN_vkDestroyTensorViewARM glad_vkDestroyTensorViewARM = NULL; +PFN_vkDestroyValidationCacheEXT glad_vkDestroyValidationCacheEXT = NULL; +PFN_vkDestroyVideoSessionKHR glad_vkDestroyVideoSessionKHR = NULL; +PFN_vkDestroyVideoSessionParametersKHR glad_vkDestroyVideoSessionParametersKHR = NULL; +PFN_vkDeviceWaitIdle glad_vkDeviceWaitIdle = NULL; +PFN_vkDisplayPowerControlEXT glad_vkDisplayPowerControlEXT = NULL; +PFN_vkEndCommandBuffer glad_vkEndCommandBuffer = NULL; +PFN_vkEnumerateDeviceExtensionProperties glad_vkEnumerateDeviceExtensionProperties = NULL; +PFN_vkEnumerateDeviceLayerProperties glad_vkEnumerateDeviceLayerProperties = NULL; +PFN_vkEnumerateInstanceExtensionProperties glad_vkEnumerateInstanceExtensionProperties = NULL; +PFN_vkEnumerateInstanceLayerProperties glad_vkEnumerateInstanceLayerProperties = NULL; +PFN_vkEnumerateInstanceVersion glad_vkEnumerateInstanceVersion = NULL; +PFN_vkEnumeratePhysicalDeviceGroups glad_vkEnumeratePhysicalDeviceGroups = NULL; +PFN_vkEnumeratePhysicalDeviceGroupsKHR glad_vkEnumeratePhysicalDeviceGroupsKHR = NULL; +PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR glad_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = NULL; +PFN_vkEnumeratePhysicalDevices glad_vkEnumeratePhysicalDevices = NULL; +#if defined(VK_USE_PLATFORM_METAL_EXT) +PFN_vkExportMetalObjectsEXT glad_vkExportMetalObjectsEXT = NULL; + +#endif +PFN_vkFlushMappedMemoryRanges glad_vkFlushMappedMemoryRanges = NULL; +PFN_vkFreeCommandBuffers glad_vkFreeCommandBuffers = NULL; +PFN_vkFreeDescriptorSets glad_vkFreeDescriptorSets = NULL; +PFN_vkFreeMemory glad_vkFreeMemory = NULL; +PFN_vkGetAccelerationStructureBuildSizesKHR glad_vkGetAccelerationStructureBuildSizesKHR = NULL; +PFN_vkGetAccelerationStructureDeviceAddressKHR glad_vkGetAccelerationStructureDeviceAddressKHR = NULL; +PFN_vkGetAccelerationStructureHandleNV glad_vkGetAccelerationStructureHandleNV = NULL; +PFN_vkGetAccelerationStructureMemoryRequirementsNV glad_vkGetAccelerationStructureMemoryRequirementsNV = NULL; +PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT glad_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT = NULL; +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +PFN_vkGetAndroidHardwareBufferPropertiesANDROID glad_vkGetAndroidHardwareBufferPropertiesANDROID = NULL; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +PFN_vkGetBufferCollectionPropertiesFUCHSIA glad_vkGetBufferCollectionPropertiesFUCHSIA = NULL; + +#endif +PFN_vkGetBufferDeviceAddress glad_vkGetBufferDeviceAddress = NULL; +PFN_vkGetBufferDeviceAddressEXT glad_vkGetBufferDeviceAddressEXT = NULL; +PFN_vkGetBufferDeviceAddressKHR glad_vkGetBufferDeviceAddressKHR = NULL; +PFN_vkGetBufferMemoryRequirements glad_vkGetBufferMemoryRequirements = NULL; +PFN_vkGetBufferMemoryRequirements2 glad_vkGetBufferMemoryRequirements2 = NULL; +PFN_vkGetBufferMemoryRequirements2KHR glad_vkGetBufferMemoryRequirements2KHR = NULL; +PFN_vkGetBufferOpaqueCaptureAddress glad_vkGetBufferOpaqueCaptureAddress = NULL; +PFN_vkGetBufferOpaqueCaptureAddressKHR glad_vkGetBufferOpaqueCaptureAddressKHR = NULL; +PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT glad_vkGetBufferOpaqueCaptureDescriptorDataEXT = NULL; +PFN_vkGetCalibratedTimestampsEXT glad_vkGetCalibratedTimestampsEXT = NULL; +PFN_vkGetCalibratedTimestampsKHR glad_vkGetCalibratedTimestampsKHR = NULL; +PFN_vkGetClusterAccelerationStructureBuildSizesNV glad_vkGetClusterAccelerationStructureBuildSizesNV = NULL; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkGetCudaModuleCacheNV glad_vkGetCudaModuleCacheNV = NULL; + +#endif +PFN_vkGetDataGraphPipelineAvailablePropertiesARM glad_vkGetDataGraphPipelineAvailablePropertiesARM = NULL; +PFN_vkGetDataGraphPipelinePropertiesARM glad_vkGetDataGraphPipelinePropertiesARM = NULL; +PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM glad_vkGetDataGraphPipelineSessionBindPointRequirementsARM = NULL; +PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM glad_vkGetDataGraphPipelineSessionMemoryRequirementsARM = NULL; +PFN_vkGetDeferredOperationMaxConcurrencyKHR glad_vkGetDeferredOperationMaxConcurrencyKHR = NULL; +PFN_vkGetDeferredOperationResultKHR glad_vkGetDeferredOperationResultKHR = NULL; +PFN_vkGetDescriptorEXT glad_vkGetDescriptorEXT = NULL; +PFN_vkGetDescriptorSetHostMappingVALVE glad_vkGetDescriptorSetHostMappingVALVE = NULL; +PFN_vkGetDescriptorSetLayoutBindingOffsetEXT glad_vkGetDescriptorSetLayoutBindingOffsetEXT = NULL; +PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE glad_vkGetDescriptorSetLayoutHostMappingInfoVALVE = NULL; +PFN_vkGetDescriptorSetLayoutSizeEXT glad_vkGetDescriptorSetLayoutSizeEXT = NULL; +PFN_vkGetDescriptorSetLayoutSupport glad_vkGetDescriptorSetLayoutSupport = NULL; +PFN_vkGetDescriptorSetLayoutSupportKHR glad_vkGetDescriptorSetLayoutSupportKHR = NULL; +PFN_vkGetDeviceAccelerationStructureCompatibilityKHR glad_vkGetDeviceAccelerationStructureCompatibilityKHR = NULL; +PFN_vkGetDeviceBufferMemoryRequirements glad_vkGetDeviceBufferMemoryRequirements = NULL; +PFN_vkGetDeviceBufferMemoryRequirementsKHR glad_vkGetDeviceBufferMemoryRequirementsKHR = NULL; +PFN_vkGetDeviceFaultInfoEXT glad_vkGetDeviceFaultInfoEXT = NULL; +PFN_vkGetDeviceGroupPeerMemoryFeatures glad_vkGetDeviceGroupPeerMemoryFeatures = NULL; +PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR glad_vkGetDeviceGroupPeerMemoryFeaturesKHR = NULL; +PFN_vkGetDeviceGroupPresentCapabilitiesKHR glad_vkGetDeviceGroupPresentCapabilitiesKHR = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkGetDeviceGroupSurfacePresentModes2EXT glad_vkGetDeviceGroupSurfacePresentModes2EXT = NULL; + +#endif +PFN_vkGetDeviceGroupSurfacePresentModesKHR glad_vkGetDeviceGroupSurfacePresentModesKHR = NULL; +PFN_vkGetDeviceImageMemoryRequirements glad_vkGetDeviceImageMemoryRequirements = NULL; +PFN_vkGetDeviceImageMemoryRequirementsKHR glad_vkGetDeviceImageMemoryRequirementsKHR = NULL; +PFN_vkGetDeviceImageSparseMemoryRequirements glad_vkGetDeviceImageSparseMemoryRequirements = NULL; +PFN_vkGetDeviceImageSparseMemoryRequirementsKHR glad_vkGetDeviceImageSparseMemoryRequirementsKHR = NULL; +PFN_vkGetDeviceImageSubresourceLayout glad_vkGetDeviceImageSubresourceLayout = NULL; +PFN_vkGetDeviceImageSubresourceLayoutKHR glad_vkGetDeviceImageSubresourceLayoutKHR = NULL; +PFN_vkGetDeviceMemoryCommitment glad_vkGetDeviceMemoryCommitment = NULL; +PFN_vkGetDeviceMemoryOpaqueCaptureAddress glad_vkGetDeviceMemoryOpaqueCaptureAddress = NULL; +PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR glad_vkGetDeviceMemoryOpaqueCaptureAddressKHR = NULL; +PFN_vkGetDeviceMicromapCompatibilityEXT glad_vkGetDeviceMicromapCompatibilityEXT = NULL; +PFN_vkGetDeviceProcAddr glad_vkGetDeviceProcAddr = NULL; +PFN_vkGetDeviceQueue glad_vkGetDeviceQueue = NULL; +PFN_vkGetDeviceQueue2 glad_vkGetDeviceQueue2 = NULL; +PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI glad_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = NULL; +PFN_vkGetDeviceTensorMemoryRequirementsARM glad_vkGetDeviceTensorMemoryRequirementsARM = NULL; +PFN_vkGetDisplayModeProperties2KHR glad_vkGetDisplayModeProperties2KHR = NULL; +PFN_vkGetDisplayModePropertiesKHR glad_vkGetDisplayModePropertiesKHR = NULL; +PFN_vkGetDisplayPlaneCapabilities2KHR glad_vkGetDisplayPlaneCapabilities2KHR = NULL; +PFN_vkGetDisplayPlaneCapabilitiesKHR glad_vkGetDisplayPlaneCapabilitiesKHR = NULL; +PFN_vkGetDisplayPlaneSupportedDisplaysKHR glad_vkGetDisplayPlaneSupportedDisplaysKHR = NULL; +PFN_vkGetDrmDisplayEXT glad_vkGetDrmDisplayEXT = NULL; +PFN_vkGetDynamicRenderingTilePropertiesQCOM glad_vkGetDynamicRenderingTilePropertiesQCOM = NULL; +PFN_vkGetEncodedVideoSessionParametersKHR glad_vkGetEncodedVideoSessionParametersKHR = NULL; +PFN_vkGetEventStatus glad_vkGetEventStatus = NULL; +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkGetExecutionGraphPipelineNodeIndexAMDX glad_vkGetExecutionGraphPipelineNodeIndexAMDX = NULL; + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) +PFN_vkGetExecutionGraphPipelineScratchSizeAMDX glad_vkGetExecutionGraphPipelineScratchSizeAMDX = NULL; + +#endif +PFN_vkGetExternalComputeQueueDataNV glad_vkGetExternalComputeQueueDataNV = NULL; +PFN_vkGetFenceFdKHR glad_vkGetFenceFdKHR = NULL; +PFN_vkGetFenceStatus glad_vkGetFenceStatus = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkGetFenceWin32HandleKHR glad_vkGetFenceWin32HandleKHR = NULL; + +#endif +PFN_vkGetFramebufferTilePropertiesQCOM glad_vkGetFramebufferTilePropertiesQCOM = NULL; +PFN_vkGetGeneratedCommandsMemoryRequirementsEXT glad_vkGetGeneratedCommandsMemoryRequirementsEXT = NULL; +PFN_vkGetGeneratedCommandsMemoryRequirementsNV glad_vkGetGeneratedCommandsMemoryRequirementsNV = NULL; +PFN_vkGetImageDrmFormatModifierPropertiesEXT glad_vkGetImageDrmFormatModifierPropertiesEXT = NULL; +PFN_vkGetImageMemoryRequirements glad_vkGetImageMemoryRequirements = NULL; +PFN_vkGetImageMemoryRequirements2 glad_vkGetImageMemoryRequirements2 = NULL; +PFN_vkGetImageMemoryRequirements2KHR glad_vkGetImageMemoryRequirements2KHR = NULL; +PFN_vkGetImageOpaqueCaptureDescriptorDataEXT glad_vkGetImageOpaqueCaptureDescriptorDataEXT = NULL; +PFN_vkGetImageSparseMemoryRequirements glad_vkGetImageSparseMemoryRequirements = NULL; +PFN_vkGetImageSparseMemoryRequirements2 glad_vkGetImageSparseMemoryRequirements2 = NULL; +PFN_vkGetImageSparseMemoryRequirements2KHR glad_vkGetImageSparseMemoryRequirements2KHR = NULL; +PFN_vkGetImageSubresourceLayout glad_vkGetImageSubresourceLayout = NULL; +PFN_vkGetImageSubresourceLayout2 glad_vkGetImageSubresourceLayout2 = NULL; +PFN_vkGetImageSubresourceLayout2EXT glad_vkGetImageSubresourceLayout2EXT = NULL; +PFN_vkGetImageSubresourceLayout2KHR glad_vkGetImageSubresourceLayout2KHR = NULL; +PFN_vkGetImageViewAddressNVX glad_vkGetImageViewAddressNVX = NULL; +PFN_vkGetImageViewHandle64NVX glad_vkGetImageViewHandle64NVX = NULL; +PFN_vkGetImageViewHandleNVX glad_vkGetImageViewHandleNVX = NULL; +PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT glad_vkGetImageViewOpaqueCaptureDescriptorDataEXT = NULL; +PFN_vkGetInstanceProcAddr glad_vkGetInstanceProcAddr = NULL; +PFN_vkGetLatencyTimingsNV glad_vkGetLatencyTimingsNV = NULL; +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +PFN_vkGetMemoryAndroidHardwareBufferANDROID glad_vkGetMemoryAndroidHardwareBufferANDROID = NULL; + +#endif +PFN_vkGetMemoryFdKHR glad_vkGetMemoryFdKHR = NULL; +PFN_vkGetMemoryFdPropertiesKHR glad_vkGetMemoryFdPropertiesKHR = NULL; +PFN_vkGetMemoryHostPointerPropertiesEXT glad_vkGetMemoryHostPointerPropertiesEXT = NULL; +#if defined(VK_USE_PLATFORM_METAL_EXT) +PFN_vkGetMemoryMetalHandleEXT glad_vkGetMemoryMetalHandleEXT = NULL; + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +PFN_vkGetMemoryMetalHandlePropertiesEXT glad_vkGetMemoryMetalHandlePropertiesEXT = NULL; + +#endif +PFN_vkGetMemoryRemoteAddressNV glad_vkGetMemoryRemoteAddressNV = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkGetMemoryWin32HandleKHR glad_vkGetMemoryWin32HandleKHR = NULL; + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkGetMemoryWin32HandleNV glad_vkGetMemoryWin32HandleNV = NULL; + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkGetMemoryWin32HandlePropertiesKHR glad_vkGetMemoryWin32HandlePropertiesKHR = NULL; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +PFN_vkGetMemoryZirconHandleFUCHSIA glad_vkGetMemoryZirconHandleFUCHSIA = NULL; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA glad_vkGetMemoryZirconHandlePropertiesFUCHSIA = NULL; + +#endif +PFN_vkGetMicromapBuildSizesEXT glad_vkGetMicromapBuildSizesEXT = NULL; +PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV glad_vkGetPartitionedAccelerationStructuresBuildSizesNV = NULL; +PFN_vkGetPastPresentationTimingGOOGLE glad_vkGetPastPresentationTimingGOOGLE = NULL; +PFN_vkGetPerformanceParameterINTEL glad_vkGetPerformanceParameterINTEL = NULL; +PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT glad_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = NULL; +PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR glad_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = NULL; +PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV glad_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = NULL; +PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR glad_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR = NULL; +PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV glad_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = NULL; +PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV glad_vkGetPhysicalDeviceCooperativeVectorPropertiesNV = NULL; +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT glad_vkGetPhysicalDeviceDirectFBPresentationSupportEXT = NULL; + +#endif +PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR glad_vkGetPhysicalDeviceDisplayPlaneProperties2KHR = NULL; +PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR glad_vkGetPhysicalDeviceDisplayPlanePropertiesKHR = NULL; +PFN_vkGetPhysicalDeviceDisplayProperties2KHR glad_vkGetPhysicalDeviceDisplayProperties2KHR = NULL; +PFN_vkGetPhysicalDeviceDisplayPropertiesKHR glad_vkGetPhysicalDeviceDisplayPropertiesKHR = NULL; +PFN_vkGetPhysicalDeviceExternalBufferProperties glad_vkGetPhysicalDeviceExternalBufferProperties = NULL; +PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR glad_vkGetPhysicalDeviceExternalBufferPropertiesKHR = NULL; +PFN_vkGetPhysicalDeviceExternalFenceProperties glad_vkGetPhysicalDeviceExternalFenceProperties = NULL; +PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR glad_vkGetPhysicalDeviceExternalFencePropertiesKHR = NULL; +PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV glad_vkGetPhysicalDeviceExternalImageFormatPropertiesNV = NULL; +PFN_vkGetPhysicalDeviceExternalSemaphoreProperties glad_vkGetPhysicalDeviceExternalSemaphoreProperties = NULL; +PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR glad_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = NULL; +PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM glad_vkGetPhysicalDeviceExternalTensorPropertiesARM = NULL; +PFN_vkGetPhysicalDeviceFeatures glad_vkGetPhysicalDeviceFeatures = NULL; +PFN_vkGetPhysicalDeviceFeatures2 glad_vkGetPhysicalDeviceFeatures2 = NULL; +PFN_vkGetPhysicalDeviceFeatures2KHR glad_vkGetPhysicalDeviceFeatures2KHR = NULL; +PFN_vkGetPhysicalDeviceFormatProperties glad_vkGetPhysicalDeviceFormatProperties = NULL; +PFN_vkGetPhysicalDeviceFormatProperties2 glad_vkGetPhysicalDeviceFormatProperties2 = NULL; +PFN_vkGetPhysicalDeviceFormatProperties2KHR glad_vkGetPhysicalDeviceFormatProperties2KHR = NULL; +PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR glad_vkGetPhysicalDeviceFragmentShadingRatesKHR = NULL; +PFN_vkGetPhysicalDeviceImageFormatProperties glad_vkGetPhysicalDeviceImageFormatProperties = NULL; +PFN_vkGetPhysicalDeviceImageFormatProperties2 glad_vkGetPhysicalDeviceImageFormatProperties2 = NULL; +PFN_vkGetPhysicalDeviceImageFormatProperties2KHR glad_vkGetPhysicalDeviceImageFormatProperties2KHR = NULL; +PFN_vkGetPhysicalDeviceMemoryProperties glad_vkGetPhysicalDeviceMemoryProperties = NULL; +PFN_vkGetPhysicalDeviceMemoryProperties2 glad_vkGetPhysicalDeviceMemoryProperties2 = NULL; +PFN_vkGetPhysicalDeviceMemoryProperties2KHR glad_vkGetPhysicalDeviceMemoryProperties2KHR = NULL; +PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT glad_vkGetPhysicalDeviceMultisamplePropertiesEXT = NULL; +PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV glad_vkGetPhysicalDeviceOpticalFlowImageFormatsNV = NULL; +PFN_vkGetPhysicalDevicePresentRectanglesKHR glad_vkGetPhysicalDevicePresentRectanglesKHR = NULL; +PFN_vkGetPhysicalDeviceProperties glad_vkGetPhysicalDeviceProperties = NULL; +PFN_vkGetPhysicalDeviceProperties2 glad_vkGetPhysicalDeviceProperties2 = NULL; +PFN_vkGetPhysicalDeviceProperties2KHR glad_vkGetPhysicalDeviceProperties2KHR = NULL; +PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM glad_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM = NULL; +PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM glad_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM = NULL; +PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR glad_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = NULL; +PFN_vkGetPhysicalDeviceQueueFamilyProperties glad_vkGetPhysicalDeviceQueueFamilyProperties = NULL; +PFN_vkGetPhysicalDeviceQueueFamilyProperties2 glad_vkGetPhysicalDeviceQueueFamilyProperties2 = NULL; +PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR glad_vkGetPhysicalDeviceQueueFamilyProperties2KHR = NULL; +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX glad_vkGetPhysicalDeviceScreenPresentationSupportQNX = NULL; + +#endif +PFN_vkGetPhysicalDeviceSparseImageFormatProperties glad_vkGetPhysicalDeviceSparseImageFormatProperties = NULL; +PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 glad_vkGetPhysicalDeviceSparseImageFormatProperties2 = NULL; +PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR glad_vkGetPhysicalDeviceSparseImageFormatProperties2KHR = NULL; +PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV glad_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = NULL; +PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT glad_vkGetPhysicalDeviceSurfaceCapabilities2EXT = NULL; +PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR glad_vkGetPhysicalDeviceSurfaceCapabilities2KHR = NULL; +PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR glad_vkGetPhysicalDeviceSurfaceCapabilitiesKHR = NULL; +PFN_vkGetPhysicalDeviceSurfaceFormats2KHR glad_vkGetPhysicalDeviceSurfaceFormats2KHR = NULL; +PFN_vkGetPhysicalDeviceSurfaceFormatsKHR glad_vkGetPhysicalDeviceSurfaceFormatsKHR = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT glad_vkGetPhysicalDeviceSurfacePresentModes2EXT = NULL; + +#endif +PFN_vkGetPhysicalDeviceSurfacePresentModesKHR glad_vkGetPhysicalDeviceSurfacePresentModesKHR = NULL; +PFN_vkGetPhysicalDeviceSurfaceSupportKHR glad_vkGetPhysicalDeviceSurfaceSupportKHR = NULL; +PFN_vkGetPhysicalDeviceToolProperties glad_vkGetPhysicalDeviceToolProperties = NULL; +PFN_vkGetPhysicalDeviceToolPropertiesEXT glad_vkGetPhysicalDeviceToolPropertiesEXT = NULL; +PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR glad_vkGetPhysicalDeviceVideoCapabilitiesKHR = NULL; +PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR glad_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR = NULL; +PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR glad_vkGetPhysicalDeviceVideoFormatPropertiesKHR = NULL; +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR glad_vkGetPhysicalDeviceWaylandPresentationSupportKHR = NULL; + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR glad_vkGetPhysicalDeviceWin32PresentationSupportKHR = NULL; + +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) +PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR glad_vkGetPhysicalDeviceXcbPresentationSupportKHR = NULL; + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR glad_vkGetPhysicalDeviceXlibPresentationSupportKHR = NULL; + +#endif +PFN_vkGetPipelineBinaryDataKHR glad_vkGetPipelineBinaryDataKHR = NULL; +PFN_vkGetPipelineCacheData glad_vkGetPipelineCacheData = NULL; +PFN_vkGetPipelineExecutableInternalRepresentationsKHR glad_vkGetPipelineExecutableInternalRepresentationsKHR = NULL; +PFN_vkGetPipelineExecutablePropertiesKHR glad_vkGetPipelineExecutablePropertiesKHR = NULL; +PFN_vkGetPipelineExecutableStatisticsKHR glad_vkGetPipelineExecutableStatisticsKHR = NULL; +PFN_vkGetPipelineIndirectDeviceAddressNV glad_vkGetPipelineIndirectDeviceAddressNV = NULL; +PFN_vkGetPipelineIndirectMemoryRequirementsNV glad_vkGetPipelineIndirectMemoryRequirementsNV = NULL; +PFN_vkGetPipelineKeyKHR glad_vkGetPipelineKeyKHR = NULL; +PFN_vkGetPipelinePropertiesEXT glad_vkGetPipelinePropertiesEXT = NULL; +PFN_vkGetPrivateData glad_vkGetPrivateData = NULL; +PFN_vkGetPrivateDataEXT glad_vkGetPrivateDataEXT = NULL; +PFN_vkGetQueryPoolResults glad_vkGetQueryPoolResults = NULL; +PFN_vkGetQueueCheckpointData2NV glad_vkGetQueueCheckpointData2NV = NULL; +PFN_vkGetQueueCheckpointDataNV glad_vkGetQueueCheckpointDataNV = NULL; +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +PFN_vkGetRandROutputDisplayEXT glad_vkGetRandROutputDisplayEXT = NULL; + +#endif +PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR glad_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = NULL; +PFN_vkGetRayTracingShaderGroupHandlesKHR glad_vkGetRayTracingShaderGroupHandlesKHR = NULL; +PFN_vkGetRayTracingShaderGroupHandlesNV glad_vkGetRayTracingShaderGroupHandlesNV = NULL; +PFN_vkGetRayTracingShaderGroupStackSizeKHR glad_vkGetRayTracingShaderGroupStackSizeKHR = NULL; +PFN_vkGetRefreshCycleDurationGOOGLE glad_vkGetRefreshCycleDurationGOOGLE = NULL; +PFN_vkGetRenderAreaGranularity glad_vkGetRenderAreaGranularity = NULL; +PFN_vkGetRenderingAreaGranularity glad_vkGetRenderingAreaGranularity = NULL; +PFN_vkGetRenderingAreaGranularityKHR glad_vkGetRenderingAreaGranularityKHR = NULL; +PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT glad_vkGetSamplerOpaqueCaptureDescriptorDataEXT = NULL; +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +PFN_vkGetScreenBufferPropertiesQNX glad_vkGetScreenBufferPropertiesQNX = NULL; + +#endif +PFN_vkGetSemaphoreCounterValue glad_vkGetSemaphoreCounterValue = NULL; +PFN_vkGetSemaphoreCounterValueKHR glad_vkGetSemaphoreCounterValueKHR = NULL; +PFN_vkGetSemaphoreFdKHR glad_vkGetSemaphoreFdKHR = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkGetSemaphoreWin32HandleKHR glad_vkGetSemaphoreWin32HandleKHR = NULL; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +PFN_vkGetSemaphoreZirconHandleFUCHSIA glad_vkGetSemaphoreZirconHandleFUCHSIA = NULL; + +#endif +PFN_vkGetShaderBinaryDataEXT glad_vkGetShaderBinaryDataEXT = NULL; +PFN_vkGetShaderInfoAMD glad_vkGetShaderInfoAMD = NULL; +PFN_vkGetShaderModuleCreateInfoIdentifierEXT glad_vkGetShaderModuleCreateInfoIdentifierEXT = NULL; +PFN_vkGetShaderModuleIdentifierEXT glad_vkGetShaderModuleIdentifierEXT = NULL; +PFN_vkGetSwapchainCounterEXT glad_vkGetSwapchainCounterEXT = NULL; +PFN_vkGetSwapchainImagesKHR glad_vkGetSwapchainImagesKHR = NULL; +PFN_vkGetSwapchainStatusKHR glad_vkGetSwapchainStatusKHR = NULL; +PFN_vkGetTensorMemoryRequirementsARM glad_vkGetTensorMemoryRequirementsARM = NULL; +PFN_vkGetTensorOpaqueCaptureDescriptorDataARM glad_vkGetTensorOpaqueCaptureDescriptorDataARM = NULL; +PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM glad_vkGetTensorViewOpaqueCaptureDescriptorDataARM = NULL; +PFN_vkGetValidationCacheDataEXT glad_vkGetValidationCacheDataEXT = NULL; +PFN_vkGetVideoSessionMemoryRequirementsKHR glad_vkGetVideoSessionMemoryRequirementsKHR = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkGetWinrtDisplayNV glad_vkGetWinrtDisplayNV = NULL; + +#endif +PFN_vkImportFenceFdKHR glad_vkImportFenceFdKHR = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkImportFenceWin32HandleKHR glad_vkImportFenceWin32HandleKHR = NULL; + +#endif +PFN_vkImportSemaphoreFdKHR glad_vkImportSemaphoreFdKHR = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkImportSemaphoreWin32HandleKHR glad_vkImportSemaphoreWin32HandleKHR = NULL; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +PFN_vkImportSemaphoreZirconHandleFUCHSIA glad_vkImportSemaphoreZirconHandleFUCHSIA = NULL; + +#endif +PFN_vkInitializePerformanceApiINTEL glad_vkInitializePerformanceApiINTEL = NULL; +PFN_vkInvalidateMappedMemoryRanges glad_vkInvalidateMappedMemoryRanges = NULL; +PFN_vkLatencySleepNV glad_vkLatencySleepNV = NULL; +PFN_vkMapMemory glad_vkMapMemory = NULL; +PFN_vkMapMemory2 glad_vkMapMemory2 = NULL; +PFN_vkMapMemory2KHR glad_vkMapMemory2KHR = NULL; +PFN_vkMergePipelineCaches glad_vkMergePipelineCaches = NULL; +PFN_vkMergeValidationCachesEXT glad_vkMergeValidationCachesEXT = NULL; +PFN_vkQueueBeginDebugUtilsLabelEXT glad_vkQueueBeginDebugUtilsLabelEXT = NULL; +PFN_vkQueueBindSparse glad_vkQueueBindSparse = NULL; +PFN_vkQueueEndDebugUtilsLabelEXT glad_vkQueueEndDebugUtilsLabelEXT = NULL; +PFN_vkQueueInsertDebugUtilsLabelEXT glad_vkQueueInsertDebugUtilsLabelEXT = NULL; +PFN_vkQueueNotifyOutOfBandNV glad_vkQueueNotifyOutOfBandNV = NULL; +PFN_vkQueuePresentKHR glad_vkQueuePresentKHR = NULL; +PFN_vkQueueSetPerformanceConfigurationINTEL glad_vkQueueSetPerformanceConfigurationINTEL = NULL; +PFN_vkQueueSubmit glad_vkQueueSubmit = NULL; +PFN_vkQueueSubmit2 glad_vkQueueSubmit2 = NULL; +PFN_vkQueueSubmit2KHR glad_vkQueueSubmit2KHR = NULL; +PFN_vkQueueWaitIdle glad_vkQueueWaitIdle = NULL; +PFN_vkRegisterDeviceEventEXT glad_vkRegisterDeviceEventEXT = NULL; +PFN_vkRegisterDisplayEventEXT glad_vkRegisterDisplayEventEXT = NULL; +PFN_vkReleaseCapturedPipelineDataKHR glad_vkReleaseCapturedPipelineDataKHR = NULL; +PFN_vkReleaseDisplayEXT glad_vkReleaseDisplayEXT = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) +PFN_vkReleaseFullScreenExclusiveModeEXT glad_vkReleaseFullScreenExclusiveModeEXT = NULL; + +#endif +PFN_vkReleasePerformanceConfigurationINTEL glad_vkReleasePerformanceConfigurationINTEL = NULL; +PFN_vkReleaseProfilingLockKHR glad_vkReleaseProfilingLockKHR = NULL; +PFN_vkReleaseSwapchainImagesEXT glad_vkReleaseSwapchainImagesEXT = NULL; +PFN_vkReleaseSwapchainImagesKHR glad_vkReleaseSwapchainImagesKHR = NULL; +PFN_vkResetCommandBuffer glad_vkResetCommandBuffer = NULL; +PFN_vkResetCommandPool glad_vkResetCommandPool = NULL; +PFN_vkResetDescriptorPool glad_vkResetDescriptorPool = NULL; +PFN_vkResetEvent glad_vkResetEvent = NULL; +PFN_vkResetFences glad_vkResetFences = NULL; +PFN_vkResetQueryPool glad_vkResetQueryPool = NULL; +PFN_vkResetQueryPoolEXT glad_vkResetQueryPoolEXT = NULL; +#if defined(VK_USE_PLATFORM_FUCHSIA) +PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA glad_vkSetBufferCollectionBufferConstraintsFUCHSIA = NULL; + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +PFN_vkSetBufferCollectionImageConstraintsFUCHSIA glad_vkSetBufferCollectionImageConstraintsFUCHSIA = NULL; + +#endif +PFN_vkSetDebugUtilsObjectNameEXT glad_vkSetDebugUtilsObjectNameEXT = NULL; +PFN_vkSetDebugUtilsObjectTagEXT glad_vkSetDebugUtilsObjectTagEXT = NULL; +PFN_vkSetDeviceMemoryPriorityEXT glad_vkSetDeviceMemoryPriorityEXT = NULL; +PFN_vkSetEvent glad_vkSetEvent = NULL; +PFN_vkSetHdrMetadataEXT glad_vkSetHdrMetadataEXT = NULL; +PFN_vkSetLatencyMarkerNV glad_vkSetLatencyMarkerNV = NULL; +PFN_vkSetLatencySleepModeNV glad_vkSetLatencySleepModeNV = NULL; +PFN_vkSetLocalDimmingAMD glad_vkSetLocalDimmingAMD = NULL; +PFN_vkSetPrivateData glad_vkSetPrivateData = NULL; +PFN_vkSetPrivateDataEXT glad_vkSetPrivateDataEXT = NULL; +PFN_vkSignalSemaphore glad_vkSignalSemaphore = NULL; +PFN_vkSignalSemaphoreKHR glad_vkSignalSemaphoreKHR = NULL; +PFN_vkSubmitDebugUtilsMessageEXT glad_vkSubmitDebugUtilsMessageEXT = NULL; +PFN_vkTransitionImageLayout glad_vkTransitionImageLayout = NULL; +PFN_vkTransitionImageLayoutEXT glad_vkTransitionImageLayoutEXT = NULL; +PFN_vkTrimCommandPool glad_vkTrimCommandPool = NULL; +PFN_vkTrimCommandPoolKHR glad_vkTrimCommandPoolKHR = NULL; +PFN_vkUninitializePerformanceApiINTEL glad_vkUninitializePerformanceApiINTEL = NULL; +PFN_vkUnmapMemory glad_vkUnmapMemory = NULL; +PFN_vkUnmapMemory2 glad_vkUnmapMemory2 = NULL; +PFN_vkUnmapMemory2KHR glad_vkUnmapMemory2KHR = NULL; +PFN_vkUpdateDescriptorSetWithTemplate glad_vkUpdateDescriptorSetWithTemplate = NULL; +PFN_vkUpdateDescriptorSetWithTemplateKHR glad_vkUpdateDescriptorSetWithTemplateKHR = NULL; +PFN_vkUpdateDescriptorSets glad_vkUpdateDescriptorSets = NULL; +PFN_vkUpdateIndirectExecutionSetPipelineEXT glad_vkUpdateIndirectExecutionSetPipelineEXT = NULL; +PFN_vkUpdateIndirectExecutionSetShaderEXT glad_vkUpdateIndirectExecutionSetShaderEXT = NULL; +PFN_vkUpdateVideoSessionParametersKHR glad_vkUpdateVideoSessionParametersKHR = NULL; +PFN_vkWaitForFences glad_vkWaitForFences = NULL; +PFN_vkWaitForPresent2KHR glad_vkWaitForPresent2KHR = NULL; +PFN_vkWaitForPresentKHR glad_vkWaitForPresentKHR = NULL; +PFN_vkWaitSemaphores glad_vkWaitSemaphores = NULL; +PFN_vkWaitSemaphoresKHR glad_vkWaitSemaphoresKHR = NULL; +PFN_vkWriteAccelerationStructuresPropertiesKHR glad_vkWriteAccelerationStructuresPropertiesKHR = NULL; +PFN_vkWriteMicromapsPropertiesEXT glad_vkWriteMicromapsPropertiesEXT = NULL; + + +static void glad_vk_load_VK_VERSION_1_0( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_VERSION_1_0) return; + glad_vkAllocateCommandBuffers = (PFN_vkAllocateCommandBuffers) load(userptr, "vkAllocateCommandBuffers"); + glad_vkAllocateDescriptorSets = (PFN_vkAllocateDescriptorSets) load(userptr, "vkAllocateDescriptorSets"); + glad_vkAllocateMemory = (PFN_vkAllocateMemory) load(userptr, "vkAllocateMemory"); + glad_vkBeginCommandBuffer = (PFN_vkBeginCommandBuffer) load(userptr, "vkBeginCommandBuffer"); + glad_vkBindBufferMemory = (PFN_vkBindBufferMemory) load(userptr, "vkBindBufferMemory"); + glad_vkBindImageMemory = (PFN_vkBindImageMemory) load(userptr, "vkBindImageMemory"); + glad_vkCmdBeginQuery = (PFN_vkCmdBeginQuery) load(userptr, "vkCmdBeginQuery"); + glad_vkCmdBeginRenderPass = (PFN_vkCmdBeginRenderPass) load(userptr, "vkCmdBeginRenderPass"); + glad_vkCmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets) load(userptr, "vkCmdBindDescriptorSets"); + glad_vkCmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer) load(userptr, "vkCmdBindIndexBuffer"); + glad_vkCmdBindPipeline = (PFN_vkCmdBindPipeline) load(userptr, "vkCmdBindPipeline"); + glad_vkCmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers) load(userptr, "vkCmdBindVertexBuffers"); + glad_vkCmdBlitImage = (PFN_vkCmdBlitImage) load(userptr, "vkCmdBlitImage"); + glad_vkCmdClearAttachments = (PFN_vkCmdClearAttachments) load(userptr, "vkCmdClearAttachments"); + glad_vkCmdClearColorImage = (PFN_vkCmdClearColorImage) load(userptr, "vkCmdClearColorImage"); + glad_vkCmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage) load(userptr, "vkCmdClearDepthStencilImage"); + glad_vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer) load(userptr, "vkCmdCopyBuffer"); + glad_vkCmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage) load(userptr, "vkCmdCopyBufferToImage"); + glad_vkCmdCopyImage = (PFN_vkCmdCopyImage) load(userptr, "vkCmdCopyImage"); + glad_vkCmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer) load(userptr, "vkCmdCopyImageToBuffer"); + glad_vkCmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults) load(userptr, "vkCmdCopyQueryPoolResults"); + glad_vkCmdDispatch = (PFN_vkCmdDispatch) load(userptr, "vkCmdDispatch"); + glad_vkCmdDispatchIndirect = (PFN_vkCmdDispatchIndirect) load(userptr, "vkCmdDispatchIndirect"); + glad_vkCmdDraw = (PFN_vkCmdDraw) load(userptr, "vkCmdDraw"); + glad_vkCmdDrawIndexed = (PFN_vkCmdDrawIndexed) load(userptr, "vkCmdDrawIndexed"); + glad_vkCmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect) load(userptr, "vkCmdDrawIndexedIndirect"); + glad_vkCmdDrawIndirect = (PFN_vkCmdDrawIndirect) load(userptr, "vkCmdDrawIndirect"); + glad_vkCmdEndQuery = (PFN_vkCmdEndQuery) load(userptr, "vkCmdEndQuery"); + glad_vkCmdEndRenderPass = (PFN_vkCmdEndRenderPass) load(userptr, "vkCmdEndRenderPass"); + glad_vkCmdExecuteCommands = (PFN_vkCmdExecuteCommands) load(userptr, "vkCmdExecuteCommands"); + glad_vkCmdFillBuffer = (PFN_vkCmdFillBuffer) load(userptr, "vkCmdFillBuffer"); + glad_vkCmdNextSubpass = (PFN_vkCmdNextSubpass) load(userptr, "vkCmdNextSubpass"); + glad_vkCmdPipelineBarrier = (PFN_vkCmdPipelineBarrier) load(userptr, "vkCmdPipelineBarrier"); + glad_vkCmdPushConstants = (PFN_vkCmdPushConstants) load(userptr, "vkCmdPushConstants"); + glad_vkCmdResetEvent = (PFN_vkCmdResetEvent) load(userptr, "vkCmdResetEvent"); + glad_vkCmdResetQueryPool = (PFN_vkCmdResetQueryPool) load(userptr, "vkCmdResetQueryPool"); + glad_vkCmdResolveImage = (PFN_vkCmdResolveImage) load(userptr, "vkCmdResolveImage"); + glad_vkCmdSetBlendConstants = (PFN_vkCmdSetBlendConstants) load(userptr, "vkCmdSetBlendConstants"); + glad_vkCmdSetDepthBias = (PFN_vkCmdSetDepthBias) load(userptr, "vkCmdSetDepthBias"); + glad_vkCmdSetDepthBounds = (PFN_vkCmdSetDepthBounds) load(userptr, "vkCmdSetDepthBounds"); + glad_vkCmdSetEvent = (PFN_vkCmdSetEvent) load(userptr, "vkCmdSetEvent"); + glad_vkCmdSetLineWidth = (PFN_vkCmdSetLineWidth) load(userptr, "vkCmdSetLineWidth"); + glad_vkCmdSetScissor = (PFN_vkCmdSetScissor) load(userptr, "vkCmdSetScissor"); + glad_vkCmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask) load(userptr, "vkCmdSetStencilCompareMask"); + glad_vkCmdSetStencilReference = (PFN_vkCmdSetStencilReference) load(userptr, "vkCmdSetStencilReference"); + glad_vkCmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask) load(userptr, "vkCmdSetStencilWriteMask"); + glad_vkCmdSetViewport = (PFN_vkCmdSetViewport) load(userptr, "vkCmdSetViewport"); + glad_vkCmdUpdateBuffer = (PFN_vkCmdUpdateBuffer) load(userptr, "vkCmdUpdateBuffer"); + glad_vkCmdWaitEvents = (PFN_vkCmdWaitEvents) load(userptr, "vkCmdWaitEvents"); + glad_vkCmdWriteTimestamp = (PFN_vkCmdWriteTimestamp) load(userptr, "vkCmdWriteTimestamp"); + glad_vkCreateBuffer = (PFN_vkCreateBuffer) load(userptr, "vkCreateBuffer"); + glad_vkCreateBufferView = (PFN_vkCreateBufferView) load(userptr, "vkCreateBufferView"); + glad_vkCreateCommandPool = (PFN_vkCreateCommandPool) load(userptr, "vkCreateCommandPool"); + glad_vkCreateComputePipelines = (PFN_vkCreateComputePipelines) load(userptr, "vkCreateComputePipelines"); + glad_vkCreateDescriptorPool = (PFN_vkCreateDescriptorPool) load(userptr, "vkCreateDescriptorPool"); + glad_vkCreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout) load(userptr, "vkCreateDescriptorSetLayout"); + glad_vkCreateDevice = (PFN_vkCreateDevice) load(userptr, "vkCreateDevice"); + glad_vkCreateEvent = (PFN_vkCreateEvent) load(userptr, "vkCreateEvent"); + glad_vkCreateFence = (PFN_vkCreateFence) load(userptr, "vkCreateFence"); + glad_vkCreateFramebuffer = (PFN_vkCreateFramebuffer) load(userptr, "vkCreateFramebuffer"); + glad_vkCreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines) load(userptr, "vkCreateGraphicsPipelines"); + glad_vkCreateImage = (PFN_vkCreateImage) load(userptr, "vkCreateImage"); + glad_vkCreateImageView = (PFN_vkCreateImageView) load(userptr, "vkCreateImageView"); + glad_vkCreateInstance = (PFN_vkCreateInstance) load(userptr, "vkCreateInstance"); + glad_vkCreatePipelineCache = (PFN_vkCreatePipelineCache) load(userptr, "vkCreatePipelineCache"); + glad_vkCreatePipelineLayout = (PFN_vkCreatePipelineLayout) load(userptr, "vkCreatePipelineLayout"); + glad_vkCreateQueryPool = (PFN_vkCreateQueryPool) load(userptr, "vkCreateQueryPool"); + glad_vkCreateRenderPass = (PFN_vkCreateRenderPass) load(userptr, "vkCreateRenderPass"); + glad_vkCreateSampler = (PFN_vkCreateSampler) load(userptr, "vkCreateSampler"); + glad_vkCreateSemaphore = (PFN_vkCreateSemaphore) load(userptr, "vkCreateSemaphore"); + glad_vkCreateShaderModule = (PFN_vkCreateShaderModule) load(userptr, "vkCreateShaderModule"); + glad_vkDestroyBuffer = (PFN_vkDestroyBuffer) load(userptr, "vkDestroyBuffer"); + glad_vkDestroyBufferView = (PFN_vkDestroyBufferView) load(userptr, "vkDestroyBufferView"); + glad_vkDestroyCommandPool = (PFN_vkDestroyCommandPool) load(userptr, "vkDestroyCommandPool"); + glad_vkDestroyDescriptorPool = (PFN_vkDestroyDescriptorPool) load(userptr, "vkDestroyDescriptorPool"); + glad_vkDestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout) load(userptr, "vkDestroyDescriptorSetLayout"); + glad_vkDestroyDevice = (PFN_vkDestroyDevice) load(userptr, "vkDestroyDevice"); + glad_vkDestroyEvent = (PFN_vkDestroyEvent) load(userptr, "vkDestroyEvent"); + glad_vkDestroyFence = (PFN_vkDestroyFence) load(userptr, "vkDestroyFence"); + glad_vkDestroyFramebuffer = (PFN_vkDestroyFramebuffer) load(userptr, "vkDestroyFramebuffer"); + glad_vkDestroyImage = (PFN_vkDestroyImage) load(userptr, "vkDestroyImage"); + glad_vkDestroyImageView = (PFN_vkDestroyImageView) load(userptr, "vkDestroyImageView"); + glad_vkDestroyInstance = (PFN_vkDestroyInstance) load(userptr, "vkDestroyInstance"); + glad_vkDestroyPipeline = (PFN_vkDestroyPipeline) load(userptr, "vkDestroyPipeline"); + glad_vkDestroyPipelineCache = (PFN_vkDestroyPipelineCache) load(userptr, "vkDestroyPipelineCache"); + glad_vkDestroyPipelineLayout = (PFN_vkDestroyPipelineLayout) load(userptr, "vkDestroyPipelineLayout"); + glad_vkDestroyQueryPool = (PFN_vkDestroyQueryPool) load(userptr, "vkDestroyQueryPool"); + glad_vkDestroyRenderPass = (PFN_vkDestroyRenderPass) load(userptr, "vkDestroyRenderPass"); + glad_vkDestroySampler = (PFN_vkDestroySampler) load(userptr, "vkDestroySampler"); + glad_vkDestroySemaphore = (PFN_vkDestroySemaphore) load(userptr, "vkDestroySemaphore"); + glad_vkDestroyShaderModule = (PFN_vkDestroyShaderModule) load(userptr, "vkDestroyShaderModule"); + glad_vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle) load(userptr, "vkDeviceWaitIdle"); + glad_vkEndCommandBuffer = (PFN_vkEndCommandBuffer) load(userptr, "vkEndCommandBuffer"); + glad_vkEnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties) load(userptr, "vkEnumerateDeviceExtensionProperties"); + glad_vkEnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties) load(userptr, "vkEnumerateDeviceLayerProperties"); + glad_vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties) load(userptr, "vkEnumerateInstanceExtensionProperties"); + glad_vkEnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties) load(userptr, "vkEnumerateInstanceLayerProperties"); + glad_vkEnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices) load(userptr, "vkEnumeratePhysicalDevices"); + glad_vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges) load(userptr, "vkFlushMappedMemoryRanges"); + glad_vkFreeCommandBuffers = (PFN_vkFreeCommandBuffers) load(userptr, "vkFreeCommandBuffers"); + glad_vkFreeDescriptorSets = (PFN_vkFreeDescriptorSets) load(userptr, "vkFreeDescriptorSets"); + glad_vkFreeMemory = (PFN_vkFreeMemory) load(userptr, "vkFreeMemory"); + glad_vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements) load(userptr, "vkGetBufferMemoryRequirements"); + glad_vkGetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment) load(userptr, "vkGetDeviceMemoryCommitment"); + glad_vkGetDeviceProcAddr = (PFN_vkGetDeviceProcAddr) load(userptr, "vkGetDeviceProcAddr"); + glad_vkGetDeviceQueue = (PFN_vkGetDeviceQueue) load(userptr, "vkGetDeviceQueue"); + glad_vkGetEventStatus = (PFN_vkGetEventStatus) load(userptr, "vkGetEventStatus"); + glad_vkGetFenceStatus = (PFN_vkGetFenceStatus) load(userptr, "vkGetFenceStatus"); + glad_vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements) load(userptr, "vkGetImageMemoryRequirements"); + glad_vkGetImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements) load(userptr, "vkGetImageSparseMemoryRequirements"); + glad_vkGetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout) load(userptr, "vkGetImageSubresourceLayout"); + glad_vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr) load(userptr, "vkGetInstanceProcAddr"); + glad_vkGetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures) load(userptr, "vkGetPhysicalDeviceFeatures"); + glad_vkGetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties) load(userptr, "vkGetPhysicalDeviceFormatProperties"); + glad_vkGetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties) load(userptr, "vkGetPhysicalDeviceImageFormatProperties"); + glad_vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties) load(userptr, "vkGetPhysicalDeviceMemoryProperties"); + glad_vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties) load(userptr, "vkGetPhysicalDeviceProperties"); + glad_vkGetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties) load(userptr, "vkGetPhysicalDeviceQueueFamilyProperties"); + glad_vkGetPhysicalDeviceSparseImageFormatProperties = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties) load(userptr, "vkGetPhysicalDeviceSparseImageFormatProperties"); + glad_vkGetPipelineCacheData = (PFN_vkGetPipelineCacheData) load(userptr, "vkGetPipelineCacheData"); + glad_vkGetQueryPoolResults = (PFN_vkGetQueryPoolResults) load(userptr, "vkGetQueryPoolResults"); + glad_vkGetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity) load(userptr, "vkGetRenderAreaGranularity"); + glad_vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges) load(userptr, "vkInvalidateMappedMemoryRanges"); + glad_vkMapMemory = (PFN_vkMapMemory) load(userptr, "vkMapMemory"); + glad_vkMergePipelineCaches = (PFN_vkMergePipelineCaches) load(userptr, "vkMergePipelineCaches"); + glad_vkQueueBindSparse = (PFN_vkQueueBindSparse) load(userptr, "vkQueueBindSparse"); + glad_vkQueueSubmit = (PFN_vkQueueSubmit) load(userptr, "vkQueueSubmit"); + glad_vkQueueWaitIdle = (PFN_vkQueueWaitIdle) load(userptr, "vkQueueWaitIdle"); + glad_vkResetCommandBuffer = (PFN_vkResetCommandBuffer) load(userptr, "vkResetCommandBuffer"); + glad_vkResetCommandPool = (PFN_vkResetCommandPool) load(userptr, "vkResetCommandPool"); + glad_vkResetDescriptorPool = (PFN_vkResetDescriptorPool) load(userptr, "vkResetDescriptorPool"); + glad_vkResetEvent = (PFN_vkResetEvent) load(userptr, "vkResetEvent"); + glad_vkResetFences = (PFN_vkResetFences) load(userptr, "vkResetFences"); + glad_vkSetEvent = (PFN_vkSetEvent) load(userptr, "vkSetEvent"); + glad_vkUnmapMemory = (PFN_vkUnmapMemory) load(userptr, "vkUnmapMemory"); + glad_vkUpdateDescriptorSets = (PFN_vkUpdateDescriptorSets) load(userptr, "vkUpdateDescriptorSets"); + glad_vkWaitForFences = (PFN_vkWaitForFences) load(userptr, "vkWaitForFences"); +} +static void glad_vk_load_VK_VERSION_1_1( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_VERSION_1_1) return; + glad_vkBindBufferMemory2 = (PFN_vkBindBufferMemory2) load(userptr, "vkBindBufferMemory2"); + glad_vkBindImageMemory2 = (PFN_vkBindImageMemory2) load(userptr, "vkBindImageMemory2"); + glad_vkCmdDispatchBase = (PFN_vkCmdDispatchBase) load(userptr, "vkCmdDispatchBase"); + glad_vkCmdSetDeviceMask = (PFN_vkCmdSetDeviceMask) load(userptr, "vkCmdSetDeviceMask"); + glad_vkCreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate) load(userptr, "vkCreateDescriptorUpdateTemplate"); + glad_vkCreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion) load(userptr, "vkCreateSamplerYcbcrConversion"); + glad_vkDestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate) load(userptr, "vkDestroyDescriptorUpdateTemplate"); + glad_vkDestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion) load(userptr, "vkDestroySamplerYcbcrConversion"); + glad_vkEnumerateInstanceVersion = (PFN_vkEnumerateInstanceVersion) load(userptr, "vkEnumerateInstanceVersion"); + glad_vkEnumeratePhysicalDeviceGroups = (PFN_vkEnumeratePhysicalDeviceGroups) load(userptr, "vkEnumeratePhysicalDeviceGroups"); + glad_vkGetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2) load(userptr, "vkGetBufferMemoryRequirements2"); + glad_vkGetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport) load(userptr, "vkGetDescriptorSetLayoutSupport"); + glad_vkGetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures) load(userptr, "vkGetDeviceGroupPeerMemoryFeatures"); + glad_vkGetDeviceQueue2 = (PFN_vkGetDeviceQueue2) load(userptr, "vkGetDeviceQueue2"); + glad_vkGetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2) load(userptr, "vkGetImageMemoryRequirements2"); + glad_vkGetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2) load(userptr, "vkGetImageSparseMemoryRequirements2"); + glad_vkGetPhysicalDeviceExternalBufferProperties = (PFN_vkGetPhysicalDeviceExternalBufferProperties) load(userptr, "vkGetPhysicalDeviceExternalBufferProperties"); + glad_vkGetPhysicalDeviceExternalFenceProperties = (PFN_vkGetPhysicalDeviceExternalFenceProperties) load(userptr, "vkGetPhysicalDeviceExternalFenceProperties"); + glad_vkGetPhysicalDeviceExternalSemaphoreProperties = (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties) load(userptr, "vkGetPhysicalDeviceExternalSemaphoreProperties"); + glad_vkGetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2) load(userptr, "vkGetPhysicalDeviceFeatures2"); + glad_vkGetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2) load(userptr, "vkGetPhysicalDeviceFormatProperties2"); + glad_vkGetPhysicalDeviceImageFormatProperties2 = (PFN_vkGetPhysicalDeviceImageFormatProperties2) load(userptr, "vkGetPhysicalDeviceImageFormatProperties2"); + glad_vkGetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2) load(userptr, "vkGetPhysicalDeviceMemoryProperties2"); + glad_vkGetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2) load(userptr, "vkGetPhysicalDeviceProperties2"); + glad_vkGetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2) load(userptr, "vkGetPhysicalDeviceQueueFamilyProperties2"); + glad_vkGetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2) load(userptr, "vkGetPhysicalDeviceSparseImageFormatProperties2"); + glad_vkTrimCommandPool = (PFN_vkTrimCommandPool) load(userptr, "vkTrimCommandPool"); + glad_vkUpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate) load(userptr, "vkUpdateDescriptorSetWithTemplate"); +} +static void glad_vk_load_VK_VERSION_1_2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_VERSION_1_2) return; + glad_vkCmdBeginRenderPass2 = (PFN_vkCmdBeginRenderPass2) load(userptr, "vkCmdBeginRenderPass2"); + glad_vkCmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount) load(userptr, "vkCmdDrawIndexedIndirectCount"); + glad_vkCmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount) load(userptr, "vkCmdDrawIndirectCount"); + glad_vkCmdEndRenderPass2 = (PFN_vkCmdEndRenderPass2) load(userptr, "vkCmdEndRenderPass2"); + glad_vkCmdNextSubpass2 = (PFN_vkCmdNextSubpass2) load(userptr, "vkCmdNextSubpass2"); + glad_vkCreateRenderPass2 = (PFN_vkCreateRenderPass2) load(userptr, "vkCreateRenderPass2"); + glad_vkGetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress) load(userptr, "vkGetBufferDeviceAddress"); + glad_vkGetBufferOpaqueCaptureAddress = (PFN_vkGetBufferOpaqueCaptureAddress) load(userptr, "vkGetBufferOpaqueCaptureAddress"); + glad_vkGetDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress) load(userptr, "vkGetDeviceMemoryOpaqueCaptureAddress"); + glad_vkGetSemaphoreCounterValue = (PFN_vkGetSemaphoreCounterValue) load(userptr, "vkGetSemaphoreCounterValue"); + glad_vkResetQueryPool = (PFN_vkResetQueryPool) load(userptr, "vkResetQueryPool"); + glad_vkSignalSemaphore = (PFN_vkSignalSemaphore) load(userptr, "vkSignalSemaphore"); + glad_vkWaitSemaphores = (PFN_vkWaitSemaphores) load(userptr, "vkWaitSemaphores"); +} +static void glad_vk_load_VK_VERSION_1_3( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_VERSION_1_3) return; + glad_vkCmdBeginRendering = (PFN_vkCmdBeginRendering) load(userptr, "vkCmdBeginRendering"); + glad_vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2) load(userptr, "vkCmdBindVertexBuffers2"); + glad_vkCmdBlitImage2 = (PFN_vkCmdBlitImage2) load(userptr, "vkCmdBlitImage2"); + glad_vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2) load(userptr, "vkCmdCopyBuffer2"); + glad_vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2) load(userptr, "vkCmdCopyBufferToImage2"); + glad_vkCmdCopyImage2 = (PFN_vkCmdCopyImage2) load(userptr, "vkCmdCopyImage2"); + glad_vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2) load(userptr, "vkCmdCopyImageToBuffer2"); + glad_vkCmdEndRendering = (PFN_vkCmdEndRendering) load(userptr, "vkCmdEndRendering"); + glad_vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2) load(userptr, "vkCmdPipelineBarrier2"); + glad_vkCmdResetEvent2 = (PFN_vkCmdResetEvent2) load(userptr, "vkCmdResetEvent2"); + glad_vkCmdResolveImage2 = (PFN_vkCmdResolveImage2) load(userptr, "vkCmdResolveImage2"); + glad_vkCmdSetCullMode = (PFN_vkCmdSetCullMode) load(userptr, "vkCmdSetCullMode"); + glad_vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable) load(userptr, "vkCmdSetDepthBiasEnable"); + glad_vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable) load(userptr, "vkCmdSetDepthBoundsTestEnable"); + glad_vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp) load(userptr, "vkCmdSetDepthCompareOp"); + glad_vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable) load(userptr, "vkCmdSetDepthTestEnable"); + glad_vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable) load(userptr, "vkCmdSetDepthWriteEnable"); + glad_vkCmdSetEvent2 = (PFN_vkCmdSetEvent2) load(userptr, "vkCmdSetEvent2"); + glad_vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace) load(userptr, "vkCmdSetFrontFace"); + glad_vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable) load(userptr, "vkCmdSetPrimitiveRestartEnable"); + glad_vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology) load(userptr, "vkCmdSetPrimitiveTopology"); + glad_vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable) load(userptr, "vkCmdSetRasterizerDiscardEnable"); + glad_vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount) load(userptr, "vkCmdSetScissorWithCount"); + glad_vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp) load(userptr, "vkCmdSetStencilOp"); + glad_vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable) load(userptr, "vkCmdSetStencilTestEnable"); + glad_vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount) load(userptr, "vkCmdSetViewportWithCount"); + glad_vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2) load(userptr, "vkCmdWaitEvents2"); + glad_vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2) load(userptr, "vkCmdWriteTimestamp2"); + glad_vkCreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot) load(userptr, "vkCreatePrivateDataSlot"); + glad_vkDestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot) load(userptr, "vkDestroyPrivateDataSlot"); + glad_vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements) load(userptr, "vkGetDeviceBufferMemoryRequirements"); + glad_vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements) load(userptr, "vkGetDeviceImageMemoryRequirements"); + glad_vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements) load(userptr, "vkGetDeviceImageSparseMemoryRequirements"); + glad_vkGetPhysicalDeviceToolProperties = (PFN_vkGetPhysicalDeviceToolProperties) load(userptr, "vkGetPhysicalDeviceToolProperties"); + glad_vkGetPrivateData = (PFN_vkGetPrivateData) load(userptr, "vkGetPrivateData"); + glad_vkQueueSubmit2 = (PFN_vkQueueSubmit2) load(userptr, "vkQueueSubmit2"); + glad_vkSetPrivateData = (PFN_vkSetPrivateData) load(userptr, "vkSetPrivateData"); +} +static void glad_vk_load_VK_VERSION_1_4( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_VERSION_1_4) return; + glad_vkCmdBindDescriptorSets2 = (PFN_vkCmdBindDescriptorSets2) load(userptr, "vkCmdBindDescriptorSets2"); + glad_vkCmdBindIndexBuffer2 = (PFN_vkCmdBindIndexBuffer2) load(userptr, "vkCmdBindIndexBuffer2"); + glad_vkCmdPushConstants2 = (PFN_vkCmdPushConstants2) load(userptr, "vkCmdPushConstants2"); + glad_vkCmdPushDescriptorSet = (PFN_vkCmdPushDescriptorSet) load(userptr, "vkCmdPushDescriptorSet"); + glad_vkCmdPushDescriptorSet2 = (PFN_vkCmdPushDescriptorSet2) load(userptr, "vkCmdPushDescriptorSet2"); + glad_vkCmdPushDescriptorSetWithTemplate = (PFN_vkCmdPushDescriptorSetWithTemplate) load(userptr, "vkCmdPushDescriptorSetWithTemplate"); + glad_vkCmdPushDescriptorSetWithTemplate2 = (PFN_vkCmdPushDescriptorSetWithTemplate2) load(userptr, "vkCmdPushDescriptorSetWithTemplate2"); + glad_vkCmdSetLineStipple = (PFN_vkCmdSetLineStipple) load(userptr, "vkCmdSetLineStipple"); + glad_vkCmdSetRenderingAttachmentLocations = (PFN_vkCmdSetRenderingAttachmentLocations) load(userptr, "vkCmdSetRenderingAttachmentLocations"); + glad_vkCmdSetRenderingInputAttachmentIndices = (PFN_vkCmdSetRenderingInputAttachmentIndices) load(userptr, "vkCmdSetRenderingInputAttachmentIndices"); + glad_vkCopyImageToImage = (PFN_vkCopyImageToImage) load(userptr, "vkCopyImageToImage"); + glad_vkCopyImageToMemory = (PFN_vkCopyImageToMemory) load(userptr, "vkCopyImageToMemory"); + glad_vkCopyMemoryToImage = (PFN_vkCopyMemoryToImage) load(userptr, "vkCopyMemoryToImage"); + glad_vkGetDeviceImageSubresourceLayout = (PFN_vkGetDeviceImageSubresourceLayout) load(userptr, "vkGetDeviceImageSubresourceLayout"); + glad_vkGetImageSubresourceLayout2 = (PFN_vkGetImageSubresourceLayout2) load(userptr, "vkGetImageSubresourceLayout2"); + glad_vkGetRenderingAreaGranularity = (PFN_vkGetRenderingAreaGranularity) load(userptr, "vkGetRenderingAreaGranularity"); + glad_vkMapMemory2 = (PFN_vkMapMemory2) load(userptr, "vkMapMemory2"); + glad_vkTransitionImageLayout = (PFN_vkTransitionImageLayout) load(userptr, "vkTransitionImageLayout"); + glad_vkUnmapMemory2 = (PFN_vkUnmapMemory2) load(userptr, "vkUnmapMemory2"); +} +#if defined(VK_ENABLE_BETA_EXTENSIONS) +static void glad_vk_load_VK_AMDX_shader_enqueue( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_AMDX_shader_enqueue) return; + glad_vkCmdDispatchGraphAMDX = (PFN_vkCmdDispatchGraphAMDX) load(userptr, "vkCmdDispatchGraphAMDX"); + glad_vkCmdDispatchGraphIndirectAMDX = (PFN_vkCmdDispatchGraphIndirectAMDX) load(userptr, "vkCmdDispatchGraphIndirectAMDX"); + glad_vkCmdDispatchGraphIndirectCountAMDX = (PFN_vkCmdDispatchGraphIndirectCountAMDX) load(userptr, "vkCmdDispatchGraphIndirectCountAMDX"); + glad_vkCmdInitializeGraphScratchMemoryAMDX = (PFN_vkCmdInitializeGraphScratchMemoryAMDX) load(userptr, "vkCmdInitializeGraphScratchMemoryAMDX"); + glad_vkCreateExecutionGraphPipelinesAMDX = (PFN_vkCreateExecutionGraphPipelinesAMDX) load(userptr, "vkCreateExecutionGraphPipelinesAMDX"); + glad_vkGetExecutionGraphPipelineNodeIndexAMDX = (PFN_vkGetExecutionGraphPipelineNodeIndexAMDX) load(userptr, "vkGetExecutionGraphPipelineNodeIndexAMDX"); + glad_vkGetExecutionGraphPipelineScratchSizeAMDX = (PFN_vkGetExecutionGraphPipelineScratchSizeAMDX) load(userptr, "vkGetExecutionGraphPipelineScratchSizeAMDX"); +} + +#endif +static void glad_vk_load_VK_AMD_anti_lag( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_AMD_anti_lag) return; + glad_vkAntiLagUpdateAMD = (PFN_vkAntiLagUpdateAMD) load(userptr, "vkAntiLagUpdateAMD"); +} +static void glad_vk_load_VK_AMD_buffer_marker( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_AMD_buffer_marker) return; + glad_vkCmdWriteBufferMarker2AMD = (PFN_vkCmdWriteBufferMarker2AMD) load(userptr, "vkCmdWriteBufferMarker2AMD"); + glad_vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD) load(userptr, "vkCmdWriteBufferMarkerAMD"); +} +static void glad_vk_load_VK_AMD_display_native_hdr( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_AMD_display_native_hdr) return; + glad_vkSetLocalDimmingAMD = (PFN_vkSetLocalDimmingAMD) load(userptr, "vkSetLocalDimmingAMD"); +} +static void glad_vk_load_VK_AMD_draw_indirect_count( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_AMD_draw_indirect_count) return; + glad_vkCmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD) load(userptr, "vkCmdDrawIndexedIndirectCountAMD"); + glad_vkCmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD) load(userptr, "vkCmdDrawIndirectCountAMD"); +} +static void glad_vk_load_VK_AMD_shader_info( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_AMD_shader_info) return; + glad_vkGetShaderInfoAMD = (PFN_vkGetShaderInfoAMD) load(userptr, "vkGetShaderInfoAMD"); +} +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +static void glad_vk_load_VK_ANDROID_external_memory_android_hardware_buffer( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_ANDROID_external_memory_android_hardware_buffer) return; + glad_vkGetAndroidHardwareBufferPropertiesANDROID = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID) load(userptr, "vkGetAndroidHardwareBufferPropertiesANDROID"); + glad_vkGetMemoryAndroidHardwareBufferANDROID = (PFN_vkGetMemoryAndroidHardwareBufferANDROID) load(userptr, "vkGetMemoryAndroidHardwareBufferANDROID"); +} + +#endif +static void glad_vk_load_VK_ARM_data_graph( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_ARM_data_graph) return; + glad_vkBindDataGraphPipelineSessionMemoryARM = (PFN_vkBindDataGraphPipelineSessionMemoryARM) load(userptr, "vkBindDataGraphPipelineSessionMemoryARM"); + glad_vkCmdDispatchDataGraphARM = (PFN_vkCmdDispatchDataGraphARM) load(userptr, "vkCmdDispatchDataGraphARM"); + glad_vkCreateDataGraphPipelineSessionARM = (PFN_vkCreateDataGraphPipelineSessionARM) load(userptr, "vkCreateDataGraphPipelineSessionARM"); + glad_vkCreateDataGraphPipelinesARM = (PFN_vkCreateDataGraphPipelinesARM) load(userptr, "vkCreateDataGraphPipelinesARM"); + glad_vkDestroyDataGraphPipelineSessionARM = (PFN_vkDestroyDataGraphPipelineSessionARM) load(userptr, "vkDestroyDataGraphPipelineSessionARM"); + glad_vkGetDataGraphPipelineAvailablePropertiesARM = (PFN_vkGetDataGraphPipelineAvailablePropertiesARM) load(userptr, "vkGetDataGraphPipelineAvailablePropertiesARM"); + glad_vkGetDataGraphPipelinePropertiesARM = (PFN_vkGetDataGraphPipelinePropertiesARM) load(userptr, "vkGetDataGraphPipelinePropertiesARM"); + glad_vkGetDataGraphPipelineSessionBindPointRequirementsARM = (PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM) load(userptr, "vkGetDataGraphPipelineSessionBindPointRequirementsARM"); + glad_vkGetDataGraphPipelineSessionMemoryRequirementsARM = (PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM) load(userptr, "vkGetDataGraphPipelineSessionMemoryRequirementsARM"); + glad_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM = (PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM) load(userptr, "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM"); + glad_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM = (PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM) load(userptr, "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM"); +} +static void glad_vk_load_VK_ARM_tensors( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_ARM_tensors) return; + glad_vkBindTensorMemoryARM = (PFN_vkBindTensorMemoryARM) load(userptr, "vkBindTensorMemoryARM"); + glad_vkCmdCopyTensorARM = (PFN_vkCmdCopyTensorARM) load(userptr, "vkCmdCopyTensorARM"); + glad_vkCreateTensorARM = (PFN_vkCreateTensorARM) load(userptr, "vkCreateTensorARM"); + glad_vkCreateTensorViewARM = (PFN_vkCreateTensorViewARM) load(userptr, "vkCreateTensorViewARM"); + glad_vkDestroyTensorARM = (PFN_vkDestroyTensorARM) load(userptr, "vkDestroyTensorARM"); + glad_vkDestroyTensorViewARM = (PFN_vkDestroyTensorViewARM) load(userptr, "vkDestroyTensorViewARM"); + glad_vkGetDeviceTensorMemoryRequirementsARM = (PFN_vkGetDeviceTensorMemoryRequirementsARM) load(userptr, "vkGetDeviceTensorMemoryRequirementsARM"); + glad_vkGetPhysicalDeviceExternalTensorPropertiesARM = (PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM) load(userptr, "vkGetPhysicalDeviceExternalTensorPropertiesARM"); + glad_vkGetTensorMemoryRequirementsARM = (PFN_vkGetTensorMemoryRequirementsARM) load(userptr, "vkGetTensorMemoryRequirementsARM"); + glad_vkGetTensorOpaqueCaptureDescriptorDataARM = (PFN_vkGetTensorOpaqueCaptureDescriptorDataARM) load(userptr, "vkGetTensorOpaqueCaptureDescriptorDataARM"); + glad_vkGetTensorViewOpaqueCaptureDescriptorDataARM = (PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM) load(userptr, "vkGetTensorViewOpaqueCaptureDescriptorDataARM"); +} +static void glad_vk_load_VK_EXT_acquire_drm_display( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_acquire_drm_display) return; + glad_vkAcquireDrmDisplayEXT = (PFN_vkAcquireDrmDisplayEXT) load(userptr, "vkAcquireDrmDisplayEXT"); + glad_vkGetDrmDisplayEXT = (PFN_vkGetDrmDisplayEXT) load(userptr, "vkGetDrmDisplayEXT"); +} +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +static void glad_vk_load_VK_EXT_acquire_xlib_display( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_acquire_xlib_display) return; + glad_vkAcquireXlibDisplayEXT = (PFN_vkAcquireXlibDisplayEXT) load(userptr, "vkAcquireXlibDisplayEXT"); + glad_vkGetRandROutputDisplayEXT = (PFN_vkGetRandROutputDisplayEXT) load(userptr, "vkGetRandROutputDisplayEXT"); +} + +#endif +static void glad_vk_load_VK_EXT_attachment_feedback_loop_dynamic_state( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_attachment_feedback_loop_dynamic_state) return; + glad_vkCmdSetAttachmentFeedbackLoopEnableEXT = (PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT) load(userptr, "vkCmdSetAttachmentFeedbackLoopEnableEXT"); +} +static void glad_vk_load_VK_EXT_buffer_device_address( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_buffer_device_address) return; + glad_vkGetBufferDeviceAddressEXT = (PFN_vkGetBufferDeviceAddressEXT) load(userptr, "vkGetBufferDeviceAddressEXT"); +} +static void glad_vk_load_VK_EXT_calibrated_timestamps( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_calibrated_timestamps) return; + glad_vkGetCalibratedTimestampsEXT = (PFN_vkGetCalibratedTimestampsEXT) load(userptr, "vkGetCalibratedTimestampsEXT"); + glad_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT) load(userptr, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"); +} +static void glad_vk_load_VK_EXT_color_write_enable( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_color_write_enable) return; + glad_vkCmdSetColorWriteEnableEXT = (PFN_vkCmdSetColorWriteEnableEXT) load(userptr, "vkCmdSetColorWriteEnableEXT"); +} +static void glad_vk_load_VK_EXT_conditional_rendering( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_conditional_rendering) return; + glad_vkCmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT) load(userptr, "vkCmdBeginConditionalRenderingEXT"); + glad_vkCmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT) load(userptr, "vkCmdEndConditionalRenderingEXT"); +} +static void glad_vk_load_VK_EXT_debug_marker( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_debug_marker) return; + glad_vkCmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT) load(userptr, "vkCmdDebugMarkerBeginEXT"); + glad_vkCmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT) load(userptr, "vkCmdDebugMarkerEndEXT"); + glad_vkCmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT) load(userptr, "vkCmdDebugMarkerInsertEXT"); + glad_vkDebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT) load(userptr, "vkDebugMarkerSetObjectNameEXT"); + glad_vkDebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT) load(userptr, "vkDebugMarkerSetObjectTagEXT"); +} +static void glad_vk_load_VK_EXT_debug_report( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_debug_report) return; + glad_vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT) load(userptr, "vkCreateDebugReportCallbackEXT"); + glad_vkDebugReportMessageEXT = (PFN_vkDebugReportMessageEXT) load(userptr, "vkDebugReportMessageEXT"); + glad_vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT) load(userptr, "vkDestroyDebugReportCallbackEXT"); +} +static void glad_vk_load_VK_EXT_debug_utils( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_debug_utils) return; + glad_vkCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT) load(userptr, "vkCmdBeginDebugUtilsLabelEXT"); + glad_vkCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT) load(userptr, "vkCmdEndDebugUtilsLabelEXT"); + glad_vkCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT) load(userptr, "vkCmdInsertDebugUtilsLabelEXT"); + glad_vkCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT) load(userptr, "vkCreateDebugUtilsMessengerEXT"); + glad_vkDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT) load(userptr, "vkDestroyDebugUtilsMessengerEXT"); + glad_vkQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT) load(userptr, "vkQueueBeginDebugUtilsLabelEXT"); + glad_vkQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT) load(userptr, "vkQueueEndDebugUtilsLabelEXT"); + glad_vkQueueInsertDebugUtilsLabelEXT = (PFN_vkQueueInsertDebugUtilsLabelEXT) load(userptr, "vkQueueInsertDebugUtilsLabelEXT"); + glad_vkSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT) load(userptr, "vkSetDebugUtilsObjectNameEXT"); + glad_vkSetDebugUtilsObjectTagEXT = (PFN_vkSetDebugUtilsObjectTagEXT) load(userptr, "vkSetDebugUtilsObjectTagEXT"); + glad_vkSubmitDebugUtilsMessageEXT = (PFN_vkSubmitDebugUtilsMessageEXT) load(userptr, "vkSubmitDebugUtilsMessageEXT"); +} +static void glad_vk_load_VK_EXT_depth_bias_control( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_depth_bias_control) return; + glad_vkCmdSetDepthBias2EXT = (PFN_vkCmdSetDepthBias2EXT) load(userptr, "vkCmdSetDepthBias2EXT"); +} +static void glad_vk_load_VK_EXT_depth_clamp_control( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_depth_clamp_control) return; + glad_vkCmdSetDepthClampRangeEXT = (PFN_vkCmdSetDepthClampRangeEXT) load(userptr, "vkCmdSetDepthClampRangeEXT"); +} +static void glad_vk_load_VK_EXT_descriptor_buffer( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_descriptor_buffer) return; + glad_vkCmdBindDescriptorBufferEmbeddedSamplersEXT = (PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT) load(userptr, "vkCmdBindDescriptorBufferEmbeddedSamplersEXT"); + glad_vkCmdBindDescriptorBuffersEXT = (PFN_vkCmdBindDescriptorBuffersEXT) load(userptr, "vkCmdBindDescriptorBuffersEXT"); + glad_vkCmdSetDescriptorBufferOffsetsEXT = (PFN_vkCmdSetDescriptorBufferOffsetsEXT) load(userptr, "vkCmdSetDescriptorBufferOffsetsEXT"); + glad_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT = (PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT) load(userptr, "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT"); + glad_vkGetBufferOpaqueCaptureDescriptorDataEXT = (PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT) load(userptr, "vkGetBufferOpaqueCaptureDescriptorDataEXT"); + glad_vkGetDescriptorEXT = (PFN_vkGetDescriptorEXT) load(userptr, "vkGetDescriptorEXT"); + glad_vkGetDescriptorSetLayoutBindingOffsetEXT = (PFN_vkGetDescriptorSetLayoutBindingOffsetEXT) load(userptr, "vkGetDescriptorSetLayoutBindingOffsetEXT"); + glad_vkGetDescriptorSetLayoutSizeEXT = (PFN_vkGetDescriptorSetLayoutSizeEXT) load(userptr, "vkGetDescriptorSetLayoutSizeEXT"); + glad_vkGetImageOpaqueCaptureDescriptorDataEXT = (PFN_vkGetImageOpaqueCaptureDescriptorDataEXT) load(userptr, "vkGetImageOpaqueCaptureDescriptorDataEXT"); + glad_vkGetImageViewOpaqueCaptureDescriptorDataEXT = (PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT) load(userptr, "vkGetImageViewOpaqueCaptureDescriptorDataEXT"); + glad_vkGetSamplerOpaqueCaptureDescriptorDataEXT = (PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT) load(userptr, "vkGetSamplerOpaqueCaptureDescriptorDataEXT"); +} +static void glad_vk_load_VK_EXT_device_fault( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_device_fault) return; + glad_vkGetDeviceFaultInfoEXT = (PFN_vkGetDeviceFaultInfoEXT) load(userptr, "vkGetDeviceFaultInfoEXT"); +} +static void glad_vk_load_VK_EXT_device_generated_commands( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_device_generated_commands) return; + glad_vkCmdExecuteGeneratedCommandsEXT = (PFN_vkCmdExecuteGeneratedCommandsEXT) load(userptr, "vkCmdExecuteGeneratedCommandsEXT"); + glad_vkCmdPreprocessGeneratedCommandsEXT = (PFN_vkCmdPreprocessGeneratedCommandsEXT) load(userptr, "vkCmdPreprocessGeneratedCommandsEXT"); + glad_vkCreateIndirectCommandsLayoutEXT = (PFN_vkCreateIndirectCommandsLayoutEXT) load(userptr, "vkCreateIndirectCommandsLayoutEXT"); + glad_vkCreateIndirectExecutionSetEXT = (PFN_vkCreateIndirectExecutionSetEXT) load(userptr, "vkCreateIndirectExecutionSetEXT"); + glad_vkDestroyIndirectCommandsLayoutEXT = (PFN_vkDestroyIndirectCommandsLayoutEXT) load(userptr, "vkDestroyIndirectCommandsLayoutEXT"); + glad_vkDestroyIndirectExecutionSetEXT = (PFN_vkDestroyIndirectExecutionSetEXT) load(userptr, "vkDestroyIndirectExecutionSetEXT"); + glad_vkGetGeneratedCommandsMemoryRequirementsEXT = (PFN_vkGetGeneratedCommandsMemoryRequirementsEXT) load(userptr, "vkGetGeneratedCommandsMemoryRequirementsEXT"); + glad_vkUpdateIndirectExecutionSetPipelineEXT = (PFN_vkUpdateIndirectExecutionSetPipelineEXT) load(userptr, "vkUpdateIndirectExecutionSetPipelineEXT"); + glad_vkUpdateIndirectExecutionSetShaderEXT = (PFN_vkUpdateIndirectExecutionSetShaderEXT) load(userptr, "vkUpdateIndirectExecutionSetShaderEXT"); +} +static void glad_vk_load_VK_EXT_direct_mode_display( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_direct_mode_display) return; + glad_vkReleaseDisplayEXT = (PFN_vkReleaseDisplayEXT) load(userptr, "vkReleaseDisplayEXT"); +} +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +static void glad_vk_load_VK_EXT_directfb_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_directfb_surface) return; + glad_vkCreateDirectFBSurfaceEXT = (PFN_vkCreateDirectFBSurfaceEXT) load(userptr, "vkCreateDirectFBSurfaceEXT"); + glad_vkGetPhysicalDeviceDirectFBPresentationSupportEXT = (PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT) load(userptr, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT"); +} + +#endif +static void glad_vk_load_VK_EXT_discard_rectangles( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_discard_rectangles) return; + glad_vkCmdSetDiscardRectangleEXT = (PFN_vkCmdSetDiscardRectangleEXT) load(userptr, "vkCmdSetDiscardRectangleEXT"); + glad_vkCmdSetDiscardRectangleEnableEXT = (PFN_vkCmdSetDiscardRectangleEnableEXT) load(userptr, "vkCmdSetDiscardRectangleEnableEXT"); + glad_vkCmdSetDiscardRectangleModeEXT = (PFN_vkCmdSetDiscardRectangleModeEXT) load(userptr, "vkCmdSetDiscardRectangleModeEXT"); +} +static void glad_vk_load_VK_EXT_display_control( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_display_control) return; + glad_vkDisplayPowerControlEXT = (PFN_vkDisplayPowerControlEXT) load(userptr, "vkDisplayPowerControlEXT"); + glad_vkGetSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT) load(userptr, "vkGetSwapchainCounterEXT"); + glad_vkRegisterDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT) load(userptr, "vkRegisterDeviceEventEXT"); + glad_vkRegisterDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT) load(userptr, "vkRegisterDisplayEventEXT"); +} +static void glad_vk_load_VK_EXT_display_surface_counter( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_display_surface_counter) return; + glad_vkGetPhysicalDeviceSurfaceCapabilities2EXT = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT) load(userptr, "vkGetPhysicalDeviceSurfaceCapabilities2EXT"); +} +static void glad_vk_load_VK_EXT_extended_dynamic_state( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_extended_dynamic_state) return; + glad_vkCmdBindVertexBuffers2EXT = (PFN_vkCmdBindVertexBuffers2EXT) load(userptr, "vkCmdBindVertexBuffers2EXT"); + glad_vkCmdSetCullModeEXT = (PFN_vkCmdSetCullModeEXT) load(userptr, "vkCmdSetCullModeEXT"); + glad_vkCmdSetDepthBoundsTestEnableEXT = (PFN_vkCmdSetDepthBoundsTestEnableEXT) load(userptr, "vkCmdSetDepthBoundsTestEnableEXT"); + glad_vkCmdSetDepthCompareOpEXT = (PFN_vkCmdSetDepthCompareOpEXT) load(userptr, "vkCmdSetDepthCompareOpEXT"); + glad_vkCmdSetDepthTestEnableEXT = (PFN_vkCmdSetDepthTestEnableEXT) load(userptr, "vkCmdSetDepthTestEnableEXT"); + glad_vkCmdSetDepthWriteEnableEXT = (PFN_vkCmdSetDepthWriteEnableEXT) load(userptr, "vkCmdSetDepthWriteEnableEXT"); + glad_vkCmdSetFrontFaceEXT = (PFN_vkCmdSetFrontFaceEXT) load(userptr, "vkCmdSetFrontFaceEXT"); + glad_vkCmdSetPrimitiveTopologyEXT = (PFN_vkCmdSetPrimitiveTopologyEXT) load(userptr, "vkCmdSetPrimitiveTopologyEXT"); + glad_vkCmdSetScissorWithCountEXT = (PFN_vkCmdSetScissorWithCountEXT) load(userptr, "vkCmdSetScissorWithCountEXT"); + glad_vkCmdSetStencilOpEXT = (PFN_vkCmdSetStencilOpEXT) load(userptr, "vkCmdSetStencilOpEXT"); + glad_vkCmdSetStencilTestEnableEXT = (PFN_vkCmdSetStencilTestEnableEXT) load(userptr, "vkCmdSetStencilTestEnableEXT"); + glad_vkCmdSetViewportWithCountEXT = (PFN_vkCmdSetViewportWithCountEXT) load(userptr, "vkCmdSetViewportWithCountEXT"); +} +static void glad_vk_load_VK_EXT_extended_dynamic_state2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_extended_dynamic_state2) return; + glad_vkCmdSetDepthBiasEnableEXT = (PFN_vkCmdSetDepthBiasEnableEXT) load(userptr, "vkCmdSetDepthBiasEnableEXT"); + glad_vkCmdSetLogicOpEXT = (PFN_vkCmdSetLogicOpEXT) load(userptr, "vkCmdSetLogicOpEXT"); + glad_vkCmdSetPatchControlPointsEXT = (PFN_vkCmdSetPatchControlPointsEXT) load(userptr, "vkCmdSetPatchControlPointsEXT"); + glad_vkCmdSetPrimitiveRestartEnableEXT = (PFN_vkCmdSetPrimitiveRestartEnableEXT) load(userptr, "vkCmdSetPrimitiveRestartEnableEXT"); + glad_vkCmdSetRasterizerDiscardEnableEXT = (PFN_vkCmdSetRasterizerDiscardEnableEXT) load(userptr, "vkCmdSetRasterizerDiscardEnableEXT"); +} +static void glad_vk_load_VK_EXT_extended_dynamic_state3( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_extended_dynamic_state3) return; + glad_vkCmdSetAlphaToCoverageEnableEXT = (PFN_vkCmdSetAlphaToCoverageEnableEXT) load(userptr, "vkCmdSetAlphaToCoverageEnableEXT"); + glad_vkCmdSetAlphaToOneEnableEXT = (PFN_vkCmdSetAlphaToOneEnableEXT) load(userptr, "vkCmdSetAlphaToOneEnableEXT"); + glad_vkCmdSetColorBlendAdvancedEXT = (PFN_vkCmdSetColorBlendAdvancedEXT) load(userptr, "vkCmdSetColorBlendAdvancedEXT"); + glad_vkCmdSetColorBlendEnableEXT = (PFN_vkCmdSetColorBlendEnableEXT) load(userptr, "vkCmdSetColorBlendEnableEXT"); + glad_vkCmdSetColorBlendEquationEXT = (PFN_vkCmdSetColorBlendEquationEXT) load(userptr, "vkCmdSetColorBlendEquationEXT"); + glad_vkCmdSetColorWriteMaskEXT = (PFN_vkCmdSetColorWriteMaskEXT) load(userptr, "vkCmdSetColorWriteMaskEXT"); + glad_vkCmdSetConservativeRasterizationModeEXT = (PFN_vkCmdSetConservativeRasterizationModeEXT) load(userptr, "vkCmdSetConservativeRasterizationModeEXT"); + glad_vkCmdSetCoverageModulationModeNV = (PFN_vkCmdSetCoverageModulationModeNV) load(userptr, "vkCmdSetCoverageModulationModeNV"); + glad_vkCmdSetCoverageModulationTableEnableNV = (PFN_vkCmdSetCoverageModulationTableEnableNV) load(userptr, "vkCmdSetCoverageModulationTableEnableNV"); + glad_vkCmdSetCoverageModulationTableNV = (PFN_vkCmdSetCoverageModulationTableNV) load(userptr, "vkCmdSetCoverageModulationTableNV"); + glad_vkCmdSetCoverageReductionModeNV = (PFN_vkCmdSetCoverageReductionModeNV) load(userptr, "vkCmdSetCoverageReductionModeNV"); + glad_vkCmdSetCoverageToColorEnableNV = (PFN_vkCmdSetCoverageToColorEnableNV) load(userptr, "vkCmdSetCoverageToColorEnableNV"); + glad_vkCmdSetCoverageToColorLocationNV = (PFN_vkCmdSetCoverageToColorLocationNV) load(userptr, "vkCmdSetCoverageToColorLocationNV"); + glad_vkCmdSetDepthClampEnableEXT = (PFN_vkCmdSetDepthClampEnableEXT) load(userptr, "vkCmdSetDepthClampEnableEXT"); + glad_vkCmdSetDepthClipEnableEXT = (PFN_vkCmdSetDepthClipEnableEXT) load(userptr, "vkCmdSetDepthClipEnableEXT"); + glad_vkCmdSetDepthClipNegativeOneToOneEXT = (PFN_vkCmdSetDepthClipNegativeOneToOneEXT) load(userptr, "vkCmdSetDepthClipNegativeOneToOneEXT"); + glad_vkCmdSetExtraPrimitiveOverestimationSizeEXT = (PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT) load(userptr, "vkCmdSetExtraPrimitiveOverestimationSizeEXT"); + glad_vkCmdSetLineRasterizationModeEXT = (PFN_vkCmdSetLineRasterizationModeEXT) load(userptr, "vkCmdSetLineRasterizationModeEXT"); + glad_vkCmdSetLineStippleEnableEXT = (PFN_vkCmdSetLineStippleEnableEXT) load(userptr, "vkCmdSetLineStippleEnableEXT"); + glad_vkCmdSetLogicOpEnableEXT = (PFN_vkCmdSetLogicOpEnableEXT) load(userptr, "vkCmdSetLogicOpEnableEXT"); + glad_vkCmdSetPolygonModeEXT = (PFN_vkCmdSetPolygonModeEXT) load(userptr, "vkCmdSetPolygonModeEXT"); + glad_vkCmdSetProvokingVertexModeEXT = (PFN_vkCmdSetProvokingVertexModeEXT) load(userptr, "vkCmdSetProvokingVertexModeEXT"); + glad_vkCmdSetRasterizationSamplesEXT = (PFN_vkCmdSetRasterizationSamplesEXT) load(userptr, "vkCmdSetRasterizationSamplesEXT"); + glad_vkCmdSetRasterizationStreamEXT = (PFN_vkCmdSetRasterizationStreamEXT) load(userptr, "vkCmdSetRasterizationStreamEXT"); + glad_vkCmdSetRepresentativeFragmentTestEnableNV = (PFN_vkCmdSetRepresentativeFragmentTestEnableNV) load(userptr, "vkCmdSetRepresentativeFragmentTestEnableNV"); + glad_vkCmdSetSampleLocationsEnableEXT = (PFN_vkCmdSetSampleLocationsEnableEXT) load(userptr, "vkCmdSetSampleLocationsEnableEXT"); + glad_vkCmdSetSampleMaskEXT = (PFN_vkCmdSetSampleMaskEXT) load(userptr, "vkCmdSetSampleMaskEXT"); + glad_vkCmdSetShadingRateImageEnableNV = (PFN_vkCmdSetShadingRateImageEnableNV) load(userptr, "vkCmdSetShadingRateImageEnableNV"); + glad_vkCmdSetTessellationDomainOriginEXT = (PFN_vkCmdSetTessellationDomainOriginEXT) load(userptr, "vkCmdSetTessellationDomainOriginEXT"); + glad_vkCmdSetViewportSwizzleNV = (PFN_vkCmdSetViewportSwizzleNV) load(userptr, "vkCmdSetViewportSwizzleNV"); + glad_vkCmdSetViewportWScalingEnableNV = (PFN_vkCmdSetViewportWScalingEnableNV) load(userptr, "vkCmdSetViewportWScalingEnableNV"); +} +static void glad_vk_load_VK_EXT_external_memory_host( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_external_memory_host) return; + glad_vkGetMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT) load(userptr, "vkGetMemoryHostPointerPropertiesEXT"); +} +#if defined(VK_USE_PLATFORM_METAL_EXT) +static void glad_vk_load_VK_EXT_external_memory_metal( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_external_memory_metal) return; + glad_vkGetMemoryMetalHandleEXT = (PFN_vkGetMemoryMetalHandleEXT) load(userptr, "vkGetMemoryMetalHandleEXT"); + glad_vkGetMemoryMetalHandlePropertiesEXT = (PFN_vkGetMemoryMetalHandlePropertiesEXT) load(userptr, "vkGetMemoryMetalHandlePropertiesEXT"); +} + +#endif +static void glad_vk_load_VK_EXT_fragment_density_map_offset( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_fragment_density_map_offset) return; + glad_vkCmdEndRendering2EXT = (PFN_vkCmdEndRendering2EXT) load(userptr, "vkCmdEndRendering2EXT"); +} +#if defined(VK_USE_PLATFORM_WIN32_KHR) +static void glad_vk_load_VK_EXT_full_screen_exclusive( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_full_screen_exclusive) return; + glad_vkAcquireFullScreenExclusiveModeEXT = (PFN_vkAcquireFullScreenExclusiveModeEXT) load(userptr, "vkAcquireFullScreenExclusiveModeEXT"); + glad_vkGetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT) load(userptr, "vkGetDeviceGroupSurfacePresentModes2EXT"); + glad_vkGetPhysicalDeviceSurfacePresentModes2EXT = (PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT) load(userptr, "vkGetPhysicalDeviceSurfacePresentModes2EXT"); + glad_vkReleaseFullScreenExclusiveModeEXT = (PFN_vkReleaseFullScreenExclusiveModeEXT) load(userptr, "vkReleaseFullScreenExclusiveModeEXT"); +} + +#endif +static void glad_vk_load_VK_EXT_hdr_metadata( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_hdr_metadata) return; + glad_vkSetHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT) load(userptr, "vkSetHdrMetadataEXT"); +} +static void glad_vk_load_VK_EXT_headless_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_headless_surface) return; + glad_vkCreateHeadlessSurfaceEXT = (PFN_vkCreateHeadlessSurfaceEXT) load(userptr, "vkCreateHeadlessSurfaceEXT"); +} +static void glad_vk_load_VK_EXT_host_image_copy( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_host_image_copy) return; + glad_vkCopyImageToImageEXT = (PFN_vkCopyImageToImageEXT) load(userptr, "vkCopyImageToImageEXT"); + glad_vkCopyImageToMemoryEXT = (PFN_vkCopyImageToMemoryEXT) load(userptr, "vkCopyImageToMemoryEXT"); + glad_vkCopyMemoryToImageEXT = (PFN_vkCopyMemoryToImageEXT) load(userptr, "vkCopyMemoryToImageEXT"); + glad_vkGetImageSubresourceLayout2EXT = (PFN_vkGetImageSubresourceLayout2EXT) load(userptr, "vkGetImageSubresourceLayout2EXT"); + glad_vkTransitionImageLayoutEXT = (PFN_vkTransitionImageLayoutEXT) load(userptr, "vkTransitionImageLayoutEXT"); +} +static void glad_vk_load_VK_EXT_host_query_reset( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_host_query_reset) return; + glad_vkResetQueryPoolEXT = (PFN_vkResetQueryPoolEXT) load(userptr, "vkResetQueryPoolEXT"); +} +static void glad_vk_load_VK_EXT_image_compression_control( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_image_compression_control) return; + glad_vkGetImageSubresourceLayout2EXT = (PFN_vkGetImageSubresourceLayout2EXT) load(userptr, "vkGetImageSubresourceLayout2EXT"); +} +static void glad_vk_load_VK_EXT_image_drm_format_modifier( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_image_drm_format_modifier) return; + glad_vkGetImageDrmFormatModifierPropertiesEXT = (PFN_vkGetImageDrmFormatModifierPropertiesEXT) load(userptr, "vkGetImageDrmFormatModifierPropertiesEXT"); +} +static void glad_vk_load_VK_EXT_line_rasterization( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_line_rasterization) return; + glad_vkCmdSetLineStippleEXT = (PFN_vkCmdSetLineStippleEXT) load(userptr, "vkCmdSetLineStippleEXT"); +} +static void glad_vk_load_VK_EXT_mesh_shader( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_mesh_shader) return; + glad_vkCmdDrawMeshTasksEXT = (PFN_vkCmdDrawMeshTasksEXT) load(userptr, "vkCmdDrawMeshTasksEXT"); + glad_vkCmdDrawMeshTasksIndirectCountEXT = (PFN_vkCmdDrawMeshTasksIndirectCountEXT) load(userptr, "vkCmdDrawMeshTasksIndirectCountEXT"); + glad_vkCmdDrawMeshTasksIndirectEXT = (PFN_vkCmdDrawMeshTasksIndirectEXT) load(userptr, "vkCmdDrawMeshTasksIndirectEXT"); +} +#if defined(VK_USE_PLATFORM_METAL_EXT) +static void glad_vk_load_VK_EXT_metal_objects( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_metal_objects) return; + glad_vkExportMetalObjectsEXT = (PFN_vkExportMetalObjectsEXT) load(userptr, "vkExportMetalObjectsEXT"); +} + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +static void glad_vk_load_VK_EXT_metal_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_metal_surface) return; + glad_vkCreateMetalSurfaceEXT = (PFN_vkCreateMetalSurfaceEXT) load(userptr, "vkCreateMetalSurfaceEXT"); +} + +#endif +static void glad_vk_load_VK_EXT_multi_draw( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_multi_draw) return; + glad_vkCmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT) load(userptr, "vkCmdDrawMultiEXT"); + glad_vkCmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT) load(userptr, "vkCmdDrawMultiIndexedEXT"); +} +static void glad_vk_load_VK_EXT_opacity_micromap( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_opacity_micromap) return; + glad_vkBuildMicromapsEXT = (PFN_vkBuildMicromapsEXT) load(userptr, "vkBuildMicromapsEXT"); + glad_vkCmdBuildMicromapsEXT = (PFN_vkCmdBuildMicromapsEXT) load(userptr, "vkCmdBuildMicromapsEXT"); + glad_vkCmdCopyMemoryToMicromapEXT = (PFN_vkCmdCopyMemoryToMicromapEXT) load(userptr, "vkCmdCopyMemoryToMicromapEXT"); + glad_vkCmdCopyMicromapEXT = (PFN_vkCmdCopyMicromapEXT) load(userptr, "vkCmdCopyMicromapEXT"); + glad_vkCmdCopyMicromapToMemoryEXT = (PFN_vkCmdCopyMicromapToMemoryEXT) load(userptr, "vkCmdCopyMicromapToMemoryEXT"); + glad_vkCmdWriteMicromapsPropertiesEXT = (PFN_vkCmdWriteMicromapsPropertiesEXT) load(userptr, "vkCmdWriteMicromapsPropertiesEXT"); + glad_vkCopyMemoryToMicromapEXT = (PFN_vkCopyMemoryToMicromapEXT) load(userptr, "vkCopyMemoryToMicromapEXT"); + glad_vkCopyMicromapEXT = (PFN_vkCopyMicromapEXT) load(userptr, "vkCopyMicromapEXT"); + glad_vkCopyMicromapToMemoryEXT = (PFN_vkCopyMicromapToMemoryEXT) load(userptr, "vkCopyMicromapToMemoryEXT"); + glad_vkCreateMicromapEXT = (PFN_vkCreateMicromapEXT) load(userptr, "vkCreateMicromapEXT"); + glad_vkDestroyMicromapEXT = (PFN_vkDestroyMicromapEXT) load(userptr, "vkDestroyMicromapEXT"); + glad_vkGetDeviceMicromapCompatibilityEXT = (PFN_vkGetDeviceMicromapCompatibilityEXT) load(userptr, "vkGetDeviceMicromapCompatibilityEXT"); + glad_vkGetMicromapBuildSizesEXT = (PFN_vkGetMicromapBuildSizesEXT) load(userptr, "vkGetMicromapBuildSizesEXT"); + glad_vkWriteMicromapsPropertiesEXT = (PFN_vkWriteMicromapsPropertiesEXT) load(userptr, "vkWriteMicromapsPropertiesEXT"); +} +static void glad_vk_load_VK_EXT_pageable_device_local_memory( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_pageable_device_local_memory) return; + glad_vkSetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT) load(userptr, "vkSetDeviceMemoryPriorityEXT"); +} +static void glad_vk_load_VK_EXT_pipeline_properties( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_pipeline_properties) return; + glad_vkGetPipelinePropertiesEXT = (PFN_vkGetPipelinePropertiesEXT) load(userptr, "vkGetPipelinePropertiesEXT"); +} +static void glad_vk_load_VK_EXT_private_data( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_private_data) return; + glad_vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT) load(userptr, "vkCreatePrivateDataSlotEXT"); + glad_vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT) load(userptr, "vkDestroyPrivateDataSlotEXT"); + glad_vkGetPrivateDataEXT = (PFN_vkGetPrivateDataEXT) load(userptr, "vkGetPrivateDataEXT"); + glad_vkSetPrivateDataEXT = (PFN_vkSetPrivateDataEXT) load(userptr, "vkSetPrivateDataEXT"); +} +static void glad_vk_load_VK_EXT_sample_locations( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_sample_locations) return; + glad_vkCmdSetSampleLocationsEXT = (PFN_vkCmdSetSampleLocationsEXT) load(userptr, "vkCmdSetSampleLocationsEXT"); + glad_vkGetPhysicalDeviceMultisamplePropertiesEXT = (PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT) load(userptr, "vkGetPhysicalDeviceMultisamplePropertiesEXT"); +} +static void glad_vk_load_VK_EXT_shader_module_identifier( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_shader_module_identifier) return; + glad_vkGetShaderModuleCreateInfoIdentifierEXT = (PFN_vkGetShaderModuleCreateInfoIdentifierEXT) load(userptr, "vkGetShaderModuleCreateInfoIdentifierEXT"); + glad_vkGetShaderModuleIdentifierEXT = (PFN_vkGetShaderModuleIdentifierEXT) load(userptr, "vkGetShaderModuleIdentifierEXT"); +} +static void glad_vk_load_VK_EXT_shader_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_shader_object) return; + glad_vkCmdBindShadersEXT = (PFN_vkCmdBindShadersEXT) load(userptr, "vkCmdBindShadersEXT"); + glad_vkCmdBindVertexBuffers2EXT = (PFN_vkCmdBindVertexBuffers2EXT) load(userptr, "vkCmdBindVertexBuffers2EXT"); + glad_vkCmdSetAlphaToCoverageEnableEXT = (PFN_vkCmdSetAlphaToCoverageEnableEXT) load(userptr, "vkCmdSetAlphaToCoverageEnableEXT"); + glad_vkCmdSetAlphaToOneEnableEXT = (PFN_vkCmdSetAlphaToOneEnableEXT) load(userptr, "vkCmdSetAlphaToOneEnableEXT"); + glad_vkCmdSetColorBlendAdvancedEXT = (PFN_vkCmdSetColorBlendAdvancedEXT) load(userptr, "vkCmdSetColorBlendAdvancedEXT"); + glad_vkCmdSetColorBlendEnableEXT = (PFN_vkCmdSetColorBlendEnableEXT) load(userptr, "vkCmdSetColorBlendEnableEXT"); + glad_vkCmdSetColorBlendEquationEXT = (PFN_vkCmdSetColorBlendEquationEXT) load(userptr, "vkCmdSetColorBlendEquationEXT"); + glad_vkCmdSetColorWriteMaskEXT = (PFN_vkCmdSetColorWriteMaskEXT) load(userptr, "vkCmdSetColorWriteMaskEXT"); + glad_vkCmdSetConservativeRasterizationModeEXT = (PFN_vkCmdSetConservativeRasterizationModeEXT) load(userptr, "vkCmdSetConservativeRasterizationModeEXT"); + glad_vkCmdSetCoverageModulationModeNV = (PFN_vkCmdSetCoverageModulationModeNV) load(userptr, "vkCmdSetCoverageModulationModeNV"); + glad_vkCmdSetCoverageModulationTableEnableNV = (PFN_vkCmdSetCoverageModulationTableEnableNV) load(userptr, "vkCmdSetCoverageModulationTableEnableNV"); + glad_vkCmdSetCoverageModulationTableNV = (PFN_vkCmdSetCoverageModulationTableNV) load(userptr, "vkCmdSetCoverageModulationTableNV"); + glad_vkCmdSetCoverageReductionModeNV = (PFN_vkCmdSetCoverageReductionModeNV) load(userptr, "vkCmdSetCoverageReductionModeNV"); + glad_vkCmdSetCoverageToColorEnableNV = (PFN_vkCmdSetCoverageToColorEnableNV) load(userptr, "vkCmdSetCoverageToColorEnableNV"); + glad_vkCmdSetCoverageToColorLocationNV = (PFN_vkCmdSetCoverageToColorLocationNV) load(userptr, "vkCmdSetCoverageToColorLocationNV"); + glad_vkCmdSetCullModeEXT = (PFN_vkCmdSetCullModeEXT) load(userptr, "vkCmdSetCullModeEXT"); + glad_vkCmdSetDepthBiasEnableEXT = (PFN_vkCmdSetDepthBiasEnableEXT) load(userptr, "vkCmdSetDepthBiasEnableEXT"); + glad_vkCmdSetDepthBoundsTestEnableEXT = (PFN_vkCmdSetDepthBoundsTestEnableEXT) load(userptr, "vkCmdSetDepthBoundsTestEnableEXT"); + glad_vkCmdSetDepthClampEnableEXT = (PFN_vkCmdSetDepthClampEnableEXT) load(userptr, "vkCmdSetDepthClampEnableEXT"); + glad_vkCmdSetDepthClampRangeEXT = (PFN_vkCmdSetDepthClampRangeEXT) load(userptr, "vkCmdSetDepthClampRangeEXT"); + glad_vkCmdSetDepthClipEnableEXT = (PFN_vkCmdSetDepthClipEnableEXT) load(userptr, "vkCmdSetDepthClipEnableEXT"); + glad_vkCmdSetDepthClipNegativeOneToOneEXT = (PFN_vkCmdSetDepthClipNegativeOneToOneEXT) load(userptr, "vkCmdSetDepthClipNegativeOneToOneEXT"); + glad_vkCmdSetDepthCompareOpEXT = (PFN_vkCmdSetDepthCompareOpEXT) load(userptr, "vkCmdSetDepthCompareOpEXT"); + glad_vkCmdSetDepthTestEnableEXT = (PFN_vkCmdSetDepthTestEnableEXT) load(userptr, "vkCmdSetDepthTestEnableEXT"); + glad_vkCmdSetDepthWriteEnableEXT = (PFN_vkCmdSetDepthWriteEnableEXT) load(userptr, "vkCmdSetDepthWriteEnableEXT"); + glad_vkCmdSetExtraPrimitiveOverestimationSizeEXT = (PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT) load(userptr, "vkCmdSetExtraPrimitiveOverestimationSizeEXT"); + glad_vkCmdSetFrontFaceEXT = (PFN_vkCmdSetFrontFaceEXT) load(userptr, "vkCmdSetFrontFaceEXT"); + glad_vkCmdSetLineRasterizationModeEXT = (PFN_vkCmdSetLineRasterizationModeEXT) load(userptr, "vkCmdSetLineRasterizationModeEXT"); + glad_vkCmdSetLineStippleEnableEXT = (PFN_vkCmdSetLineStippleEnableEXT) load(userptr, "vkCmdSetLineStippleEnableEXT"); + glad_vkCmdSetLogicOpEXT = (PFN_vkCmdSetLogicOpEXT) load(userptr, "vkCmdSetLogicOpEXT"); + glad_vkCmdSetLogicOpEnableEXT = (PFN_vkCmdSetLogicOpEnableEXT) load(userptr, "vkCmdSetLogicOpEnableEXT"); + glad_vkCmdSetPatchControlPointsEXT = (PFN_vkCmdSetPatchControlPointsEXT) load(userptr, "vkCmdSetPatchControlPointsEXT"); + glad_vkCmdSetPolygonModeEXT = (PFN_vkCmdSetPolygonModeEXT) load(userptr, "vkCmdSetPolygonModeEXT"); + glad_vkCmdSetPrimitiveRestartEnableEXT = (PFN_vkCmdSetPrimitiveRestartEnableEXT) load(userptr, "vkCmdSetPrimitiveRestartEnableEXT"); + glad_vkCmdSetPrimitiveTopologyEXT = (PFN_vkCmdSetPrimitiveTopologyEXT) load(userptr, "vkCmdSetPrimitiveTopologyEXT"); + glad_vkCmdSetProvokingVertexModeEXT = (PFN_vkCmdSetProvokingVertexModeEXT) load(userptr, "vkCmdSetProvokingVertexModeEXT"); + glad_vkCmdSetRasterizationSamplesEXT = (PFN_vkCmdSetRasterizationSamplesEXT) load(userptr, "vkCmdSetRasterizationSamplesEXT"); + glad_vkCmdSetRasterizationStreamEXT = (PFN_vkCmdSetRasterizationStreamEXT) load(userptr, "vkCmdSetRasterizationStreamEXT"); + glad_vkCmdSetRasterizerDiscardEnableEXT = (PFN_vkCmdSetRasterizerDiscardEnableEXT) load(userptr, "vkCmdSetRasterizerDiscardEnableEXT"); + glad_vkCmdSetRepresentativeFragmentTestEnableNV = (PFN_vkCmdSetRepresentativeFragmentTestEnableNV) load(userptr, "vkCmdSetRepresentativeFragmentTestEnableNV"); + glad_vkCmdSetSampleLocationsEnableEXT = (PFN_vkCmdSetSampleLocationsEnableEXT) load(userptr, "vkCmdSetSampleLocationsEnableEXT"); + glad_vkCmdSetSampleMaskEXT = (PFN_vkCmdSetSampleMaskEXT) load(userptr, "vkCmdSetSampleMaskEXT"); + glad_vkCmdSetScissorWithCountEXT = (PFN_vkCmdSetScissorWithCountEXT) load(userptr, "vkCmdSetScissorWithCountEXT"); + glad_vkCmdSetShadingRateImageEnableNV = (PFN_vkCmdSetShadingRateImageEnableNV) load(userptr, "vkCmdSetShadingRateImageEnableNV"); + glad_vkCmdSetStencilOpEXT = (PFN_vkCmdSetStencilOpEXT) load(userptr, "vkCmdSetStencilOpEXT"); + glad_vkCmdSetStencilTestEnableEXT = (PFN_vkCmdSetStencilTestEnableEXT) load(userptr, "vkCmdSetStencilTestEnableEXT"); + glad_vkCmdSetTessellationDomainOriginEXT = (PFN_vkCmdSetTessellationDomainOriginEXT) load(userptr, "vkCmdSetTessellationDomainOriginEXT"); + glad_vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT) load(userptr, "vkCmdSetVertexInputEXT"); + glad_vkCmdSetViewportSwizzleNV = (PFN_vkCmdSetViewportSwizzleNV) load(userptr, "vkCmdSetViewportSwizzleNV"); + glad_vkCmdSetViewportWScalingEnableNV = (PFN_vkCmdSetViewportWScalingEnableNV) load(userptr, "vkCmdSetViewportWScalingEnableNV"); + glad_vkCmdSetViewportWithCountEXT = (PFN_vkCmdSetViewportWithCountEXT) load(userptr, "vkCmdSetViewportWithCountEXT"); + glad_vkCreateShadersEXT = (PFN_vkCreateShadersEXT) load(userptr, "vkCreateShadersEXT"); + glad_vkDestroyShaderEXT = (PFN_vkDestroyShaderEXT) load(userptr, "vkDestroyShaderEXT"); + glad_vkGetShaderBinaryDataEXT = (PFN_vkGetShaderBinaryDataEXT) load(userptr, "vkGetShaderBinaryDataEXT"); +} +static void glad_vk_load_VK_EXT_swapchain_maintenance1( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_swapchain_maintenance1) return; + glad_vkReleaseSwapchainImagesEXT = (PFN_vkReleaseSwapchainImagesEXT) load(userptr, "vkReleaseSwapchainImagesEXT"); +} +static void glad_vk_load_VK_EXT_tooling_info( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_tooling_info) return; + glad_vkGetPhysicalDeviceToolPropertiesEXT = (PFN_vkGetPhysicalDeviceToolPropertiesEXT) load(userptr, "vkGetPhysicalDeviceToolPropertiesEXT"); +} +static void glad_vk_load_VK_EXT_transform_feedback( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_transform_feedback) return; + glad_vkCmdBeginQueryIndexedEXT = (PFN_vkCmdBeginQueryIndexedEXT) load(userptr, "vkCmdBeginQueryIndexedEXT"); + glad_vkCmdBeginTransformFeedbackEXT = (PFN_vkCmdBeginTransformFeedbackEXT) load(userptr, "vkCmdBeginTransformFeedbackEXT"); + glad_vkCmdBindTransformFeedbackBuffersEXT = (PFN_vkCmdBindTransformFeedbackBuffersEXT) load(userptr, "vkCmdBindTransformFeedbackBuffersEXT"); + glad_vkCmdDrawIndirectByteCountEXT = (PFN_vkCmdDrawIndirectByteCountEXT) load(userptr, "vkCmdDrawIndirectByteCountEXT"); + glad_vkCmdEndQueryIndexedEXT = (PFN_vkCmdEndQueryIndexedEXT) load(userptr, "vkCmdEndQueryIndexedEXT"); + glad_vkCmdEndTransformFeedbackEXT = (PFN_vkCmdEndTransformFeedbackEXT) load(userptr, "vkCmdEndTransformFeedbackEXT"); +} +static void glad_vk_load_VK_EXT_validation_cache( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_validation_cache) return; + glad_vkCreateValidationCacheEXT = (PFN_vkCreateValidationCacheEXT) load(userptr, "vkCreateValidationCacheEXT"); + glad_vkDestroyValidationCacheEXT = (PFN_vkDestroyValidationCacheEXT) load(userptr, "vkDestroyValidationCacheEXT"); + glad_vkGetValidationCacheDataEXT = (PFN_vkGetValidationCacheDataEXT) load(userptr, "vkGetValidationCacheDataEXT"); + glad_vkMergeValidationCachesEXT = (PFN_vkMergeValidationCachesEXT) load(userptr, "vkMergeValidationCachesEXT"); +} +static void glad_vk_load_VK_EXT_vertex_input_dynamic_state( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_EXT_vertex_input_dynamic_state) return; + glad_vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT) load(userptr, "vkCmdSetVertexInputEXT"); +} +#if defined(VK_USE_PLATFORM_FUCHSIA) +static void glad_vk_load_VK_FUCHSIA_buffer_collection( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_FUCHSIA_buffer_collection) return; + glad_vkCreateBufferCollectionFUCHSIA = (PFN_vkCreateBufferCollectionFUCHSIA) load(userptr, "vkCreateBufferCollectionFUCHSIA"); + glad_vkDestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA) load(userptr, "vkDestroyBufferCollectionFUCHSIA"); + glad_vkGetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA) load(userptr, "vkGetBufferCollectionPropertiesFUCHSIA"); + glad_vkSetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA) load(userptr, "vkSetBufferCollectionBufferConstraintsFUCHSIA"); + glad_vkSetBufferCollectionImageConstraintsFUCHSIA = (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA) load(userptr, "vkSetBufferCollectionImageConstraintsFUCHSIA"); +} + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +static void glad_vk_load_VK_FUCHSIA_external_memory( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_FUCHSIA_external_memory) return; + glad_vkGetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA) load(userptr, "vkGetMemoryZirconHandleFUCHSIA"); + glad_vkGetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA) load(userptr, "vkGetMemoryZirconHandlePropertiesFUCHSIA"); +} + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +static void glad_vk_load_VK_FUCHSIA_external_semaphore( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_FUCHSIA_external_semaphore) return; + glad_vkGetSemaphoreZirconHandleFUCHSIA = (PFN_vkGetSemaphoreZirconHandleFUCHSIA) load(userptr, "vkGetSemaphoreZirconHandleFUCHSIA"); + glad_vkImportSemaphoreZirconHandleFUCHSIA = (PFN_vkImportSemaphoreZirconHandleFUCHSIA) load(userptr, "vkImportSemaphoreZirconHandleFUCHSIA"); +} + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) +static void glad_vk_load_VK_FUCHSIA_imagepipe_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_FUCHSIA_imagepipe_surface) return; + glad_vkCreateImagePipeSurfaceFUCHSIA = (PFN_vkCreateImagePipeSurfaceFUCHSIA) load(userptr, "vkCreateImagePipeSurfaceFUCHSIA"); +} + +#endif +#if defined(VK_USE_PLATFORM_GGP) +static void glad_vk_load_VK_GGP_stream_descriptor_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_GGP_stream_descriptor_surface) return; + glad_vkCreateStreamDescriptorSurfaceGGP = (PFN_vkCreateStreamDescriptorSurfaceGGP) load(userptr, "vkCreateStreamDescriptorSurfaceGGP"); +} + +#endif +static void glad_vk_load_VK_GOOGLE_display_timing( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_GOOGLE_display_timing) return; + glad_vkGetPastPresentationTimingGOOGLE = (PFN_vkGetPastPresentationTimingGOOGLE) load(userptr, "vkGetPastPresentationTimingGOOGLE"); + glad_vkGetRefreshCycleDurationGOOGLE = (PFN_vkGetRefreshCycleDurationGOOGLE) load(userptr, "vkGetRefreshCycleDurationGOOGLE"); +} +static void glad_vk_load_VK_HUAWEI_cluster_culling_shader( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_HUAWEI_cluster_culling_shader) return; + glad_vkCmdDrawClusterHUAWEI = (PFN_vkCmdDrawClusterHUAWEI) load(userptr, "vkCmdDrawClusterHUAWEI"); + glad_vkCmdDrawClusterIndirectHUAWEI = (PFN_vkCmdDrawClusterIndirectHUAWEI) load(userptr, "vkCmdDrawClusterIndirectHUAWEI"); +} +static void glad_vk_load_VK_HUAWEI_invocation_mask( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_HUAWEI_invocation_mask) return; + glad_vkCmdBindInvocationMaskHUAWEI = (PFN_vkCmdBindInvocationMaskHUAWEI) load(userptr, "vkCmdBindInvocationMaskHUAWEI"); +} +static void glad_vk_load_VK_HUAWEI_subpass_shading( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_HUAWEI_subpass_shading) return; + glad_vkCmdSubpassShadingHUAWEI = (PFN_vkCmdSubpassShadingHUAWEI) load(userptr, "vkCmdSubpassShadingHUAWEI"); + glad_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = (PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI) load(userptr, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI"); +} +static void glad_vk_load_VK_INTEL_performance_query( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_INTEL_performance_query) return; + glad_vkAcquirePerformanceConfigurationINTEL = (PFN_vkAcquirePerformanceConfigurationINTEL) load(userptr, "vkAcquirePerformanceConfigurationINTEL"); + glad_vkCmdSetPerformanceMarkerINTEL = (PFN_vkCmdSetPerformanceMarkerINTEL) load(userptr, "vkCmdSetPerformanceMarkerINTEL"); + glad_vkCmdSetPerformanceOverrideINTEL = (PFN_vkCmdSetPerformanceOverrideINTEL) load(userptr, "vkCmdSetPerformanceOverrideINTEL"); + glad_vkCmdSetPerformanceStreamMarkerINTEL = (PFN_vkCmdSetPerformanceStreamMarkerINTEL) load(userptr, "vkCmdSetPerformanceStreamMarkerINTEL"); + glad_vkGetPerformanceParameterINTEL = (PFN_vkGetPerformanceParameterINTEL) load(userptr, "vkGetPerformanceParameterINTEL"); + glad_vkInitializePerformanceApiINTEL = (PFN_vkInitializePerformanceApiINTEL) load(userptr, "vkInitializePerformanceApiINTEL"); + glad_vkQueueSetPerformanceConfigurationINTEL = (PFN_vkQueueSetPerformanceConfigurationINTEL) load(userptr, "vkQueueSetPerformanceConfigurationINTEL"); + glad_vkReleasePerformanceConfigurationINTEL = (PFN_vkReleasePerformanceConfigurationINTEL) load(userptr, "vkReleasePerformanceConfigurationINTEL"); + glad_vkUninitializePerformanceApiINTEL = (PFN_vkUninitializePerformanceApiINTEL) load(userptr, "vkUninitializePerformanceApiINTEL"); +} +static void glad_vk_load_VK_KHR_acceleration_structure( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_acceleration_structure) return; + glad_vkBuildAccelerationStructuresKHR = (PFN_vkBuildAccelerationStructuresKHR) load(userptr, "vkBuildAccelerationStructuresKHR"); + glad_vkCmdBuildAccelerationStructuresIndirectKHR = (PFN_vkCmdBuildAccelerationStructuresIndirectKHR) load(userptr, "vkCmdBuildAccelerationStructuresIndirectKHR"); + glad_vkCmdBuildAccelerationStructuresKHR = (PFN_vkCmdBuildAccelerationStructuresKHR) load(userptr, "vkCmdBuildAccelerationStructuresKHR"); + glad_vkCmdCopyAccelerationStructureKHR = (PFN_vkCmdCopyAccelerationStructureKHR) load(userptr, "vkCmdCopyAccelerationStructureKHR"); + glad_vkCmdCopyAccelerationStructureToMemoryKHR = (PFN_vkCmdCopyAccelerationStructureToMemoryKHR) load(userptr, "vkCmdCopyAccelerationStructureToMemoryKHR"); + glad_vkCmdCopyMemoryToAccelerationStructureKHR = (PFN_vkCmdCopyMemoryToAccelerationStructureKHR) load(userptr, "vkCmdCopyMemoryToAccelerationStructureKHR"); + glad_vkCmdWriteAccelerationStructuresPropertiesKHR = (PFN_vkCmdWriteAccelerationStructuresPropertiesKHR) load(userptr, "vkCmdWriteAccelerationStructuresPropertiesKHR"); + glad_vkCopyAccelerationStructureKHR = (PFN_vkCopyAccelerationStructureKHR) load(userptr, "vkCopyAccelerationStructureKHR"); + glad_vkCopyAccelerationStructureToMemoryKHR = (PFN_vkCopyAccelerationStructureToMemoryKHR) load(userptr, "vkCopyAccelerationStructureToMemoryKHR"); + glad_vkCopyMemoryToAccelerationStructureKHR = (PFN_vkCopyMemoryToAccelerationStructureKHR) load(userptr, "vkCopyMemoryToAccelerationStructureKHR"); + glad_vkCreateAccelerationStructureKHR = (PFN_vkCreateAccelerationStructureKHR) load(userptr, "vkCreateAccelerationStructureKHR"); + glad_vkDestroyAccelerationStructureKHR = (PFN_vkDestroyAccelerationStructureKHR) load(userptr, "vkDestroyAccelerationStructureKHR"); + glad_vkGetAccelerationStructureBuildSizesKHR = (PFN_vkGetAccelerationStructureBuildSizesKHR) load(userptr, "vkGetAccelerationStructureBuildSizesKHR"); + glad_vkGetAccelerationStructureDeviceAddressKHR = (PFN_vkGetAccelerationStructureDeviceAddressKHR) load(userptr, "vkGetAccelerationStructureDeviceAddressKHR"); + glad_vkGetDeviceAccelerationStructureCompatibilityKHR = (PFN_vkGetDeviceAccelerationStructureCompatibilityKHR) load(userptr, "vkGetDeviceAccelerationStructureCompatibilityKHR"); + glad_vkWriteAccelerationStructuresPropertiesKHR = (PFN_vkWriteAccelerationStructuresPropertiesKHR) load(userptr, "vkWriteAccelerationStructuresPropertiesKHR"); +} +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +static void glad_vk_load_VK_KHR_android_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_android_surface) return; + glad_vkCreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR) load(userptr, "vkCreateAndroidSurfaceKHR"); +} + +#endif +static void glad_vk_load_VK_KHR_bind_memory2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_bind_memory2) return; + glad_vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR) load(userptr, "vkBindBufferMemory2KHR"); + glad_vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR) load(userptr, "vkBindImageMemory2KHR"); +} +static void glad_vk_load_VK_KHR_buffer_device_address( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_buffer_device_address) return; + glad_vkGetBufferDeviceAddressKHR = (PFN_vkGetBufferDeviceAddressKHR) load(userptr, "vkGetBufferDeviceAddressKHR"); + glad_vkGetBufferOpaqueCaptureAddressKHR = (PFN_vkGetBufferOpaqueCaptureAddressKHR) load(userptr, "vkGetBufferOpaqueCaptureAddressKHR"); + glad_vkGetDeviceMemoryOpaqueCaptureAddressKHR = (PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR) load(userptr, "vkGetDeviceMemoryOpaqueCaptureAddressKHR"); +} +static void glad_vk_load_VK_KHR_calibrated_timestamps( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_calibrated_timestamps) return; + glad_vkGetCalibratedTimestampsKHR = (PFN_vkGetCalibratedTimestampsKHR) load(userptr, "vkGetCalibratedTimestampsKHR"); + glad_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR) load(userptr, "vkGetPhysicalDeviceCalibrateableTimeDomainsKHR"); +} +static void glad_vk_load_VK_KHR_cooperative_matrix( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_cooperative_matrix) return; + glad_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR = (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR) load(userptr, "vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR"); +} +static void glad_vk_load_VK_KHR_copy_commands2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_copy_commands2) return; + glad_vkCmdBlitImage2KHR = (PFN_vkCmdBlitImage2KHR) load(userptr, "vkCmdBlitImage2KHR"); + glad_vkCmdCopyBuffer2KHR = (PFN_vkCmdCopyBuffer2KHR) load(userptr, "vkCmdCopyBuffer2KHR"); + glad_vkCmdCopyBufferToImage2KHR = (PFN_vkCmdCopyBufferToImage2KHR) load(userptr, "vkCmdCopyBufferToImage2KHR"); + glad_vkCmdCopyImage2KHR = (PFN_vkCmdCopyImage2KHR) load(userptr, "vkCmdCopyImage2KHR"); + glad_vkCmdCopyImageToBuffer2KHR = (PFN_vkCmdCopyImageToBuffer2KHR) load(userptr, "vkCmdCopyImageToBuffer2KHR"); + glad_vkCmdResolveImage2KHR = (PFN_vkCmdResolveImage2KHR) load(userptr, "vkCmdResolveImage2KHR"); +} +static void glad_vk_load_VK_KHR_copy_memory_indirect( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_copy_memory_indirect) return; + glad_vkCmdCopyMemoryIndirectKHR = (PFN_vkCmdCopyMemoryIndirectKHR) load(userptr, "vkCmdCopyMemoryIndirectKHR"); + glad_vkCmdCopyMemoryToImageIndirectKHR = (PFN_vkCmdCopyMemoryToImageIndirectKHR) load(userptr, "vkCmdCopyMemoryToImageIndirectKHR"); +} +static void glad_vk_load_VK_KHR_create_renderpass2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_create_renderpass2) return; + glad_vkCmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR) load(userptr, "vkCmdBeginRenderPass2KHR"); + glad_vkCmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR) load(userptr, "vkCmdEndRenderPass2KHR"); + glad_vkCmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR) load(userptr, "vkCmdNextSubpass2KHR"); + glad_vkCreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR) load(userptr, "vkCreateRenderPass2KHR"); +} +static void glad_vk_load_VK_KHR_deferred_host_operations( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_deferred_host_operations) return; + glad_vkCreateDeferredOperationKHR = (PFN_vkCreateDeferredOperationKHR) load(userptr, "vkCreateDeferredOperationKHR"); + glad_vkDeferredOperationJoinKHR = (PFN_vkDeferredOperationJoinKHR) load(userptr, "vkDeferredOperationJoinKHR"); + glad_vkDestroyDeferredOperationKHR = (PFN_vkDestroyDeferredOperationKHR) load(userptr, "vkDestroyDeferredOperationKHR"); + glad_vkGetDeferredOperationMaxConcurrencyKHR = (PFN_vkGetDeferredOperationMaxConcurrencyKHR) load(userptr, "vkGetDeferredOperationMaxConcurrencyKHR"); + glad_vkGetDeferredOperationResultKHR = (PFN_vkGetDeferredOperationResultKHR) load(userptr, "vkGetDeferredOperationResultKHR"); +} +static void glad_vk_load_VK_KHR_descriptor_update_template( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_descriptor_update_template) return; + glad_vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR) load(userptr, "vkCmdPushDescriptorSetWithTemplateKHR"); + glad_vkCreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR) load(userptr, "vkCreateDescriptorUpdateTemplateKHR"); + glad_vkDestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR) load(userptr, "vkDestroyDescriptorUpdateTemplateKHR"); + glad_vkUpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR) load(userptr, "vkUpdateDescriptorSetWithTemplateKHR"); +} +static void glad_vk_load_VK_KHR_device_group( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_device_group) return; + glad_vkAcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR) load(userptr, "vkAcquireNextImage2KHR"); + glad_vkCmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR) load(userptr, "vkCmdDispatchBaseKHR"); + glad_vkCmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR) load(userptr, "vkCmdSetDeviceMaskKHR"); + glad_vkGetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR) load(userptr, "vkGetDeviceGroupPeerMemoryFeaturesKHR"); + glad_vkGetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR) load(userptr, "vkGetDeviceGroupPresentCapabilitiesKHR"); + glad_vkGetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR) load(userptr, "vkGetDeviceGroupSurfacePresentModesKHR"); + glad_vkGetPhysicalDevicePresentRectanglesKHR = (PFN_vkGetPhysicalDevicePresentRectanglesKHR) load(userptr, "vkGetPhysicalDevicePresentRectanglesKHR"); +} +static void glad_vk_load_VK_KHR_device_group_creation( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_device_group_creation) return; + glad_vkEnumeratePhysicalDeviceGroupsKHR = (PFN_vkEnumeratePhysicalDeviceGroupsKHR) load(userptr, "vkEnumeratePhysicalDeviceGroupsKHR"); +} +static void glad_vk_load_VK_KHR_display( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_display) return; + glad_vkCreateDisplayModeKHR = (PFN_vkCreateDisplayModeKHR) load(userptr, "vkCreateDisplayModeKHR"); + glad_vkCreateDisplayPlaneSurfaceKHR = (PFN_vkCreateDisplayPlaneSurfaceKHR) load(userptr, "vkCreateDisplayPlaneSurfaceKHR"); + glad_vkGetDisplayModePropertiesKHR = (PFN_vkGetDisplayModePropertiesKHR) load(userptr, "vkGetDisplayModePropertiesKHR"); + glad_vkGetDisplayPlaneCapabilitiesKHR = (PFN_vkGetDisplayPlaneCapabilitiesKHR) load(userptr, "vkGetDisplayPlaneCapabilitiesKHR"); + glad_vkGetDisplayPlaneSupportedDisplaysKHR = (PFN_vkGetDisplayPlaneSupportedDisplaysKHR) load(userptr, "vkGetDisplayPlaneSupportedDisplaysKHR"); + glad_vkGetPhysicalDeviceDisplayPlanePropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR) load(userptr, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); + glad_vkGetPhysicalDeviceDisplayPropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR) load(userptr, "vkGetPhysicalDeviceDisplayPropertiesKHR"); +} +static void glad_vk_load_VK_KHR_display_swapchain( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_display_swapchain) return; + glad_vkCreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR) load(userptr, "vkCreateSharedSwapchainsKHR"); +} +static void glad_vk_load_VK_KHR_draw_indirect_count( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_draw_indirect_count) return; + glad_vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR) load(userptr, "vkCmdDrawIndexedIndirectCountKHR"); + glad_vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR) load(userptr, "vkCmdDrawIndirectCountKHR"); +} +static void glad_vk_load_VK_KHR_dynamic_rendering( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_dynamic_rendering) return; + glad_vkCmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR) load(userptr, "vkCmdBeginRenderingKHR"); + glad_vkCmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR) load(userptr, "vkCmdEndRenderingKHR"); +} +static void glad_vk_load_VK_KHR_dynamic_rendering_local_read( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_dynamic_rendering_local_read) return; + glad_vkCmdSetRenderingAttachmentLocationsKHR = (PFN_vkCmdSetRenderingAttachmentLocationsKHR) load(userptr, "vkCmdSetRenderingAttachmentLocationsKHR"); + glad_vkCmdSetRenderingInputAttachmentIndicesKHR = (PFN_vkCmdSetRenderingInputAttachmentIndicesKHR) load(userptr, "vkCmdSetRenderingInputAttachmentIndicesKHR"); +} +static void glad_vk_load_VK_KHR_external_fence_capabilities( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_external_fence_capabilities) return; + glad_vkGetPhysicalDeviceExternalFencePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR) load(userptr, "vkGetPhysicalDeviceExternalFencePropertiesKHR"); +} +static void glad_vk_load_VK_KHR_external_fence_fd( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_external_fence_fd) return; + glad_vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR) load(userptr, "vkGetFenceFdKHR"); + glad_vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR) load(userptr, "vkImportFenceFdKHR"); +} +#if defined(VK_USE_PLATFORM_WIN32_KHR) +static void glad_vk_load_VK_KHR_external_fence_win32( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_external_fence_win32) return; + glad_vkGetFenceWin32HandleKHR = (PFN_vkGetFenceWin32HandleKHR) load(userptr, "vkGetFenceWin32HandleKHR"); + glad_vkImportFenceWin32HandleKHR = (PFN_vkImportFenceWin32HandleKHR) load(userptr, "vkImportFenceWin32HandleKHR"); +} + +#endif +static void glad_vk_load_VK_KHR_external_memory_capabilities( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_external_memory_capabilities) return; + glad_vkGetPhysicalDeviceExternalBufferPropertiesKHR = (PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR) load(userptr, "vkGetPhysicalDeviceExternalBufferPropertiesKHR"); +} +static void glad_vk_load_VK_KHR_external_memory_fd( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_external_memory_fd) return; + glad_vkGetMemoryFdKHR = (PFN_vkGetMemoryFdKHR) load(userptr, "vkGetMemoryFdKHR"); + glad_vkGetMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR) load(userptr, "vkGetMemoryFdPropertiesKHR"); +} +#if defined(VK_USE_PLATFORM_WIN32_KHR) +static void glad_vk_load_VK_KHR_external_memory_win32( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_external_memory_win32) return; + glad_vkGetMemoryWin32HandleKHR = (PFN_vkGetMemoryWin32HandleKHR) load(userptr, "vkGetMemoryWin32HandleKHR"); + glad_vkGetMemoryWin32HandlePropertiesKHR = (PFN_vkGetMemoryWin32HandlePropertiesKHR) load(userptr, "vkGetMemoryWin32HandlePropertiesKHR"); +} + +#endif +static void glad_vk_load_VK_KHR_external_semaphore_capabilities( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_external_semaphore_capabilities) return; + glad_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR) load(userptr, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"); +} +static void glad_vk_load_VK_KHR_external_semaphore_fd( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_external_semaphore_fd) return; + glad_vkGetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR) load(userptr, "vkGetSemaphoreFdKHR"); + glad_vkImportSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR) load(userptr, "vkImportSemaphoreFdKHR"); +} +#if defined(VK_USE_PLATFORM_WIN32_KHR) +static void glad_vk_load_VK_KHR_external_semaphore_win32( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_external_semaphore_win32) return; + glad_vkGetSemaphoreWin32HandleKHR = (PFN_vkGetSemaphoreWin32HandleKHR) load(userptr, "vkGetSemaphoreWin32HandleKHR"); + glad_vkImportSemaphoreWin32HandleKHR = (PFN_vkImportSemaphoreWin32HandleKHR) load(userptr, "vkImportSemaphoreWin32HandleKHR"); +} + +#endif +static void glad_vk_load_VK_KHR_fragment_shading_rate( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_fragment_shading_rate) return; + glad_vkCmdSetFragmentShadingRateKHR = (PFN_vkCmdSetFragmentShadingRateKHR) load(userptr, "vkCmdSetFragmentShadingRateKHR"); + glad_vkGetPhysicalDeviceFragmentShadingRatesKHR = (PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR) load(userptr, "vkGetPhysicalDeviceFragmentShadingRatesKHR"); +} +static void glad_vk_load_VK_KHR_get_display_properties2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_get_display_properties2) return; + glad_vkGetDisplayModeProperties2KHR = (PFN_vkGetDisplayModeProperties2KHR) load(userptr, "vkGetDisplayModeProperties2KHR"); + glad_vkGetDisplayPlaneCapabilities2KHR = (PFN_vkGetDisplayPlaneCapabilities2KHR) load(userptr, "vkGetDisplayPlaneCapabilities2KHR"); + glad_vkGetPhysicalDeviceDisplayPlaneProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR) load(userptr, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR"); + glad_vkGetPhysicalDeviceDisplayProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayProperties2KHR) load(userptr, "vkGetPhysicalDeviceDisplayProperties2KHR"); +} +static void glad_vk_load_VK_KHR_get_memory_requirements2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_get_memory_requirements2) return; + glad_vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR) load(userptr, "vkGetBufferMemoryRequirements2KHR"); + glad_vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR) load(userptr, "vkGetImageMemoryRequirements2KHR"); + glad_vkGetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR) load(userptr, "vkGetImageSparseMemoryRequirements2KHR"); +} +static void glad_vk_load_VK_KHR_get_physical_device_properties2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_get_physical_device_properties2) return; + glad_vkGetPhysicalDeviceFeatures2KHR = (PFN_vkGetPhysicalDeviceFeatures2KHR) load(userptr, "vkGetPhysicalDeviceFeatures2KHR"); + glad_vkGetPhysicalDeviceFormatProperties2KHR = (PFN_vkGetPhysicalDeviceFormatProperties2KHR) load(userptr, "vkGetPhysicalDeviceFormatProperties2KHR"); + glad_vkGetPhysicalDeviceImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR) load(userptr, "vkGetPhysicalDeviceImageFormatProperties2KHR"); + glad_vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2KHR) load(userptr, "vkGetPhysicalDeviceMemoryProperties2KHR"); + glad_vkGetPhysicalDeviceProperties2KHR = (PFN_vkGetPhysicalDeviceProperties2KHR) load(userptr, "vkGetPhysicalDeviceProperties2KHR"); + glad_vkGetPhysicalDeviceQueueFamilyProperties2KHR = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR) load(userptr, "vkGetPhysicalDeviceQueueFamilyProperties2KHR"); + glad_vkGetPhysicalDeviceSparseImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR) load(userptr, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); +} +static void glad_vk_load_VK_KHR_get_surface_capabilities2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_get_surface_capabilities2) return; + glad_vkGetPhysicalDeviceSurfaceCapabilities2KHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR) load(userptr, "vkGetPhysicalDeviceSurfaceCapabilities2KHR"); + glad_vkGetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR) load(userptr, "vkGetPhysicalDeviceSurfaceFormats2KHR"); +} +static void glad_vk_load_VK_KHR_line_rasterization( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_line_rasterization) return; + glad_vkCmdSetLineStippleKHR = (PFN_vkCmdSetLineStippleKHR) load(userptr, "vkCmdSetLineStippleKHR"); +} +static void glad_vk_load_VK_KHR_maintenance1( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_maintenance1) return; + glad_vkTrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR) load(userptr, "vkTrimCommandPoolKHR"); +} +static void glad_vk_load_VK_KHR_maintenance3( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_maintenance3) return; + glad_vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR) load(userptr, "vkGetDescriptorSetLayoutSupportKHR"); +} +static void glad_vk_load_VK_KHR_maintenance4( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_maintenance4) return; + glad_vkGetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR) load(userptr, "vkGetDeviceBufferMemoryRequirementsKHR"); + glad_vkGetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR) load(userptr, "vkGetDeviceImageMemoryRequirementsKHR"); + glad_vkGetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR) load(userptr, "vkGetDeviceImageSparseMemoryRequirementsKHR"); +} +static void glad_vk_load_VK_KHR_maintenance5( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_maintenance5) return; + glad_vkCmdBindIndexBuffer2KHR = (PFN_vkCmdBindIndexBuffer2KHR) load(userptr, "vkCmdBindIndexBuffer2KHR"); + glad_vkGetDeviceImageSubresourceLayoutKHR = (PFN_vkGetDeviceImageSubresourceLayoutKHR) load(userptr, "vkGetDeviceImageSubresourceLayoutKHR"); + glad_vkGetImageSubresourceLayout2KHR = (PFN_vkGetImageSubresourceLayout2KHR) load(userptr, "vkGetImageSubresourceLayout2KHR"); + glad_vkGetRenderingAreaGranularityKHR = (PFN_vkGetRenderingAreaGranularityKHR) load(userptr, "vkGetRenderingAreaGranularityKHR"); +} +static void glad_vk_load_VK_KHR_maintenance6( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_maintenance6) return; + glad_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT = (PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT) load(userptr, "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT"); + glad_vkCmdBindDescriptorSets2KHR = (PFN_vkCmdBindDescriptorSets2KHR) load(userptr, "vkCmdBindDescriptorSets2KHR"); + glad_vkCmdPushConstants2KHR = (PFN_vkCmdPushConstants2KHR) load(userptr, "vkCmdPushConstants2KHR"); + glad_vkCmdPushDescriptorSet2KHR = (PFN_vkCmdPushDescriptorSet2KHR) load(userptr, "vkCmdPushDescriptorSet2KHR"); + glad_vkCmdPushDescriptorSetWithTemplate2KHR = (PFN_vkCmdPushDescriptorSetWithTemplate2KHR) load(userptr, "vkCmdPushDescriptorSetWithTemplate2KHR"); + glad_vkCmdSetDescriptorBufferOffsets2EXT = (PFN_vkCmdSetDescriptorBufferOffsets2EXT) load(userptr, "vkCmdSetDescriptorBufferOffsets2EXT"); +} +static void glad_vk_load_VK_KHR_map_memory2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_map_memory2) return; + glad_vkMapMemory2KHR = (PFN_vkMapMemory2KHR) load(userptr, "vkMapMemory2KHR"); + glad_vkUnmapMemory2KHR = (PFN_vkUnmapMemory2KHR) load(userptr, "vkUnmapMemory2KHR"); +} +static void glad_vk_load_VK_KHR_performance_query( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_performance_query) return; + glad_vkAcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR) load(userptr, "vkAcquireProfilingLockKHR"); + glad_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = (PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR) load(userptr, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"); + glad_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = (PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR) load(userptr, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"); + glad_vkReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR) load(userptr, "vkReleaseProfilingLockKHR"); +} +static void glad_vk_load_VK_KHR_pipeline_binary( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_pipeline_binary) return; + glad_vkCreatePipelineBinariesKHR = (PFN_vkCreatePipelineBinariesKHR) load(userptr, "vkCreatePipelineBinariesKHR"); + glad_vkDestroyPipelineBinaryKHR = (PFN_vkDestroyPipelineBinaryKHR) load(userptr, "vkDestroyPipelineBinaryKHR"); + glad_vkGetPipelineBinaryDataKHR = (PFN_vkGetPipelineBinaryDataKHR) load(userptr, "vkGetPipelineBinaryDataKHR"); + glad_vkGetPipelineKeyKHR = (PFN_vkGetPipelineKeyKHR) load(userptr, "vkGetPipelineKeyKHR"); + glad_vkReleaseCapturedPipelineDataKHR = (PFN_vkReleaseCapturedPipelineDataKHR) load(userptr, "vkReleaseCapturedPipelineDataKHR"); +} +static void glad_vk_load_VK_KHR_pipeline_executable_properties( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_pipeline_executable_properties) return; + glad_vkGetPipelineExecutableInternalRepresentationsKHR = (PFN_vkGetPipelineExecutableInternalRepresentationsKHR) load(userptr, "vkGetPipelineExecutableInternalRepresentationsKHR"); + glad_vkGetPipelineExecutablePropertiesKHR = (PFN_vkGetPipelineExecutablePropertiesKHR) load(userptr, "vkGetPipelineExecutablePropertiesKHR"); + glad_vkGetPipelineExecutableStatisticsKHR = (PFN_vkGetPipelineExecutableStatisticsKHR) load(userptr, "vkGetPipelineExecutableStatisticsKHR"); +} +static void glad_vk_load_VK_KHR_present_wait( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_present_wait) return; + glad_vkWaitForPresentKHR = (PFN_vkWaitForPresentKHR) load(userptr, "vkWaitForPresentKHR"); +} +static void glad_vk_load_VK_KHR_present_wait2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_present_wait2) return; + glad_vkWaitForPresent2KHR = (PFN_vkWaitForPresent2KHR) load(userptr, "vkWaitForPresent2KHR"); +} +static void glad_vk_load_VK_KHR_push_descriptor( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_push_descriptor) return; + glad_vkCmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR) load(userptr, "vkCmdPushDescriptorSetKHR"); + glad_vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR) load(userptr, "vkCmdPushDescriptorSetWithTemplateKHR"); +} +static void glad_vk_load_VK_KHR_ray_tracing_maintenance1( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_ray_tracing_maintenance1) return; + glad_vkCmdTraceRaysIndirect2KHR = (PFN_vkCmdTraceRaysIndirect2KHR) load(userptr, "vkCmdTraceRaysIndirect2KHR"); +} +static void glad_vk_load_VK_KHR_ray_tracing_pipeline( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_ray_tracing_pipeline) return; + glad_vkCmdSetRayTracingPipelineStackSizeKHR = (PFN_vkCmdSetRayTracingPipelineStackSizeKHR) load(userptr, "vkCmdSetRayTracingPipelineStackSizeKHR"); + glad_vkCmdTraceRaysIndirectKHR = (PFN_vkCmdTraceRaysIndirectKHR) load(userptr, "vkCmdTraceRaysIndirectKHR"); + glad_vkCmdTraceRaysKHR = (PFN_vkCmdTraceRaysKHR) load(userptr, "vkCmdTraceRaysKHR"); + glad_vkCreateRayTracingPipelinesKHR = (PFN_vkCreateRayTracingPipelinesKHR) load(userptr, "vkCreateRayTracingPipelinesKHR"); + glad_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = (PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR) load(userptr, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"); + glad_vkGetRayTracingShaderGroupHandlesKHR = (PFN_vkGetRayTracingShaderGroupHandlesKHR) load(userptr, "vkGetRayTracingShaderGroupHandlesKHR"); + glad_vkGetRayTracingShaderGroupStackSizeKHR = (PFN_vkGetRayTracingShaderGroupStackSizeKHR) load(userptr, "vkGetRayTracingShaderGroupStackSizeKHR"); +} +static void glad_vk_load_VK_KHR_sampler_ycbcr_conversion( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_sampler_ycbcr_conversion) return; + glad_vkCreateSamplerYcbcrConversionKHR = (PFN_vkCreateSamplerYcbcrConversionKHR) load(userptr, "vkCreateSamplerYcbcrConversionKHR"); + glad_vkDestroySamplerYcbcrConversionKHR = (PFN_vkDestroySamplerYcbcrConversionKHR) load(userptr, "vkDestroySamplerYcbcrConversionKHR"); +} +static void glad_vk_load_VK_KHR_shared_presentable_image( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_shared_presentable_image) return; + glad_vkGetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR) load(userptr, "vkGetSwapchainStatusKHR"); +} +static void glad_vk_load_VK_KHR_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_surface) return; + glad_vkDestroySurfaceKHR = (PFN_vkDestroySurfaceKHR) load(userptr, "vkDestroySurfaceKHR"); + glad_vkGetPhysicalDeviceSurfaceCapabilitiesKHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR) load(userptr, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"); + glad_vkGetPhysicalDeviceSurfaceFormatsKHR = (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR) load(userptr, "vkGetPhysicalDeviceSurfaceFormatsKHR"); + glad_vkGetPhysicalDeviceSurfacePresentModesKHR = (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR) load(userptr, "vkGetPhysicalDeviceSurfacePresentModesKHR"); + glad_vkGetPhysicalDeviceSurfaceSupportKHR = (PFN_vkGetPhysicalDeviceSurfaceSupportKHR) load(userptr, "vkGetPhysicalDeviceSurfaceSupportKHR"); +} +static void glad_vk_load_VK_KHR_swapchain( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_swapchain) return; + glad_vkAcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR) load(userptr, "vkAcquireNextImage2KHR"); + glad_vkAcquireNextImageKHR = (PFN_vkAcquireNextImageKHR) load(userptr, "vkAcquireNextImageKHR"); + glad_vkCreateSwapchainKHR = (PFN_vkCreateSwapchainKHR) load(userptr, "vkCreateSwapchainKHR"); + glad_vkDestroySwapchainKHR = (PFN_vkDestroySwapchainKHR) load(userptr, "vkDestroySwapchainKHR"); + glad_vkGetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR) load(userptr, "vkGetDeviceGroupPresentCapabilitiesKHR"); + glad_vkGetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR) load(userptr, "vkGetDeviceGroupSurfacePresentModesKHR"); + glad_vkGetPhysicalDevicePresentRectanglesKHR = (PFN_vkGetPhysicalDevicePresentRectanglesKHR) load(userptr, "vkGetPhysicalDevicePresentRectanglesKHR"); + glad_vkGetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR) load(userptr, "vkGetSwapchainImagesKHR"); + glad_vkQueuePresentKHR = (PFN_vkQueuePresentKHR) load(userptr, "vkQueuePresentKHR"); +} +static void glad_vk_load_VK_KHR_swapchain_maintenance1( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_swapchain_maintenance1) return; + glad_vkReleaseSwapchainImagesKHR = (PFN_vkReleaseSwapchainImagesKHR) load(userptr, "vkReleaseSwapchainImagesKHR"); +} +static void glad_vk_load_VK_KHR_synchronization2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_synchronization2) return; + glad_vkCmdPipelineBarrier2KHR = (PFN_vkCmdPipelineBarrier2KHR) load(userptr, "vkCmdPipelineBarrier2KHR"); + glad_vkCmdResetEvent2KHR = (PFN_vkCmdResetEvent2KHR) load(userptr, "vkCmdResetEvent2KHR"); + glad_vkCmdSetEvent2KHR = (PFN_vkCmdSetEvent2KHR) load(userptr, "vkCmdSetEvent2KHR"); + glad_vkCmdWaitEvents2KHR = (PFN_vkCmdWaitEvents2KHR) load(userptr, "vkCmdWaitEvents2KHR"); + glad_vkCmdWriteTimestamp2KHR = (PFN_vkCmdWriteTimestamp2KHR) load(userptr, "vkCmdWriteTimestamp2KHR"); + glad_vkQueueSubmit2KHR = (PFN_vkQueueSubmit2KHR) load(userptr, "vkQueueSubmit2KHR"); +} +static void glad_vk_load_VK_KHR_timeline_semaphore( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_timeline_semaphore) return; + glad_vkGetSemaphoreCounterValueKHR = (PFN_vkGetSemaphoreCounterValueKHR) load(userptr, "vkGetSemaphoreCounterValueKHR"); + glad_vkSignalSemaphoreKHR = (PFN_vkSignalSemaphoreKHR) load(userptr, "vkSignalSemaphoreKHR"); + glad_vkWaitSemaphoresKHR = (PFN_vkWaitSemaphoresKHR) load(userptr, "vkWaitSemaphoresKHR"); +} +static void glad_vk_load_VK_KHR_video_decode_queue( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_video_decode_queue) return; + glad_vkCmdDecodeVideoKHR = (PFN_vkCmdDecodeVideoKHR) load(userptr, "vkCmdDecodeVideoKHR"); +} +static void glad_vk_load_VK_KHR_video_encode_queue( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_video_encode_queue) return; + glad_vkCmdEncodeVideoKHR = (PFN_vkCmdEncodeVideoKHR) load(userptr, "vkCmdEncodeVideoKHR"); + glad_vkGetEncodedVideoSessionParametersKHR = (PFN_vkGetEncodedVideoSessionParametersKHR) load(userptr, "vkGetEncodedVideoSessionParametersKHR"); + glad_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR = (PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR) load(userptr, "vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR"); +} +static void glad_vk_load_VK_KHR_video_queue( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_video_queue) return; + glad_vkBindVideoSessionMemoryKHR = (PFN_vkBindVideoSessionMemoryKHR) load(userptr, "vkBindVideoSessionMemoryKHR"); + glad_vkCmdBeginVideoCodingKHR = (PFN_vkCmdBeginVideoCodingKHR) load(userptr, "vkCmdBeginVideoCodingKHR"); + glad_vkCmdControlVideoCodingKHR = (PFN_vkCmdControlVideoCodingKHR) load(userptr, "vkCmdControlVideoCodingKHR"); + glad_vkCmdEndVideoCodingKHR = (PFN_vkCmdEndVideoCodingKHR) load(userptr, "vkCmdEndVideoCodingKHR"); + glad_vkCreateVideoSessionKHR = (PFN_vkCreateVideoSessionKHR) load(userptr, "vkCreateVideoSessionKHR"); + glad_vkCreateVideoSessionParametersKHR = (PFN_vkCreateVideoSessionParametersKHR) load(userptr, "vkCreateVideoSessionParametersKHR"); + glad_vkDestroyVideoSessionKHR = (PFN_vkDestroyVideoSessionKHR) load(userptr, "vkDestroyVideoSessionKHR"); + glad_vkDestroyVideoSessionParametersKHR = (PFN_vkDestroyVideoSessionParametersKHR) load(userptr, "vkDestroyVideoSessionParametersKHR"); + glad_vkGetPhysicalDeviceVideoCapabilitiesKHR = (PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR) load(userptr, "vkGetPhysicalDeviceVideoCapabilitiesKHR"); + glad_vkGetPhysicalDeviceVideoFormatPropertiesKHR = (PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR) load(userptr, "vkGetPhysicalDeviceVideoFormatPropertiesKHR"); + glad_vkGetVideoSessionMemoryRequirementsKHR = (PFN_vkGetVideoSessionMemoryRequirementsKHR) load(userptr, "vkGetVideoSessionMemoryRequirementsKHR"); + glad_vkUpdateVideoSessionParametersKHR = (PFN_vkUpdateVideoSessionParametersKHR) load(userptr, "vkUpdateVideoSessionParametersKHR"); +} +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +static void glad_vk_load_VK_KHR_wayland_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_wayland_surface) return; + glad_vkCreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR) load(userptr, "vkCreateWaylandSurfaceKHR"); + glad_vkGetPhysicalDeviceWaylandPresentationSupportKHR = (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR) load(userptr, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); +} + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) +static void glad_vk_load_VK_KHR_win32_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_win32_surface) return; + glad_vkCreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR) load(userptr, "vkCreateWin32SurfaceKHR"); + glad_vkGetPhysicalDeviceWin32PresentationSupportKHR = (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR) load(userptr, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); +} + +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) +static void glad_vk_load_VK_KHR_xcb_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_xcb_surface) return; + glad_vkCreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR) load(userptr, "vkCreateXcbSurfaceKHR"); + glad_vkGetPhysicalDeviceXcbPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR) load(userptr, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); +} + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +static void glad_vk_load_VK_KHR_xlib_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_KHR_xlib_surface) return; + glad_vkCreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR) load(userptr, "vkCreateXlibSurfaceKHR"); + glad_vkGetPhysicalDeviceXlibPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR) load(userptr, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); +} + +#endif +#if defined(VK_USE_PLATFORM_IOS_MVK) +static void glad_vk_load_VK_MVK_ios_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_MVK_ios_surface) return; + glad_vkCreateIOSSurfaceMVK = (PFN_vkCreateIOSSurfaceMVK) load(userptr, "vkCreateIOSSurfaceMVK"); +} + +#endif +#if defined(VK_USE_PLATFORM_MACOS_MVK) +static void glad_vk_load_VK_MVK_macos_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_MVK_macos_surface) return; + glad_vkCreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK) load(userptr, "vkCreateMacOSSurfaceMVK"); +} + +#endif +#if defined(VK_USE_PLATFORM_VI_NN) +static void glad_vk_load_VK_NN_vi_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NN_vi_surface) return; + glad_vkCreateViSurfaceNN = (PFN_vkCreateViSurfaceNN) load(userptr, "vkCreateViSurfaceNN"); +} + +#endif +static void glad_vk_load_VK_NVX_binary_import( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NVX_binary_import) return; + glad_vkCmdCuLaunchKernelNVX = (PFN_vkCmdCuLaunchKernelNVX) load(userptr, "vkCmdCuLaunchKernelNVX"); + glad_vkCreateCuFunctionNVX = (PFN_vkCreateCuFunctionNVX) load(userptr, "vkCreateCuFunctionNVX"); + glad_vkCreateCuModuleNVX = (PFN_vkCreateCuModuleNVX) load(userptr, "vkCreateCuModuleNVX"); + glad_vkDestroyCuFunctionNVX = (PFN_vkDestroyCuFunctionNVX) load(userptr, "vkDestroyCuFunctionNVX"); + glad_vkDestroyCuModuleNVX = (PFN_vkDestroyCuModuleNVX) load(userptr, "vkDestroyCuModuleNVX"); +} +static void glad_vk_load_VK_NVX_image_view_handle( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NVX_image_view_handle) return; + glad_vkGetImageViewAddressNVX = (PFN_vkGetImageViewAddressNVX) load(userptr, "vkGetImageViewAddressNVX"); + glad_vkGetImageViewHandle64NVX = (PFN_vkGetImageViewHandle64NVX) load(userptr, "vkGetImageViewHandle64NVX"); + glad_vkGetImageViewHandleNVX = (PFN_vkGetImageViewHandleNVX) load(userptr, "vkGetImageViewHandleNVX"); +} +#if defined(VK_USE_PLATFORM_WIN32_KHR) +static void glad_vk_load_VK_NV_acquire_winrt_display( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_acquire_winrt_display) return; + glad_vkAcquireWinrtDisplayNV = (PFN_vkAcquireWinrtDisplayNV) load(userptr, "vkAcquireWinrtDisplayNV"); + glad_vkGetWinrtDisplayNV = (PFN_vkGetWinrtDisplayNV) load(userptr, "vkGetWinrtDisplayNV"); +} + +#endif +static void glad_vk_load_VK_NV_clip_space_w_scaling( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_clip_space_w_scaling) return; + glad_vkCmdSetViewportWScalingNV = (PFN_vkCmdSetViewportWScalingNV) load(userptr, "vkCmdSetViewportWScalingNV"); +} +static void glad_vk_load_VK_NV_cluster_acceleration_structure( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_cluster_acceleration_structure) return; + glad_vkCmdBuildClusterAccelerationStructureIndirectNV = (PFN_vkCmdBuildClusterAccelerationStructureIndirectNV) load(userptr, "vkCmdBuildClusterAccelerationStructureIndirectNV"); + glad_vkGetClusterAccelerationStructureBuildSizesNV = (PFN_vkGetClusterAccelerationStructureBuildSizesNV) load(userptr, "vkGetClusterAccelerationStructureBuildSizesNV"); +} +static void glad_vk_load_VK_NV_cooperative_matrix( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_cooperative_matrix) return; + glad_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV) load(userptr, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV"); +} +static void glad_vk_load_VK_NV_cooperative_matrix2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_cooperative_matrix2) return; + glad_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV) load(userptr, "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV"); +} +static void glad_vk_load_VK_NV_cooperative_vector( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_cooperative_vector) return; + glad_vkCmdConvertCooperativeVectorMatrixNV = (PFN_vkCmdConvertCooperativeVectorMatrixNV) load(userptr, "vkCmdConvertCooperativeVectorMatrixNV"); + glad_vkConvertCooperativeVectorMatrixNV = (PFN_vkConvertCooperativeVectorMatrixNV) load(userptr, "vkConvertCooperativeVectorMatrixNV"); + glad_vkGetPhysicalDeviceCooperativeVectorPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV) load(userptr, "vkGetPhysicalDeviceCooperativeVectorPropertiesNV"); +} +static void glad_vk_load_VK_NV_copy_memory_indirect( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_copy_memory_indirect) return; + glad_vkCmdCopyMemoryIndirectNV = (PFN_vkCmdCopyMemoryIndirectNV) load(userptr, "vkCmdCopyMemoryIndirectNV"); + glad_vkCmdCopyMemoryToImageIndirectNV = (PFN_vkCmdCopyMemoryToImageIndirectNV) load(userptr, "vkCmdCopyMemoryToImageIndirectNV"); +} +static void glad_vk_load_VK_NV_coverage_reduction_mode( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_coverage_reduction_mode) return; + glad_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = (PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV) load(userptr, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"); +} +#if defined(VK_ENABLE_BETA_EXTENSIONS) +static void glad_vk_load_VK_NV_cuda_kernel_launch( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_cuda_kernel_launch) return; + glad_vkCmdCudaLaunchKernelNV = (PFN_vkCmdCudaLaunchKernelNV) load(userptr, "vkCmdCudaLaunchKernelNV"); + glad_vkCreateCudaFunctionNV = (PFN_vkCreateCudaFunctionNV) load(userptr, "vkCreateCudaFunctionNV"); + glad_vkCreateCudaModuleNV = (PFN_vkCreateCudaModuleNV) load(userptr, "vkCreateCudaModuleNV"); + glad_vkDestroyCudaFunctionNV = (PFN_vkDestroyCudaFunctionNV) load(userptr, "vkDestroyCudaFunctionNV"); + glad_vkDestroyCudaModuleNV = (PFN_vkDestroyCudaModuleNV) load(userptr, "vkDestroyCudaModuleNV"); + glad_vkGetCudaModuleCacheNV = (PFN_vkGetCudaModuleCacheNV) load(userptr, "vkGetCudaModuleCacheNV"); +} + +#endif +static void glad_vk_load_VK_NV_device_diagnostic_checkpoints( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_device_diagnostic_checkpoints) return; + glad_vkCmdSetCheckpointNV = (PFN_vkCmdSetCheckpointNV) load(userptr, "vkCmdSetCheckpointNV"); + glad_vkGetQueueCheckpointData2NV = (PFN_vkGetQueueCheckpointData2NV) load(userptr, "vkGetQueueCheckpointData2NV"); + glad_vkGetQueueCheckpointDataNV = (PFN_vkGetQueueCheckpointDataNV) load(userptr, "vkGetQueueCheckpointDataNV"); +} +static void glad_vk_load_VK_NV_device_generated_commands( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_device_generated_commands) return; + glad_vkCmdBindPipelineShaderGroupNV = (PFN_vkCmdBindPipelineShaderGroupNV) load(userptr, "vkCmdBindPipelineShaderGroupNV"); + glad_vkCmdExecuteGeneratedCommandsNV = (PFN_vkCmdExecuteGeneratedCommandsNV) load(userptr, "vkCmdExecuteGeneratedCommandsNV"); + glad_vkCmdPreprocessGeneratedCommandsNV = (PFN_vkCmdPreprocessGeneratedCommandsNV) load(userptr, "vkCmdPreprocessGeneratedCommandsNV"); + glad_vkCreateIndirectCommandsLayoutNV = (PFN_vkCreateIndirectCommandsLayoutNV) load(userptr, "vkCreateIndirectCommandsLayoutNV"); + glad_vkDestroyIndirectCommandsLayoutNV = (PFN_vkDestroyIndirectCommandsLayoutNV) load(userptr, "vkDestroyIndirectCommandsLayoutNV"); + glad_vkGetGeneratedCommandsMemoryRequirementsNV = (PFN_vkGetGeneratedCommandsMemoryRequirementsNV) load(userptr, "vkGetGeneratedCommandsMemoryRequirementsNV"); +} +static void glad_vk_load_VK_NV_device_generated_commands_compute( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_device_generated_commands_compute) return; + glad_vkCmdUpdatePipelineIndirectBufferNV = (PFN_vkCmdUpdatePipelineIndirectBufferNV) load(userptr, "vkCmdUpdatePipelineIndirectBufferNV"); + glad_vkGetPipelineIndirectDeviceAddressNV = (PFN_vkGetPipelineIndirectDeviceAddressNV) load(userptr, "vkGetPipelineIndirectDeviceAddressNV"); + glad_vkGetPipelineIndirectMemoryRequirementsNV = (PFN_vkGetPipelineIndirectMemoryRequirementsNV) load(userptr, "vkGetPipelineIndirectMemoryRequirementsNV"); +} +static void glad_vk_load_VK_NV_external_compute_queue( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_external_compute_queue) return; + glad_vkCreateExternalComputeQueueNV = (PFN_vkCreateExternalComputeQueueNV) load(userptr, "vkCreateExternalComputeQueueNV"); + glad_vkDestroyExternalComputeQueueNV = (PFN_vkDestroyExternalComputeQueueNV) load(userptr, "vkDestroyExternalComputeQueueNV"); + glad_vkGetExternalComputeQueueDataNV = (PFN_vkGetExternalComputeQueueDataNV) load(userptr, "vkGetExternalComputeQueueDataNV"); +} +static void glad_vk_load_VK_NV_external_memory_capabilities( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_external_memory_capabilities) return; + glad_vkGetPhysicalDeviceExternalImageFormatPropertiesNV = (PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV) load(userptr, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV"); +} +static void glad_vk_load_VK_NV_external_memory_rdma( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_external_memory_rdma) return; + glad_vkGetMemoryRemoteAddressNV = (PFN_vkGetMemoryRemoteAddressNV) load(userptr, "vkGetMemoryRemoteAddressNV"); +} +#if defined(VK_USE_PLATFORM_WIN32_KHR) +static void glad_vk_load_VK_NV_external_memory_win32( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_external_memory_win32) return; + glad_vkGetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV) load(userptr, "vkGetMemoryWin32HandleNV"); +} + +#endif +static void glad_vk_load_VK_NV_fragment_shading_rate_enums( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_fragment_shading_rate_enums) return; + glad_vkCmdSetFragmentShadingRateEnumNV = (PFN_vkCmdSetFragmentShadingRateEnumNV) load(userptr, "vkCmdSetFragmentShadingRateEnumNV"); +} +static void glad_vk_load_VK_NV_low_latency2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_low_latency2) return; + glad_vkGetLatencyTimingsNV = (PFN_vkGetLatencyTimingsNV) load(userptr, "vkGetLatencyTimingsNV"); + glad_vkLatencySleepNV = (PFN_vkLatencySleepNV) load(userptr, "vkLatencySleepNV"); + glad_vkQueueNotifyOutOfBandNV = (PFN_vkQueueNotifyOutOfBandNV) load(userptr, "vkQueueNotifyOutOfBandNV"); + glad_vkSetLatencyMarkerNV = (PFN_vkSetLatencyMarkerNV) load(userptr, "vkSetLatencyMarkerNV"); + glad_vkSetLatencySleepModeNV = (PFN_vkSetLatencySleepModeNV) load(userptr, "vkSetLatencySleepModeNV"); +} +static void glad_vk_load_VK_NV_memory_decompression( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_memory_decompression) return; + glad_vkCmdDecompressMemoryIndirectCountNV = (PFN_vkCmdDecompressMemoryIndirectCountNV) load(userptr, "vkCmdDecompressMemoryIndirectCountNV"); + glad_vkCmdDecompressMemoryNV = (PFN_vkCmdDecompressMemoryNV) load(userptr, "vkCmdDecompressMemoryNV"); +} +static void glad_vk_load_VK_NV_mesh_shader( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_mesh_shader) return; + glad_vkCmdDrawMeshTasksIndirectCountNV = (PFN_vkCmdDrawMeshTasksIndirectCountNV) load(userptr, "vkCmdDrawMeshTasksIndirectCountNV"); + glad_vkCmdDrawMeshTasksIndirectNV = (PFN_vkCmdDrawMeshTasksIndirectNV) load(userptr, "vkCmdDrawMeshTasksIndirectNV"); + glad_vkCmdDrawMeshTasksNV = (PFN_vkCmdDrawMeshTasksNV) load(userptr, "vkCmdDrawMeshTasksNV"); +} +static void glad_vk_load_VK_NV_optical_flow( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_optical_flow) return; + glad_vkBindOpticalFlowSessionImageNV = (PFN_vkBindOpticalFlowSessionImageNV) load(userptr, "vkBindOpticalFlowSessionImageNV"); + glad_vkCmdOpticalFlowExecuteNV = (PFN_vkCmdOpticalFlowExecuteNV) load(userptr, "vkCmdOpticalFlowExecuteNV"); + glad_vkCreateOpticalFlowSessionNV = (PFN_vkCreateOpticalFlowSessionNV) load(userptr, "vkCreateOpticalFlowSessionNV"); + glad_vkDestroyOpticalFlowSessionNV = (PFN_vkDestroyOpticalFlowSessionNV) load(userptr, "vkDestroyOpticalFlowSessionNV"); + glad_vkGetPhysicalDeviceOpticalFlowImageFormatsNV = (PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV) load(userptr, "vkGetPhysicalDeviceOpticalFlowImageFormatsNV"); +} +static void glad_vk_load_VK_NV_partitioned_acceleration_structure( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_partitioned_acceleration_structure) return; + glad_vkCmdBuildPartitionedAccelerationStructuresNV = (PFN_vkCmdBuildPartitionedAccelerationStructuresNV) load(userptr, "vkCmdBuildPartitionedAccelerationStructuresNV"); + glad_vkGetPartitionedAccelerationStructuresBuildSizesNV = (PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV) load(userptr, "vkGetPartitionedAccelerationStructuresBuildSizesNV"); +} +static void glad_vk_load_VK_NV_ray_tracing( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_ray_tracing) return; + glad_vkBindAccelerationStructureMemoryNV = (PFN_vkBindAccelerationStructureMemoryNV) load(userptr, "vkBindAccelerationStructureMemoryNV"); + glad_vkCmdBuildAccelerationStructureNV = (PFN_vkCmdBuildAccelerationStructureNV) load(userptr, "vkCmdBuildAccelerationStructureNV"); + glad_vkCmdCopyAccelerationStructureNV = (PFN_vkCmdCopyAccelerationStructureNV) load(userptr, "vkCmdCopyAccelerationStructureNV"); + glad_vkCmdTraceRaysNV = (PFN_vkCmdTraceRaysNV) load(userptr, "vkCmdTraceRaysNV"); + glad_vkCmdWriteAccelerationStructuresPropertiesNV = (PFN_vkCmdWriteAccelerationStructuresPropertiesNV) load(userptr, "vkCmdWriteAccelerationStructuresPropertiesNV"); + glad_vkCompileDeferredNV = (PFN_vkCompileDeferredNV) load(userptr, "vkCompileDeferredNV"); + glad_vkCreateAccelerationStructureNV = (PFN_vkCreateAccelerationStructureNV) load(userptr, "vkCreateAccelerationStructureNV"); + glad_vkCreateRayTracingPipelinesNV = (PFN_vkCreateRayTracingPipelinesNV) load(userptr, "vkCreateRayTracingPipelinesNV"); + glad_vkDestroyAccelerationStructureNV = (PFN_vkDestroyAccelerationStructureNV) load(userptr, "vkDestroyAccelerationStructureNV"); + glad_vkGetAccelerationStructureHandleNV = (PFN_vkGetAccelerationStructureHandleNV) load(userptr, "vkGetAccelerationStructureHandleNV"); + glad_vkGetAccelerationStructureMemoryRequirementsNV = (PFN_vkGetAccelerationStructureMemoryRequirementsNV) load(userptr, "vkGetAccelerationStructureMemoryRequirementsNV"); + glad_vkGetRayTracingShaderGroupHandlesNV = (PFN_vkGetRayTracingShaderGroupHandlesNV) load(userptr, "vkGetRayTracingShaderGroupHandlesNV"); +} +static void glad_vk_load_VK_NV_scissor_exclusive( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_scissor_exclusive) return; + glad_vkCmdSetExclusiveScissorEnableNV = (PFN_vkCmdSetExclusiveScissorEnableNV) load(userptr, "vkCmdSetExclusiveScissorEnableNV"); + glad_vkCmdSetExclusiveScissorNV = (PFN_vkCmdSetExclusiveScissorNV) load(userptr, "vkCmdSetExclusiveScissorNV"); +} +static void glad_vk_load_VK_NV_shading_rate_image( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_NV_shading_rate_image) return; + glad_vkCmdBindShadingRateImageNV = (PFN_vkCmdBindShadingRateImageNV) load(userptr, "vkCmdBindShadingRateImageNV"); + glad_vkCmdSetCoarseSampleOrderNV = (PFN_vkCmdSetCoarseSampleOrderNV) load(userptr, "vkCmdSetCoarseSampleOrderNV"); + glad_vkCmdSetViewportShadingRatePaletteNV = (PFN_vkCmdSetViewportShadingRatePaletteNV) load(userptr, "vkCmdSetViewportShadingRatePaletteNV"); +} +#if defined(VK_USE_PLATFORM_OHOS) +static void glad_vk_load_VK_OHOS_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_OHOS_surface) return; + glad_vkCreateSurfaceOHOS = (PFN_vkCreateSurfaceOHOS) load(userptr, "vkCreateSurfaceOHOS"); +} + +#endif +static void glad_vk_load_VK_QCOM_tile_memory_heap( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_QCOM_tile_memory_heap) return; + glad_vkCmdBindTileMemoryQCOM = (PFN_vkCmdBindTileMemoryQCOM) load(userptr, "vkCmdBindTileMemoryQCOM"); +} +static void glad_vk_load_VK_QCOM_tile_properties( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_QCOM_tile_properties) return; + glad_vkGetDynamicRenderingTilePropertiesQCOM = (PFN_vkGetDynamicRenderingTilePropertiesQCOM) load(userptr, "vkGetDynamicRenderingTilePropertiesQCOM"); + glad_vkGetFramebufferTilePropertiesQCOM = (PFN_vkGetFramebufferTilePropertiesQCOM) load(userptr, "vkGetFramebufferTilePropertiesQCOM"); +} +static void glad_vk_load_VK_QCOM_tile_shading( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_QCOM_tile_shading) return; + glad_vkCmdBeginPerTileExecutionQCOM = (PFN_vkCmdBeginPerTileExecutionQCOM) load(userptr, "vkCmdBeginPerTileExecutionQCOM"); + glad_vkCmdDispatchTileQCOM = (PFN_vkCmdDispatchTileQCOM) load(userptr, "vkCmdDispatchTileQCOM"); + glad_vkCmdEndPerTileExecutionQCOM = (PFN_vkCmdEndPerTileExecutionQCOM) load(userptr, "vkCmdEndPerTileExecutionQCOM"); +} +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +static void glad_vk_load_VK_QNX_external_memory_screen_buffer( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_QNX_external_memory_screen_buffer) return; + glad_vkGetScreenBufferPropertiesQNX = (PFN_vkGetScreenBufferPropertiesQNX) load(userptr, "vkGetScreenBufferPropertiesQNX"); +} + +#endif +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +static void glad_vk_load_VK_QNX_screen_surface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_QNX_screen_surface) return; + glad_vkCreateScreenSurfaceQNX = (PFN_vkCreateScreenSurfaceQNX) load(userptr, "vkCreateScreenSurfaceQNX"); + glad_vkGetPhysicalDeviceScreenPresentationSupportQNX = (PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX) load(userptr, "vkGetPhysicalDeviceScreenPresentationSupportQNX"); +} + +#endif +static void glad_vk_load_VK_VALVE_descriptor_set_host_mapping( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_VK_VALVE_descriptor_set_host_mapping) return; + glad_vkGetDescriptorSetHostMappingVALVE = (PFN_vkGetDescriptorSetHostMappingVALVE) load(userptr, "vkGetDescriptorSetHostMappingVALVE"); + glad_vkGetDescriptorSetLayoutHostMappingInfoVALVE = (PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE) load(userptr, "vkGetDescriptorSetLayoutHostMappingInfoVALVE"); +} + + +static void glad_vk_resolve_aliases(void) { +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + +#endif + if (glad_vkBindBufferMemory2 == NULL && glad_vkBindBufferMemory2KHR != NULL) glad_vkBindBufferMemory2 = (PFN_vkBindBufferMemory2)glad_vkBindBufferMemory2KHR; + if (glad_vkBindBufferMemory2KHR == NULL && glad_vkBindBufferMemory2 != NULL) glad_vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)glad_vkBindBufferMemory2; + if (glad_vkBindImageMemory2 == NULL && glad_vkBindImageMemory2KHR != NULL) glad_vkBindImageMemory2 = (PFN_vkBindImageMemory2)glad_vkBindImageMemory2KHR; + if (glad_vkBindImageMemory2KHR == NULL && glad_vkBindImageMemory2 != NULL) glad_vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)glad_vkBindImageMemory2; + if (glad_vkCmdBeginRendering == NULL && glad_vkCmdBeginRenderingKHR != NULL) glad_vkCmdBeginRendering = (PFN_vkCmdBeginRendering)glad_vkCmdBeginRenderingKHR; + if (glad_vkCmdBeginRenderingKHR == NULL && glad_vkCmdBeginRendering != NULL) glad_vkCmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR)glad_vkCmdBeginRendering; + if (glad_vkCmdBeginRenderPass2 == NULL && glad_vkCmdBeginRenderPass2KHR != NULL) glad_vkCmdBeginRenderPass2 = (PFN_vkCmdBeginRenderPass2)glad_vkCmdBeginRenderPass2KHR; + if (glad_vkCmdBeginRenderPass2KHR == NULL && glad_vkCmdBeginRenderPass2 != NULL) glad_vkCmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR)glad_vkCmdBeginRenderPass2; + if (glad_vkCmdBindDescriptorSets2 == NULL && glad_vkCmdBindDescriptorSets2KHR != NULL) glad_vkCmdBindDescriptorSets2 = (PFN_vkCmdBindDescriptorSets2)glad_vkCmdBindDescriptorSets2KHR; + if (glad_vkCmdBindDescriptorSets2KHR == NULL && glad_vkCmdBindDescriptorSets2 != NULL) glad_vkCmdBindDescriptorSets2KHR = (PFN_vkCmdBindDescriptorSets2KHR)glad_vkCmdBindDescriptorSets2; + if (glad_vkCmdBindIndexBuffer2 == NULL && glad_vkCmdBindIndexBuffer2KHR != NULL) glad_vkCmdBindIndexBuffer2 = (PFN_vkCmdBindIndexBuffer2)glad_vkCmdBindIndexBuffer2KHR; + if (glad_vkCmdBindIndexBuffer2KHR == NULL && glad_vkCmdBindIndexBuffer2 != NULL) glad_vkCmdBindIndexBuffer2KHR = (PFN_vkCmdBindIndexBuffer2KHR)glad_vkCmdBindIndexBuffer2; + if (glad_vkCmdBindVertexBuffers2 == NULL && glad_vkCmdBindVertexBuffers2EXT != NULL) glad_vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)glad_vkCmdBindVertexBuffers2EXT; + if (glad_vkCmdBindVertexBuffers2EXT == NULL && glad_vkCmdBindVertexBuffers2 != NULL) glad_vkCmdBindVertexBuffers2EXT = (PFN_vkCmdBindVertexBuffers2EXT)glad_vkCmdBindVertexBuffers2; + if (glad_vkCmdBlitImage2 == NULL && glad_vkCmdBlitImage2KHR != NULL) glad_vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)glad_vkCmdBlitImage2KHR; + if (glad_vkCmdBlitImage2KHR == NULL && glad_vkCmdBlitImage2 != NULL) glad_vkCmdBlitImage2KHR = (PFN_vkCmdBlitImage2KHR)glad_vkCmdBlitImage2; + if (glad_vkCmdCopyBuffer2 == NULL && glad_vkCmdCopyBuffer2KHR != NULL) glad_vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)glad_vkCmdCopyBuffer2KHR; + if (glad_vkCmdCopyBuffer2KHR == NULL && glad_vkCmdCopyBuffer2 != NULL) glad_vkCmdCopyBuffer2KHR = (PFN_vkCmdCopyBuffer2KHR)glad_vkCmdCopyBuffer2; + if (glad_vkCmdCopyBufferToImage2 == NULL && glad_vkCmdCopyBufferToImage2KHR != NULL) glad_vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)glad_vkCmdCopyBufferToImage2KHR; + if (glad_vkCmdCopyBufferToImage2KHR == NULL && glad_vkCmdCopyBufferToImage2 != NULL) glad_vkCmdCopyBufferToImage2KHR = (PFN_vkCmdCopyBufferToImage2KHR)glad_vkCmdCopyBufferToImage2; + if (glad_vkCmdCopyImage2 == NULL && glad_vkCmdCopyImage2KHR != NULL) glad_vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)glad_vkCmdCopyImage2KHR; + if (glad_vkCmdCopyImage2KHR == NULL && glad_vkCmdCopyImage2 != NULL) glad_vkCmdCopyImage2KHR = (PFN_vkCmdCopyImage2KHR)glad_vkCmdCopyImage2; + if (glad_vkCmdCopyImageToBuffer2 == NULL && glad_vkCmdCopyImageToBuffer2KHR != NULL) glad_vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)glad_vkCmdCopyImageToBuffer2KHR; + if (glad_vkCmdCopyImageToBuffer2KHR == NULL && glad_vkCmdCopyImageToBuffer2 != NULL) glad_vkCmdCopyImageToBuffer2KHR = (PFN_vkCmdCopyImageToBuffer2KHR)glad_vkCmdCopyImageToBuffer2; +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif + if (glad_vkCmdDispatchBase == NULL && glad_vkCmdDispatchBaseKHR != NULL) glad_vkCmdDispatchBase = (PFN_vkCmdDispatchBase)glad_vkCmdDispatchBaseKHR; + if (glad_vkCmdDispatchBaseKHR == NULL && glad_vkCmdDispatchBase != NULL) glad_vkCmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR)glad_vkCmdDispatchBase; +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif + if (glad_vkCmdDrawIndexedIndirectCount == NULL && glad_vkCmdDrawIndexedIndirectCountAMD != NULL) glad_vkCmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount)glad_vkCmdDrawIndexedIndirectCountAMD; + if (glad_vkCmdDrawIndexedIndirectCount == NULL && glad_vkCmdDrawIndexedIndirectCountKHR != NULL) glad_vkCmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount)glad_vkCmdDrawIndexedIndirectCountKHR; + if (glad_vkCmdDrawIndexedIndirectCountAMD == NULL && glad_vkCmdDrawIndexedIndirectCount != NULL) glad_vkCmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)glad_vkCmdDrawIndexedIndirectCount; + if (glad_vkCmdDrawIndexedIndirectCountAMD == NULL && glad_vkCmdDrawIndexedIndirectCountKHR != NULL) glad_vkCmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)glad_vkCmdDrawIndexedIndirectCountKHR; + if (glad_vkCmdDrawIndexedIndirectCountKHR == NULL && glad_vkCmdDrawIndexedIndirectCount != NULL) glad_vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)glad_vkCmdDrawIndexedIndirectCount; + if (glad_vkCmdDrawIndexedIndirectCountKHR == NULL && glad_vkCmdDrawIndexedIndirectCountAMD != NULL) glad_vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)glad_vkCmdDrawIndexedIndirectCountAMD; + if (glad_vkCmdDrawIndirectCount == NULL && glad_vkCmdDrawIndirectCountAMD != NULL) glad_vkCmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount)glad_vkCmdDrawIndirectCountAMD; + if (glad_vkCmdDrawIndirectCount == NULL && glad_vkCmdDrawIndirectCountKHR != NULL) glad_vkCmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount)glad_vkCmdDrawIndirectCountKHR; + if (glad_vkCmdDrawIndirectCountAMD == NULL && glad_vkCmdDrawIndirectCount != NULL) glad_vkCmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)glad_vkCmdDrawIndirectCount; + if (glad_vkCmdDrawIndirectCountAMD == NULL && glad_vkCmdDrawIndirectCountKHR != NULL) glad_vkCmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)glad_vkCmdDrawIndirectCountKHR; + if (glad_vkCmdDrawIndirectCountKHR == NULL && glad_vkCmdDrawIndirectCount != NULL) glad_vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)glad_vkCmdDrawIndirectCount; + if (glad_vkCmdDrawIndirectCountKHR == NULL && glad_vkCmdDrawIndirectCountAMD != NULL) glad_vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)glad_vkCmdDrawIndirectCountAMD; + if (glad_vkCmdEndRendering == NULL && glad_vkCmdEndRenderingKHR != NULL) glad_vkCmdEndRendering = (PFN_vkCmdEndRendering)glad_vkCmdEndRenderingKHR; + if (glad_vkCmdEndRenderingKHR == NULL && glad_vkCmdEndRendering != NULL) glad_vkCmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)glad_vkCmdEndRendering; + if (glad_vkCmdEndRenderPass2 == NULL && glad_vkCmdEndRenderPass2KHR != NULL) glad_vkCmdEndRenderPass2 = (PFN_vkCmdEndRenderPass2)glad_vkCmdEndRenderPass2KHR; + if (glad_vkCmdEndRenderPass2KHR == NULL && glad_vkCmdEndRenderPass2 != NULL) glad_vkCmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR)glad_vkCmdEndRenderPass2; +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif + if (glad_vkCmdNextSubpass2 == NULL && glad_vkCmdNextSubpass2KHR != NULL) glad_vkCmdNextSubpass2 = (PFN_vkCmdNextSubpass2)glad_vkCmdNextSubpass2KHR; + if (glad_vkCmdNextSubpass2KHR == NULL && glad_vkCmdNextSubpass2 != NULL) glad_vkCmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR)glad_vkCmdNextSubpass2; + if (glad_vkCmdPipelineBarrier2 == NULL && glad_vkCmdPipelineBarrier2KHR != NULL) glad_vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)glad_vkCmdPipelineBarrier2KHR; + if (glad_vkCmdPipelineBarrier2KHR == NULL && glad_vkCmdPipelineBarrier2 != NULL) glad_vkCmdPipelineBarrier2KHR = (PFN_vkCmdPipelineBarrier2KHR)glad_vkCmdPipelineBarrier2; + if (glad_vkCmdPushConstants2 == NULL && glad_vkCmdPushConstants2KHR != NULL) glad_vkCmdPushConstants2 = (PFN_vkCmdPushConstants2)glad_vkCmdPushConstants2KHR; + if (glad_vkCmdPushConstants2KHR == NULL && glad_vkCmdPushConstants2 != NULL) glad_vkCmdPushConstants2KHR = (PFN_vkCmdPushConstants2KHR)glad_vkCmdPushConstants2; + if (glad_vkCmdPushDescriptorSet == NULL && glad_vkCmdPushDescriptorSetKHR != NULL) glad_vkCmdPushDescriptorSet = (PFN_vkCmdPushDescriptorSet)glad_vkCmdPushDescriptorSetKHR; + if (glad_vkCmdPushDescriptorSet2 == NULL && glad_vkCmdPushDescriptorSet2KHR != NULL) glad_vkCmdPushDescriptorSet2 = (PFN_vkCmdPushDescriptorSet2)glad_vkCmdPushDescriptorSet2KHR; + if (glad_vkCmdPushDescriptorSet2KHR == NULL && glad_vkCmdPushDescriptorSet2 != NULL) glad_vkCmdPushDescriptorSet2KHR = (PFN_vkCmdPushDescriptorSet2KHR)glad_vkCmdPushDescriptorSet2; + if (glad_vkCmdPushDescriptorSetKHR == NULL && glad_vkCmdPushDescriptorSet != NULL) glad_vkCmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR)glad_vkCmdPushDescriptorSet; + if (glad_vkCmdPushDescriptorSetWithTemplate == NULL && glad_vkCmdPushDescriptorSetWithTemplateKHR != NULL) glad_vkCmdPushDescriptorSetWithTemplate = (PFN_vkCmdPushDescriptorSetWithTemplate)glad_vkCmdPushDescriptorSetWithTemplateKHR; + if (glad_vkCmdPushDescriptorSetWithTemplate2 == NULL && glad_vkCmdPushDescriptorSetWithTemplate2KHR != NULL) glad_vkCmdPushDescriptorSetWithTemplate2 = (PFN_vkCmdPushDescriptorSetWithTemplate2)glad_vkCmdPushDescriptorSetWithTemplate2KHR; + if (glad_vkCmdPushDescriptorSetWithTemplate2KHR == NULL && glad_vkCmdPushDescriptorSetWithTemplate2 != NULL) glad_vkCmdPushDescriptorSetWithTemplate2KHR = (PFN_vkCmdPushDescriptorSetWithTemplate2KHR)glad_vkCmdPushDescriptorSetWithTemplate2; + if (glad_vkCmdPushDescriptorSetWithTemplateKHR == NULL && glad_vkCmdPushDescriptorSetWithTemplate != NULL) glad_vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)glad_vkCmdPushDescriptorSetWithTemplate; + if (glad_vkCmdResetEvent2 == NULL && glad_vkCmdResetEvent2KHR != NULL) glad_vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)glad_vkCmdResetEvent2KHR; + if (glad_vkCmdResetEvent2KHR == NULL && glad_vkCmdResetEvent2 != NULL) glad_vkCmdResetEvent2KHR = (PFN_vkCmdResetEvent2KHR)glad_vkCmdResetEvent2; + if (glad_vkCmdResolveImage2 == NULL && glad_vkCmdResolveImage2KHR != NULL) glad_vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)glad_vkCmdResolveImage2KHR; + if (glad_vkCmdResolveImage2KHR == NULL && glad_vkCmdResolveImage2 != NULL) glad_vkCmdResolveImage2KHR = (PFN_vkCmdResolveImage2KHR)glad_vkCmdResolveImage2; + if (glad_vkCmdSetCullMode == NULL && glad_vkCmdSetCullModeEXT != NULL) glad_vkCmdSetCullMode = (PFN_vkCmdSetCullMode)glad_vkCmdSetCullModeEXT; + if (glad_vkCmdSetCullModeEXT == NULL && glad_vkCmdSetCullMode != NULL) glad_vkCmdSetCullModeEXT = (PFN_vkCmdSetCullModeEXT)glad_vkCmdSetCullMode; + if (glad_vkCmdSetDepthBiasEnable == NULL && glad_vkCmdSetDepthBiasEnableEXT != NULL) glad_vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)glad_vkCmdSetDepthBiasEnableEXT; + if (glad_vkCmdSetDepthBiasEnableEXT == NULL && glad_vkCmdSetDepthBiasEnable != NULL) glad_vkCmdSetDepthBiasEnableEXT = (PFN_vkCmdSetDepthBiasEnableEXT)glad_vkCmdSetDepthBiasEnable; + if (glad_vkCmdSetDepthBoundsTestEnable == NULL && glad_vkCmdSetDepthBoundsTestEnableEXT != NULL) glad_vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)glad_vkCmdSetDepthBoundsTestEnableEXT; + if (glad_vkCmdSetDepthBoundsTestEnableEXT == NULL && glad_vkCmdSetDepthBoundsTestEnable != NULL) glad_vkCmdSetDepthBoundsTestEnableEXT = (PFN_vkCmdSetDepthBoundsTestEnableEXT)glad_vkCmdSetDepthBoundsTestEnable; + if (glad_vkCmdSetDepthCompareOp == NULL && glad_vkCmdSetDepthCompareOpEXT != NULL) glad_vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)glad_vkCmdSetDepthCompareOpEXT; + if (glad_vkCmdSetDepthCompareOpEXT == NULL && glad_vkCmdSetDepthCompareOp != NULL) glad_vkCmdSetDepthCompareOpEXT = (PFN_vkCmdSetDepthCompareOpEXT)glad_vkCmdSetDepthCompareOp; + if (glad_vkCmdSetDepthTestEnable == NULL && glad_vkCmdSetDepthTestEnableEXT != NULL) glad_vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)glad_vkCmdSetDepthTestEnableEXT; + if (glad_vkCmdSetDepthTestEnableEXT == NULL && glad_vkCmdSetDepthTestEnable != NULL) glad_vkCmdSetDepthTestEnableEXT = (PFN_vkCmdSetDepthTestEnableEXT)glad_vkCmdSetDepthTestEnable; + if (glad_vkCmdSetDepthWriteEnable == NULL && glad_vkCmdSetDepthWriteEnableEXT != NULL) glad_vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)glad_vkCmdSetDepthWriteEnableEXT; + if (glad_vkCmdSetDepthWriteEnableEXT == NULL && glad_vkCmdSetDepthWriteEnable != NULL) glad_vkCmdSetDepthWriteEnableEXT = (PFN_vkCmdSetDepthWriteEnableEXT)glad_vkCmdSetDepthWriteEnable; + if (glad_vkCmdSetDeviceMask == NULL && glad_vkCmdSetDeviceMaskKHR != NULL) glad_vkCmdSetDeviceMask = (PFN_vkCmdSetDeviceMask)glad_vkCmdSetDeviceMaskKHR; + if (glad_vkCmdSetDeviceMaskKHR == NULL && glad_vkCmdSetDeviceMask != NULL) glad_vkCmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR)glad_vkCmdSetDeviceMask; + if (glad_vkCmdSetEvent2 == NULL && glad_vkCmdSetEvent2KHR != NULL) glad_vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)glad_vkCmdSetEvent2KHR; + if (glad_vkCmdSetEvent2KHR == NULL && glad_vkCmdSetEvent2 != NULL) glad_vkCmdSetEvent2KHR = (PFN_vkCmdSetEvent2KHR)glad_vkCmdSetEvent2; + if (glad_vkCmdSetFrontFace == NULL && glad_vkCmdSetFrontFaceEXT != NULL) glad_vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)glad_vkCmdSetFrontFaceEXT; + if (glad_vkCmdSetFrontFaceEXT == NULL && glad_vkCmdSetFrontFace != NULL) glad_vkCmdSetFrontFaceEXT = (PFN_vkCmdSetFrontFaceEXT)glad_vkCmdSetFrontFace; + if (glad_vkCmdSetLineStipple == NULL && glad_vkCmdSetLineStippleEXT != NULL) glad_vkCmdSetLineStipple = (PFN_vkCmdSetLineStipple)glad_vkCmdSetLineStippleEXT; + if (glad_vkCmdSetLineStipple == NULL && glad_vkCmdSetLineStippleKHR != NULL) glad_vkCmdSetLineStipple = (PFN_vkCmdSetLineStipple)glad_vkCmdSetLineStippleKHR; + if (glad_vkCmdSetLineStippleEXT == NULL && glad_vkCmdSetLineStipple != NULL) glad_vkCmdSetLineStippleEXT = (PFN_vkCmdSetLineStippleEXT)glad_vkCmdSetLineStipple; + if (glad_vkCmdSetLineStippleEXT == NULL && glad_vkCmdSetLineStippleKHR != NULL) glad_vkCmdSetLineStippleEXT = (PFN_vkCmdSetLineStippleEXT)glad_vkCmdSetLineStippleKHR; + if (glad_vkCmdSetLineStippleKHR == NULL && glad_vkCmdSetLineStipple != NULL) glad_vkCmdSetLineStippleKHR = (PFN_vkCmdSetLineStippleKHR)glad_vkCmdSetLineStipple; + if (glad_vkCmdSetLineStippleKHR == NULL && glad_vkCmdSetLineStippleEXT != NULL) glad_vkCmdSetLineStippleKHR = (PFN_vkCmdSetLineStippleKHR)glad_vkCmdSetLineStippleEXT; + if (glad_vkCmdSetPrimitiveRestartEnable == NULL && glad_vkCmdSetPrimitiveRestartEnableEXT != NULL) glad_vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)glad_vkCmdSetPrimitiveRestartEnableEXT; + if (glad_vkCmdSetPrimitiveRestartEnableEXT == NULL && glad_vkCmdSetPrimitiveRestartEnable != NULL) glad_vkCmdSetPrimitiveRestartEnableEXT = (PFN_vkCmdSetPrimitiveRestartEnableEXT)glad_vkCmdSetPrimitiveRestartEnable; + if (glad_vkCmdSetPrimitiveTopology == NULL && glad_vkCmdSetPrimitiveTopologyEXT != NULL) glad_vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)glad_vkCmdSetPrimitiveTopologyEXT; + if (glad_vkCmdSetPrimitiveTopologyEXT == NULL && glad_vkCmdSetPrimitiveTopology != NULL) glad_vkCmdSetPrimitiveTopologyEXT = (PFN_vkCmdSetPrimitiveTopologyEXT)glad_vkCmdSetPrimitiveTopology; + if (glad_vkCmdSetRasterizerDiscardEnable == NULL && glad_vkCmdSetRasterizerDiscardEnableEXT != NULL) glad_vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)glad_vkCmdSetRasterizerDiscardEnableEXT; + if (glad_vkCmdSetRasterizerDiscardEnableEXT == NULL && glad_vkCmdSetRasterizerDiscardEnable != NULL) glad_vkCmdSetRasterizerDiscardEnableEXT = (PFN_vkCmdSetRasterizerDiscardEnableEXT)glad_vkCmdSetRasterizerDiscardEnable; + if (glad_vkCmdSetRenderingAttachmentLocations == NULL && glad_vkCmdSetRenderingAttachmentLocationsKHR != NULL) glad_vkCmdSetRenderingAttachmentLocations = (PFN_vkCmdSetRenderingAttachmentLocations)glad_vkCmdSetRenderingAttachmentLocationsKHR; + if (glad_vkCmdSetRenderingAttachmentLocationsKHR == NULL && glad_vkCmdSetRenderingAttachmentLocations != NULL) glad_vkCmdSetRenderingAttachmentLocationsKHR = (PFN_vkCmdSetRenderingAttachmentLocationsKHR)glad_vkCmdSetRenderingAttachmentLocations; + if (glad_vkCmdSetRenderingInputAttachmentIndices == NULL && glad_vkCmdSetRenderingInputAttachmentIndicesKHR != NULL) glad_vkCmdSetRenderingInputAttachmentIndices = (PFN_vkCmdSetRenderingInputAttachmentIndices)glad_vkCmdSetRenderingInputAttachmentIndicesKHR; + if (glad_vkCmdSetRenderingInputAttachmentIndicesKHR == NULL && glad_vkCmdSetRenderingInputAttachmentIndices != NULL) glad_vkCmdSetRenderingInputAttachmentIndicesKHR = (PFN_vkCmdSetRenderingInputAttachmentIndicesKHR)glad_vkCmdSetRenderingInputAttachmentIndices; + if (glad_vkCmdSetScissorWithCount == NULL && glad_vkCmdSetScissorWithCountEXT != NULL) glad_vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)glad_vkCmdSetScissorWithCountEXT; + if (glad_vkCmdSetScissorWithCountEXT == NULL && glad_vkCmdSetScissorWithCount != NULL) glad_vkCmdSetScissorWithCountEXT = (PFN_vkCmdSetScissorWithCountEXT)glad_vkCmdSetScissorWithCount; + if (glad_vkCmdSetStencilOp == NULL && glad_vkCmdSetStencilOpEXT != NULL) glad_vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)glad_vkCmdSetStencilOpEXT; + if (glad_vkCmdSetStencilOpEXT == NULL && glad_vkCmdSetStencilOp != NULL) glad_vkCmdSetStencilOpEXT = (PFN_vkCmdSetStencilOpEXT)glad_vkCmdSetStencilOp; + if (glad_vkCmdSetStencilTestEnable == NULL && glad_vkCmdSetStencilTestEnableEXT != NULL) glad_vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)glad_vkCmdSetStencilTestEnableEXT; + if (glad_vkCmdSetStencilTestEnableEXT == NULL && glad_vkCmdSetStencilTestEnable != NULL) glad_vkCmdSetStencilTestEnableEXT = (PFN_vkCmdSetStencilTestEnableEXT)glad_vkCmdSetStencilTestEnable; + if (glad_vkCmdSetViewportWithCount == NULL && glad_vkCmdSetViewportWithCountEXT != NULL) glad_vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)glad_vkCmdSetViewportWithCountEXT; + if (glad_vkCmdSetViewportWithCountEXT == NULL && glad_vkCmdSetViewportWithCount != NULL) glad_vkCmdSetViewportWithCountEXT = (PFN_vkCmdSetViewportWithCountEXT)glad_vkCmdSetViewportWithCount; + if (glad_vkCmdWaitEvents2 == NULL && glad_vkCmdWaitEvents2KHR != NULL) glad_vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)glad_vkCmdWaitEvents2KHR; + if (glad_vkCmdWaitEvents2KHR == NULL && glad_vkCmdWaitEvents2 != NULL) glad_vkCmdWaitEvents2KHR = (PFN_vkCmdWaitEvents2KHR)glad_vkCmdWaitEvents2; + if (glad_vkCmdWriteTimestamp2 == NULL && glad_vkCmdWriteTimestamp2KHR != NULL) glad_vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)glad_vkCmdWriteTimestamp2KHR; + if (glad_vkCmdWriteTimestamp2KHR == NULL && glad_vkCmdWriteTimestamp2 != NULL) glad_vkCmdWriteTimestamp2KHR = (PFN_vkCmdWriteTimestamp2KHR)glad_vkCmdWriteTimestamp2; + if (glad_vkCopyImageToImage == NULL && glad_vkCopyImageToImageEXT != NULL) glad_vkCopyImageToImage = (PFN_vkCopyImageToImage)glad_vkCopyImageToImageEXT; + if (glad_vkCopyImageToImageEXT == NULL && glad_vkCopyImageToImage != NULL) glad_vkCopyImageToImageEXT = (PFN_vkCopyImageToImageEXT)glad_vkCopyImageToImage; + if (glad_vkCopyImageToMemory == NULL && glad_vkCopyImageToMemoryEXT != NULL) glad_vkCopyImageToMemory = (PFN_vkCopyImageToMemory)glad_vkCopyImageToMemoryEXT; + if (glad_vkCopyImageToMemoryEXT == NULL && glad_vkCopyImageToMemory != NULL) glad_vkCopyImageToMemoryEXT = (PFN_vkCopyImageToMemoryEXT)glad_vkCopyImageToMemory; + if (glad_vkCopyMemoryToImage == NULL && glad_vkCopyMemoryToImageEXT != NULL) glad_vkCopyMemoryToImage = (PFN_vkCopyMemoryToImage)glad_vkCopyMemoryToImageEXT; + if (glad_vkCopyMemoryToImageEXT == NULL && glad_vkCopyMemoryToImage != NULL) glad_vkCopyMemoryToImageEXT = (PFN_vkCopyMemoryToImageEXT)glad_vkCopyMemoryToImage; +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif + if (glad_vkCreateDescriptorUpdateTemplate == NULL && glad_vkCreateDescriptorUpdateTemplateKHR != NULL) glad_vkCreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate)glad_vkCreateDescriptorUpdateTemplateKHR; + if (glad_vkCreateDescriptorUpdateTemplateKHR == NULL && glad_vkCreateDescriptorUpdateTemplate != NULL) glad_vkCreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR)glad_vkCreateDescriptorUpdateTemplate; +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + +#endif +#if defined(VK_USE_PLATFORM_IOS_MVK) + +#endif +#if defined(VK_USE_PLATFORM_MACOS_MVK) + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) + +#endif + if (glad_vkCreatePrivateDataSlot == NULL && glad_vkCreatePrivateDataSlotEXT != NULL) glad_vkCreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot)glad_vkCreatePrivateDataSlotEXT; + if (glad_vkCreatePrivateDataSlotEXT == NULL && glad_vkCreatePrivateDataSlot != NULL) glad_vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)glad_vkCreatePrivateDataSlot; + if (glad_vkCreateRenderPass2 == NULL && glad_vkCreateRenderPass2KHR != NULL) glad_vkCreateRenderPass2 = (PFN_vkCreateRenderPass2)glad_vkCreateRenderPass2KHR; + if (glad_vkCreateRenderPass2KHR == NULL && glad_vkCreateRenderPass2 != NULL) glad_vkCreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR)glad_vkCreateRenderPass2; + if (glad_vkCreateSamplerYcbcrConversion == NULL && glad_vkCreateSamplerYcbcrConversionKHR != NULL) glad_vkCreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion)glad_vkCreateSamplerYcbcrConversionKHR; + if (glad_vkCreateSamplerYcbcrConversionKHR == NULL && glad_vkCreateSamplerYcbcrConversion != NULL) glad_vkCreateSamplerYcbcrConversionKHR = (PFN_vkCreateSamplerYcbcrConversionKHR)glad_vkCreateSamplerYcbcrConversion; +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + +#endif +#if defined(VK_USE_PLATFORM_GGP) + +#endif +#if defined(VK_USE_PLATFORM_OHOS) + +#endif +#if defined(VK_USE_PLATFORM_VI_NN) + +#endif +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif + if (glad_vkDestroyDescriptorUpdateTemplate == NULL && glad_vkDestroyDescriptorUpdateTemplateKHR != NULL) glad_vkDestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate)glad_vkDestroyDescriptorUpdateTemplateKHR; + if (glad_vkDestroyDescriptorUpdateTemplateKHR == NULL && glad_vkDestroyDescriptorUpdateTemplate != NULL) glad_vkDestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR)glad_vkDestroyDescriptorUpdateTemplate; + if (glad_vkDestroyPrivateDataSlot == NULL && glad_vkDestroyPrivateDataSlotEXT != NULL) glad_vkDestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot)glad_vkDestroyPrivateDataSlotEXT; + if (glad_vkDestroyPrivateDataSlotEXT == NULL && glad_vkDestroyPrivateDataSlot != NULL) glad_vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)glad_vkDestroyPrivateDataSlot; + if (glad_vkDestroySamplerYcbcrConversion == NULL && glad_vkDestroySamplerYcbcrConversionKHR != NULL) glad_vkDestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion)glad_vkDestroySamplerYcbcrConversionKHR; + if (glad_vkDestroySamplerYcbcrConversionKHR == NULL && glad_vkDestroySamplerYcbcrConversion != NULL) glad_vkDestroySamplerYcbcrConversionKHR = (PFN_vkDestroySamplerYcbcrConversionKHR)glad_vkDestroySamplerYcbcrConversion; + if (glad_vkEnumeratePhysicalDeviceGroups == NULL && glad_vkEnumeratePhysicalDeviceGroupsKHR != NULL) glad_vkEnumeratePhysicalDeviceGroups = (PFN_vkEnumeratePhysicalDeviceGroups)glad_vkEnumeratePhysicalDeviceGroupsKHR; + if (glad_vkEnumeratePhysicalDeviceGroupsKHR == NULL && glad_vkEnumeratePhysicalDeviceGroups != NULL) glad_vkEnumeratePhysicalDeviceGroupsKHR = (PFN_vkEnumeratePhysicalDeviceGroupsKHR)glad_vkEnumeratePhysicalDeviceGroups; +#if defined(VK_USE_PLATFORM_METAL_EXT) + +#endif +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + +#endif + if (glad_vkGetBufferDeviceAddress == NULL && glad_vkGetBufferDeviceAddressEXT != NULL) glad_vkGetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)glad_vkGetBufferDeviceAddressEXT; + if (glad_vkGetBufferDeviceAddress == NULL && glad_vkGetBufferDeviceAddressKHR != NULL) glad_vkGetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)glad_vkGetBufferDeviceAddressKHR; + if (glad_vkGetBufferDeviceAddressEXT == NULL && glad_vkGetBufferDeviceAddress != NULL) glad_vkGetBufferDeviceAddressEXT = (PFN_vkGetBufferDeviceAddressEXT)glad_vkGetBufferDeviceAddress; + if (glad_vkGetBufferDeviceAddressEXT == NULL && glad_vkGetBufferDeviceAddressKHR != NULL) glad_vkGetBufferDeviceAddressEXT = (PFN_vkGetBufferDeviceAddressEXT)glad_vkGetBufferDeviceAddressKHR; + if (glad_vkGetBufferDeviceAddressKHR == NULL && glad_vkGetBufferDeviceAddress != NULL) glad_vkGetBufferDeviceAddressKHR = (PFN_vkGetBufferDeviceAddressKHR)glad_vkGetBufferDeviceAddress; + if (glad_vkGetBufferDeviceAddressKHR == NULL && glad_vkGetBufferDeviceAddressEXT != NULL) glad_vkGetBufferDeviceAddressKHR = (PFN_vkGetBufferDeviceAddressKHR)glad_vkGetBufferDeviceAddressEXT; + if (glad_vkGetBufferMemoryRequirements2 == NULL && glad_vkGetBufferMemoryRequirements2KHR != NULL) glad_vkGetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2)glad_vkGetBufferMemoryRequirements2KHR; + if (glad_vkGetBufferMemoryRequirements2KHR == NULL && glad_vkGetBufferMemoryRequirements2 != NULL) glad_vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR)glad_vkGetBufferMemoryRequirements2; + if (glad_vkGetBufferOpaqueCaptureAddress == NULL && glad_vkGetBufferOpaqueCaptureAddressKHR != NULL) glad_vkGetBufferOpaqueCaptureAddress = (PFN_vkGetBufferOpaqueCaptureAddress)glad_vkGetBufferOpaqueCaptureAddressKHR; + if (glad_vkGetBufferOpaqueCaptureAddressKHR == NULL && glad_vkGetBufferOpaqueCaptureAddress != NULL) glad_vkGetBufferOpaqueCaptureAddressKHR = (PFN_vkGetBufferOpaqueCaptureAddressKHR)glad_vkGetBufferOpaqueCaptureAddress; + if (glad_vkGetCalibratedTimestampsEXT == NULL && glad_vkGetCalibratedTimestampsKHR != NULL) glad_vkGetCalibratedTimestampsEXT = (PFN_vkGetCalibratedTimestampsEXT)glad_vkGetCalibratedTimestampsKHR; + if (glad_vkGetCalibratedTimestampsKHR == NULL && glad_vkGetCalibratedTimestampsEXT != NULL) glad_vkGetCalibratedTimestampsKHR = (PFN_vkGetCalibratedTimestampsKHR)glad_vkGetCalibratedTimestampsEXT; +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif + if (glad_vkGetDescriptorSetLayoutSupport == NULL && glad_vkGetDescriptorSetLayoutSupportKHR != NULL) glad_vkGetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport)glad_vkGetDescriptorSetLayoutSupportKHR; + if (glad_vkGetDescriptorSetLayoutSupportKHR == NULL && glad_vkGetDescriptorSetLayoutSupport != NULL) glad_vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)glad_vkGetDescriptorSetLayoutSupport; + if (glad_vkGetDeviceBufferMemoryRequirements == NULL && glad_vkGetDeviceBufferMemoryRequirementsKHR != NULL) glad_vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)glad_vkGetDeviceBufferMemoryRequirementsKHR; + if (glad_vkGetDeviceBufferMemoryRequirementsKHR == NULL && glad_vkGetDeviceBufferMemoryRequirements != NULL) glad_vkGetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)glad_vkGetDeviceBufferMemoryRequirements; + if (glad_vkGetDeviceGroupPeerMemoryFeatures == NULL && glad_vkGetDeviceGroupPeerMemoryFeaturesKHR != NULL) glad_vkGetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures)glad_vkGetDeviceGroupPeerMemoryFeaturesKHR; + if (glad_vkGetDeviceGroupPeerMemoryFeaturesKHR == NULL && glad_vkGetDeviceGroupPeerMemoryFeatures != NULL) glad_vkGetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)glad_vkGetDeviceGroupPeerMemoryFeatures; +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif + if (glad_vkGetDeviceImageMemoryRequirements == NULL && glad_vkGetDeviceImageMemoryRequirementsKHR != NULL) glad_vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)glad_vkGetDeviceImageMemoryRequirementsKHR; + if (glad_vkGetDeviceImageMemoryRequirementsKHR == NULL && glad_vkGetDeviceImageMemoryRequirements != NULL) glad_vkGetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)glad_vkGetDeviceImageMemoryRequirements; + if (glad_vkGetDeviceImageSparseMemoryRequirements == NULL && glad_vkGetDeviceImageSparseMemoryRequirementsKHR != NULL) glad_vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)glad_vkGetDeviceImageSparseMemoryRequirementsKHR; + if (glad_vkGetDeviceImageSparseMemoryRequirementsKHR == NULL && glad_vkGetDeviceImageSparseMemoryRequirements != NULL) glad_vkGetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)glad_vkGetDeviceImageSparseMemoryRequirements; + if (glad_vkGetDeviceImageSubresourceLayout == NULL && glad_vkGetDeviceImageSubresourceLayoutKHR != NULL) glad_vkGetDeviceImageSubresourceLayout = (PFN_vkGetDeviceImageSubresourceLayout)glad_vkGetDeviceImageSubresourceLayoutKHR; + if (glad_vkGetDeviceImageSubresourceLayoutKHR == NULL && glad_vkGetDeviceImageSubresourceLayout != NULL) glad_vkGetDeviceImageSubresourceLayoutKHR = (PFN_vkGetDeviceImageSubresourceLayoutKHR)glad_vkGetDeviceImageSubresourceLayout; + if (glad_vkGetDeviceMemoryOpaqueCaptureAddress == NULL && glad_vkGetDeviceMemoryOpaqueCaptureAddressKHR != NULL) glad_vkGetDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)glad_vkGetDeviceMemoryOpaqueCaptureAddressKHR; + if (glad_vkGetDeviceMemoryOpaqueCaptureAddressKHR == NULL && glad_vkGetDeviceMemoryOpaqueCaptureAddress != NULL) glad_vkGetDeviceMemoryOpaqueCaptureAddressKHR = (PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)glad_vkGetDeviceMemoryOpaqueCaptureAddress; +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif + if (glad_vkGetImageMemoryRequirements2 == NULL && glad_vkGetImageMemoryRequirements2KHR != NULL) glad_vkGetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2)glad_vkGetImageMemoryRequirements2KHR; + if (glad_vkGetImageMemoryRequirements2KHR == NULL && glad_vkGetImageMemoryRequirements2 != NULL) glad_vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR)glad_vkGetImageMemoryRequirements2; + if (glad_vkGetImageSparseMemoryRequirements2 == NULL && glad_vkGetImageSparseMemoryRequirements2KHR != NULL) glad_vkGetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2)glad_vkGetImageSparseMemoryRequirements2KHR; + if (glad_vkGetImageSparseMemoryRequirements2KHR == NULL && glad_vkGetImageSparseMemoryRequirements2 != NULL) glad_vkGetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)glad_vkGetImageSparseMemoryRequirements2; + if (glad_vkGetImageSubresourceLayout2 == NULL && glad_vkGetImageSubresourceLayout2EXT != NULL) glad_vkGetImageSubresourceLayout2 = (PFN_vkGetImageSubresourceLayout2)glad_vkGetImageSubresourceLayout2EXT; + if (glad_vkGetImageSubresourceLayout2 == NULL && glad_vkGetImageSubresourceLayout2KHR != NULL) glad_vkGetImageSubresourceLayout2 = (PFN_vkGetImageSubresourceLayout2)glad_vkGetImageSubresourceLayout2KHR; + if (glad_vkGetImageSubresourceLayout2EXT == NULL && glad_vkGetImageSubresourceLayout2 != NULL) glad_vkGetImageSubresourceLayout2EXT = (PFN_vkGetImageSubresourceLayout2EXT)glad_vkGetImageSubresourceLayout2; + if (glad_vkGetImageSubresourceLayout2EXT == NULL && glad_vkGetImageSubresourceLayout2KHR != NULL) glad_vkGetImageSubresourceLayout2EXT = (PFN_vkGetImageSubresourceLayout2EXT)glad_vkGetImageSubresourceLayout2KHR; + if (glad_vkGetImageSubresourceLayout2KHR == NULL && glad_vkGetImageSubresourceLayout2 != NULL) glad_vkGetImageSubresourceLayout2KHR = (PFN_vkGetImageSubresourceLayout2KHR)glad_vkGetImageSubresourceLayout2; + if (glad_vkGetImageSubresourceLayout2KHR == NULL && glad_vkGetImageSubresourceLayout2EXT != NULL) glad_vkGetImageSubresourceLayout2KHR = (PFN_vkGetImageSubresourceLayout2KHR)glad_vkGetImageSubresourceLayout2EXT; +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + +#endif + if (glad_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT == NULL && glad_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR != NULL) glad_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)glad_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR; + if (glad_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR == NULL && glad_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT != NULL) glad_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR)glad_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT; +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + +#endif + if (glad_vkGetPhysicalDeviceExternalBufferProperties == NULL && glad_vkGetPhysicalDeviceExternalBufferPropertiesKHR != NULL) glad_vkGetPhysicalDeviceExternalBufferProperties = (PFN_vkGetPhysicalDeviceExternalBufferProperties)glad_vkGetPhysicalDeviceExternalBufferPropertiesKHR; + if (glad_vkGetPhysicalDeviceExternalBufferPropertiesKHR == NULL && glad_vkGetPhysicalDeviceExternalBufferProperties != NULL) glad_vkGetPhysicalDeviceExternalBufferPropertiesKHR = (PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)glad_vkGetPhysicalDeviceExternalBufferProperties; + if (glad_vkGetPhysicalDeviceExternalFenceProperties == NULL && glad_vkGetPhysicalDeviceExternalFencePropertiesKHR != NULL) glad_vkGetPhysicalDeviceExternalFenceProperties = (PFN_vkGetPhysicalDeviceExternalFenceProperties)glad_vkGetPhysicalDeviceExternalFencePropertiesKHR; + if (glad_vkGetPhysicalDeviceExternalFencePropertiesKHR == NULL && glad_vkGetPhysicalDeviceExternalFenceProperties != NULL) glad_vkGetPhysicalDeviceExternalFencePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)glad_vkGetPhysicalDeviceExternalFenceProperties; + if (glad_vkGetPhysicalDeviceExternalSemaphoreProperties == NULL && glad_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR != NULL) glad_vkGetPhysicalDeviceExternalSemaphoreProperties = (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)glad_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; + if (glad_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR == NULL && glad_vkGetPhysicalDeviceExternalSemaphoreProperties != NULL) glad_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)glad_vkGetPhysicalDeviceExternalSemaphoreProperties; + if (glad_vkGetPhysicalDeviceFeatures2 == NULL && glad_vkGetPhysicalDeviceFeatures2KHR != NULL) glad_vkGetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2)glad_vkGetPhysicalDeviceFeatures2KHR; + if (glad_vkGetPhysicalDeviceFeatures2KHR == NULL && glad_vkGetPhysicalDeviceFeatures2 != NULL) glad_vkGetPhysicalDeviceFeatures2KHR = (PFN_vkGetPhysicalDeviceFeatures2KHR)glad_vkGetPhysicalDeviceFeatures2; + if (glad_vkGetPhysicalDeviceFormatProperties2 == NULL && glad_vkGetPhysicalDeviceFormatProperties2KHR != NULL) glad_vkGetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2)glad_vkGetPhysicalDeviceFormatProperties2KHR; + if (glad_vkGetPhysicalDeviceFormatProperties2KHR == NULL && glad_vkGetPhysicalDeviceFormatProperties2 != NULL) glad_vkGetPhysicalDeviceFormatProperties2KHR = (PFN_vkGetPhysicalDeviceFormatProperties2KHR)glad_vkGetPhysicalDeviceFormatProperties2; + if (glad_vkGetPhysicalDeviceImageFormatProperties2 == NULL && glad_vkGetPhysicalDeviceImageFormatProperties2KHR != NULL) glad_vkGetPhysicalDeviceImageFormatProperties2 = (PFN_vkGetPhysicalDeviceImageFormatProperties2)glad_vkGetPhysicalDeviceImageFormatProperties2KHR; + if (glad_vkGetPhysicalDeviceImageFormatProperties2KHR == NULL && glad_vkGetPhysicalDeviceImageFormatProperties2 != NULL) glad_vkGetPhysicalDeviceImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)glad_vkGetPhysicalDeviceImageFormatProperties2; + if (glad_vkGetPhysicalDeviceMemoryProperties2 == NULL && glad_vkGetPhysicalDeviceMemoryProperties2KHR != NULL) glad_vkGetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2)glad_vkGetPhysicalDeviceMemoryProperties2KHR; + if (glad_vkGetPhysicalDeviceMemoryProperties2KHR == NULL && glad_vkGetPhysicalDeviceMemoryProperties2 != NULL) glad_vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)glad_vkGetPhysicalDeviceMemoryProperties2; + if (glad_vkGetPhysicalDeviceProperties2 == NULL && glad_vkGetPhysicalDeviceProperties2KHR != NULL) glad_vkGetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2)glad_vkGetPhysicalDeviceProperties2KHR; + if (glad_vkGetPhysicalDeviceProperties2KHR == NULL && glad_vkGetPhysicalDeviceProperties2 != NULL) glad_vkGetPhysicalDeviceProperties2KHR = (PFN_vkGetPhysicalDeviceProperties2KHR)glad_vkGetPhysicalDeviceProperties2; + if (glad_vkGetPhysicalDeviceQueueFamilyProperties2 == NULL && glad_vkGetPhysicalDeviceQueueFamilyProperties2KHR != NULL) glad_vkGetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)glad_vkGetPhysicalDeviceQueueFamilyProperties2KHR; + if (glad_vkGetPhysicalDeviceQueueFamilyProperties2KHR == NULL && glad_vkGetPhysicalDeviceQueueFamilyProperties2 != NULL) glad_vkGetPhysicalDeviceQueueFamilyProperties2KHR = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)glad_vkGetPhysicalDeviceQueueFamilyProperties2; +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + +#endif + if (glad_vkGetPhysicalDeviceSparseImageFormatProperties2 == NULL && glad_vkGetPhysicalDeviceSparseImageFormatProperties2KHR != NULL) glad_vkGetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)glad_vkGetPhysicalDeviceSparseImageFormatProperties2KHR; + if (glad_vkGetPhysicalDeviceSparseImageFormatProperties2KHR == NULL && glad_vkGetPhysicalDeviceSparseImageFormatProperties2 != NULL) glad_vkGetPhysicalDeviceSparseImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)glad_vkGetPhysicalDeviceSparseImageFormatProperties2; +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif + if (glad_vkGetPhysicalDeviceToolProperties == NULL && glad_vkGetPhysicalDeviceToolPropertiesEXT != NULL) glad_vkGetPhysicalDeviceToolProperties = (PFN_vkGetPhysicalDeviceToolProperties)glad_vkGetPhysicalDeviceToolPropertiesEXT; + if (glad_vkGetPhysicalDeviceToolPropertiesEXT == NULL && glad_vkGetPhysicalDeviceToolProperties != NULL) glad_vkGetPhysicalDeviceToolPropertiesEXT = (PFN_vkGetPhysicalDeviceToolPropertiesEXT)glad_vkGetPhysicalDeviceToolProperties; +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) + +#endif + if (glad_vkGetPrivateData == NULL && glad_vkGetPrivateDataEXT != NULL) glad_vkGetPrivateData = (PFN_vkGetPrivateData)glad_vkGetPrivateDataEXT; + if (glad_vkGetPrivateDataEXT == NULL && glad_vkGetPrivateData != NULL) glad_vkGetPrivateDataEXT = (PFN_vkGetPrivateDataEXT)glad_vkGetPrivateData; +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + +#endif + if (glad_vkGetRayTracingShaderGroupHandlesKHR == NULL && glad_vkGetRayTracingShaderGroupHandlesNV != NULL) glad_vkGetRayTracingShaderGroupHandlesKHR = (PFN_vkGetRayTracingShaderGroupHandlesKHR)glad_vkGetRayTracingShaderGroupHandlesNV; + if (glad_vkGetRayTracingShaderGroupHandlesNV == NULL && glad_vkGetRayTracingShaderGroupHandlesKHR != NULL) glad_vkGetRayTracingShaderGroupHandlesNV = (PFN_vkGetRayTracingShaderGroupHandlesNV)glad_vkGetRayTracingShaderGroupHandlesKHR; + if (glad_vkGetRenderingAreaGranularity == NULL && glad_vkGetRenderingAreaGranularityKHR != NULL) glad_vkGetRenderingAreaGranularity = (PFN_vkGetRenderingAreaGranularity)glad_vkGetRenderingAreaGranularityKHR; + if (glad_vkGetRenderingAreaGranularityKHR == NULL && glad_vkGetRenderingAreaGranularity != NULL) glad_vkGetRenderingAreaGranularityKHR = (PFN_vkGetRenderingAreaGranularityKHR)glad_vkGetRenderingAreaGranularity; +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + +#endif + if (glad_vkGetSemaphoreCounterValue == NULL && glad_vkGetSemaphoreCounterValueKHR != NULL) glad_vkGetSemaphoreCounterValue = (PFN_vkGetSemaphoreCounterValue)glad_vkGetSemaphoreCounterValueKHR; + if (glad_vkGetSemaphoreCounterValueKHR == NULL && glad_vkGetSemaphoreCounterValue != NULL) glad_vkGetSemaphoreCounterValueKHR = (PFN_vkGetSemaphoreCounterValueKHR)glad_vkGetSemaphoreCounterValue; +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + +#endif + if (glad_vkMapMemory2 == NULL && glad_vkMapMemory2KHR != NULL) glad_vkMapMemory2 = (PFN_vkMapMemory2)glad_vkMapMemory2KHR; + if (glad_vkMapMemory2KHR == NULL && glad_vkMapMemory2 != NULL) glad_vkMapMemory2KHR = (PFN_vkMapMemory2KHR)glad_vkMapMemory2; + if (glad_vkQueueSubmit2 == NULL && glad_vkQueueSubmit2KHR != NULL) glad_vkQueueSubmit2 = (PFN_vkQueueSubmit2)glad_vkQueueSubmit2KHR; + if (glad_vkQueueSubmit2KHR == NULL && glad_vkQueueSubmit2 != NULL) glad_vkQueueSubmit2KHR = (PFN_vkQueueSubmit2KHR)glad_vkQueueSubmit2; +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +#endif + if (glad_vkReleaseSwapchainImagesEXT == NULL && glad_vkReleaseSwapchainImagesKHR != NULL) glad_vkReleaseSwapchainImagesEXT = (PFN_vkReleaseSwapchainImagesEXT)glad_vkReleaseSwapchainImagesKHR; + if (glad_vkReleaseSwapchainImagesKHR == NULL && glad_vkReleaseSwapchainImagesEXT != NULL) glad_vkReleaseSwapchainImagesKHR = (PFN_vkReleaseSwapchainImagesKHR)glad_vkReleaseSwapchainImagesEXT; + if (glad_vkResetQueryPool == NULL && glad_vkResetQueryPoolEXT != NULL) glad_vkResetQueryPool = (PFN_vkResetQueryPool)glad_vkResetQueryPoolEXT; + if (glad_vkResetQueryPoolEXT == NULL && glad_vkResetQueryPool != NULL) glad_vkResetQueryPoolEXT = (PFN_vkResetQueryPoolEXT)glad_vkResetQueryPool; +#if defined(VK_USE_PLATFORM_FUCHSIA) + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + +#endif + if (glad_vkSetPrivateData == NULL && glad_vkSetPrivateDataEXT != NULL) glad_vkSetPrivateData = (PFN_vkSetPrivateData)glad_vkSetPrivateDataEXT; + if (glad_vkSetPrivateDataEXT == NULL && glad_vkSetPrivateData != NULL) glad_vkSetPrivateDataEXT = (PFN_vkSetPrivateDataEXT)glad_vkSetPrivateData; + if (glad_vkSignalSemaphore == NULL && glad_vkSignalSemaphoreKHR != NULL) glad_vkSignalSemaphore = (PFN_vkSignalSemaphore)glad_vkSignalSemaphoreKHR; + if (glad_vkSignalSemaphoreKHR == NULL && glad_vkSignalSemaphore != NULL) glad_vkSignalSemaphoreKHR = (PFN_vkSignalSemaphoreKHR)glad_vkSignalSemaphore; + if (glad_vkTransitionImageLayout == NULL && glad_vkTransitionImageLayoutEXT != NULL) glad_vkTransitionImageLayout = (PFN_vkTransitionImageLayout)glad_vkTransitionImageLayoutEXT; + if (glad_vkTransitionImageLayoutEXT == NULL && glad_vkTransitionImageLayout != NULL) glad_vkTransitionImageLayoutEXT = (PFN_vkTransitionImageLayoutEXT)glad_vkTransitionImageLayout; + if (glad_vkTrimCommandPool == NULL && glad_vkTrimCommandPoolKHR != NULL) glad_vkTrimCommandPool = (PFN_vkTrimCommandPool)glad_vkTrimCommandPoolKHR; + if (glad_vkTrimCommandPoolKHR == NULL && glad_vkTrimCommandPool != NULL) glad_vkTrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR)glad_vkTrimCommandPool; + if (glad_vkUnmapMemory2 == NULL && glad_vkUnmapMemory2KHR != NULL) glad_vkUnmapMemory2 = (PFN_vkUnmapMemory2)glad_vkUnmapMemory2KHR; + if (glad_vkUnmapMemory2KHR == NULL && glad_vkUnmapMemory2 != NULL) glad_vkUnmapMemory2KHR = (PFN_vkUnmapMemory2KHR)glad_vkUnmapMemory2; + if (glad_vkUpdateDescriptorSetWithTemplate == NULL && glad_vkUpdateDescriptorSetWithTemplateKHR != NULL) glad_vkUpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate)glad_vkUpdateDescriptorSetWithTemplateKHR; + if (glad_vkUpdateDescriptorSetWithTemplateKHR == NULL && glad_vkUpdateDescriptorSetWithTemplate != NULL) glad_vkUpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)glad_vkUpdateDescriptorSetWithTemplate; + if (glad_vkWaitSemaphores == NULL && glad_vkWaitSemaphoresKHR != NULL) glad_vkWaitSemaphores = (PFN_vkWaitSemaphores)glad_vkWaitSemaphoresKHR; + if (glad_vkWaitSemaphoresKHR == NULL && glad_vkWaitSemaphores != NULL) glad_vkWaitSemaphoresKHR = (PFN_vkWaitSemaphoresKHR)glad_vkWaitSemaphores; +} + +static int glad_vk_get_extensions( VkPhysicalDevice physical_device, uint32_t *out_extension_count, char ***out_extensions) { + uint32_t i; + uint32_t instance_extension_count = 0; + uint32_t device_extension_count = 0; + uint32_t max_extension_count = 0; + uint32_t total_extension_count = 0; + char **extensions = NULL; + VkExtensionProperties *ext_properties = NULL; + VkResult result; + + if (glad_vkEnumerateInstanceExtensionProperties == NULL || (physical_device != NULL && glad_vkEnumerateDeviceExtensionProperties == NULL)) { + return 0; + } + + result = glad_vkEnumerateInstanceExtensionProperties(NULL, &instance_extension_count, NULL); + if (result != VK_SUCCESS) { + return 0; + } + + if (physical_device != NULL) { + result = glad_vkEnumerateDeviceExtensionProperties(physical_device, NULL, &device_extension_count, NULL); + if (result != VK_SUCCESS) { + return 0; + } + } + + total_extension_count = instance_extension_count + device_extension_count; + if (total_extension_count <= 0) { + return 0; + } + + max_extension_count = instance_extension_count > device_extension_count + ? instance_extension_count : device_extension_count; + + ext_properties = (VkExtensionProperties*) malloc(max_extension_count * sizeof(VkExtensionProperties)); + if (ext_properties == NULL) { + goto glad_vk_get_extensions_error; + } + + result = glad_vkEnumerateInstanceExtensionProperties(NULL, &instance_extension_count, ext_properties); + if (result != VK_SUCCESS) { + goto glad_vk_get_extensions_error; + } + + extensions = (char**) calloc(total_extension_count, sizeof(char*)); + if (extensions == NULL) { + goto glad_vk_get_extensions_error; + } + + for (i = 0; i < instance_extension_count; ++i) { + VkExtensionProperties ext = ext_properties[i]; + + size_t extension_name_length = strlen(ext.extensionName) + 1; + extensions[i] = (char*) malloc(extension_name_length * sizeof(char)); + if (extensions[i] == NULL) { + goto glad_vk_get_extensions_error; + } + memcpy(extensions[i], ext.extensionName, extension_name_length * sizeof(char)); + } + + if (physical_device != NULL) { + result = glad_vkEnumerateDeviceExtensionProperties(physical_device, NULL, &device_extension_count, ext_properties); + if (result != VK_SUCCESS) { + goto glad_vk_get_extensions_error; + } + + for (i = 0; i < device_extension_count; ++i) { + VkExtensionProperties ext = ext_properties[i]; + + size_t extension_name_length = strlen(ext.extensionName) + 1; + extensions[instance_extension_count + i] = (char*) malloc(extension_name_length * sizeof(char)); + if (extensions[instance_extension_count + i] == NULL) { + goto glad_vk_get_extensions_error; + } + memcpy(extensions[instance_extension_count + i], ext.extensionName, extension_name_length * sizeof(char)); + } + } + + free((void*) ext_properties); + + *out_extension_count = total_extension_count; + *out_extensions = extensions; + + return 1; + +glad_vk_get_extensions_error: + free((void*) ext_properties); + if (extensions != NULL) { + for (i = 0; i < total_extension_count; ++i) { + free((void*) extensions[i]); + } + free(extensions); + } + return 0; +} + +static void glad_vk_free_extensions(uint32_t extension_count, char **extensions) { + uint32_t i; + + for(i = 0; i < extension_count ; ++i) { + free((void*) (extensions[i])); + } + + free((void*) extensions); +} + +static int glad_vk_has_extension(const char *name, uint32_t extension_count, char **extensions) { + uint32_t i; + + for (i = 0; i < extension_count; ++i) { + if(extensions[i] != NULL && strcmp(name, extensions[i]) == 0) { + return 1; + } + } + + return 0; +} + +static GLADapiproc glad_vk_get_proc_from_userptr(void *userptr, const char* name) { + return (GLAD_GNUC_EXTENSION (GLADapiproc (*)(const char *name)) userptr)(name); +} + +static int glad_vk_find_extensions_vulkan( VkPhysicalDevice physical_device) { + uint32_t extension_count = 0; + char **extensions = NULL; + if (!glad_vk_get_extensions(physical_device, &extension_count, &extensions)) return 0; + +#if defined(VK_ENABLE_BETA_EXTENSIONS) + GLAD_VK_AMDX_dense_geometry_format = glad_vk_has_extension("VK_AMDX_dense_geometry_format", extension_count, extensions); + +#endif +#if defined(VK_ENABLE_BETA_EXTENSIONS) + GLAD_VK_AMDX_shader_enqueue = glad_vk_has_extension("VK_AMDX_shader_enqueue", extension_count, extensions); + +#endif + GLAD_VK_AMD_anti_lag = glad_vk_has_extension("VK_AMD_anti_lag", extension_count, extensions); + GLAD_VK_AMD_buffer_marker = glad_vk_has_extension("VK_AMD_buffer_marker", extension_count, extensions); + GLAD_VK_AMD_device_coherent_memory = glad_vk_has_extension("VK_AMD_device_coherent_memory", extension_count, extensions); + GLAD_VK_AMD_display_native_hdr = glad_vk_has_extension("VK_AMD_display_native_hdr", extension_count, extensions); + GLAD_VK_AMD_draw_indirect_count = glad_vk_has_extension("VK_AMD_draw_indirect_count", extension_count, extensions); + GLAD_VK_AMD_gcn_shader = glad_vk_has_extension("VK_AMD_gcn_shader", extension_count, extensions); + GLAD_VK_AMD_gpu_shader_half_float = glad_vk_has_extension("VK_AMD_gpu_shader_half_float", extension_count, extensions); + GLAD_VK_AMD_gpu_shader_int16 = glad_vk_has_extension("VK_AMD_gpu_shader_int16", extension_count, extensions); + GLAD_VK_AMD_memory_overallocation_behavior = glad_vk_has_extension("VK_AMD_memory_overallocation_behavior", extension_count, extensions); + GLAD_VK_AMD_mixed_attachment_samples = glad_vk_has_extension("VK_AMD_mixed_attachment_samples", extension_count, extensions); + GLAD_VK_AMD_negative_viewport_height = glad_vk_has_extension("VK_AMD_negative_viewport_height", extension_count, extensions); + GLAD_VK_AMD_pipeline_compiler_control = glad_vk_has_extension("VK_AMD_pipeline_compiler_control", extension_count, extensions); + GLAD_VK_AMD_rasterization_order = glad_vk_has_extension("VK_AMD_rasterization_order", extension_count, extensions); + GLAD_VK_AMD_shader_ballot = glad_vk_has_extension("VK_AMD_shader_ballot", extension_count, extensions); + GLAD_VK_AMD_shader_core_properties = glad_vk_has_extension("VK_AMD_shader_core_properties", extension_count, extensions); + GLAD_VK_AMD_shader_core_properties2 = glad_vk_has_extension("VK_AMD_shader_core_properties2", extension_count, extensions); + GLAD_VK_AMD_shader_early_and_late_fragment_tests = glad_vk_has_extension("VK_AMD_shader_early_and_late_fragment_tests", extension_count, extensions); + GLAD_VK_AMD_shader_explicit_vertex_parameter = glad_vk_has_extension("VK_AMD_shader_explicit_vertex_parameter", extension_count, extensions); + GLAD_VK_AMD_shader_fragment_mask = glad_vk_has_extension("VK_AMD_shader_fragment_mask", extension_count, extensions); + GLAD_VK_AMD_shader_image_load_store_lod = glad_vk_has_extension("VK_AMD_shader_image_load_store_lod", extension_count, extensions); + GLAD_VK_AMD_shader_info = glad_vk_has_extension("VK_AMD_shader_info", extension_count, extensions); + GLAD_VK_AMD_shader_trinary_minmax = glad_vk_has_extension("VK_AMD_shader_trinary_minmax", extension_count, extensions); + GLAD_VK_AMD_texture_gather_bias_lod = glad_vk_has_extension("VK_AMD_texture_gather_bias_lod", extension_count, extensions); +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + GLAD_VK_ANDROID_external_format_resolve = glad_vk_has_extension("VK_ANDROID_external_format_resolve", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + GLAD_VK_ANDROID_external_memory_android_hardware_buffer = glad_vk_has_extension("VK_ANDROID_external_memory_android_hardware_buffer", extension_count, extensions); + +#endif + GLAD_VK_ARM_data_graph = glad_vk_has_extension("VK_ARM_data_graph", extension_count, extensions); + GLAD_VK_ARM_format_pack = glad_vk_has_extension("VK_ARM_format_pack", extension_count, extensions); + GLAD_VK_ARM_pipeline_opacity_micromap = glad_vk_has_extension("VK_ARM_pipeline_opacity_micromap", extension_count, extensions); + GLAD_VK_ARM_rasterization_order_attachment_access = glad_vk_has_extension("VK_ARM_rasterization_order_attachment_access", extension_count, extensions); + GLAD_VK_ARM_render_pass_striped = glad_vk_has_extension("VK_ARM_render_pass_striped", extension_count, extensions); + GLAD_VK_ARM_scheduling_controls = glad_vk_has_extension("VK_ARM_scheduling_controls", extension_count, extensions); + GLAD_VK_ARM_shader_core_builtins = glad_vk_has_extension("VK_ARM_shader_core_builtins", extension_count, extensions); + GLAD_VK_ARM_shader_core_properties = glad_vk_has_extension("VK_ARM_shader_core_properties", extension_count, extensions); + GLAD_VK_ARM_tensors = glad_vk_has_extension("VK_ARM_tensors", extension_count, extensions); + GLAD_VK_EXT_4444_formats = glad_vk_has_extension("VK_EXT_4444_formats", extension_count, extensions); + GLAD_VK_EXT_acquire_drm_display = glad_vk_has_extension("VK_EXT_acquire_drm_display", extension_count, extensions); +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + GLAD_VK_EXT_acquire_xlib_display = glad_vk_has_extension("VK_EXT_acquire_xlib_display", extension_count, extensions); + +#endif + GLAD_VK_EXT_astc_decode_mode = glad_vk_has_extension("VK_EXT_astc_decode_mode", extension_count, extensions); + GLAD_VK_EXT_attachment_feedback_loop_dynamic_state = glad_vk_has_extension("VK_EXT_attachment_feedback_loop_dynamic_state", extension_count, extensions); + GLAD_VK_EXT_attachment_feedback_loop_layout = glad_vk_has_extension("VK_EXT_attachment_feedback_loop_layout", extension_count, extensions); + GLAD_VK_EXT_blend_operation_advanced = glad_vk_has_extension("VK_EXT_blend_operation_advanced", extension_count, extensions); + GLAD_VK_EXT_border_color_swizzle = glad_vk_has_extension("VK_EXT_border_color_swizzle", extension_count, extensions); + GLAD_VK_EXT_buffer_device_address = glad_vk_has_extension("VK_EXT_buffer_device_address", extension_count, extensions); + GLAD_VK_EXT_calibrated_timestamps = glad_vk_has_extension("VK_EXT_calibrated_timestamps", extension_count, extensions); + GLAD_VK_EXT_color_write_enable = glad_vk_has_extension("VK_EXT_color_write_enable", extension_count, extensions); + GLAD_VK_EXT_conditional_rendering = glad_vk_has_extension("VK_EXT_conditional_rendering", extension_count, extensions); + GLAD_VK_EXT_conservative_rasterization = glad_vk_has_extension("VK_EXT_conservative_rasterization", extension_count, extensions); + GLAD_VK_EXT_custom_border_color = glad_vk_has_extension("VK_EXT_custom_border_color", extension_count, extensions); + GLAD_VK_EXT_debug_marker = glad_vk_has_extension("VK_EXT_debug_marker", extension_count, extensions); + GLAD_VK_EXT_debug_report = glad_vk_has_extension("VK_EXT_debug_report", extension_count, extensions); + GLAD_VK_EXT_debug_utils = glad_vk_has_extension("VK_EXT_debug_utils", extension_count, extensions); + GLAD_VK_EXT_depth_bias_control = glad_vk_has_extension("VK_EXT_depth_bias_control", extension_count, extensions); + GLAD_VK_EXT_depth_clamp_control = glad_vk_has_extension("VK_EXT_depth_clamp_control", extension_count, extensions); + GLAD_VK_EXT_depth_clamp_zero_one = glad_vk_has_extension("VK_EXT_depth_clamp_zero_one", extension_count, extensions); + GLAD_VK_EXT_depth_clip_control = glad_vk_has_extension("VK_EXT_depth_clip_control", extension_count, extensions); + GLAD_VK_EXT_depth_clip_enable = glad_vk_has_extension("VK_EXT_depth_clip_enable", extension_count, extensions); + GLAD_VK_EXT_depth_range_unrestricted = glad_vk_has_extension("VK_EXT_depth_range_unrestricted", extension_count, extensions); + GLAD_VK_EXT_descriptor_buffer = glad_vk_has_extension("VK_EXT_descriptor_buffer", extension_count, extensions); + GLAD_VK_EXT_descriptor_indexing = glad_vk_has_extension("VK_EXT_descriptor_indexing", extension_count, extensions); + GLAD_VK_EXT_device_address_binding_report = glad_vk_has_extension("VK_EXT_device_address_binding_report", extension_count, extensions); + GLAD_VK_EXT_device_fault = glad_vk_has_extension("VK_EXT_device_fault", extension_count, extensions); + GLAD_VK_EXT_device_generated_commands = glad_vk_has_extension("VK_EXT_device_generated_commands", extension_count, extensions); + GLAD_VK_EXT_device_memory_report = glad_vk_has_extension("VK_EXT_device_memory_report", extension_count, extensions); + GLAD_VK_EXT_direct_mode_display = glad_vk_has_extension("VK_EXT_direct_mode_display", extension_count, extensions); +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + GLAD_VK_EXT_directfb_surface = glad_vk_has_extension("VK_EXT_directfb_surface", extension_count, extensions); + +#endif + GLAD_VK_EXT_discard_rectangles = glad_vk_has_extension("VK_EXT_discard_rectangles", extension_count, extensions); + GLAD_VK_EXT_display_control = glad_vk_has_extension("VK_EXT_display_control", extension_count, extensions); + GLAD_VK_EXT_display_surface_counter = glad_vk_has_extension("VK_EXT_display_surface_counter", extension_count, extensions); + GLAD_VK_EXT_dynamic_rendering_unused_attachments = glad_vk_has_extension("VK_EXT_dynamic_rendering_unused_attachments", extension_count, extensions); + GLAD_VK_EXT_extended_dynamic_state = glad_vk_has_extension("VK_EXT_extended_dynamic_state", extension_count, extensions); + GLAD_VK_EXT_extended_dynamic_state2 = glad_vk_has_extension("VK_EXT_extended_dynamic_state2", extension_count, extensions); + GLAD_VK_EXT_extended_dynamic_state3 = glad_vk_has_extension("VK_EXT_extended_dynamic_state3", extension_count, extensions); + GLAD_VK_EXT_external_memory_acquire_unmodified = glad_vk_has_extension("VK_EXT_external_memory_acquire_unmodified", extension_count, extensions); + GLAD_VK_EXT_external_memory_dma_buf = glad_vk_has_extension("VK_EXT_external_memory_dma_buf", extension_count, extensions); + GLAD_VK_EXT_external_memory_host = glad_vk_has_extension("VK_EXT_external_memory_host", extension_count, extensions); +#if defined(VK_USE_PLATFORM_METAL_EXT) + GLAD_VK_EXT_external_memory_metal = glad_vk_has_extension("VK_EXT_external_memory_metal", extension_count, extensions); + +#endif + GLAD_VK_EXT_filter_cubic = glad_vk_has_extension("VK_EXT_filter_cubic", extension_count, extensions); + GLAD_VK_EXT_fragment_density_map = glad_vk_has_extension("VK_EXT_fragment_density_map", extension_count, extensions); + GLAD_VK_EXT_fragment_density_map2 = glad_vk_has_extension("VK_EXT_fragment_density_map2", extension_count, extensions); + GLAD_VK_EXT_fragment_density_map_offset = glad_vk_has_extension("VK_EXT_fragment_density_map_offset", extension_count, extensions); + GLAD_VK_EXT_fragment_shader_interlock = glad_vk_has_extension("VK_EXT_fragment_shader_interlock", extension_count, extensions); + GLAD_VK_EXT_frame_boundary = glad_vk_has_extension("VK_EXT_frame_boundary", extension_count, extensions); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + GLAD_VK_EXT_full_screen_exclusive = glad_vk_has_extension("VK_EXT_full_screen_exclusive", extension_count, extensions); + +#endif + GLAD_VK_EXT_global_priority = glad_vk_has_extension("VK_EXT_global_priority", extension_count, extensions); + GLAD_VK_EXT_global_priority_query = glad_vk_has_extension("VK_EXT_global_priority_query", extension_count, extensions); + GLAD_VK_EXT_graphics_pipeline_library = glad_vk_has_extension("VK_EXT_graphics_pipeline_library", extension_count, extensions); + GLAD_VK_EXT_hdr_metadata = glad_vk_has_extension("VK_EXT_hdr_metadata", extension_count, extensions); + GLAD_VK_EXT_headless_surface = glad_vk_has_extension("VK_EXT_headless_surface", extension_count, extensions); + GLAD_VK_EXT_host_image_copy = glad_vk_has_extension("VK_EXT_host_image_copy", extension_count, extensions); + GLAD_VK_EXT_host_query_reset = glad_vk_has_extension("VK_EXT_host_query_reset", extension_count, extensions); + GLAD_VK_EXT_image_2d_view_of_3d = glad_vk_has_extension("VK_EXT_image_2d_view_of_3d", extension_count, extensions); + GLAD_VK_EXT_image_compression_control = glad_vk_has_extension("VK_EXT_image_compression_control", extension_count, extensions); + GLAD_VK_EXT_image_compression_control_swapchain = glad_vk_has_extension("VK_EXT_image_compression_control_swapchain", extension_count, extensions); + GLAD_VK_EXT_image_drm_format_modifier = glad_vk_has_extension("VK_EXT_image_drm_format_modifier", extension_count, extensions); + GLAD_VK_EXT_image_robustness = glad_vk_has_extension("VK_EXT_image_robustness", extension_count, extensions); + GLAD_VK_EXT_image_sliced_view_of_3d = glad_vk_has_extension("VK_EXT_image_sliced_view_of_3d", extension_count, extensions); + GLAD_VK_EXT_image_view_min_lod = glad_vk_has_extension("VK_EXT_image_view_min_lod", extension_count, extensions); + GLAD_VK_EXT_index_type_uint8 = glad_vk_has_extension("VK_EXT_index_type_uint8", extension_count, extensions); + GLAD_VK_EXT_inline_uniform_block = glad_vk_has_extension("VK_EXT_inline_uniform_block", extension_count, extensions); + GLAD_VK_EXT_layer_settings = glad_vk_has_extension("VK_EXT_layer_settings", extension_count, extensions); + GLAD_VK_EXT_legacy_dithering = glad_vk_has_extension("VK_EXT_legacy_dithering", extension_count, extensions); + GLAD_VK_EXT_legacy_vertex_attributes = glad_vk_has_extension("VK_EXT_legacy_vertex_attributes", extension_count, extensions); + GLAD_VK_EXT_line_rasterization = glad_vk_has_extension("VK_EXT_line_rasterization", extension_count, extensions); + GLAD_VK_EXT_load_store_op_none = glad_vk_has_extension("VK_EXT_load_store_op_none", extension_count, extensions); + GLAD_VK_EXT_map_memory_placed = glad_vk_has_extension("VK_EXT_map_memory_placed", extension_count, extensions); + GLAD_VK_EXT_memory_budget = glad_vk_has_extension("VK_EXT_memory_budget", extension_count, extensions); + GLAD_VK_EXT_memory_priority = glad_vk_has_extension("VK_EXT_memory_priority", extension_count, extensions); + GLAD_VK_EXT_mesh_shader = glad_vk_has_extension("VK_EXT_mesh_shader", extension_count, extensions); +#if defined(VK_USE_PLATFORM_METAL_EXT) + GLAD_VK_EXT_metal_objects = glad_vk_has_extension("VK_EXT_metal_objects", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) + GLAD_VK_EXT_metal_surface = glad_vk_has_extension("VK_EXT_metal_surface", extension_count, extensions); + +#endif + GLAD_VK_EXT_multi_draw = glad_vk_has_extension("VK_EXT_multi_draw", extension_count, extensions); + GLAD_VK_EXT_multisampled_render_to_single_sampled = glad_vk_has_extension("VK_EXT_multisampled_render_to_single_sampled", extension_count, extensions); + GLAD_VK_EXT_mutable_descriptor_type = glad_vk_has_extension("VK_EXT_mutable_descriptor_type", extension_count, extensions); + GLAD_VK_EXT_nested_command_buffer = glad_vk_has_extension("VK_EXT_nested_command_buffer", extension_count, extensions); + GLAD_VK_EXT_non_seamless_cube_map = glad_vk_has_extension("VK_EXT_non_seamless_cube_map", extension_count, extensions); + GLAD_VK_EXT_opacity_micromap = glad_vk_has_extension("VK_EXT_opacity_micromap", extension_count, extensions); + GLAD_VK_EXT_pageable_device_local_memory = glad_vk_has_extension("VK_EXT_pageable_device_local_memory", extension_count, extensions); + GLAD_VK_EXT_pci_bus_info = glad_vk_has_extension("VK_EXT_pci_bus_info", extension_count, extensions); + GLAD_VK_EXT_physical_device_drm = glad_vk_has_extension("VK_EXT_physical_device_drm", extension_count, extensions); + GLAD_VK_EXT_pipeline_creation_cache_control = glad_vk_has_extension("VK_EXT_pipeline_creation_cache_control", extension_count, extensions); + GLAD_VK_EXT_pipeline_creation_feedback = glad_vk_has_extension("VK_EXT_pipeline_creation_feedback", extension_count, extensions); + GLAD_VK_EXT_pipeline_library_group_handles = glad_vk_has_extension("VK_EXT_pipeline_library_group_handles", extension_count, extensions); + GLAD_VK_EXT_pipeline_properties = glad_vk_has_extension("VK_EXT_pipeline_properties", extension_count, extensions); + GLAD_VK_EXT_pipeline_protected_access = glad_vk_has_extension("VK_EXT_pipeline_protected_access", extension_count, extensions); + GLAD_VK_EXT_pipeline_robustness = glad_vk_has_extension("VK_EXT_pipeline_robustness", extension_count, extensions); + GLAD_VK_EXT_post_depth_coverage = glad_vk_has_extension("VK_EXT_post_depth_coverage", extension_count, extensions); + GLAD_VK_EXT_present_mode_fifo_latest_ready = glad_vk_has_extension("VK_EXT_present_mode_fifo_latest_ready", extension_count, extensions); + GLAD_VK_EXT_primitive_topology_list_restart = glad_vk_has_extension("VK_EXT_primitive_topology_list_restart", extension_count, extensions); + GLAD_VK_EXT_primitives_generated_query = glad_vk_has_extension("VK_EXT_primitives_generated_query", extension_count, extensions); + GLAD_VK_EXT_private_data = glad_vk_has_extension("VK_EXT_private_data", extension_count, extensions); + GLAD_VK_EXT_provoking_vertex = glad_vk_has_extension("VK_EXT_provoking_vertex", extension_count, extensions); + GLAD_VK_EXT_queue_family_foreign = glad_vk_has_extension("VK_EXT_queue_family_foreign", extension_count, extensions); + GLAD_VK_EXT_rasterization_order_attachment_access = glad_vk_has_extension("VK_EXT_rasterization_order_attachment_access", extension_count, extensions); + GLAD_VK_EXT_rgba10x6_formats = glad_vk_has_extension("VK_EXT_rgba10x6_formats", extension_count, extensions); + GLAD_VK_EXT_robustness2 = glad_vk_has_extension("VK_EXT_robustness2", extension_count, extensions); + GLAD_VK_EXT_sample_locations = glad_vk_has_extension("VK_EXT_sample_locations", extension_count, extensions); + GLAD_VK_EXT_sampler_filter_minmax = glad_vk_has_extension("VK_EXT_sampler_filter_minmax", extension_count, extensions); + GLAD_VK_EXT_scalar_block_layout = glad_vk_has_extension("VK_EXT_scalar_block_layout", extension_count, extensions); + GLAD_VK_EXT_separate_stencil_usage = glad_vk_has_extension("VK_EXT_separate_stencil_usage", extension_count, extensions); + GLAD_VK_EXT_shader_atomic_float = glad_vk_has_extension("VK_EXT_shader_atomic_float", extension_count, extensions); + GLAD_VK_EXT_shader_atomic_float2 = glad_vk_has_extension("VK_EXT_shader_atomic_float2", extension_count, extensions); + GLAD_VK_EXT_shader_demote_to_helper_invocation = glad_vk_has_extension("VK_EXT_shader_demote_to_helper_invocation", extension_count, extensions); + GLAD_VK_EXT_shader_float8 = glad_vk_has_extension("VK_EXT_shader_float8", extension_count, extensions); + GLAD_VK_EXT_shader_image_atomic_int64 = glad_vk_has_extension("VK_EXT_shader_image_atomic_int64", extension_count, extensions); + GLAD_VK_EXT_shader_module_identifier = glad_vk_has_extension("VK_EXT_shader_module_identifier", extension_count, extensions); + GLAD_VK_EXT_shader_object = glad_vk_has_extension("VK_EXT_shader_object", extension_count, extensions); + GLAD_VK_EXT_shader_replicated_composites = glad_vk_has_extension("VK_EXT_shader_replicated_composites", extension_count, extensions); + GLAD_VK_EXT_shader_stencil_export = glad_vk_has_extension("VK_EXT_shader_stencil_export", extension_count, extensions); + GLAD_VK_EXT_shader_subgroup_ballot = glad_vk_has_extension("VK_EXT_shader_subgroup_ballot", extension_count, extensions); + GLAD_VK_EXT_shader_subgroup_vote = glad_vk_has_extension("VK_EXT_shader_subgroup_vote", extension_count, extensions); + GLAD_VK_EXT_shader_tile_image = glad_vk_has_extension("VK_EXT_shader_tile_image", extension_count, extensions); + GLAD_VK_EXT_shader_viewport_index_layer = glad_vk_has_extension("VK_EXT_shader_viewport_index_layer", extension_count, extensions); + GLAD_VK_EXT_subgroup_size_control = glad_vk_has_extension("VK_EXT_subgroup_size_control", extension_count, extensions); + GLAD_VK_EXT_subpass_merge_feedback = glad_vk_has_extension("VK_EXT_subpass_merge_feedback", extension_count, extensions); + GLAD_VK_EXT_surface_maintenance1 = glad_vk_has_extension("VK_EXT_surface_maintenance1", extension_count, extensions); + GLAD_VK_EXT_swapchain_colorspace = glad_vk_has_extension("VK_EXT_swapchain_colorspace", extension_count, extensions); + GLAD_VK_EXT_swapchain_maintenance1 = glad_vk_has_extension("VK_EXT_swapchain_maintenance1", extension_count, extensions); + GLAD_VK_EXT_texel_buffer_alignment = glad_vk_has_extension("VK_EXT_texel_buffer_alignment", extension_count, extensions); + GLAD_VK_EXT_texture_compression_astc_hdr = glad_vk_has_extension("VK_EXT_texture_compression_astc_hdr", extension_count, extensions); + GLAD_VK_EXT_tooling_info = glad_vk_has_extension("VK_EXT_tooling_info", extension_count, extensions); + GLAD_VK_EXT_transform_feedback = glad_vk_has_extension("VK_EXT_transform_feedback", extension_count, extensions); + GLAD_VK_EXT_validation_cache = glad_vk_has_extension("VK_EXT_validation_cache", extension_count, extensions); + GLAD_VK_EXT_validation_features = glad_vk_has_extension("VK_EXT_validation_features", extension_count, extensions); + GLAD_VK_EXT_validation_flags = glad_vk_has_extension("VK_EXT_validation_flags", extension_count, extensions); + GLAD_VK_EXT_vertex_attribute_divisor = glad_vk_has_extension("VK_EXT_vertex_attribute_divisor", extension_count, extensions); + GLAD_VK_EXT_vertex_attribute_robustness = glad_vk_has_extension("VK_EXT_vertex_attribute_robustness", extension_count, extensions); + GLAD_VK_EXT_vertex_input_dynamic_state = glad_vk_has_extension("VK_EXT_vertex_input_dynamic_state", extension_count, extensions); + GLAD_VK_EXT_ycbcr_2plane_444_formats = glad_vk_has_extension("VK_EXT_ycbcr_2plane_444_formats", extension_count, extensions); + GLAD_VK_EXT_ycbcr_image_arrays = glad_vk_has_extension("VK_EXT_ycbcr_image_arrays", extension_count, extensions); + GLAD_VK_EXT_zero_initialize_device_memory = glad_vk_has_extension("VK_EXT_zero_initialize_device_memory", extension_count, extensions); +#if defined(VK_USE_PLATFORM_FUCHSIA) + GLAD_VK_FUCHSIA_buffer_collection = glad_vk_has_extension("VK_FUCHSIA_buffer_collection", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + GLAD_VK_FUCHSIA_external_memory = glad_vk_has_extension("VK_FUCHSIA_external_memory", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + GLAD_VK_FUCHSIA_external_semaphore = glad_vk_has_extension("VK_FUCHSIA_external_semaphore", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + GLAD_VK_FUCHSIA_imagepipe_surface = glad_vk_has_extension("VK_FUCHSIA_imagepipe_surface", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_GGP) + GLAD_VK_GGP_frame_token = glad_vk_has_extension("VK_GGP_frame_token", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_GGP) + GLAD_VK_GGP_stream_descriptor_surface = glad_vk_has_extension("VK_GGP_stream_descriptor_surface", extension_count, extensions); + +#endif + GLAD_VK_GOOGLE_decorate_string = glad_vk_has_extension("VK_GOOGLE_decorate_string", extension_count, extensions); + GLAD_VK_GOOGLE_display_timing = glad_vk_has_extension("VK_GOOGLE_display_timing", extension_count, extensions); + GLAD_VK_GOOGLE_hlsl_functionality1 = glad_vk_has_extension("VK_GOOGLE_hlsl_functionality1", extension_count, extensions); + GLAD_VK_GOOGLE_surfaceless_query = glad_vk_has_extension("VK_GOOGLE_surfaceless_query", extension_count, extensions); + GLAD_VK_GOOGLE_user_type = glad_vk_has_extension("VK_GOOGLE_user_type", extension_count, extensions); + GLAD_VK_HUAWEI_cluster_culling_shader = glad_vk_has_extension("VK_HUAWEI_cluster_culling_shader", extension_count, extensions); + GLAD_VK_HUAWEI_hdr_vivid = glad_vk_has_extension("VK_HUAWEI_hdr_vivid", extension_count, extensions); + GLAD_VK_HUAWEI_invocation_mask = glad_vk_has_extension("VK_HUAWEI_invocation_mask", extension_count, extensions); + GLAD_VK_HUAWEI_subpass_shading = glad_vk_has_extension("VK_HUAWEI_subpass_shading", extension_count, extensions); + GLAD_VK_IMG_filter_cubic = glad_vk_has_extension("VK_IMG_filter_cubic", extension_count, extensions); + GLAD_VK_IMG_format_pvrtc = glad_vk_has_extension("VK_IMG_format_pvrtc", extension_count, extensions); + GLAD_VK_IMG_relaxed_line_rasterization = glad_vk_has_extension("VK_IMG_relaxed_line_rasterization", extension_count, extensions); + GLAD_VK_INTEL_performance_query = glad_vk_has_extension("VK_INTEL_performance_query", extension_count, extensions); + GLAD_VK_INTEL_shader_integer_functions2 = glad_vk_has_extension("VK_INTEL_shader_integer_functions2", extension_count, extensions); + GLAD_VK_KHR_16bit_storage = glad_vk_has_extension("VK_KHR_16bit_storage", extension_count, extensions); + GLAD_VK_KHR_8bit_storage = glad_vk_has_extension("VK_KHR_8bit_storage", extension_count, extensions); + GLAD_VK_KHR_acceleration_structure = glad_vk_has_extension("VK_KHR_acceleration_structure", extension_count, extensions); +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + GLAD_VK_KHR_android_surface = glad_vk_has_extension("VK_KHR_android_surface", extension_count, extensions); + +#endif + GLAD_VK_KHR_bind_memory2 = glad_vk_has_extension("VK_KHR_bind_memory2", extension_count, extensions); + GLAD_VK_KHR_buffer_device_address = glad_vk_has_extension("VK_KHR_buffer_device_address", extension_count, extensions); + GLAD_VK_KHR_calibrated_timestamps = glad_vk_has_extension("VK_KHR_calibrated_timestamps", extension_count, extensions); + GLAD_VK_KHR_compute_shader_derivatives = glad_vk_has_extension("VK_KHR_compute_shader_derivatives", extension_count, extensions); + GLAD_VK_KHR_cooperative_matrix = glad_vk_has_extension("VK_KHR_cooperative_matrix", extension_count, extensions); + GLAD_VK_KHR_copy_commands2 = glad_vk_has_extension("VK_KHR_copy_commands2", extension_count, extensions); + GLAD_VK_KHR_copy_memory_indirect = glad_vk_has_extension("VK_KHR_copy_memory_indirect", extension_count, extensions); + GLAD_VK_KHR_create_renderpass2 = glad_vk_has_extension("VK_KHR_create_renderpass2", extension_count, extensions); + GLAD_VK_KHR_dedicated_allocation = glad_vk_has_extension("VK_KHR_dedicated_allocation", extension_count, extensions); + GLAD_VK_KHR_deferred_host_operations = glad_vk_has_extension("VK_KHR_deferred_host_operations", extension_count, extensions); + GLAD_VK_KHR_depth_clamp_zero_one = glad_vk_has_extension("VK_KHR_depth_clamp_zero_one", extension_count, extensions); + GLAD_VK_KHR_depth_stencil_resolve = glad_vk_has_extension("VK_KHR_depth_stencil_resolve", extension_count, extensions); + GLAD_VK_KHR_descriptor_update_template = glad_vk_has_extension("VK_KHR_descriptor_update_template", extension_count, extensions); + GLAD_VK_KHR_device_group = glad_vk_has_extension("VK_KHR_device_group", extension_count, extensions); + GLAD_VK_KHR_device_group_creation = glad_vk_has_extension("VK_KHR_device_group_creation", extension_count, extensions); + GLAD_VK_KHR_display = glad_vk_has_extension("VK_KHR_display", extension_count, extensions); + GLAD_VK_KHR_display_swapchain = glad_vk_has_extension("VK_KHR_display_swapchain", extension_count, extensions); + GLAD_VK_KHR_draw_indirect_count = glad_vk_has_extension("VK_KHR_draw_indirect_count", extension_count, extensions); + GLAD_VK_KHR_driver_properties = glad_vk_has_extension("VK_KHR_driver_properties", extension_count, extensions); + GLAD_VK_KHR_dynamic_rendering = glad_vk_has_extension("VK_KHR_dynamic_rendering", extension_count, extensions); + GLAD_VK_KHR_dynamic_rendering_local_read = glad_vk_has_extension("VK_KHR_dynamic_rendering_local_read", extension_count, extensions); + GLAD_VK_KHR_external_fence = glad_vk_has_extension("VK_KHR_external_fence", extension_count, extensions); + GLAD_VK_KHR_external_fence_capabilities = glad_vk_has_extension("VK_KHR_external_fence_capabilities", extension_count, extensions); + GLAD_VK_KHR_external_fence_fd = glad_vk_has_extension("VK_KHR_external_fence_fd", extension_count, extensions); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + GLAD_VK_KHR_external_fence_win32 = glad_vk_has_extension("VK_KHR_external_fence_win32", extension_count, extensions); + +#endif + GLAD_VK_KHR_external_memory = glad_vk_has_extension("VK_KHR_external_memory", extension_count, extensions); + GLAD_VK_KHR_external_memory_capabilities = glad_vk_has_extension("VK_KHR_external_memory_capabilities", extension_count, extensions); + GLAD_VK_KHR_external_memory_fd = glad_vk_has_extension("VK_KHR_external_memory_fd", extension_count, extensions); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + GLAD_VK_KHR_external_memory_win32 = glad_vk_has_extension("VK_KHR_external_memory_win32", extension_count, extensions); + +#endif + GLAD_VK_KHR_external_semaphore = glad_vk_has_extension("VK_KHR_external_semaphore", extension_count, extensions); + GLAD_VK_KHR_external_semaphore_capabilities = glad_vk_has_extension("VK_KHR_external_semaphore_capabilities", extension_count, extensions); + GLAD_VK_KHR_external_semaphore_fd = glad_vk_has_extension("VK_KHR_external_semaphore_fd", extension_count, extensions); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + GLAD_VK_KHR_external_semaphore_win32 = glad_vk_has_extension("VK_KHR_external_semaphore_win32", extension_count, extensions); + +#endif + GLAD_VK_KHR_format_feature_flags2 = glad_vk_has_extension("VK_KHR_format_feature_flags2", extension_count, extensions); + GLAD_VK_KHR_fragment_shader_barycentric = glad_vk_has_extension("VK_KHR_fragment_shader_barycentric", extension_count, extensions); + GLAD_VK_KHR_fragment_shading_rate = glad_vk_has_extension("VK_KHR_fragment_shading_rate", extension_count, extensions); + GLAD_VK_KHR_get_display_properties2 = glad_vk_has_extension("VK_KHR_get_display_properties2", extension_count, extensions); + GLAD_VK_KHR_get_memory_requirements2 = glad_vk_has_extension("VK_KHR_get_memory_requirements2", extension_count, extensions); + GLAD_VK_KHR_get_physical_device_properties2 = glad_vk_has_extension("VK_KHR_get_physical_device_properties2", extension_count, extensions); + GLAD_VK_KHR_get_surface_capabilities2 = glad_vk_has_extension("VK_KHR_get_surface_capabilities2", extension_count, extensions); + GLAD_VK_KHR_global_priority = glad_vk_has_extension("VK_KHR_global_priority", extension_count, extensions); + GLAD_VK_KHR_image_format_list = glad_vk_has_extension("VK_KHR_image_format_list", extension_count, extensions); + GLAD_VK_KHR_imageless_framebuffer = glad_vk_has_extension("VK_KHR_imageless_framebuffer", extension_count, extensions); + GLAD_VK_KHR_incremental_present = glad_vk_has_extension("VK_KHR_incremental_present", extension_count, extensions); + GLAD_VK_KHR_index_type_uint8 = glad_vk_has_extension("VK_KHR_index_type_uint8", extension_count, extensions); + GLAD_VK_KHR_line_rasterization = glad_vk_has_extension("VK_KHR_line_rasterization", extension_count, extensions); + GLAD_VK_KHR_load_store_op_none = glad_vk_has_extension("VK_KHR_load_store_op_none", extension_count, extensions); + GLAD_VK_KHR_maintenance1 = glad_vk_has_extension("VK_KHR_maintenance1", extension_count, extensions); + GLAD_VK_KHR_maintenance2 = glad_vk_has_extension("VK_KHR_maintenance2", extension_count, extensions); + GLAD_VK_KHR_maintenance3 = glad_vk_has_extension("VK_KHR_maintenance3", extension_count, extensions); + GLAD_VK_KHR_maintenance4 = glad_vk_has_extension("VK_KHR_maintenance4", extension_count, extensions); + GLAD_VK_KHR_maintenance5 = glad_vk_has_extension("VK_KHR_maintenance5", extension_count, extensions); + GLAD_VK_KHR_maintenance6 = glad_vk_has_extension("VK_KHR_maintenance6", extension_count, extensions); + GLAD_VK_KHR_maintenance7 = glad_vk_has_extension("VK_KHR_maintenance7", extension_count, extensions); + GLAD_VK_KHR_maintenance8 = glad_vk_has_extension("VK_KHR_maintenance8", extension_count, extensions); + GLAD_VK_KHR_maintenance9 = glad_vk_has_extension("VK_KHR_maintenance9", extension_count, extensions); + GLAD_VK_KHR_map_memory2 = glad_vk_has_extension("VK_KHR_map_memory2", extension_count, extensions); + GLAD_VK_KHR_multiview = glad_vk_has_extension("VK_KHR_multiview", extension_count, extensions); + GLAD_VK_KHR_performance_query = glad_vk_has_extension("VK_KHR_performance_query", extension_count, extensions); + GLAD_VK_KHR_pipeline_binary = glad_vk_has_extension("VK_KHR_pipeline_binary", extension_count, extensions); + GLAD_VK_KHR_pipeline_executable_properties = glad_vk_has_extension("VK_KHR_pipeline_executable_properties", extension_count, extensions); + GLAD_VK_KHR_pipeline_library = glad_vk_has_extension("VK_KHR_pipeline_library", extension_count, extensions); + GLAD_VK_KHR_portability_enumeration = glad_vk_has_extension("VK_KHR_portability_enumeration", extension_count, extensions); +#if defined(VK_ENABLE_BETA_EXTENSIONS) + GLAD_VK_KHR_portability_subset = glad_vk_has_extension("VK_KHR_portability_subset", extension_count, extensions); + +#endif + GLAD_VK_KHR_present_id = glad_vk_has_extension("VK_KHR_present_id", extension_count, extensions); + GLAD_VK_KHR_present_id2 = glad_vk_has_extension("VK_KHR_present_id2", extension_count, extensions); + GLAD_VK_KHR_present_mode_fifo_latest_ready = glad_vk_has_extension("VK_KHR_present_mode_fifo_latest_ready", extension_count, extensions); + GLAD_VK_KHR_present_wait = glad_vk_has_extension("VK_KHR_present_wait", extension_count, extensions); + GLAD_VK_KHR_present_wait2 = glad_vk_has_extension("VK_KHR_present_wait2", extension_count, extensions); + GLAD_VK_KHR_push_descriptor = glad_vk_has_extension("VK_KHR_push_descriptor", extension_count, extensions); + GLAD_VK_KHR_ray_query = glad_vk_has_extension("VK_KHR_ray_query", extension_count, extensions); + GLAD_VK_KHR_ray_tracing_maintenance1 = glad_vk_has_extension("VK_KHR_ray_tracing_maintenance1", extension_count, extensions); + GLAD_VK_KHR_ray_tracing_pipeline = glad_vk_has_extension("VK_KHR_ray_tracing_pipeline", extension_count, extensions); + GLAD_VK_KHR_ray_tracing_position_fetch = glad_vk_has_extension("VK_KHR_ray_tracing_position_fetch", extension_count, extensions); + GLAD_VK_KHR_relaxed_block_layout = glad_vk_has_extension("VK_KHR_relaxed_block_layout", extension_count, extensions); + GLAD_VK_KHR_robustness2 = glad_vk_has_extension("VK_KHR_robustness2", extension_count, extensions); + GLAD_VK_KHR_sampler_mirror_clamp_to_edge = glad_vk_has_extension("VK_KHR_sampler_mirror_clamp_to_edge", extension_count, extensions); + GLAD_VK_KHR_sampler_ycbcr_conversion = glad_vk_has_extension("VK_KHR_sampler_ycbcr_conversion", extension_count, extensions); + GLAD_VK_KHR_separate_depth_stencil_layouts = glad_vk_has_extension("VK_KHR_separate_depth_stencil_layouts", extension_count, extensions); + GLAD_VK_KHR_shader_atomic_int64 = glad_vk_has_extension("VK_KHR_shader_atomic_int64", extension_count, extensions); + GLAD_VK_KHR_shader_bfloat16 = glad_vk_has_extension("VK_KHR_shader_bfloat16", extension_count, extensions); + GLAD_VK_KHR_shader_clock = glad_vk_has_extension("VK_KHR_shader_clock", extension_count, extensions); + GLAD_VK_KHR_shader_draw_parameters = glad_vk_has_extension("VK_KHR_shader_draw_parameters", extension_count, extensions); + GLAD_VK_KHR_shader_expect_assume = glad_vk_has_extension("VK_KHR_shader_expect_assume", extension_count, extensions); + GLAD_VK_KHR_shader_float16_int8 = glad_vk_has_extension("VK_KHR_shader_float16_int8", extension_count, extensions); + GLAD_VK_KHR_shader_float_controls = glad_vk_has_extension("VK_KHR_shader_float_controls", extension_count, extensions); + GLAD_VK_KHR_shader_float_controls2 = glad_vk_has_extension("VK_KHR_shader_float_controls2", extension_count, extensions); + GLAD_VK_KHR_shader_fma = glad_vk_has_extension("VK_KHR_shader_fma", extension_count, extensions); + GLAD_VK_KHR_shader_integer_dot_product = glad_vk_has_extension("VK_KHR_shader_integer_dot_product", extension_count, extensions); + GLAD_VK_KHR_shader_maximal_reconvergence = glad_vk_has_extension("VK_KHR_shader_maximal_reconvergence", extension_count, extensions); + GLAD_VK_KHR_shader_non_semantic_info = glad_vk_has_extension("VK_KHR_shader_non_semantic_info", extension_count, extensions); + GLAD_VK_KHR_shader_quad_control = glad_vk_has_extension("VK_KHR_shader_quad_control", extension_count, extensions); + GLAD_VK_KHR_shader_relaxed_extended_instruction = glad_vk_has_extension("VK_KHR_shader_relaxed_extended_instruction", extension_count, extensions); + GLAD_VK_KHR_shader_subgroup_extended_types = glad_vk_has_extension("VK_KHR_shader_subgroup_extended_types", extension_count, extensions); + GLAD_VK_KHR_shader_subgroup_rotate = glad_vk_has_extension("VK_KHR_shader_subgroup_rotate", extension_count, extensions); + GLAD_VK_KHR_shader_subgroup_uniform_control_flow = glad_vk_has_extension("VK_KHR_shader_subgroup_uniform_control_flow", extension_count, extensions); + GLAD_VK_KHR_shader_terminate_invocation = glad_vk_has_extension("VK_KHR_shader_terminate_invocation", extension_count, extensions); + GLAD_VK_KHR_shader_untyped_pointers = glad_vk_has_extension("VK_KHR_shader_untyped_pointers", extension_count, extensions); + GLAD_VK_KHR_shared_presentable_image = glad_vk_has_extension("VK_KHR_shared_presentable_image", extension_count, extensions); + GLAD_VK_KHR_spirv_1_4 = glad_vk_has_extension("VK_KHR_spirv_1_4", extension_count, extensions); + GLAD_VK_KHR_storage_buffer_storage_class = glad_vk_has_extension("VK_KHR_storage_buffer_storage_class", extension_count, extensions); + GLAD_VK_KHR_surface = glad_vk_has_extension("VK_KHR_surface", extension_count, extensions); + GLAD_VK_KHR_surface_maintenance1 = glad_vk_has_extension("VK_KHR_surface_maintenance1", extension_count, extensions); + GLAD_VK_KHR_surface_protected_capabilities = glad_vk_has_extension("VK_KHR_surface_protected_capabilities", extension_count, extensions); + GLAD_VK_KHR_swapchain = glad_vk_has_extension("VK_KHR_swapchain", extension_count, extensions); + GLAD_VK_KHR_swapchain_maintenance1 = glad_vk_has_extension("VK_KHR_swapchain_maintenance1", extension_count, extensions); + GLAD_VK_KHR_swapchain_mutable_format = glad_vk_has_extension("VK_KHR_swapchain_mutable_format", extension_count, extensions); + GLAD_VK_KHR_synchronization2 = glad_vk_has_extension("VK_KHR_synchronization2", extension_count, extensions); + GLAD_VK_KHR_timeline_semaphore = glad_vk_has_extension("VK_KHR_timeline_semaphore", extension_count, extensions); + GLAD_VK_KHR_unified_image_layouts = glad_vk_has_extension("VK_KHR_unified_image_layouts", extension_count, extensions); + GLAD_VK_KHR_uniform_buffer_standard_layout = glad_vk_has_extension("VK_KHR_uniform_buffer_standard_layout", extension_count, extensions); + GLAD_VK_KHR_variable_pointers = glad_vk_has_extension("VK_KHR_variable_pointers", extension_count, extensions); + GLAD_VK_KHR_vertex_attribute_divisor = glad_vk_has_extension("VK_KHR_vertex_attribute_divisor", extension_count, extensions); + GLAD_VK_KHR_video_decode_av1 = glad_vk_has_extension("VK_KHR_video_decode_av1", extension_count, extensions); + GLAD_VK_KHR_video_decode_h264 = glad_vk_has_extension("VK_KHR_video_decode_h264", extension_count, extensions); + GLAD_VK_KHR_video_decode_h265 = glad_vk_has_extension("VK_KHR_video_decode_h265", extension_count, extensions); + GLAD_VK_KHR_video_decode_queue = glad_vk_has_extension("VK_KHR_video_decode_queue", extension_count, extensions); + GLAD_VK_KHR_video_decode_vp9 = glad_vk_has_extension("VK_KHR_video_decode_vp9", extension_count, extensions); + GLAD_VK_KHR_video_encode_av1 = glad_vk_has_extension("VK_KHR_video_encode_av1", extension_count, extensions); + GLAD_VK_KHR_video_encode_h264 = glad_vk_has_extension("VK_KHR_video_encode_h264", extension_count, extensions); + GLAD_VK_KHR_video_encode_h265 = glad_vk_has_extension("VK_KHR_video_encode_h265", extension_count, extensions); + GLAD_VK_KHR_video_encode_intra_refresh = glad_vk_has_extension("VK_KHR_video_encode_intra_refresh", extension_count, extensions); + GLAD_VK_KHR_video_encode_quantization_map = glad_vk_has_extension("VK_KHR_video_encode_quantization_map", extension_count, extensions); + GLAD_VK_KHR_video_encode_queue = glad_vk_has_extension("VK_KHR_video_encode_queue", extension_count, extensions); + GLAD_VK_KHR_video_maintenance1 = glad_vk_has_extension("VK_KHR_video_maintenance1", extension_count, extensions); + GLAD_VK_KHR_video_maintenance2 = glad_vk_has_extension("VK_KHR_video_maintenance2", extension_count, extensions); + GLAD_VK_KHR_video_queue = glad_vk_has_extension("VK_KHR_video_queue", extension_count, extensions); + GLAD_VK_KHR_vulkan_memory_model = glad_vk_has_extension("VK_KHR_vulkan_memory_model", extension_count, extensions); +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + GLAD_VK_KHR_wayland_surface = glad_vk_has_extension("VK_KHR_wayland_surface", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + GLAD_VK_KHR_win32_keyed_mutex = glad_vk_has_extension("VK_KHR_win32_keyed_mutex", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + GLAD_VK_KHR_win32_surface = glad_vk_has_extension("VK_KHR_win32_surface", extension_count, extensions); + +#endif + GLAD_VK_KHR_workgroup_memory_explicit_layout = glad_vk_has_extension("VK_KHR_workgroup_memory_explicit_layout", extension_count, extensions); +#if defined(VK_USE_PLATFORM_XCB_KHR) + GLAD_VK_KHR_xcb_surface = glad_vk_has_extension("VK_KHR_xcb_surface", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) + GLAD_VK_KHR_xlib_surface = glad_vk_has_extension("VK_KHR_xlib_surface", extension_count, extensions); + +#endif + GLAD_VK_KHR_zero_initialize_workgroup_memory = glad_vk_has_extension("VK_KHR_zero_initialize_workgroup_memory", extension_count, extensions); + GLAD_VK_LUNARG_direct_driver_loading = glad_vk_has_extension("VK_LUNARG_direct_driver_loading", extension_count, extensions); + GLAD_VK_MESA_image_alignment_control = glad_vk_has_extension("VK_MESA_image_alignment_control", extension_count, extensions); + GLAD_VK_MSFT_layered_driver = glad_vk_has_extension("VK_MSFT_layered_driver", extension_count, extensions); +#if defined(VK_USE_PLATFORM_IOS_MVK) + GLAD_VK_MVK_ios_surface = glad_vk_has_extension("VK_MVK_ios_surface", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_MACOS_MVK) + GLAD_VK_MVK_macos_surface = glad_vk_has_extension("VK_MVK_macos_surface", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_VI_NN) + GLAD_VK_NN_vi_surface = glad_vk_has_extension("VK_NN_vi_surface", extension_count, extensions); + +#endif + GLAD_VK_NVX_binary_import = glad_vk_has_extension("VK_NVX_binary_import", extension_count, extensions); + GLAD_VK_NVX_image_view_handle = glad_vk_has_extension("VK_NVX_image_view_handle", extension_count, extensions); + GLAD_VK_NVX_multiview_per_view_attributes = glad_vk_has_extension("VK_NVX_multiview_per_view_attributes", extension_count, extensions); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + GLAD_VK_NV_acquire_winrt_display = glad_vk_has_extension("VK_NV_acquire_winrt_display", extension_count, extensions); + +#endif + GLAD_VK_NV_clip_space_w_scaling = glad_vk_has_extension("VK_NV_clip_space_w_scaling", extension_count, extensions); + GLAD_VK_NV_cluster_acceleration_structure = glad_vk_has_extension("VK_NV_cluster_acceleration_structure", extension_count, extensions); + GLAD_VK_NV_command_buffer_inheritance = glad_vk_has_extension("VK_NV_command_buffer_inheritance", extension_count, extensions); + GLAD_VK_NV_compute_shader_derivatives = glad_vk_has_extension("VK_NV_compute_shader_derivatives", extension_count, extensions); + GLAD_VK_NV_cooperative_matrix = glad_vk_has_extension("VK_NV_cooperative_matrix", extension_count, extensions); + GLAD_VK_NV_cooperative_matrix2 = glad_vk_has_extension("VK_NV_cooperative_matrix2", extension_count, extensions); + GLAD_VK_NV_cooperative_vector = glad_vk_has_extension("VK_NV_cooperative_vector", extension_count, extensions); + GLAD_VK_NV_copy_memory_indirect = glad_vk_has_extension("VK_NV_copy_memory_indirect", extension_count, extensions); + GLAD_VK_NV_corner_sampled_image = glad_vk_has_extension("VK_NV_corner_sampled_image", extension_count, extensions); + GLAD_VK_NV_coverage_reduction_mode = glad_vk_has_extension("VK_NV_coverage_reduction_mode", extension_count, extensions); +#if defined(VK_ENABLE_BETA_EXTENSIONS) + GLAD_VK_NV_cuda_kernel_launch = glad_vk_has_extension("VK_NV_cuda_kernel_launch", extension_count, extensions); + +#endif + GLAD_VK_NV_dedicated_allocation = glad_vk_has_extension("VK_NV_dedicated_allocation", extension_count, extensions); + GLAD_VK_NV_dedicated_allocation_image_aliasing = glad_vk_has_extension("VK_NV_dedicated_allocation_image_aliasing", extension_count, extensions); + GLAD_VK_NV_descriptor_pool_overallocation = glad_vk_has_extension("VK_NV_descriptor_pool_overallocation", extension_count, extensions); + GLAD_VK_NV_device_diagnostic_checkpoints = glad_vk_has_extension("VK_NV_device_diagnostic_checkpoints", extension_count, extensions); + GLAD_VK_NV_device_diagnostics_config = glad_vk_has_extension("VK_NV_device_diagnostics_config", extension_count, extensions); + GLAD_VK_NV_device_generated_commands = glad_vk_has_extension("VK_NV_device_generated_commands", extension_count, extensions); + GLAD_VK_NV_device_generated_commands_compute = glad_vk_has_extension("VK_NV_device_generated_commands_compute", extension_count, extensions); +#if defined(VK_ENABLE_BETA_EXTENSIONS) + GLAD_VK_NV_displacement_micromap = glad_vk_has_extension("VK_NV_displacement_micromap", extension_count, extensions); + +#endif + GLAD_VK_NV_display_stereo = glad_vk_has_extension("VK_NV_display_stereo", extension_count, extensions); + GLAD_VK_NV_extended_sparse_address_space = glad_vk_has_extension("VK_NV_extended_sparse_address_space", extension_count, extensions); + GLAD_VK_NV_external_compute_queue = glad_vk_has_extension("VK_NV_external_compute_queue", extension_count, extensions); + GLAD_VK_NV_external_memory = glad_vk_has_extension("VK_NV_external_memory", extension_count, extensions); + GLAD_VK_NV_external_memory_capabilities = glad_vk_has_extension("VK_NV_external_memory_capabilities", extension_count, extensions); + GLAD_VK_NV_external_memory_rdma = glad_vk_has_extension("VK_NV_external_memory_rdma", extension_count, extensions); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + GLAD_VK_NV_external_memory_win32 = glad_vk_has_extension("VK_NV_external_memory_win32", extension_count, extensions); + +#endif + GLAD_VK_NV_fill_rectangle = glad_vk_has_extension("VK_NV_fill_rectangle", extension_count, extensions); + GLAD_VK_NV_fragment_coverage_to_color = glad_vk_has_extension("VK_NV_fragment_coverage_to_color", extension_count, extensions); + GLAD_VK_NV_fragment_shader_barycentric = glad_vk_has_extension("VK_NV_fragment_shader_barycentric", extension_count, extensions); + GLAD_VK_NV_fragment_shading_rate_enums = glad_vk_has_extension("VK_NV_fragment_shading_rate_enums", extension_count, extensions); + GLAD_VK_NV_framebuffer_mixed_samples = glad_vk_has_extension("VK_NV_framebuffer_mixed_samples", extension_count, extensions); + GLAD_VK_NV_geometry_shader_passthrough = glad_vk_has_extension("VK_NV_geometry_shader_passthrough", extension_count, extensions); + GLAD_VK_NV_glsl_shader = glad_vk_has_extension("VK_NV_glsl_shader", extension_count, extensions); + GLAD_VK_NV_inherited_viewport_scissor = glad_vk_has_extension("VK_NV_inherited_viewport_scissor", extension_count, extensions); + GLAD_VK_NV_linear_color_attachment = glad_vk_has_extension("VK_NV_linear_color_attachment", extension_count, extensions); + GLAD_VK_NV_low_latency = glad_vk_has_extension("VK_NV_low_latency", extension_count, extensions); + GLAD_VK_NV_low_latency2 = glad_vk_has_extension("VK_NV_low_latency2", extension_count, extensions); + GLAD_VK_NV_memory_decompression = glad_vk_has_extension("VK_NV_memory_decompression", extension_count, extensions); + GLAD_VK_NV_mesh_shader = glad_vk_has_extension("VK_NV_mesh_shader", extension_count, extensions); + GLAD_VK_NV_optical_flow = glad_vk_has_extension("VK_NV_optical_flow", extension_count, extensions); + GLAD_VK_NV_partitioned_acceleration_structure = glad_vk_has_extension("VK_NV_partitioned_acceleration_structure", extension_count, extensions); + GLAD_VK_NV_per_stage_descriptor_set = glad_vk_has_extension("VK_NV_per_stage_descriptor_set", extension_count, extensions); + GLAD_VK_NV_present_barrier = glad_vk_has_extension("VK_NV_present_barrier", extension_count, extensions); +#if defined(VK_ENABLE_BETA_EXTENSIONS) + GLAD_VK_NV_present_metering = glad_vk_has_extension("VK_NV_present_metering", extension_count, extensions); + +#endif + GLAD_VK_NV_raw_access_chains = glad_vk_has_extension("VK_NV_raw_access_chains", extension_count, extensions); + GLAD_VK_NV_ray_tracing = glad_vk_has_extension("VK_NV_ray_tracing", extension_count, extensions); + GLAD_VK_NV_ray_tracing_invocation_reorder = glad_vk_has_extension("VK_NV_ray_tracing_invocation_reorder", extension_count, extensions); + GLAD_VK_NV_ray_tracing_linear_swept_spheres = glad_vk_has_extension("VK_NV_ray_tracing_linear_swept_spheres", extension_count, extensions); + GLAD_VK_NV_ray_tracing_motion_blur = glad_vk_has_extension("VK_NV_ray_tracing_motion_blur", extension_count, extensions); + GLAD_VK_NV_ray_tracing_validation = glad_vk_has_extension("VK_NV_ray_tracing_validation", extension_count, extensions); + GLAD_VK_NV_representative_fragment_test = glad_vk_has_extension("VK_NV_representative_fragment_test", extension_count, extensions); + GLAD_VK_NV_sample_mask_override_coverage = glad_vk_has_extension("VK_NV_sample_mask_override_coverage", extension_count, extensions); + GLAD_VK_NV_scissor_exclusive = glad_vk_has_extension("VK_NV_scissor_exclusive", extension_count, extensions); + GLAD_VK_NV_shader_atomic_float16_vector = glad_vk_has_extension("VK_NV_shader_atomic_float16_vector", extension_count, extensions); + GLAD_VK_NV_shader_image_footprint = glad_vk_has_extension("VK_NV_shader_image_footprint", extension_count, extensions); + GLAD_VK_NV_shader_sm_builtins = glad_vk_has_extension("VK_NV_shader_sm_builtins", extension_count, extensions); + GLAD_VK_NV_shader_subgroup_partitioned = glad_vk_has_extension("VK_NV_shader_subgroup_partitioned", extension_count, extensions); + GLAD_VK_NV_shading_rate_image = glad_vk_has_extension("VK_NV_shading_rate_image", extension_count, extensions); + GLAD_VK_NV_viewport_array2 = glad_vk_has_extension("VK_NV_viewport_array2", extension_count, extensions); + GLAD_VK_NV_viewport_swizzle = glad_vk_has_extension("VK_NV_viewport_swizzle", extension_count, extensions); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + GLAD_VK_NV_win32_keyed_mutex = glad_vk_has_extension("VK_NV_win32_keyed_mutex", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_OHOS) + GLAD_VK_OHOS_surface = glad_vk_has_extension("VK_OHOS_surface", extension_count, extensions); + +#endif + GLAD_VK_QCOM_filter_cubic_clamp = glad_vk_has_extension("VK_QCOM_filter_cubic_clamp", extension_count, extensions); + GLAD_VK_QCOM_filter_cubic_weights = glad_vk_has_extension("VK_QCOM_filter_cubic_weights", extension_count, extensions); + GLAD_VK_QCOM_fragment_density_map_offset = glad_vk_has_extension("VK_QCOM_fragment_density_map_offset", extension_count, extensions); + GLAD_VK_QCOM_image_processing = glad_vk_has_extension("VK_QCOM_image_processing", extension_count, extensions); + GLAD_VK_QCOM_image_processing2 = glad_vk_has_extension("VK_QCOM_image_processing2", extension_count, extensions); + GLAD_VK_QCOM_multiview_per_view_render_areas = glad_vk_has_extension("VK_QCOM_multiview_per_view_render_areas", extension_count, extensions); + GLAD_VK_QCOM_multiview_per_view_viewports = glad_vk_has_extension("VK_QCOM_multiview_per_view_viewports", extension_count, extensions); + GLAD_VK_QCOM_render_pass_shader_resolve = glad_vk_has_extension("VK_QCOM_render_pass_shader_resolve", extension_count, extensions); + GLAD_VK_QCOM_render_pass_store_ops = glad_vk_has_extension("VK_QCOM_render_pass_store_ops", extension_count, extensions); + GLAD_VK_QCOM_render_pass_transform = glad_vk_has_extension("VK_QCOM_render_pass_transform", extension_count, extensions); + GLAD_VK_QCOM_rotated_copy_commands = glad_vk_has_extension("VK_QCOM_rotated_copy_commands", extension_count, extensions); + GLAD_VK_QCOM_tile_memory_heap = glad_vk_has_extension("VK_QCOM_tile_memory_heap", extension_count, extensions); + GLAD_VK_QCOM_tile_properties = glad_vk_has_extension("VK_QCOM_tile_properties", extension_count, extensions); + GLAD_VK_QCOM_tile_shading = glad_vk_has_extension("VK_QCOM_tile_shading", extension_count, extensions); + GLAD_VK_QCOM_ycbcr_degamma = glad_vk_has_extension("VK_QCOM_ycbcr_degamma", extension_count, extensions); +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + GLAD_VK_QNX_external_memory_screen_buffer = glad_vk_has_extension("VK_QNX_external_memory_screen_buffer", extension_count, extensions); + +#endif +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + GLAD_VK_QNX_screen_surface = glad_vk_has_extension("VK_QNX_screen_surface", extension_count, extensions); + +#endif + GLAD_VK_SEC_amigo_profiling = glad_vk_has_extension("VK_SEC_amigo_profiling", extension_count, extensions); + GLAD_VK_SEC_pipeline_cache_incremental_mode = glad_vk_has_extension("VK_SEC_pipeline_cache_incremental_mode", extension_count, extensions); + GLAD_VK_VALVE_descriptor_set_host_mapping = glad_vk_has_extension("VK_VALVE_descriptor_set_host_mapping", extension_count, extensions); + GLAD_VK_VALVE_fragment_density_map_layered = glad_vk_has_extension("VK_VALVE_fragment_density_map_layered", extension_count, extensions); + GLAD_VK_VALVE_mutable_descriptor_type = glad_vk_has_extension("VK_VALVE_mutable_descriptor_type", extension_count, extensions); + GLAD_VK_VALVE_video_encode_rgb_conversion = glad_vk_has_extension("VK_VALVE_video_encode_rgb_conversion", extension_count, extensions); + + GLAD_UNUSED(&glad_vk_has_extension); + + glad_vk_free_extensions(extension_count, extensions); + + return 1; +} + +static int glad_vk_find_core_vulkan( VkPhysicalDevice physical_device) { + int major = 1; + int minor = 0; + +#ifdef VK_VERSION_1_1 + if (glad_vkEnumerateInstanceVersion != NULL) { + uint32_t version; + VkResult result; + + result = glad_vkEnumerateInstanceVersion(&version); + if (result == VK_SUCCESS) { + major = (int) VK_VERSION_MAJOR(version); + minor = (int) VK_VERSION_MINOR(version); + } + } +#endif + + if (physical_device != NULL && glad_vkGetPhysicalDeviceProperties != NULL) { + VkPhysicalDeviceProperties properties; + glad_vkGetPhysicalDeviceProperties(physical_device, &properties); + + major = (int) VK_VERSION_MAJOR(properties.apiVersion); + minor = (int) VK_VERSION_MINOR(properties.apiVersion); + } + + GLAD_VK_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; + GLAD_VK_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; + GLAD_VK_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; + GLAD_VK_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; + GLAD_VK_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; + + return GLAD_MAKE_VERSION(major, minor); +} + +int gladLoadVulkanUserPtr( VkPhysicalDevice physical_device, GLADuserptrloadfunc load, void *userptr) { + int version; + +#ifdef VK_VERSION_1_1 + glad_vkEnumerateInstanceVersion = (PFN_vkEnumerateInstanceVersion) load(userptr, "vkEnumerateInstanceVersion"); +#endif + version = glad_vk_find_core_vulkan( physical_device); + if (!version) { + return 0; + } + + glad_vk_load_VK_VERSION_1_0(load, userptr); + glad_vk_load_VK_VERSION_1_1(load, userptr); + glad_vk_load_VK_VERSION_1_2(load, userptr); + glad_vk_load_VK_VERSION_1_3(load, userptr); + glad_vk_load_VK_VERSION_1_4(load, userptr); + + if (!glad_vk_find_extensions_vulkan( physical_device)) return 0; +#if defined(VK_ENABLE_BETA_EXTENSIONS) + glad_vk_load_VK_AMDX_shader_enqueue(load, userptr); + +#endif + glad_vk_load_VK_AMD_anti_lag(load, userptr); + glad_vk_load_VK_AMD_buffer_marker(load, userptr); + glad_vk_load_VK_AMD_display_native_hdr(load, userptr); + glad_vk_load_VK_AMD_draw_indirect_count(load, userptr); + glad_vk_load_VK_AMD_shader_info(load, userptr); +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + glad_vk_load_VK_ANDROID_external_memory_android_hardware_buffer(load, userptr); + +#endif + glad_vk_load_VK_ARM_data_graph(load, userptr); + glad_vk_load_VK_ARM_tensors(load, userptr); + glad_vk_load_VK_EXT_acquire_drm_display(load, userptr); +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + glad_vk_load_VK_EXT_acquire_xlib_display(load, userptr); + +#endif + glad_vk_load_VK_EXT_attachment_feedback_loop_dynamic_state(load, userptr); + glad_vk_load_VK_EXT_buffer_device_address(load, userptr); + glad_vk_load_VK_EXT_calibrated_timestamps(load, userptr); + glad_vk_load_VK_EXT_color_write_enable(load, userptr); + glad_vk_load_VK_EXT_conditional_rendering(load, userptr); + glad_vk_load_VK_EXT_debug_marker(load, userptr); + glad_vk_load_VK_EXT_debug_report(load, userptr); + glad_vk_load_VK_EXT_debug_utils(load, userptr); + glad_vk_load_VK_EXT_depth_bias_control(load, userptr); + glad_vk_load_VK_EXT_depth_clamp_control(load, userptr); + glad_vk_load_VK_EXT_descriptor_buffer(load, userptr); + glad_vk_load_VK_EXT_device_fault(load, userptr); + glad_vk_load_VK_EXT_device_generated_commands(load, userptr); + glad_vk_load_VK_EXT_direct_mode_display(load, userptr); +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + glad_vk_load_VK_EXT_directfb_surface(load, userptr); + +#endif + glad_vk_load_VK_EXT_discard_rectangles(load, userptr); + glad_vk_load_VK_EXT_display_control(load, userptr); + glad_vk_load_VK_EXT_display_surface_counter(load, userptr); + glad_vk_load_VK_EXT_extended_dynamic_state(load, userptr); + glad_vk_load_VK_EXT_extended_dynamic_state2(load, userptr); + glad_vk_load_VK_EXT_extended_dynamic_state3(load, userptr); + glad_vk_load_VK_EXT_external_memory_host(load, userptr); +#if defined(VK_USE_PLATFORM_METAL_EXT) + glad_vk_load_VK_EXT_external_memory_metal(load, userptr); + +#endif + glad_vk_load_VK_EXT_fragment_density_map_offset(load, userptr); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + glad_vk_load_VK_EXT_full_screen_exclusive(load, userptr); + +#endif + glad_vk_load_VK_EXT_hdr_metadata(load, userptr); + glad_vk_load_VK_EXT_headless_surface(load, userptr); + glad_vk_load_VK_EXT_host_image_copy(load, userptr); + glad_vk_load_VK_EXT_host_query_reset(load, userptr); + glad_vk_load_VK_EXT_image_compression_control(load, userptr); + glad_vk_load_VK_EXT_image_drm_format_modifier(load, userptr); + glad_vk_load_VK_EXT_line_rasterization(load, userptr); + glad_vk_load_VK_EXT_mesh_shader(load, userptr); +#if defined(VK_USE_PLATFORM_METAL_EXT) + glad_vk_load_VK_EXT_metal_objects(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) + glad_vk_load_VK_EXT_metal_surface(load, userptr); + +#endif + glad_vk_load_VK_EXT_multi_draw(load, userptr); + glad_vk_load_VK_EXT_opacity_micromap(load, userptr); + glad_vk_load_VK_EXT_pageable_device_local_memory(load, userptr); + glad_vk_load_VK_EXT_pipeline_properties(load, userptr); + glad_vk_load_VK_EXT_private_data(load, userptr); + glad_vk_load_VK_EXT_sample_locations(load, userptr); + glad_vk_load_VK_EXT_shader_module_identifier(load, userptr); + glad_vk_load_VK_EXT_shader_object(load, userptr); + glad_vk_load_VK_EXT_swapchain_maintenance1(load, userptr); + glad_vk_load_VK_EXT_tooling_info(load, userptr); + glad_vk_load_VK_EXT_transform_feedback(load, userptr); + glad_vk_load_VK_EXT_validation_cache(load, userptr); + glad_vk_load_VK_EXT_vertex_input_dynamic_state(load, userptr); +#if defined(VK_USE_PLATFORM_FUCHSIA) + glad_vk_load_VK_FUCHSIA_buffer_collection(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + glad_vk_load_VK_FUCHSIA_external_memory(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + glad_vk_load_VK_FUCHSIA_external_semaphore(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_FUCHSIA) + glad_vk_load_VK_FUCHSIA_imagepipe_surface(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_GGP) + glad_vk_load_VK_GGP_stream_descriptor_surface(load, userptr); + +#endif + glad_vk_load_VK_GOOGLE_display_timing(load, userptr); + glad_vk_load_VK_HUAWEI_cluster_culling_shader(load, userptr); + glad_vk_load_VK_HUAWEI_invocation_mask(load, userptr); + glad_vk_load_VK_HUAWEI_subpass_shading(load, userptr); + glad_vk_load_VK_INTEL_performance_query(load, userptr); + glad_vk_load_VK_KHR_acceleration_structure(load, userptr); +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + glad_vk_load_VK_KHR_android_surface(load, userptr); + +#endif + glad_vk_load_VK_KHR_bind_memory2(load, userptr); + glad_vk_load_VK_KHR_buffer_device_address(load, userptr); + glad_vk_load_VK_KHR_calibrated_timestamps(load, userptr); + glad_vk_load_VK_KHR_cooperative_matrix(load, userptr); + glad_vk_load_VK_KHR_copy_commands2(load, userptr); + glad_vk_load_VK_KHR_copy_memory_indirect(load, userptr); + glad_vk_load_VK_KHR_create_renderpass2(load, userptr); + glad_vk_load_VK_KHR_deferred_host_operations(load, userptr); + glad_vk_load_VK_KHR_descriptor_update_template(load, userptr); + glad_vk_load_VK_KHR_device_group(load, userptr); + glad_vk_load_VK_KHR_device_group_creation(load, userptr); + glad_vk_load_VK_KHR_display(load, userptr); + glad_vk_load_VK_KHR_display_swapchain(load, userptr); + glad_vk_load_VK_KHR_draw_indirect_count(load, userptr); + glad_vk_load_VK_KHR_dynamic_rendering(load, userptr); + glad_vk_load_VK_KHR_dynamic_rendering_local_read(load, userptr); + glad_vk_load_VK_KHR_external_fence_capabilities(load, userptr); + glad_vk_load_VK_KHR_external_fence_fd(load, userptr); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + glad_vk_load_VK_KHR_external_fence_win32(load, userptr); + +#endif + glad_vk_load_VK_KHR_external_memory_capabilities(load, userptr); + glad_vk_load_VK_KHR_external_memory_fd(load, userptr); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + glad_vk_load_VK_KHR_external_memory_win32(load, userptr); + +#endif + glad_vk_load_VK_KHR_external_semaphore_capabilities(load, userptr); + glad_vk_load_VK_KHR_external_semaphore_fd(load, userptr); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + glad_vk_load_VK_KHR_external_semaphore_win32(load, userptr); + +#endif + glad_vk_load_VK_KHR_fragment_shading_rate(load, userptr); + glad_vk_load_VK_KHR_get_display_properties2(load, userptr); + glad_vk_load_VK_KHR_get_memory_requirements2(load, userptr); + glad_vk_load_VK_KHR_get_physical_device_properties2(load, userptr); + glad_vk_load_VK_KHR_get_surface_capabilities2(load, userptr); + glad_vk_load_VK_KHR_line_rasterization(load, userptr); + glad_vk_load_VK_KHR_maintenance1(load, userptr); + glad_vk_load_VK_KHR_maintenance3(load, userptr); + glad_vk_load_VK_KHR_maintenance4(load, userptr); + glad_vk_load_VK_KHR_maintenance5(load, userptr); + glad_vk_load_VK_KHR_maintenance6(load, userptr); + glad_vk_load_VK_KHR_map_memory2(load, userptr); + glad_vk_load_VK_KHR_performance_query(load, userptr); + glad_vk_load_VK_KHR_pipeline_binary(load, userptr); + glad_vk_load_VK_KHR_pipeline_executable_properties(load, userptr); + glad_vk_load_VK_KHR_present_wait(load, userptr); + glad_vk_load_VK_KHR_present_wait2(load, userptr); + glad_vk_load_VK_KHR_push_descriptor(load, userptr); + glad_vk_load_VK_KHR_ray_tracing_maintenance1(load, userptr); + glad_vk_load_VK_KHR_ray_tracing_pipeline(load, userptr); + glad_vk_load_VK_KHR_sampler_ycbcr_conversion(load, userptr); + glad_vk_load_VK_KHR_shared_presentable_image(load, userptr); + glad_vk_load_VK_KHR_surface(load, userptr); + glad_vk_load_VK_KHR_swapchain(load, userptr); + glad_vk_load_VK_KHR_swapchain_maintenance1(load, userptr); + glad_vk_load_VK_KHR_synchronization2(load, userptr); + glad_vk_load_VK_KHR_timeline_semaphore(load, userptr); + glad_vk_load_VK_KHR_video_decode_queue(load, userptr); + glad_vk_load_VK_KHR_video_encode_queue(load, userptr); + glad_vk_load_VK_KHR_video_queue(load, userptr); +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + glad_vk_load_VK_KHR_wayland_surface(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + glad_vk_load_VK_KHR_win32_surface(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) + glad_vk_load_VK_KHR_xcb_surface(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) + glad_vk_load_VK_KHR_xlib_surface(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_IOS_MVK) + glad_vk_load_VK_MVK_ios_surface(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_MACOS_MVK) + glad_vk_load_VK_MVK_macos_surface(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_VI_NN) + glad_vk_load_VK_NN_vi_surface(load, userptr); + +#endif + glad_vk_load_VK_NVX_binary_import(load, userptr); + glad_vk_load_VK_NVX_image_view_handle(load, userptr); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + glad_vk_load_VK_NV_acquire_winrt_display(load, userptr); + +#endif + glad_vk_load_VK_NV_clip_space_w_scaling(load, userptr); + glad_vk_load_VK_NV_cluster_acceleration_structure(load, userptr); + glad_vk_load_VK_NV_cooperative_matrix(load, userptr); + glad_vk_load_VK_NV_cooperative_matrix2(load, userptr); + glad_vk_load_VK_NV_cooperative_vector(load, userptr); + glad_vk_load_VK_NV_copy_memory_indirect(load, userptr); + glad_vk_load_VK_NV_coverage_reduction_mode(load, userptr); +#if defined(VK_ENABLE_BETA_EXTENSIONS) + glad_vk_load_VK_NV_cuda_kernel_launch(load, userptr); + +#endif + glad_vk_load_VK_NV_device_diagnostic_checkpoints(load, userptr); + glad_vk_load_VK_NV_device_generated_commands(load, userptr); + glad_vk_load_VK_NV_device_generated_commands_compute(load, userptr); + glad_vk_load_VK_NV_external_compute_queue(load, userptr); + glad_vk_load_VK_NV_external_memory_capabilities(load, userptr); + glad_vk_load_VK_NV_external_memory_rdma(load, userptr); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + glad_vk_load_VK_NV_external_memory_win32(load, userptr); + +#endif + glad_vk_load_VK_NV_fragment_shading_rate_enums(load, userptr); + glad_vk_load_VK_NV_low_latency2(load, userptr); + glad_vk_load_VK_NV_memory_decompression(load, userptr); + glad_vk_load_VK_NV_mesh_shader(load, userptr); + glad_vk_load_VK_NV_optical_flow(load, userptr); + glad_vk_load_VK_NV_partitioned_acceleration_structure(load, userptr); + glad_vk_load_VK_NV_ray_tracing(load, userptr); + glad_vk_load_VK_NV_scissor_exclusive(load, userptr); + glad_vk_load_VK_NV_shading_rate_image(load, userptr); +#if defined(VK_USE_PLATFORM_OHOS) + glad_vk_load_VK_OHOS_surface(load, userptr); + +#endif + glad_vk_load_VK_QCOM_tile_memory_heap(load, userptr); + glad_vk_load_VK_QCOM_tile_properties(load, userptr); + glad_vk_load_VK_QCOM_tile_shading(load, userptr); +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + glad_vk_load_VK_QNX_external_memory_screen_buffer(load, userptr); + +#endif +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + glad_vk_load_VK_QNX_screen_surface(load, userptr); + +#endif + glad_vk_load_VK_VALVE_descriptor_set_host_mapping(load, userptr); + + glad_vk_resolve_aliases(); + + return version; +} + + +int gladLoadVulkan( VkPhysicalDevice physical_device, GLADloadfunc load) { + return gladLoadVulkanUserPtr( physical_device, glad_vk_get_proc_from_userptr, GLAD_GNUC_EXTENSION (void*) load); +} + + + + + +#ifdef GLAD_VULKAN + +#ifndef GLAD_LOADER_LIBRARY_C_ +#define GLAD_LOADER_LIBRARY_C_ + +#include +#include + +#if GLAD_PLATFORM_WIN32 +#include +#else +#include +#endif + + +static void* glad_get_dlopen_handle(const char *lib_names[], int length) { + void *handle = NULL; + int i; + + for (i = 0; i < length; ++i) { +#if GLAD_PLATFORM_WIN32 + #if GLAD_PLATFORM_UWP + size_t buffer_size = (strlen(lib_names[i]) + 1) * sizeof(WCHAR); + LPWSTR buffer = (LPWSTR) malloc(buffer_size); + if (buffer != NULL) { + int ret = MultiByteToWideChar(CP_ACP, 0, lib_names[i], -1, buffer, buffer_size); + if (ret != 0) { + handle = (void*) LoadPackagedLibrary(buffer, 0); + } + free((void*) buffer); + } + #else + handle = (void*) LoadLibraryA(lib_names[i]); + #endif +#else + handle = dlopen(lib_names[i], RTLD_LAZY | RTLD_LOCAL); +#endif + if (handle != NULL) { + return handle; + } + } + + return NULL; +} + +static void glad_close_dlopen_handle(void* handle) { + if (handle != NULL) { +#if GLAD_PLATFORM_WIN32 + FreeLibrary((HMODULE) handle); +#else + dlclose(handle); +#endif + } +} + +static GLADapiproc glad_dlsym_handle(void* handle, const char *name) { + if (handle == NULL) { + return NULL; + } + +#if GLAD_PLATFORM_WIN32 + return (GLADapiproc) GetProcAddress((HMODULE) handle, name); +#else + return GLAD_GNUC_EXTENSION (GLADapiproc) dlsym(handle, name); +#endif +} + +#endif /* GLAD_LOADER_LIBRARY_C_ */ + + +static const char* DEVICE_FUNCTIONS[] = { + "vkAcquireFullScreenExclusiveModeEXT", + "vkAcquireNextImage2KHR", + "vkAcquireNextImageKHR", + "vkAcquirePerformanceConfigurationINTEL", + "vkAcquireProfilingLockKHR", + "vkAllocateCommandBuffers", + "vkAllocateDescriptorSets", + "vkAllocateMemory", + "vkAntiLagUpdateAMD", + "vkBeginCommandBuffer", + "vkBindAccelerationStructureMemoryNV", + "vkBindBufferMemory", + "vkBindBufferMemory2", + "vkBindBufferMemory2KHR", + "vkBindDataGraphPipelineSessionMemoryARM", + "vkBindImageMemory", + "vkBindImageMemory2", + "vkBindImageMemory2KHR", + "vkBindOpticalFlowSessionImageNV", + "vkBindTensorMemoryARM", + "vkBindVideoSessionMemoryKHR", + "vkBuildAccelerationStructuresKHR", + "vkBuildMicromapsEXT", + "vkCmdBeginConditionalRenderingEXT", + "vkCmdBeginDebugUtilsLabelEXT", + "vkCmdBeginPerTileExecutionQCOM", + "vkCmdBeginQuery", + "vkCmdBeginQueryIndexedEXT", + "vkCmdBeginRenderPass", + "vkCmdBeginRenderPass2", + "vkCmdBeginRenderPass2KHR", + "vkCmdBeginRendering", + "vkCmdBeginRenderingKHR", + "vkCmdBeginTransformFeedbackEXT", + "vkCmdBeginVideoCodingKHR", + "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT", + "vkCmdBindDescriptorBufferEmbeddedSamplersEXT", + "vkCmdBindDescriptorBuffersEXT", + "vkCmdBindDescriptorSets", + "vkCmdBindDescriptorSets2", + "vkCmdBindDescriptorSets2KHR", + "vkCmdBindIndexBuffer", + "vkCmdBindIndexBuffer2", + "vkCmdBindIndexBuffer2KHR", + "vkCmdBindInvocationMaskHUAWEI", + "vkCmdBindPipeline", + "vkCmdBindPipelineShaderGroupNV", + "vkCmdBindShadersEXT", + "vkCmdBindShadingRateImageNV", + "vkCmdBindTileMemoryQCOM", + "vkCmdBindTransformFeedbackBuffersEXT", + "vkCmdBindVertexBuffers", + "vkCmdBindVertexBuffers2", + "vkCmdBindVertexBuffers2EXT", + "vkCmdBlitImage", + "vkCmdBlitImage2", + "vkCmdBlitImage2KHR", + "vkCmdBuildAccelerationStructureNV", + "vkCmdBuildAccelerationStructuresIndirectKHR", + "vkCmdBuildAccelerationStructuresKHR", + "vkCmdBuildClusterAccelerationStructureIndirectNV", + "vkCmdBuildMicromapsEXT", + "vkCmdBuildPartitionedAccelerationStructuresNV", + "vkCmdClearAttachments", + "vkCmdClearColorImage", + "vkCmdClearDepthStencilImage", + "vkCmdControlVideoCodingKHR", + "vkCmdConvertCooperativeVectorMatrixNV", + "vkCmdCopyAccelerationStructureKHR", + "vkCmdCopyAccelerationStructureNV", + "vkCmdCopyAccelerationStructureToMemoryKHR", + "vkCmdCopyBuffer", + "vkCmdCopyBuffer2", + "vkCmdCopyBuffer2KHR", + "vkCmdCopyBufferToImage", + "vkCmdCopyBufferToImage2", + "vkCmdCopyBufferToImage2KHR", + "vkCmdCopyImage", + "vkCmdCopyImage2", + "vkCmdCopyImage2KHR", + "vkCmdCopyImageToBuffer", + "vkCmdCopyImageToBuffer2", + "vkCmdCopyImageToBuffer2KHR", + "vkCmdCopyMemoryIndirectKHR", + "vkCmdCopyMemoryIndirectNV", + "vkCmdCopyMemoryToAccelerationStructureKHR", + "vkCmdCopyMemoryToImageIndirectKHR", + "vkCmdCopyMemoryToImageIndirectNV", + "vkCmdCopyMemoryToMicromapEXT", + "vkCmdCopyMicromapEXT", + "vkCmdCopyMicromapToMemoryEXT", + "vkCmdCopyQueryPoolResults", + "vkCmdCopyTensorARM", + "vkCmdCuLaunchKernelNVX", + "vkCmdCudaLaunchKernelNV", + "vkCmdDebugMarkerBeginEXT", + "vkCmdDebugMarkerEndEXT", + "vkCmdDebugMarkerInsertEXT", + "vkCmdDecodeVideoKHR", + "vkCmdDecompressMemoryIndirectCountNV", + "vkCmdDecompressMemoryNV", + "vkCmdDispatch", + "vkCmdDispatchBase", + "vkCmdDispatchBaseKHR", + "vkCmdDispatchDataGraphARM", + "vkCmdDispatchGraphAMDX", + "vkCmdDispatchGraphIndirectAMDX", + "vkCmdDispatchGraphIndirectCountAMDX", + "vkCmdDispatchIndirect", + "vkCmdDispatchTileQCOM", + "vkCmdDraw", + "vkCmdDrawClusterHUAWEI", + "vkCmdDrawClusterIndirectHUAWEI", + "vkCmdDrawIndexed", + "vkCmdDrawIndexedIndirect", + "vkCmdDrawIndexedIndirectCount", + "vkCmdDrawIndexedIndirectCountAMD", + "vkCmdDrawIndexedIndirectCountKHR", + "vkCmdDrawIndirect", + "vkCmdDrawIndirectByteCountEXT", + "vkCmdDrawIndirectCount", + "vkCmdDrawIndirectCountAMD", + "vkCmdDrawIndirectCountKHR", + "vkCmdDrawMeshTasksEXT", + "vkCmdDrawMeshTasksIndirectCountEXT", + "vkCmdDrawMeshTasksIndirectCountNV", + "vkCmdDrawMeshTasksIndirectEXT", + "vkCmdDrawMeshTasksIndirectNV", + "vkCmdDrawMeshTasksNV", + "vkCmdDrawMultiEXT", + "vkCmdDrawMultiIndexedEXT", + "vkCmdEncodeVideoKHR", + "vkCmdEndConditionalRenderingEXT", + "vkCmdEndDebugUtilsLabelEXT", + "vkCmdEndPerTileExecutionQCOM", + "vkCmdEndQuery", + "vkCmdEndQueryIndexedEXT", + "vkCmdEndRenderPass", + "vkCmdEndRenderPass2", + "vkCmdEndRenderPass2KHR", + "vkCmdEndRendering", + "vkCmdEndRendering2EXT", + "vkCmdEndRenderingKHR", + "vkCmdEndTransformFeedbackEXT", + "vkCmdEndVideoCodingKHR", + "vkCmdExecuteCommands", + "vkCmdExecuteGeneratedCommandsEXT", + "vkCmdExecuteGeneratedCommandsNV", + "vkCmdFillBuffer", + "vkCmdInitializeGraphScratchMemoryAMDX", + "vkCmdInsertDebugUtilsLabelEXT", + "vkCmdNextSubpass", + "vkCmdNextSubpass2", + "vkCmdNextSubpass2KHR", + "vkCmdOpticalFlowExecuteNV", + "vkCmdPipelineBarrier", + "vkCmdPipelineBarrier2", + "vkCmdPipelineBarrier2KHR", + "vkCmdPreprocessGeneratedCommandsEXT", + "vkCmdPreprocessGeneratedCommandsNV", + "vkCmdPushConstants", + "vkCmdPushConstants2", + "vkCmdPushConstants2KHR", + "vkCmdPushDescriptorSet", + "vkCmdPushDescriptorSet2", + "vkCmdPushDescriptorSet2KHR", + "vkCmdPushDescriptorSetKHR", + "vkCmdPushDescriptorSetWithTemplate", + "vkCmdPushDescriptorSetWithTemplate2", + "vkCmdPushDescriptorSetWithTemplate2KHR", + "vkCmdPushDescriptorSetWithTemplateKHR", + "vkCmdResetEvent", + "vkCmdResetEvent2", + "vkCmdResetEvent2KHR", + "vkCmdResetQueryPool", + "vkCmdResolveImage", + "vkCmdResolveImage2", + "vkCmdResolveImage2KHR", + "vkCmdSetAlphaToCoverageEnableEXT", + "vkCmdSetAlphaToOneEnableEXT", + "vkCmdSetAttachmentFeedbackLoopEnableEXT", + "vkCmdSetBlendConstants", + "vkCmdSetCheckpointNV", + "vkCmdSetCoarseSampleOrderNV", + "vkCmdSetColorBlendAdvancedEXT", + "vkCmdSetColorBlendEnableEXT", + "vkCmdSetColorBlendEquationEXT", + "vkCmdSetColorWriteEnableEXT", + "vkCmdSetColorWriteMaskEXT", + "vkCmdSetConservativeRasterizationModeEXT", + "vkCmdSetCoverageModulationModeNV", + "vkCmdSetCoverageModulationTableEnableNV", + "vkCmdSetCoverageModulationTableNV", + "vkCmdSetCoverageReductionModeNV", + "vkCmdSetCoverageToColorEnableNV", + "vkCmdSetCoverageToColorLocationNV", + "vkCmdSetCullMode", + "vkCmdSetCullModeEXT", + "vkCmdSetDepthBias", + "vkCmdSetDepthBias2EXT", + "vkCmdSetDepthBiasEnable", + "vkCmdSetDepthBiasEnableEXT", + "vkCmdSetDepthBounds", + "vkCmdSetDepthBoundsTestEnable", + "vkCmdSetDepthBoundsTestEnableEXT", + "vkCmdSetDepthClampEnableEXT", + "vkCmdSetDepthClampRangeEXT", + "vkCmdSetDepthClipEnableEXT", + "vkCmdSetDepthClipNegativeOneToOneEXT", + "vkCmdSetDepthCompareOp", + "vkCmdSetDepthCompareOpEXT", + "vkCmdSetDepthTestEnable", + "vkCmdSetDepthTestEnableEXT", + "vkCmdSetDepthWriteEnable", + "vkCmdSetDepthWriteEnableEXT", + "vkCmdSetDescriptorBufferOffsets2EXT", + "vkCmdSetDescriptorBufferOffsetsEXT", + "vkCmdSetDeviceMask", + "vkCmdSetDeviceMaskKHR", + "vkCmdSetDiscardRectangleEXT", + "vkCmdSetDiscardRectangleEnableEXT", + "vkCmdSetDiscardRectangleModeEXT", + "vkCmdSetEvent", + "vkCmdSetEvent2", + "vkCmdSetEvent2KHR", + "vkCmdSetExclusiveScissorEnableNV", + "vkCmdSetExclusiveScissorNV", + "vkCmdSetExtraPrimitiveOverestimationSizeEXT", + "vkCmdSetFragmentShadingRateEnumNV", + "vkCmdSetFragmentShadingRateKHR", + "vkCmdSetFrontFace", + "vkCmdSetFrontFaceEXT", + "vkCmdSetLineRasterizationModeEXT", + "vkCmdSetLineStipple", + "vkCmdSetLineStippleEXT", + "vkCmdSetLineStippleEnableEXT", + "vkCmdSetLineStippleKHR", + "vkCmdSetLineWidth", + "vkCmdSetLogicOpEXT", + "vkCmdSetLogicOpEnableEXT", + "vkCmdSetPatchControlPointsEXT", + "vkCmdSetPerformanceMarkerINTEL", + "vkCmdSetPerformanceOverrideINTEL", + "vkCmdSetPerformanceStreamMarkerINTEL", + "vkCmdSetPolygonModeEXT", + "vkCmdSetPrimitiveRestartEnable", + "vkCmdSetPrimitiveRestartEnableEXT", + "vkCmdSetPrimitiveTopology", + "vkCmdSetPrimitiveTopologyEXT", + "vkCmdSetProvokingVertexModeEXT", + "vkCmdSetRasterizationSamplesEXT", + "vkCmdSetRasterizationStreamEXT", + "vkCmdSetRasterizerDiscardEnable", + "vkCmdSetRasterizerDiscardEnableEXT", + "vkCmdSetRayTracingPipelineStackSizeKHR", + "vkCmdSetRenderingAttachmentLocations", + "vkCmdSetRenderingAttachmentLocationsKHR", + "vkCmdSetRenderingInputAttachmentIndices", + "vkCmdSetRenderingInputAttachmentIndicesKHR", + "vkCmdSetRepresentativeFragmentTestEnableNV", + "vkCmdSetSampleLocationsEXT", + "vkCmdSetSampleLocationsEnableEXT", + "vkCmdSetSampleMaskEXT", + "vkCmdSetScissor", + "vkCmdSetScissorWithCount", + "vkCmdSetScissorWithCountEXT", + "vkCmdSetShadingRateImageEnableNV", + "vkCmdSetStencilCompareMask", + "vkCmdSetStencilOp", + "vkCmdSetStencilOpEXT", + "vkCmdSetStencilReference", + "vkCmdSetStencilTestEnable", + "vkCmdSetStencilTestEnableEXT", + "vkCmdSetStencilWriteMask", + "vkCmdSetTessellationDomainOriginEXT", + "vkCmdSetVertexInputEXT", + "vkCmdSetViewport", + "vkCmdSetViewportShadingRatePaletteNV", + "vkCmdSetViewportSwizzleNV", + "vkCmdSetViewportWScalingEnableNV", + "vkCmdSetViewportWScalingNV", + "vkCmdSetViewportWithCount", + "vkCmdSetViewportWithCountEXT", + "vkCmdSubpassShadingHUAWEI", + "vkCmdTraceRaysIndirect2KHR", + "vkCmdTraceRaysIndirectKHR", + "vkCmdTraceRaysKHR", + "vkCmdTraceRaysNV", + "vkCmdUpdateBuffer", + "vkCmdUpdatePipelineIndirectBufferNV", + "vkCmdWaitEvents", + "vkCmdWaitEvents2", + "vkCmdWaitEvents2KHR", + "vkCmdWriteAccelerationStructuresPropertiesKHR", + "vkCmdWriteAccelerationStructuresPropertiesNV", + "vkCmdWriteBufferMarker2AMD", + "vkCmdWriteBufferMarkerAMD", + "vkCmdWriteMicromapsPropertiesEXT", + "vkCmdWriteTimestamp", + "vkCmdWriteTimestamp2", + "vkCmdWriteTimestamp2KHR", + "vkCompileDeferredNV", + "vkConvertCooperativeVectorMatrixNV", + "vkCopyAccelerationStructureKHR", + "vkCopyAccelerationStructureToMemoryKHR", + "vkCopyImageToImage", + "vkCopyImageToImageEXT", + "vkCopyImageToMemory", + "vkCopyImageToMemoryEXT", + "vkCopyMemoryToAccelerationStructureKHR", + "vkCopyMemoryToImage", + "vkCopyMemoryToImageEXT", + "vkCopyMemoryToMicromapEXT", + "vkCopyMicromapEXT", + "vkCopyMicromapToMemoryEXT", + "vkCreateAccelerationStructureKHR", + "vkCreateAccelerationStructureNV", + "vkCreateBuffer", + "vkCreateBufferCollectionFUCHSIA", + "vkCreateBufferView", + "vkCreateCommandPool", + "vkCreateComputePipelines", + "vkCreateCuFunctionNVX", + "vkCreateCuModuleNVX", + "vkCreateCudaFunctionNV", + "vkCreateCudaModuleNV", + "vkCreateDataGraphPipelineSessionARM", + "vkCreateDataGraphPipelinesARM", + "vkCreateDeferredOperationKHR", + "vkCreateDescriptorPool", + "vkCreateDescriptorSetLayout", + "vkCreateDescriptorUpdateTemplate", + "vkCreateDescriptorUpdateTemplateKHR", + "vkCreateEvent", + "vkCreateExecutionGraphPipelinesAMDX", + "vkCreateExternalComputeQueueNV", + "vkCreateFence", + "vkCreateFramebuffer", + "vkCreateGraphicsPipelines", + "vkCreateImage", + "vkCreateImageView", + "vkCreateIndirectCommandsLayoutEXT", + "vkCreateIndirectCommandsLayoutNV", + "vkCreateIndirectExecutionSetEXT", + "vkCreateMicromapEXT", + "vkCreateOpticalFlowSessionNV", + "vkCreatePipelineBinariesKHR", + "vkCreatePipelineCache", + "vkCreatePipelineLayout", + "vkCreatePrivateDataSlot", + "vkCreatePrivateDataSlotEXT", + "vkCreateQueryPool", + "vkCreateRayTracingPipelinesKHR", + "vkCreateRayTracingPipelinesNV", + "vkCreateRenderPass", + "vkCreateRenderPass2", + "vkCreateRenderPass2KHR", + "vkCreateSampler", + "vkCreateSamplerYcbcrConversion", + "vkCreateSamplerYcbcrConversionKHR", + "vkCreateSemaphore", + "vkCreateShaderModule", + "vkCreateShadersEXT", + "vkCreateSharedSwapchainsKHR", + "vkCreateSwapchainKHR", + "vkCreateTensorARM", + "vkCreateTensorViewARM", + "vkCreateValidationCacheEXT", + "vkCreateVideoSessionKHR", + "vkCreateVideoSessionParametersKHR", + "vkDebugMarkerSetObjectNameEXT", + "vkDebugMarkerSetObjectTagEXT", + "vkDeferredOperationJoinKHR", + "vkDestroyAccelerationStructureKHR", + "vkDestroyAccelerationStructureNV", + "vkDestroyBuffer", + "vkDestroyBufferCollectionFUCHSIA", + "vkDestroyBufferView", + "vkDestroyCommandPool", + "vkDestroyCuFunctionNVX", + "vkDestroyCuModuleNVX", + "vkDestroyCudaFunctionNV", + "vkDestroyCudaModuleNV", + "vkDestroyDataGraphPipelineSessionARM", + "vkDestroyDeferredOperationKHR", + "vkDestroyDescriptorPool", + "vkDestroyDescriptorSetLayout", + "vkDestroyDescriptorUpdateTemplate", + "vkDestroyDescriptorUpdateTemplateKHR", + "vkDestroyDevice", + "vkDestroyEvent", + "vkDestroyExternalComputeQueueNV", + "vkDestroyFence", + "vkDestroyFramebuffer", + "vkDestroyImage", + "vkDestroyImageView", + "vkDestroyIndirectCommandsLayoutEXT", + "vkDestroyIndirectCommandsLayoutNV", + "vkDestroyIndirectExecutionSetEXT", + "vkDestroyMicromapEXT", + "vkDestroyOpticalFlowSessionNV", + "vkDestroyPipeline", + "vkDestroyPipelineBinaryKHR", + "vkDestroyPipelineCache", + "vkDestroyPipelineLayout", + "vkDestroyPrivateDataSlot", + "vkDestroyPrivateDataSlotEXT", + "vkDestroyQueryPool", + "vkDestroyRenderPass", + "vkDestroySampler", + "vkDestroySamplerYcbcrConversion", + "vkDestroySamplerYcbcrConversionKHR", + "vkDestroySemaphore", + "vkDestroyShaderEXT", + "vkDestroyShaderModule", + "vkDestroySwapchainKHR", + "vkDestroyTensorARM", + "vkDestroyTensorViewARM", + "vkDestroyValidationCacheEXT", + "vkDestroyVideoSessionKHR", + "vkDestroyVideoSessionParametersKHR", + "vkDeviceWaitIdle", + "vkDisplayPowerControlEXT", + "vkEndCommandBuffer", + "vkExportMetalObjectsEXT", + "vkFlushMappedMemoryRanges", + "vkFreeCommandBuffers", + "vkFreeDescriptorSets", + "vkFreeMemory", + "vkGetAccelerationStructureBuildSizesKHR", + "vkGetAccelerationStructureDeviceAddressKHR", + "vkGetAccelerationStructureHandleNV", + "vkGetAccelerationStructureMemoryRequirementsNV", + "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT", + "vkGetAndroidHardwareBufferPropertiesANDROID", + "vkGetBufferCollectionPropertiesFUCHSIA", + "vkGetBufferDeviceAddress", + "vkGetBufferDeviceAddressEXT", + "vkGetBufferDeviceAddressKHR", + "vkGetBufferMemoryRequirements", + "vkGetBufferMemoryRequirements2", + "vkGetBufferMemoryRequirements2KHR", + "vkGetBufferOpaqueCaptureAddress", + "vkGetBufferOpaqueCaptureAddressKHR", + "vkGetBufferOpaqueCaptureDescriptorDataEXT", + "vkGetCalibratedTimestampsEXT", + "vkGetCalibratedTimestampsKHR", + "vkGetClusterAccelerationStructureBuildSizesNV", + "vkGetCudaModuleCacheNV", + "vkGetDataGraphPipelineAvailablePropertiesARM", + "vkGetDataGraphPipelinePropertiesARM", + "vkGetDataGraphPipelineSessionBindPointRequirementsARM", + "vkGetDataGraphPipelineSessionMemoryRequirementsARM", + "vkGetDeferredOperationMaxConcurrencyKHR", + "vkGetDeferredOperationResultKHR", + "vkGetDescriptorEXT", + "vkGetDescriptorSetHostMappingVALVE", + "vkGetDescriptorSetLayoutBindingOffsetEXT", + "vkGetDescriptorSetLayoutHostMappingInfoVALVE", + "vkGetDescriptorSetLayoutSizeEXT", + "vkGetDescriptorSetLayoutSupport", + "vkGetDescriptorSetLayoutSupportKHR", + "vkGetDeviceAccelerationStructureCompatibilityKHR", + "vkGetDeviceBufferMemoryRequirements", + "vkGetDeviceBufferMemoryRequirementsKHR", + "vkGetDeviceFaultInfoEXT", + "vkGetDeviceGroupPeerMemoryFeatures", + "vkGetDeviceGroupPeerMemoryFeaturesKHR", + "vkGetDeviceGroupPresentCapabilitiesKHR", + "vkGetDeviceGroupSurfacePresentModes2EXT", + "vkGetDeviceGroupSurfacePresentModesKHR", + "vkGetDeviceImageMemoryRequirements", + "vkGetDeviceImageMemoryRequirementsKHR", + "vkGetDeviceImageSparseMemoryRequirements", + "vkGetDeviceImageSparseMemoryRequirementsKHR", + "vkGetDeviceImageSubresourceLayout", + "vkGetDeviceImageSubresourceLayoutKHR", + "vkGetDeviceMemoryCommitment", + "vkGetDeviceMemoryOpaqueCaptureAddress", + "vkGetDeviceMemoryOpaqueCaptureAddressKHR", + "vkGetDeviceMicromapCompatibilityEXT", + "vkGetDeviceProcAddr", + "vkGetDeviceQueue", + "vkGetDeviceQueue2", + "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI", + "vkGetDeviceTensorMemoryRequirementsARM", + "vkGetDynamicRenderingTilePropertiesQCOM", + "vkGetEncodedVideoSessionParametersKHR", + "vkGetEventStatus", + "vkGetExecutionGraphPipelineNodeIndexAMDX", + "vkGetExecutionGraphPipelineScratchSizeAMDX", + "vkGetFenceFdKHR", + "vkGetFenceStatus", + "vkGetFenceWin32HandleKHR", + "vkGetFramebufferTilePropertiesQCOM", + "vkGetGeneratedCommandsMemoryRequirementsEXT", + "vkGetGeneratedCommandsMemoryRequirementsNV", + "vkGetImageDrmFormatModifierPropertiesEXT", + "vkGetImageMemoryRequirements", + "vkGetImageMemoryRequirements2", + "vkGetImageMemoryRequirements2KHR", + "vkGetImageOpaqueCaptureDescriptorDataEXT", + "vkGetImageSparseMemoryRequirements", + "vkGetImageSparseMemoryRequirements2", + "vkGetImageSparseMemoryRequirements2KHR", + "vkGetImageSubresourceLayout", + "vkGetImageSubresourceLayout2", + "vkGetImageSubresourceLayout2EXT", + "vkGetImageSubresourceLayout2KHR", + "vkGetImageViewAddressNVX", + "vkGetImageViewHandle64NVX", + "vkGetImageViewHandleNVX", + "vkGetImageViewOpaqueCaptureDescriptorDataEXT", + "vkGetLatencyTimingsNV", + "vkGetMemoryAndroidHardwareBufferANDROID", + "vkGetMemoryFdKHR", + "vkGetMemoryFdPropertiesKHR", + "vkGetMemoryHostPointerPropertiesEXT", + "vkGetMemoryMetalHandleEXT", + "vkGetMemoryMetalHandlePropertiesEXT", + "vkGetMemoryRemoteAddressNV", + "vkGetMemoryWin32HandleKHR", + "vkGetMemoryWin32HandleNV", + "vkGetMemoryWin32HandlePropertiesKHR", + "vkGetMemoryZirconHandleFUCHSIA", + "vkGetMemoryZirconHandlePropertiesFUCHSIA", + "vkGetMicromapBuildSizesEXT", + "vkGetPartitionedAccelerationStructuresBuildSizesNV", + "vkGetPastPresentationTimingGOOGLE", + "vkGetPerformanceParameterINTEL", + "vkGetPipelineBinaryDataKHR", + "vkGetPipelineCacheData", + "vkGetPipelineExecutableInternalRepresentationsKHR", + "vkGetPipelineExecutablePropertiesKHR", + "vkGetPipelineExecutableStatisticsKHR", + "vkGetPipelineIndirectDeviceAddressNV", + "vkGetPipelineIndirectMemoryRequirementsNV", + "vkGetPipelineKeyKHR", + "vkGetPipelinePropertiesEXT", + "vkGetPrivateData", + "vkGetPrivateDataEXT", + "vkGetQueryPoolResults", + "vkGetQueueCheckpointData2NV", + "vkGetQueueCheckpointDataNV", + "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR", + "vkGetRayTracingShaderGroupHandlesKHR", + "vkGetRayTracingShaderGroupHandlesNV", + "vkGetRayTracingShaderGroupStackSizeKHR", + "vkGetRefreshCycleDurationGOOGLE", + "vkGetRenderAreaGranularity", + "vkGetRenderingAreaGranularity", + "vkGetRenderingAreaGranularityKHR", + "vkGetSamplerOpaqueCaptureDescriptorDataEXT", + "vkGetScreenBufferPropertiesQNX", + "vkGetSemaphoreCounterValue", + "vkGetSemaphoreCounterValueKHR", + "vkGetSemaphoreFdKHR", + "vkGetSemaphoreWin32HandleKHR", + "vkGetSemaphoreZirconHandleFUCHSIA", + "vkGetShaderBinaryDataEXT", + "vkGetShaderInfoAMD", + "vkGetShaderModuleCreateInfoIdentifierEXT", + "vkGetShaderModuleIdentifierEXT", + "vkGetSwapchainCounterEXT", + "vkGetSwapchainImagesKHR", + "vkGetSwapchainStatusKHR", + "vkGetTensorMemoryRequirementsARM", + "vkGetTensorOpaqueCaptureDescriptorDataARM", + "vkGetTensorViewOpaqueCaptureDescriptorDataARM", + "vkGetValidationCacheDataEXT", + "vkGetVideoSessionMemoryRequirementsKHR", + "vkImportFenceFdKHR", + "vkImportFenceWin32HandleKHR", + "vkImportSemaphoreFdKHR", + "vkImportSemaphoreWin32HandleKHR", + "vkImportSemaphoreZirconHandleFUCHSIA", + "vkInitializePerformanceApiINTEL", + "vkInvalidateMappedMemoryRanges", + "vkLatencySleepNV", + "vkMapMemory", + "vkMapMemory2", + "vkMapMemory2KHR", + "vkMergePipelineCaches", + "vkMergeValidationCachesEXT", + "vkQueueBeginDebugUtilsLabelEXT", + "vkQueueBindSparse", + "vkQueueEndDebugUtilsLabelEXT", + "vkQueueInsertDebugUtilsLabelEXT", + "vkQueueNotifyOutOfBandNV", + "vkQueuePresentKHR", + "vkQueueSetPerformanceConfigurationINTEL", + "vkQueueSubmit", + "vkQueueSubmit2", + "vkQueueSubmit2KHR", + "vkQueueWaitIdle", + "vkRegisterDeviceEventEXT", + "vkRegisterDisplayEventEXT", + "vkReleaseCapturedPipelineDataKHR", + "vkReleaseFullScreenExclusiveModeEXT", + "vkReleasePerformanceConfigurationINTEL", + "vkReleaseProfilingLockKHR", + "vkReleaseSwapchainImagesEXT", + "vkReleaseSwapchainImagesKHR", + "vkResetCommandBuffer", + "vkResetCommandPool", + "vkResetDescriptorPool", + "vkResetEvent", + "vkResetFences", + "vkResetQueryPool", + "vkResetQueryPoolEXT", + "vkSetBufferCollectionBufferConstraintsFUCHSIA", + "vkSetBufferCollectionImageConstraintsFUCHSIA", + "vkSetDebugUtilsObjectNameEXT", + "vkSetDebugUtilsObjectTagEXT", + "vkSetDeviceMemoryPriorityEXT", + "vkSetEvent", + "vkSetHdrMetadataEXT", + "vkSetLatencyMarkerNV", + "vkSetLatencySleepModeNV", + "vkSetLocalDimmingAMD", + "vkSetPrivateData", + "vkSetPrivateDataEXT", + "vkSignalSemaphore", + "vkSignalSemaphoreKHR", + "vkTransitionImageLayout", + "vkTransitionImageLayoutEXT", + "vkTrimCommandPool", + "vkTrimCommandPoolKHR", + "vkUninitializePerformanceApiINTEL", + "vkUnmapMemory", + "vkUnmapMemory2", + "vkUnmapMemory2KHR", + "vkUpdateDescriptorSetWithTemplate", + "vkUpdateDescriptorSetWithTemplateKHR", + "vkUpdateDescriptorSets", + "vkUpdateIndirectExecutionSetPipelineEXT", + "vkUpdateIndirectExecutionSetShaderEXT", + "vkUpdateVideoSessionParametersKHR", + "vkWaitForFences", + "vkWaitForPresent2KHR", + "vkWaitForPresentKHR", + "vkWaitSemaphores", + "vkWaitSemaphoresKHR", + "vkWriteAccelerationStructuresPropertiesKHR", + "vkWriteMicromapsPropertiesEXT", +}; + +static int glad_vulkan_is_device_function(const char *name) { + /* Exists as a workaround for: + * https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues/2323 + * + * `vkGetDeviceProcAddr` does not return NULL for non-device functions. + */ + int i; + int length = sizeof(DEVICE_FUNCTIONS) / sizeof(DEVICE_FUNCTIONS[0]); + + for (i=0; i < length; ++i) { + if (strcmp(DEVICE_FUNCTIONS[i], name) == 0) { + return 1; + } + } + + return 0; +} + +struct _glad_vulkan_userptr { + void *vk_handle; + VkInstance vk_instance; + VkDevice vk_device; + PFN_vkGetInstanceProcAddr get_instance_proc_addr; + PFN_vkGetDeviceProcAddr get_device_proc_addr; +}; + +static GLADapiproc glad_vulkan_get_proc(void *vuserptr, const char *name) { + struct _glad_vulkan_userptr userptr = *(struct _glad_vulkan_userptr*) vuserptr; + PFN_vkVoidFunction result = NULL; + + if (userptr.vk_device != NULL && glad_vulkan_is_device_function(name)) { + result = userptr.get_device_proc_addr(userptr.vk_device, name); + } + + if (result == NULL && userptr.vk_instance != NULL) { + result = userptr.get_instance_proc_addr(userptr.vk_instance, name); + } + + if(result == NULL) { + result = (PFN_vkVoidFunction) glad_dlsym_handle(userptr.vk_handle, name); + } + + return (GLADapiproc) result; +} + + +static void* _glad_Vulkan_loader_handle = NULL; + +static void* glad_vulkan_dlopen_handle(void) { + static const char *NAMES[] = { +#if GLAD_PLATFORM_APPLE + "libvulkan.1.dylib", +#elif GLAD_PLATFORM_WIN32 + "vulkan-1.dll", + "vulkan.dll", +#else + "libvulkan.so.1", + "libvulkan.so", +#endif + }; + + if (_glad_Vulkan_loader_handle == NULL) { + _glad_Vulkan_loader_handle = glad_get_dlopen_handle(NAMES, sizeof(NAMES) / sizeof(NAMES[0])); + } + + return _glad_Vulkan_loader_handle; +} + +static struct _glad_vulkan_userptr glad_vulkan_build_userptr(void *handle, VkInstance instance, VkDevice device) { + struct _glad_vulkan_userptr userptr; + userptr.vk_handle = handle; + userptr.vk_instance = instance; + userptr.vk_device = device; + userptr.get_instance_proc_addr = (PFN_vkGetInstanceProcAddr) glad_dlsym_handle(handle, "vkGetInstanceProcAddr"); + userptr.get_device_proc_addr = (PFN_vkGetDeviceProcAddr) glad_dlsym_handle(handle, "vkGetDeviceProcAddr"); + return userptr; +} + +int gladLoaderLoadVulkan( VkInstance instance, VkPhysicalDevice physical_device, VkDevice device) { + int version = 0; + void *handle = NULL; + int did_load = 0; + struct _glad_vulkan_userptr userptr; + + did_load = _glad_Vulkan_loader_handle == NULL; + handle = glad_vulkan_dlopen_handle(); + if (handle != NULL) { + userptr = glad_vulkan_build_userptr(handle, instance, device); + + if (userptr.get_instance_proc_addr != NULL && userptr.get_device_proc_addr != NULL) { + version = gladLoadVulkanUserPtr( physical_device, glad_vulkan_get_proc, &userptr); + } + + if (!version && did_load) { + gladLoaderUnloadVulkan(); + } + } + + return version; +} + + + +void gladLoaderUnloadVulkan(void) { + if (_glad_Vulkan_loader_handle != NULL) { + glad_close_dlopen_handle(_glad_Vulkan_loader_handle); + _glad_Vulkan_loader_handle = NULL; + } +} + +#endif /* GLAD_VULKAN */ + +#ifdef __cplusplus +} +#endif diff --git a/axmol/2d/FontAtlas.cpp b/axmol/2d/FontAtlas.cpp index 5e5598208c29..24c70a95b7e1 100644 --- a/axmol/2d/FontAtlas.cpp +++ b/axmol/2d/FontAtlas.cpp @@ -26,10 +26,6 @@ ****************************************************************************/ #include "axmol/2d/FontAtlas.h" -#if AX_TARGET_PLATFORM != AX_PLATFORM_WIN32 && AX_TARGET_PLATFORM != AX_PLATFORM_ANDROID -#elif AX_TARGET_PLATFORM == AX_PLATFORM_ANDROID -# include "axmol/platform/android/jni/Java_dev_axmol_lib_AxmolEngine.h" -#endif #include #include "axmol/2d/FontFreeType.h" #include "axmol/base/text_utils.h" diff --git a/axmol/2d/Grid.cpp b/axmol/2d/Grid.cpp index 0d8c8c50be7d..6f552e173f79 100644 --- a/axmol/2d/Grid.cpp +++ b/axmol/2d/Grid.cpp @@ -52,14 +52,11 @@ bool GridBase::initWithSize(const Vec2& gridSize, const ax::Rect& rect) Director* director = Director::getInstance(); Vec2 s = director->getCanvasSizeInPixels(); - auto POTWide = utils::nextPOT((unsigned int)s.width); - auto POTHigh = utils::nextPOT((unsigned int)s.height); - Texture2D* texture = new Texture2D(); rhi::TextureDesc desc; - desc.width = POTWide; - desc.height = POTHigh; + desc.width = s.width; + desc.height = s.height; desc.textureUsage = rhi::TextureUsage::RENDER_TARGET; desc.pixelFormat = rhi::PixelFormat::RGBA8; @@ -89,7 +86,7 @@ bool GridBase::initWithSize(const Vec2& gridSize, Texture2D* texture, bool flipp AX_SAFE_RETAIN(_texture); _isTextureFlipped = flipped; -#if AX_RENDER_API == AX_RENDER_API_MTL || AX_RENDER_API == AX_RENDER_API_D3D +#if AX_RENDER_API == AX_RENDER_API_MTL || AX_RENDER_API == AX_RENDER_API_D3D || AX_RENDER_API == AX_RENDER_API_VK _isTextureFlipped = !flipped; #endif diff --git a/axmol/2d/Layer.cpp b/axmol/2d/Layer.cpp index c6499672ffdc..f1aeeb5430a6 100644 --- a/axmol/2d/Layer.cpp +++ b/axmol/2d/Layer.cpp @@ -399,7 +399,7 @@ bool LayerRadialGradient::initWithColor(const ax::Color32& startColor, { // should do it before Layer::init() for (int i = 0; i < 4; ++i) - _vertices[i] = {0.0f, 0.0f}; + _vertices[i] = {0.0f, 0.0f, 0.0f}; if (Node::initLayer()) { diff --git a/axmol/2d/Layer.h b/axmol/2d/Layer.h index 944fa7756975..3b0d8af1def5 100644 --- a/axmol/2d/Layer.h +++ b/axmol/2d/Layer.h @@ -316,7 +316,7 @@ class AX_DLL LayerRadialGradient : public Node, BlendProtocol Color32 _endColor = Color32::BLACK; Color _endColorRend = Color::BLACK; // end color used in shader - Vec2 _vertices[4]; + Vec3 _vertices[4]; Vec2 _center; float _radius = 0.f; float _expand = 0.f; diff --git a/axmol/2d/RenderTexture.cpp b/axmol/2d/RenderTexture.cpp index 1740b078078e..388f4d106418 100644 --- a/axmol/2d/RenderTexture.cpp +++ b/axmol/2d/RenderTexture.cpp @@ -41,7 +41,7 @@ THE SOFTWARE. #include "axmol/rhi/Texture.h" #include "axmol/rhi/RenderTarget.h" #if AX_RENDER_API == AX_RENDER_API_GL -# include "axmol/rhi/opengl/CommandBufferGL.h" +# include "axmol/rhi/opengl/RenderContextGL.h" #endif namespace ax @@ -570,24 +570,7 @@ void RenderTexture::newImage(std::function)> imageCallback, b else imageCallback(nullptr); }; -#if AX_RENDER_API == AX_RENDER_API_GL - if (eglCacheHint) - { - auto colorAttachment = _renderTarget->_color[0].texture; - if (colorAttachment) - { - rhi::PixelBufferDesc pbd; - static_cast(_director->getRenderer()->getCommandBuffer()) - ->readPixels(_renderTarget, 0, 0, colorAttachment->getWidth(), colorAttachment->getHeight(), - colorAttachment->getWidth() * 4, true, pbd); - callback(pbd); - } - } - else - _director->getRenderer()->readPixels(_renderTarget, callback); -#else - _director->getRenderer()->readPixels(_renderTarget, callback); -#endif + _director->getRenderer()->readPixels(_renderTarget, eglCacheHint, callback); } void RenderTexture::draw(Renderer* renderer, const Mat4& transform, uint32_t flags) diff --git a/axmol/CMakeLists.txt b/axmol/CMakeLists.txt index a33237af071e..f17c3dae9480 100644 --- a/axmol/CMakeLists.txt +++ b/axmol/CMakeLists.txt @@ -67,13 +67,17 @@ else() if(NOT APPLE) # non-apple platforms, invalid api specified, fallback to gl set(AX_RENDER_API "gl" CACHE STRING "" FORCE) endif() - elseif(AX_RENDER_API STREQUAL "d3d") - if(NOT WIN32) - if(APPLE) + elseif(AX_RENDER_API STREQUAL "d3d") + if(NOT WIN32) + if(APPLE) + set(AX_RENDER_API "mtl" CACHE STRING "" FORCE) + else() + set(AX_RENDER_API "gl" CACHE STRING "" FORCE) + endif() + endif() + elseif(AX_RENDER_API STREQUAL "vk") + if(APPLE) set(AX_RENDER_API "mtl" CACHE STRING "" FORCE) - else() - set(AX_RENDER_API "gl" CACHE STRING "" FORCE) - endif() endif() endif() endif() diff --git a/axmol/base/Director.cpp b/axmol/base/Director.cpp index b3aa73704a9f..d3be84f737ec 100644 --- a/axmol/base/Director.cpp +++ b/axmol/base/Director.cpp @@ -269,7 +269,7 @@ void Director::setRenderDefaults() // Draw the Scene void Director::drawScene() { - _renderer->beginFrame(); + const auto canRender = _renderer->beginFrame(); // calculate "global" dt calculateDeltaTime(); @@ -287,6 +287,9 @@ void Director::drawScene() _eventDispatcher->dispatchEvent(_eventAfterUpdate); } + if (!canRender) [[unlikely]] + return; + _renderer->clear(ClearFlag::ALL, _clearColor, 1, 0, -10000.0); _eventDispatcher->dispatchEvent(_eventBeforeDraw); @@ -366,7 +369,7 @@ void Director::calculateDeltaTime() } else { - // delta time may passed by invoke mainLoop(dt) + // delta time may passed by invoke renderFrame(dt) if (!_deltaTimePassedByCaller) { auto now = std::chrono::steady_clock::now(); @@ -1583,7 +1586,7 @@ void Director::processOperations() } #endif -void Director::mainLoop() +void Director::renderFrame() { #if defined(AX_PLATFORM_PC) processOperations(); @@ -1608,11 +1611,11 @@ void Director::mainLoop() } } -void Director::mainLoop(float dt) +void Director::renderFrame(float dt) { _deltaTime = dt; _deltaTimePassedByCaller = true; - mainLoop(); + renderFrame(); } void Director::stopAnimation() @@ -1635,10 +1638,4 @@ void Director::setAnimationInterval(float interval, SetIntervalReason reason) } } -void Director::resizeSwapchain(uint32_t w, uint32_t h) -{ - if (_renderer) - _renderer->resizeSwapchain(w, h); -} - } // namespace ax diff --git a/axmol/base/Director.h b/axmol/base/Director.h index 757f329d15f6..851aa6b069bb 100644 --- a/axmol/base/Director.h +++ b/axmol/base/Director.h @@ -389,12 +389,12 @@ class AX_DLL Director void setClearColor(const Color& clearColor); const Color& getClearColor() const { return _clearColor; } - void mainLoop(); - /** Invoke main loop with delta time. Then `calculateDeltaTime` can just use the delta time directly. + [[internal]] void renderFrame(); + /** Invoke render frame with delta time. Then `calculateDeltaTime` can just use the delta time directly. * The delta time paseed may include vsync time. See issue #17806 * @since 3.16 */ - void mainLoop(float dt); + [[internal]] void renderFrame(float dt); /** The size in pixels of the surface. It could be different than the screen size. * High-res devices might have a higher surface size than the screen size. @@ -532,15 +532,6 @@ class AX_DLL Director protected: void reset(); - /** - * @brief Internal-only: Resizes the swapchain to accommodate surface changes. - * Not intended for external module access. - * - * @param w - * @param h - */ - void resizeSwapchain(uint32_t w, uint32_t h); - /** * @brief Internal-only: Sets canvas size aka design size, invoked by RenderView */ diff --git a/axmol/base/StencilStateManager.cpp b/axmol/base/StencilStateManager.cpp index c494a731aecc..caf28a0d9bfa 100644 --- a/axmol/base/StencilStateManager.cpp +++ b/axmol/base/StencilStateManager.cpp @@ -42,8 +42,9 @@ StencilStateManager::StencilStateManager() _mvpMatrixLocaiton = programState->getUniformLocation("u_MVPMatrix"); _colorUniformLocation = programState->getUniformLocation("u_color"); - Vec2 vertices[4] = {Vec2(-1.0f, -1.0f), Vec2(1.0f, -1.0f), Vec2(1.0f, 1.0f), Vec2(-1.0f, 1.0f)}; - _customCommand.createVertexBuffer(sizeof(Vec2), 4, CustomCommand::BufferUsage::STATIC); + Vec3 vertices[4] = {Vec3(-1.0f, -1.0f, 0.0f), Vec3(1.0f, -1.0f, 0.0f), Vec3(1.0f, 1.0f, 0.0f), + Vec3(-1.0f, 1.0f, 0.0f)}; + _customCommand.createVertexBuffer(sizeof(Vec3), 4, CustomCommand::BufferUsage::STATIC); _customCommand.updateVertexBuffer(vertices, sizeof(vertices)); unsigned short indices[6] = {0, 1, 2, 0, 2, 3}; diff --git a/axmol/math/Mat4.cpp b/axmol/math/Mat4.cpp index 717dabae8756..85988e209b9a 100644 --- a/axmol/math/Mat4.cpp +++ b/axmol/math/Mat4.cpp @@ -120,7 +120,7 @@ void Mat4::createPerspective(float fieldOfView, float aspectRatio, float zNearPl dst->m[14] = -2.0f * zFarPlane * zNearPlane * f_n; // https://metashapes.com/blog/opengl-metal-projection-matrix-problem/ -#if AX_RENDER_API == AX_RENDER_API_MTL +#if AX_RENDER_API == AX_RENDER_API_MTL || AX_RENDER_API == AX_RENDER_API_VK dst->m[10] = -(zFarPlane)*f_n; dst->m[14] = -(zFarPlane * zNearPlane) * f_n; #endif @@ -157,7 +157,7 @@ void Mat4::createOrthographicOffCenter(float left, dst->m[15] = 1; //// https://metashapes.com/blog/opengl-metal-projection-matrix-problem/ -#if AX_RENDER_API == AX_RENDER_API_MTL +#if AX_RENDER_API == AX_RENDER_API_MTL || AX_RENDER_API == AX_RENDER_API_VK dst->m[10] = 1 / (zNearPlane - zFarPlane); dst->m[14] = zNearPlane / (zNearPlane - zFarPlane); #endif diff --git a/axmol/platform/PlatformConfig.h b/axmol/platform/PlatformConfig.h index 3734413cdd53..72022509a52e 100644 --- a/axmol/platform/PlatformConfig.h +++ b/axmol/platform/PlatformConfig.h @@ -129,6 +129,7 @@ THE SOFTWARE. #define AX_RENDER_API_GL 1 #define AX_RENDER_API_MTL 2 #define AX_RENDER_API_D3D 3 +#define AX_RENDER_API_VK 4 #ifndef AX_RENDER_API # if defined(__APPLE__) diff --git a/axmol/platform/PlatformMacros.h b/axmol/platform/PlatformMacros.h index 48270a85ba33..c07007063f8c 100644 --- a/axmol/platform/PlatformMacros.h +++ b/axmol/platform/PlatformMacros.h @@ -84,7 +84,8 @@ Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). * * @since v0.99.5 */ -#if (AX_TARGET_PLATFORM == AX_PLATFORM_ANDROID) || (AX_TARGET_PLATFORM == AX_PLATFORM_WASM) +#if ((AX_TARGET_PLATFORM == AX_PLATFORM_ANDROID) || (AX_TARGET_PLATFORM == AX_PLATFORM_WASM)) && \ + AX_RENDER_API != AX_RENDER_API_VK # if !defined(AX_ENABLE_CONTEXT_LOSS_RECOVERY) # define AX_ENABLE_CONTEXT_LOSS_RECOVERY 1 # endif diff --git a/axmol/platform/RenderView.cpp b/axmol/platform/RenderView.cpp index 53cbe81800c7..438afee88980 100644 --- a/axmol/platform/RenderView.cpp +++ b/axmol/platform/RenderView.cpp @@ -176,9 +176,6 @@ const Vec2& RenderView::getDesignResolutionSize() const void RenderView::updateRenderSurface(float width, float height, uint8_t updateFlag) { - if (width == 0 || height == 0) - return; - Vec2 value{width, height}; if (updateFlag & SurfaceUpdateFlag::WindowSizeChanged) @@ -220,10 +217,11 @@ void RenderView::maybeDispatchResizeEvent(uint8_t updateFlag) const bool readyToDispatch = (_surfaceUpdateFlags == requiredFlags); - if (readyToDispatch && !silentUpdate) + if (readyToDispatch) { _surfaceUpdateFlags = 0; - onSurfaceResized(); + if (!silentUpdate) + onSurfaceResized(); } } @@ -517,8 +515,10 @@ void RenderView::onSurfaceResized() int screenWidth = static_cast(_renderSize.width); int screenHeight = static_cast(_renderSize.height); - Director::getInstance()->resizeSwapchain(screenWidth, screenHeight); + auto renderer = Director::getInstance()->getRenderer(); + if (renderer) + renderer->updateSurface(getNativeDisplay(), screenWidth, screenHeight); #ifdef AX_ENABLE_VR if (_vrRenderer) [[unlikely]] _vrRenderer->onRenderViewResized(this); diff --git a/axmol/platform/android/Application-android.cpp b/axmol/platform/android/Application-android.cpp index 1130a13c78dd..44bc2b498804 100644 --- a/axmol/platform/android/Application-android.cpp +++ b/axmol/platform/android/Application-android.cpp @@ -60,10 +60,21 @@ int Application::run() // Initialize instance and axmol. if (!applicationDidFinishLaunching()) { - return 0; + return -1; } - return -1; +#if AX_RENDER_API == AX_RENDER_API_VK + auto director = Director::getInstance(); + std::thread t([director] { + do + { + director->renderFrame(); + } while (sm_pSharedApplication != nullptr); + }); + t.detach(); +#endif + + return 0; } void Application::setAnimationInterval(float interval) diff --git a/axmol/platform/android/CMakeLists.txt b/axmol/platform/android/CMakeLists.txt index 41bc54597afe..80cec884193b 100644 --- a/axmol/platform/android/CMakeLists.txt +++ b/axmol/platform/android/CMakeLists.txt @@ -7,11 +7,10 @@ set(${target_name}_src Device-android.cpp javaactivity-android.cpp jni/JniHelper.cpp - jni/TouchesJni.cpp - jni/Java_dev_axmol_lib_AxmolEngine.cpp - jni/Java_dev_axmol_lib_AxmolRenderer.cpp - jni/Java_dev_axmol_lib_AxmolAccelerometer.cpp - jni/Java_dev_axmol_lib_BitmapHelper.cpp + jni/AxmolEngineJni.cpp + jni/AxmolPlayerJni.cpp + jni/AxmolAccelerometerJni.cpp + jni/BitmapHelperJni.cpp ) add_library(${target_name} STATIC diff --git a/axmol/platform/android/FileUtils-android.cpp b/axmol/platform/android/FileUtils-android.cpp index dfc88a000adc..597e5e2c587c 100644 --- a/axmol/platform/android/FileUtils-android.cpp +++ b/axmol/platform/android/FileUtils-android.cpp @@ -27,7 +27,7 @@ THE SOFTWARE. #include "axmol/platform/android/FileUtils-android.h" #include "axmol/platform/Common.h" #include "axmol/platform/android/jni/JniHelper.h" -#include "axmol/platform/android/jni/Java_dev_axmol_lib_AxmolEngine.h" +#include "axmol/platform/android/jni/AxmolEngineJni.h" #include "axmol/base/ZipUtils.h" #include diff --git a/axmol/platform/android/RenderViewImpl-android.cpp b/axmol/platform/android/RenderViewImpl-android.cpp index f3bd25d79285..7bf312de8963 100644 --- a/axmol/platform/android/RenderViewImpl-android.cpp +++ b/axmol/platform/android/RenderViewImpl-android.cpp @@ -28,25 +28,24 @@ THE SOFTWARE. #include "axmol/base/Director.h" #include "axmol/base/Macros.h" #include "axmol/platform/android/jni/JniHelper.h" -#include "axmol/platform/GL.h" + +#if AX_RENDER_API == AX_RENDER_API_GL +# include "axmol/platform/GL.h" +#else +# include "axmol/rhi/vulkan/DriverVK.h" +#endif #include #include +#include #define DEFAULT_MARGIN_ANDROID 30.0f #define WIDE_SCREEN_ASPECT_RATIO_ANDROID 2.0f +extern ANativeWindow* axmolGetANativeWindow(); + namespace ax { -void RenderViewImpl::loadGLES2() -{ - auto glesVer = gladLoaderLoadGLES2(); - if (glesVer) - AXLOGI("Load GLES success, version: {}", glesVer); - else - throw std::runtime_error("Load GLES fail"); -} - RenderViewImpl* RenderViewImpl::createWithRect(std::string_view viewName, const Rect& rect, float frameZoomFactor, @@ -90,15 +89,63 @@ RenderViewImpl::RenderViewImpl() {} RenderViewImpl::~RenderViewImpl() {} +void* RenderViewImpl::getNativeWindow() const +{ + return _nativeWindow; +} + +void* RenderViewImpl::getNativeDisplay() const +{ + return _nativeDisplay; +} + bool RenderViewImpl::initWithRect(std::string_view /*viewName*/, const Rect& rect, float /*frameZoomFactor*/, bool /*resizable*/) { updateRenderSurface(rect.size.width, rect.size.height, SurfaceUpdateFlag::AllUpdatesSilently); + +#if AX_RENDER_API == AX_RENDER_API_GL + auto glesVer = gladLoaderLoadGLES2(); + if (glesVer) + AXLOGI("Load GLES success, version: {}", glesVer); + else + throw std::runtime_error("Load GLES fail"); +#else + recreateVkSurface(false); +#endif + return true; } +#if AX_RENDER_API == AX_RENDER_API_VK +void RenderViewImpl::recreateVkSurface(bool needUpdateRenderSurface) +{ + auto _createSurface = [](VkInstance inst, void* window, VkSurfaceKHR* surface) { + VkAndroidSurfaceCreateInfoKHR createInfo{VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR}; + createInfo.window = (ANativeWindow*)window; + return vkCreateAndroidSurfaceKHR(inst, &createInfo, nullptr, surface); + }; + _nativeWindow = axmolGetANativeWindow(); + const rhi::vk::SurfaceCreateInfo createInfo{.window = _nativeWindow, + .width = static_cast(_windowSize.width), + .height = static_cast(_windowSize.height), + .createFunc = _createSurface}; + auto driver = static_cast(axdrv); + bool ok = driver->recreateSurface(createInfo); + if (!ok) + { + AXLOGE("Failed to create Vulkan window surface."); + return; + } + _nativeDisplay = (void*)driver->getSurface(); + + if (needUpdateRenderSurface) + updateRenderSurface(_windowSize.width, _windowSize.height, SurfaceUpdateFlag::AllUpdates); +} +#endif + bool RenderViewImpl::initWithFullScreen(std::string_view viewName) { return true; @@ -121,11 +168,11 @@ void RenderViewImpl::setIMEKeyboardState(bool bOpen) { if (bOpen) { - JniHelper::callStaticVoidMethod("dev.axmol.lib.AxmolGLSurfaceView", "openIMEKeyboard"); + JniHelper::callStaticVoidMethod("dev.axmol.lib.AxmolPlayer", "openIMEKeyboard"); } else { - JniHelper::callStaticVoidMethod("dev.axmol.lib.AxmolGLSurfaceView", "closeIMEKeyboard"); + JniHelper::callStaticVoidMethod("dev.axmol.lib.AxmolPlayer", "closeIMEKeyboard"); } } diff --git a/axmol/platform/android/RenderViewImpl-android.h b/axmol/platform/android/RenderViewImpl-android.h index 675bbf60fec1..d9f2f906decf 100644 --- a/axmol/platform/android/RenderViewImpl-android.h +++ b/axmol/platform/android/RenderViewImpl-android.h @@ -37,7 +37,6 @@ class AX_DLL RenderViewImpl : public RenderView { public: // static function - static void loadGLES2(); static RenderViewImpl* create(std::string_view viewname); static RenderViewImpl* createWithRect(std::string_view viewName, const Rect& rect, @@ -55,12 +54,22 @@ class AX_DLL RenderViewImpl : public RenderView WindowPlatform getWindowPlatform() const override { return WindowPlatform::Android; } + void* getNativeWindow() const override; + void* getNativeDisplay() const override; + +#if AX_RENDER_API == AX_RENDER_API_VK + void recreateVkSurface(bool needUpdateRenderSurface); +#endif + protected: RenderViewImpl(); virtual ~RenderViewImpl(); bool initWithRect(std::string_view viewName, const Rect& rect, float zoomFactor, bool resizable = false); bool initWithFullScreen(std::string_view viewName); + + void* _nativeWindow{nullptr}; + void* _nativeDisplay{nullptr}; }; } // namespace ax diff --git a/axmol/platform/android/java/src/dev/axmol/lib/AxmolAccelerometer.java b/axmol/platform/android/java/src/dev/axmol/lib/AxmolAccelerometer.java index 4002fe4c516e..dee8dec0f500 100644 --- a/axmol/platform/android/java/src/dev/axmol/lib/AxmolAccelerometer.java +++ b/axmol/platform/android/java/src/dev/axmol/lib/AxmolAccelerometer.java @@ -130,7 +130,7 @@ public void onSensorChanged(final SensorEvent sensorEvent) { y = -y; } - AxmolGLSurfaceView.queueAccelerometer(x,y,z,sensorEvent.timestamp); + AxmolPlayer.queueAccelerometer(x,y,z,sensorEvent.timestamp); /* if(BuildConfig.DEBUG) { @@ -152,7 +152,7 @@ public void onAccuracyChanged(final Sensor sensor, final int accuracy) { // =========================================================== // Methods - // Native method called from AxmolGLSurfaceView (To be in the same thread) + // Native method called from AxmolSurfaceView (To be in the same thread) // =========================================================== public static native void onSensorChanged(final float x, final float y, final float z, final long timestamp); diff --git a/axmol/platform/android/java/src/dev/axmol/lib/AxmolActivity.java b/axmol/platform/android/java/src/dev/axmol/lib/AxmolActivity.java index e378ea2f565e..b59fdbd1af32 100644 --- a/axmol/platform/android/java/src/dev/axmol/lib/AxmolActivity.java +++ b/axmol/platform/android/java/src/dev/axmol/lib/AxmolActivity.java @@ -31,7 +31,6 @@ of this software and associated documentation files (the "Software"), to deal import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.media.AudioManager; -import android.opengl.GLSurfaceView; import android.os.Build; import android.os.Bundle; import android.os.Message; @@ -40,7 +39,6 @@ of this software and associated documentation files (the "Software"), to deal import android.util.Log; import android.view.HapticFeedbackConstants; import android.view.View; -import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; @@ -48,10 +46,6 @@ of this software and associated documentation files (the "Software"), to deal import dev.axmol.lib.AxmolEngine.AxmolEngineListener; -import javax.microedition.khronos.egl.EGL10; -import javax.microedition.khronos.egl.EGLConfig; -import javax.microedition.khronos.egl.EGLDisplay; - public abstract class AxmolActivity extends AppCompatActivity implements AxmolEngineListener { // =========================================================== // Constants @@ -63,16 +57,13 @@ public abstract class AxmolActivity extends AppCompatActivity implements AxmolEn // Fields // =========================================================== - private AxmolGLSurfaceView mGLSurfaceView = null; - private int[] mGLContextAttrs = null; + private AxmolPlayer mPlayer = null; private AxmolHandler mHandler = null; private static AxmolActivity sContext = null; - private WebViewHelper mWebViewHelper = null; - private EditBoxHelper mEditBoxHelper = null; private boolean showVirtualButton = false; - public AxmolGLSurfaceView getGLSurfaceView(){ - return mGLSurfaceView; + public AxmolPlayer getPlayer(){ + return mPlayer; } public static Context getContext() { @@ -84,7 +75,7 @@ public void setKeepScreenOn(boolean value) { runOnUiThread(new Runnable() { @Override public void run() { - mGLSurfaceView.setKeepScreenOn(newValue); + mPlayer.setKeepScreenOn(newValue); } }); } @@ -169,16 +160,8 @@ protected void onCreate(final Bundle savedInstanceState) { AxmolEngine.init(this); - this.mGLContextAttrs = getGLContextAttrs(); - this.init(); - - if(mWebViewHelper == null){ - mWebViewHelper = new WebViewHelper(mFrameLayout); - } - - if(mEditBoxHelper == null){ - mEditBoxHelper = new EditBoxHelper(mFrameLayout); - } + mPlayer = new AxmolPlayer(this); + setContentView(mPlayer); Window window = this.getWindow(); window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); @@ -187,9 +170,6 @@ protected void onCreate(final Bundle savedInstanceState) { this.setVolumeControlStream(AudioManager.STREAM_MUSIC); } - //native method,call RenderViewImpl::getGLContextAttrs() to get the OpenGL ES context attributions - private static native int[] getGLContextAttrs(); - // =========================================================== // Getter & Setter // =========================================================== @@ -203,7 +183,7 @@ protected void onStart() { Log.i(TAG, "onStart()"); super.onStart(); - mGLSurfaceView.onResume(); + mPlayer.onResume(); } @Override @@ -213,8 +193,7 @@ protected void onResume() { hideVirtualButton(); AxmolEngine.onResume(); - mGLSurfaceView.handleOnResume(); - mGLSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY); + mPlayer.handleOnResume(); } @Override @@ -222,8 +201,7 @@ protected void onPause() { Log.i(TAG, "onPause()"); AxmolEngine.onPause(); - mGLSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); - mGLSurfaceView.handleOnPause(); + mPlayer.handleOnPause(); super.onPause(); } @@ -232,8 +210,8 @@ protected void onPause() { protected void onStop() { Log.i(TAG, "onStop()"); - mGLSurfaceView.waitForPauseToComplete(); - mGLSurfaceView.onPause(); + mPlayer.waitForPauseToComplete(); + mPlayer.onPause(); super.onStop(); } @@ -265,8 +243,8 @@ public void showDialog(final String pTitle, final String pMessage) { } @Deprecated - public void runOnGLThread(final Runnable runnable) { - AxmolEngine.runOnGLThread(runnable); + public void runOnAxmolThread(final Runnable runnable) { + AxmolEngine.runOnAxmolThread(runnable); } @Override @@ -280,63 +258,9 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) } - protected ResizeLayout mFrameLayout = null; // =========================================================== // Methods // =========================================================== - public void init() { - - // FrameLayout - ViewGroup.LayoutParams framelayout_params = - new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT); - - mFrameLayout = new ResizeLayout(this); - - mFrameLayout.setLayoutParams(framelayout_params); - - // AxmolEditBox layout - ViewGroup.LayoutParams edittext_layout_params = - new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT); - AxmolEditBox edittext = new AxmolEditBox(this); - edittext.setLayoutParams(edittext_layout_params); - edittext.setVisibility(View.GONE); - - mFrameLayout.addView(edittext); - - // AxmolGLSurfaceView - this.mGLSurfaceView = this.onCreateView(); - this.mGLSurfaceView.setPreserveEGLContextOnPause(true); - - // ...add to FrameLayout - mFrameLayout.addView(this.mGLSurfaceView); - - // Switch to supported OpenGL (ARGB888) mode on emulator - // this line dows not needed on new emulators and also it breaks stencil buffer - //if (isAndroidEmulator()) - // this.mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); - - this.mGLSurfaceView.setRenderer(new AxmolRenderer()); - this.mGLSurfaceView.setEditText(edittext); - - // Set framelayout as the content view - setContentView(mFrameLayout); - } - - - public AxmolGLSurfaceView onCreateView() { - AxmolGLSurfaceView glSurfaceView = new AxmolGLSurfaceView(this); - //this line is need on some device if we specify an alpha bits - // FIXME: is it needed? And it will cause afterimage. - // if(this.mGLContextAttrs[3] > 0) glSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); - - // use custom EGLConfigureChooser - AxmolEGLConfigChooser chooser = new AxmolEGLConfigChooser(this.mGLContextAttrs); - glSurfaceView.setEGLConfigChooser(chooser); - - return glSurfaceView; - } protected void hideVirtualButton() { if (showVirtualButton) { @@ -393,8 +317,8 @@ private static boolean isDeviceLocked() { } private static boolean isDeviceAsleep() { - PowerManager powerManager = (PowerManager)getContext().getSystemService(Context.POWER_SERVICE); - if(powerManager == null) { + PowerManager powerManager = (PowerManager) getContext().getSystemService(Context.POWER_SERVICE); + if (powerManager == null) { return false; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { @@ -403,94 +327,4 @@ private static boolean isDeviceAsleep() { return !powerManager.isScreenOn(); } } - - // =========================================================== - // Inner and Anonymous Classes - // =========================================================== - - private class AxmolEGLConfigChooser implements GLSurfaceView.EGLConfigChooser - { - private int[] mConfigAttributes; - private final int EGL_OPENGL_ES2_BIT = 0x04; - private final int EGL_OPENGL_ES3_BIT = 0x40; - public AxmolEGLConfigChooser(int redSize, int greenSize, int blueSize, int alphaSize, int depthSize, int stencilSize, int multisamplingCount) - { - mConfigAttributes = new int[] {redSize, greenSize, blueSize, alphaSize, depthSize, stencilSize, multisamplingCount}; - } - public AxmolEGLConfigChooser(int[] attributes) - { - mConfigAttributes = attributes; - } - - @Override - public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) - { - int[][] EGLAttributes = { - { - // GL ES 2 with user set - EGL10.EGL_RED_SIZE, mConfigAttributes[0], - EGL10.EGL_GREEN_SIZE, mConfigAttributes[1], - EGL10.EGL_BLUE_SIZE, mConfigAttributes[2], - EGL10.EGL_ALPHA_SIZE, mConfigAttributes[3], - EGL10.EGL_DEPTH_SIZE, mConfigAttributes[4], - EGL10.EGL_STENCIL_SIZE, mConfigAttributes[5], - EGL10.EGL_SAMPLE_BUFFERS, (mConfigAttributes[6] > 0) ? 1 : 0, - EGL10.EGL_SAMPLES, mConfigAttributes[6], - EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL10.EGL_NONE - }, - { - // GL ES 2 with user set 16 bit depth buffer - EGL10.EGL_RED_SIZE, mConfigAttributes[0], - EGL10.EGL_GREEN_SIZE, mConfigAttributes[1], - EGL10.EGL_BLUE_SIZE, mConfigAttributes[2], - EGL10.EGL_ALPHA_SIZE, mConfigAttributes[3], - EGL10.EGL_DEPTH_SIZE, mConfigAttributes[4] >= 24 ? 16 : mConfigAttributes[4], - EGL10.EGL_STENCIL_SIZE, mConfigAttributes[5], - EGL10.EGL_SAMPLE_BUFFERS, (mConfigAttributes[6] > 0) ? 1 : 0, - EGL10.EGL_SAMPLES, mConfigAttributes[6], - EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL10.EGL_NONE - }, - { - // GL ES 2 with user set 16 bit depth buffer without multisampling - EGL10.EGL_RED_SIZE, mConfigAttributes[0], - EGL10.EGL_GREEN_SIZE, mConfigAttributes[1], - EGL10.EGL_BLUE_SIZE, mConfigAttributes[2], - EGL10.EGL_ALPHA_SIZE, mConfigAttributes[3], - EGL10.EGL_DEPTH_SIZE, mConfigAttributes[4] >= 24 ? 16 : mConfigAttributes[4], - EGL10.EGL_STENCIL_SIZE, mConfigAttributes[5], - EGL10.EGL_SAMPLE_BUFFERS, 0, - EGL10.EGL_SAMPLES, 0, - EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL10.EGL_NONE - }, - { - // GL ES 2 by default - EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL10.EGL_NONE - } - }; - - EGLConfig result = null; - for (int[] eglAtribute : EGLAttributes) { - result = this.doChooseConfig(egl, display, eglAtribute); - if (result != null) - return result; - } - - Log.e(DEVICE_POLICY_SERVICE, "Can not select an EGLConfig for rendering."); - return null; - } - - private EGLConfig doChooseConfig(EGL10 egl, EGLDisplay display, int[] attributes) { - EGLConfig[] configs = new EGLConfig[1]; - int[] matchedConfigNum = new int[1]; - boolean result = egl.eglChooseConfig(display, attributes, configs, 1, matchedConfigNum); - if (result && matchedConfigNum[0] > 0) { - return configs[0]; - } - return null; - } - } } diff --git a/axmol/platform/android/java/src/dev/axmol/lib/AxmolEditBox.java b/axmol/platform/android/java/src/dev/axmol/lib/AxmolEditBox.java index d266f47061c0..950986c27256 100644 --- a/axmol/platform/android/java/src/dev/axmol/lib/AxmolEditBox.java +++ b/axmol/platform/android/java/src/dev/axmol/lib/AxmolEditBox.java @@ -289,7 +289,7 @@ public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) { case KeyEvent.KEYCODE_BACK: AxmolActivity activity = (AxmolActivity)this.getContext(); //To prevent program from going to background - activity.getGLSurfaceView().requestFocus(); + activity.getPlayer().requestFocus(); return true; default: return super.onKeyDown(pKeyCode, pKeyEvent); diff --git a/axmol/platform/android/java/src/dev/axmol/lib/AxmolEngine.java b/axmol/platform/android/java/src/dev/axmol/lib/AxmolEngine.java index 0314a4b36002..e9ecd453abc1 100644 --- a/axmol/platform/android/java/src/dev/axmol/lib/AxmolEngine.java +++ b/axmol/platform/android/java/src/dev/axmol/lib/AxmolEngine.java @@ -115,12 +115,19 @@ public class AxmolEngine { // The OBB file private static ZipResourceFile sOBBFile = null; +// public static final int RENDER_API_GL = 1; +// public static final int RENDER_API_MTL = 2; +// public static final int RENDER_API_D3D = 3; + public static final int RENDER_API_VK = 4; + + public static boolean sNativePaused = false; + // =========================================================== // Constructors // =========================================================== - public static void runOnGLThread(final Runnable r) { - nativeRunOnGLThread(r); + public static void runOnAxmolThread(final Runnable r) { + nativeRunOnAxmolThread(r); } public static void runOnUiThread(final Runnable r) { @@ -128,7 +135,7 @@ public static void runOnUiThread(final Runnable r) { } public static void queueOperation(final long op, final long param) { - ((AxmolActivity)sActivity).getGLSurfaceView().queueEvent(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { AxmolEngine.nativeCall0(op, param); @@ -151,7 +158,7 @@ public static void init(final AppCompatActivity activity) { AxmolEngine.sPackageName = applicationInfo.packageName; AxmolEngine.sAssetManager = activity.getAssets(); - AxmolEngine.nativeSetContext((Context)activity, AxmolEngine.sAssetManager); + AxmolEngine.nativeInit((Context)activity, AxmolEngine.sAssetManager); AxmolMediaEngine.setContext(activity); @@ -163,6 +170,7 @@ public static void init(final AppCompatActivity activity) { } } + // This function returns the absolute path to the OBB if it exists, // else it returns the absolute path to the APK. public static String getAssetsPath() @@ -239,15 +247,6 @@ public static boolean isActivityVisible(){ // Methods // =========================================================== - private static native void nativeRunOnGLThread(final Object runnable); - - private static native void nativeSetEditTextDialogResult(final byte[] pBytes); - - private static native void nativeSetContext(final Object pContext, final Object pAssetManager); - - // private static native void nativeSetAudioDeviceInfo(boolean isSupportLowLatency, int deviceSampleRate, int audioBufferSizeInFames); - - public static native void nativeCall0(long func, long ud); public static String getPackageName() { return AxmolEngine.sPackageName; @@ -388,7 +387,7 @@ public static void setEditTextDialogResult(final String pResult) { try { final byte[] bytesUTF8 = pResult.getBytes("UTF8"); - AxmolEngine.runOnGLThread(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { AxmolEngine.nativeSetEditTextDialogResult(bytesUTF8); @@ -1007,4 +1006,20 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) {} return result[0]; } + + // =========================================================== + // Native methods for AxmolEngine + // =========================================================== + public static native void nativeInit(final Object pContext, final Object pAssetManager); + + public static native int[] nativeGetGLContextAttrs(); + public static native int nativeGetRenderAPI(); + + private static native void nativeRunOnAxmolThread(final Object runnable); + + private static native void nativeSetEditTextDialogResult(final byte[] pBytes); + + // private static native void nativeSetAudioDeviceInfo(boolean isSupportLowLatency, int deviceSampleRate, int audioBufferSizeInFames); + + public static native void nativeCall0(long func, long ud); } diff --git a/axmol/platform/android/java/src/dev/axmol/lib/AxmolGLSurfaceView.java b/axmol/platform/android/java/src/dev/axmol/lib/AxmolGLSurfaceView.java deleted file mode 100644 index dc45dc3d29b4..000000000000 --- a/axmol/platform/android/java/src/dev/axmol/lib/AxmolGLSurfaceView.java +++ /dev/null @@ -1,493 +0,0 @@ -/**************************************************************************** - Copyright (c) 2010-2011 cocos2d-x.org - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). - - https://axmol.dev/ - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ -package dev.axmol.lib; - -import android.app.Activity; -import android.content.Context; -import android.opengl.GLSurfaceView; -import android.os.Handler; -import android.os.Message; -import android.util.AttributeSet; -import android.util.Log; -import android.view.KeyEvent; -import android.view.MotionEvent; -import android.view.View; -import android.view.inputmethod.InputMethodManager; - -import java.util.concurrent.CountDownLatch; - -public class AxmolGLSurfaceView extends GLSurfaceView { - // =========================================================== - // Constants - // =========================================================== - - private static final String TAG = AxmolGLSurfaceView.class.getSimpleName(); - - private final static int HANDLER_OPEN_IME_KEYBOARD = 2; - private final static int HANDLER_CLOSE_IME_KEYBOARD = 3; - - // =========================================================== - // Fields - // =========================================================== - - // TODO Static handler -> Potential leak! - private static Handler sHandler; - - private static AxmolGLSurfaceView mGLSurfaceView; - private static TextInputWrapper sTextInputWraper; - - private AxmolRenderer mRenderer; - private AxmolEditBox mEditText; - - private boolean mSoftKeyboardShown = false; - private boolean mMultipleTouchEnabled = true; - - private CountDownLatch mNativePauseComplete; - - public boolean isSoftKeyboardShown() { - return mSoftKeyboardShown; - } - - public void setSoftKeyboardShown(boolean softKeyboardShown) { - this.mSoftKeyboardShown = softKeyboardShown; - } - - public boolean isMultipleTouchEnabled() { - return mMultipleTouchEnabled; - } - - public void setMultipleTouchEnabled(boolean multipleTouchEnabled) { - this.mMultipleTouchEnabled = multipleTouchEnabled; - } - - // =========================================================== - // Constructors - // =========================================================== - - public AxmolGLSurfaceView(final Context context) { - super(context); - - this.initView(); - } - - public AxmolGLSurfaceView(final Context context, final AttributeSet attrs) { - super(context, attrs); - - this.initView(); - } - - protected void initView() { - this.setEGLContextClientVersion(2); - this.setFocusableInTouchMode(true); - - AxmolGLSurfaceView.mGLSurfaceView = this; - AxmolGLSurfaceView.sTextInputWraper = new TextInputWrapper(this); - - AxmolGLSurfaceView.sHandler = new Handler() { - @Override - public void handleMessage(final Message msg) { - switch (msg.what) { - case HANDLER_OPEN_IME_KEYBOARD: - if (null != AxmolGLSurfaceView.this.mEditText) { - AxmolGLSurfaceView.this.mEditText.setVisibility(View.VISIBLE); - if (AxmolGLSurfaceView.this.mEditText.requestFocus()) { - AxmolGLSurfaceView.this.mEditText.removeTextChangedListener(AxmolGLSurfaceView.sTextInputWraper); - AxmolGLSurfaceView.this.mEditText.setText(""); - final String text = (String) msg.obj; - AxmolGLSurfaceView.this.mEditText.append(text); - AxmolGLSurfaceView.sTextInputWraper.setOriginText(text); - AxmolGLSurfaceView.this.mEditText.addTextChangedListener(AxmolGLSurfaceView.sTextInputWraper); - final InputMethodManager imm = (InputMethodManager) AxmolGLSurfaceView.mGLSurfaceView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(AxmolGLSurfaceView.this.mEditText, 0); - Log.d("GLSurfaceView", "showSoftInput"); - } - } - break; - - case HANDLER_CLOSE_IME_KEYBOARD: - if (null != AxmolGLSurfaceView.this.mEditText) { - AxmolGLSurfaceView.this.mEditText.removeTextChangedListener(AxmolGLSurfaceView.sTextInputWraper); - final InputMethodManager imm = (InputMethodManager) AxmolGLSurfaceView.mGLSurfaceView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(AxmolGLSurfaceView.this.mEditText.getWindowToken(), 0); - AxmolGLSurfaceView.this.requestFocus(); - // can take effect after GLSurfaceView has focus - AxmolGLSurfaceView.this.mEditText.setVisibility(View.GONE); - ((AxmolActivity)AxmolGLSurfaceView.mGLSurfaceView.getContext()).hideVirtualButton(); - Log.d("GLSurfaceView", "HideSoftInput"); - } - break; - } - } - }; - } - - // =========================================================== - // Getter & Setter - // =========================================================== - - - public static AxmolGLSurfaceView getInstance() { - return mGLSurfaceView; - } - - public static void queueAccelerometer(final float x, final float y, final float z, final long timestamp) { - mGLSurfaceView.queueEvent(new Runnable() { - @Override - public void run() { - AxmolAccelerometer.onSensorChanged(x, y, z, timestamp); - } - }); - } - - @Override - public void setRenderer(GLSurfaceView.Renderer renderer) { - this.mRenderer = (AxmolRenderer) renderer; - super.setRenderer(this.mRenderer); - } - - private String getContentText() { - return this.mRenderer.getContentText(); - } - - public AxmolEditBox getEditText() { - return this.mEditText; - } - - public void setEditText(final AxmolEditBox pEditText) { - this.mEditText = pEditText; - if (null != this.mEditText && null != AxmolGLSurfaceView.sTextInputWraper) { - this.mEditText.setOnEditorActionListener(AxmolGLSurfaceView.sTextInputWraper); - this.requestFocus(); - } - } - - // =========================================================== - // Methods for/from SuperClass/Interfaces - // =========================================================== - - @Override - public boolean onTouchEvent(final MotionEvent pMotionEvent) { - // these data are used in ACTION_MOVE and ACTION_CANCEL - final int pointerNumber = pMotionEvent.getPointerCount(); - final int[] ids = new int[pointerNumber]; - final float[] xs = new float[pointerNumber]; - final float[] ys = new float[pointerNumber]; - - if (mSoftKeyboardShown){ - InputMethodManager imm = (InputMethodManager)this.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - View view = ((Activity)this.getContext()).getCurrentFocus(); - if (null != view) { - imm.hideSoftInputFromWindow(view.getWindowToken(),0); - } - this.requestFocus(); - mSoftKeyboardShown = false; - } - - for (int i = 0; i < pointerNumber; i++) { - ids[i] = pMotionEvent.getPointerId(i); - xs[i] = pMotionEvent.getX(i); - ys[i] = pMotionEvent.getY(i); - } - - switch (pMotionEvent.getAction() & MotionEvent.ACTION_MASK) { - case MotionEvent.ACTION_POINTER_DOWN: - final int indexPointerDown = pMotionEvent.getAction() >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; - if (!mMultipleTouchEnabled && indexPointerDown != 0) { - break; - } - final int idPointerDown = pMotionEvent.getPointerId(indexPointerDown); - final float xPointerDown = pMotionEvent.getX(indexPointerDown); - final float yPointerDown = pMotionEvent.getY(indexPointerDown); - - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleActionDown(idPointerDown, xPointerDown, yPointerDown); - } - }); - break; - - case MotionEvent.ACTION_DOWN: - // there are only one finger on the screen - final int idDown = pMotionEvent.getPointerId(0); - final float xDown = xs[0]; - final float yDown = ys[0]; - - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleActionDown(idDown, xDown, yDown); - } - }); - break; - - case MotionEvent.ACTION_MOVE: - if (!mMultipleTouchEnabled) { - // handle only touch with id == 0 - for (int i = 0; i < pointerNumber; i++) { - if (ids[i] == 0) { - final int[] idsMove = new int[]{0}; - final float[] xsMove = new float[]{xs[i]}; - final float[] ysMove = new float[]{ys[i]}; - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleActionMove(idsMove, xsMove, ysMove); - } - }); - break; - } - } - } else { - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleActionMove(ids, xs, ys); - } - }); - } - break; - - case MotionEvent.ACTION_POINTER_UP: - final int indexPointUp = pMotionEvent.getAction() >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; - if (!mMultipleTouchEnabled && indexPointUp != 0) { - break; - } - final int idPointerUp = pMotionEvent.getPointerId(indexPointUp); - final float xPointerUp = pMotionEvent.getX(indexPointUp); - final float yPointerUp = pMotionEvent.getY(indexPointUp); - - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleActionUp(idPointerUp, xPointerUp, yPointerUp); - } - }); - break; - - case MotionEvent.ACTION_UP: - // there are only one finger on the screen - final int idUp = pMotionEvent.getPointerId(0); - final float xUp = xs[0]; - final float yUp = ys[0]; - - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleActionUp(idUp, xUp, yUp); - } - }); - break; - - case MotionEvent.ACTION_CANCEL: - if (!mMultipleTouchEnabled) { - // handle only touch with id == 0 - for (int i = 0; i < pointerNumber; i++) { - if (ids[i] == 0) { - final int[] idsCancel = new int[]{0}; - final float[] xsCancel = new float[]{xs[i]}; - final float[] ysCancel = new float[]{ys[i]}; - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleActionCancel(idsCancel, xsCancel, ysCancel); - } - }); - break; - } - } - } else { - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleActionCancel(ids, xs, ys); - } - }); - } - break; - } - - /* - if (BuildConfig.DEBUG) { - AxmolGLSurfaceView.dumpMotionEvent(pMotionEvent); - } - */ - return true; - } - - /* - * This function is called before AxmolRenderer.nativeInit(), so the - * width and height is correct. - */ - @Override - protected void onSizeChanged(final int pNewSurfaceWidth, final int pNewSurfaceHeight, final int pOldSurfaceWidth, final int pOldSurfaceHeight) { - if(!this.isInEditMode()) { - this.mRenderer.setScreenWidthAndHeight(pNewSurfaceWidth, pNewSurfaceHeight); - } - } - - @Override - public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) { - switch (pKeyCode) { - case KeyEvent.KEYCODE_BACK: - case KeyEvent.KEYCODE_MENU: - case KeyEvent.KEYCODE_DPAD_LEFT: - case KeyEvent.KEYCODE_DPAD_RIGHT: - case KeyEvent.KEYCODE_DPAD_UP: - case KeyEvent.KEYCODE_DPAD_DOWN: - case KeyEvent.KEYCODE_ENTER: - case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: - case KeyEvent.KEYCODE_DPAD_CENTER: - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleKeyDown(pKeyCode); - } - }); - return true; - default: - return super.onKeyDown(pKeyCode, pKeyEvent); - } - } - - @Override - public boolean onKeyUp(final int keyCode, KeyEvent event) { - switch (keyCode) { - case KeyEvent.KEYCODE_BACK: - case KeyEvent.KEYCODE_MENU: - case KeyEvent.KEYCODE_DPAD_LEFT: - case KeyEvent.KEYCODE_DPAD_RIGHT: - case KeyEvent.KEYCODE_DPAD_UP: - case KeyEvent.KEYCODE_DPAD_DOWN: - case KeyEvent.KEYCODE_ENTER: - case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: - case KeyEvent.KEYCODE_DPAD_CENTER: - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleKeyUp(keyCode); - } - }); - return true; - default: - return super.onKeyUp(keyCode, event); - } - } - - // =========================================================== - // Methods - // =========================================================== - - public void handleOnResume() { - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleOnResume(); - } - }); - } - - public void handleOnPause() { - mNativePauseComplete = new CountDownLatch(1); - - CountDownLatch complete = mNativePauseComplete; - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleOnPause(); - complete.countDown(); - } - }); - } - - public void waitForPauseToComplete() { - while (mNativePauseComplete.getCount() > 0) { - try { - mNativePauseComplete.await(); - } catch (InterruptedException e) { - } - } - } - - // =========================================================== - // Inner and Anonymous Classes - // =========================================================== - - public static void openIMEKeyboard() { - final Message msg = new Message(); - msg.what = AxmolGLSurfaceView.HANDLER_OPEN_IME_KEYBOARD; - msg.obj = AxmolGLSurfaceView.mGLSurfaceView.getContentText(); - AxmolGLSurfaceView.sHandler.sendMessage(msg); - } - - public static void closeIMEKeyboard() { - final Message msg = new Message(); - msg.what = AxmolGLSurfaceView.HANDLER_CLOSE_IME_KEYBOARD; - AxmolGLSurfaceView.sHandler.sendMessage(msg); - } - - public void insertText(final String pText) { - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleInsertText(pText); - } - }); - } - - public void deleteBackward(int numChars) { - this.queueEvent(new Runnable() { - @Override - public void run() { - AxmolGLSurfaceView.this.mRenderer.handleDeleteBackward(numChars); - } - }); - } - - private static void dumpMotionEvent(final MotionEvent event) { - final String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE", "POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" }; - final StringBuilder sb = new StringBuilder(); - final int action = event.getAction(); - final int actionCode = action & MotionEvent.ACTION_MASK; - sb.append("event ACTION_").append(names[actionCode]); - if (actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_POINTER_UP) { - sb.append("(pid ").append(action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT); - sb.append(")"); - } - sb.append("["); - for (int i = 0; i < event.getPointerCount(); i++) { - sb.append("#").append(i); - sb.append("(pid ").append(event.getPointerId(i)); - sb.append(")=").append((int) event.getX(i)); - sb.append(",").append((int) event.getY(i)); - if (i + 1 < event.getPointerCount()) { - sb.append(";"); - } - } - sb.append("]"); - Log.d(AxmolGLSurfaceView.TAG, sb.toString()); - } -} diff --git a/axmol/platform/android/java/src/dev/axmol/lib/AxmolPlayer.java b/axmol/platform/android/java/src/dev/axmol/lib/AxmolPlayer.java new file mode 100644 index 000000000000..a2a4c58cd1b2 --- /dev/null +++ b/axmol/platform/android/java/src/dev/axmol/lib/AxmolPlayer.java @@ -0,0 +1,742 @@ +/**************************************************************************** + Copyright (c) 2010-2011 cocos2d-x.org + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +package dev.axmol.lib; + +import android.app.Activity; +import android.content.Context; +import android.opengl.GLSurfaceView; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.Surface; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.View; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.FrameLayout; + +import java.lang.ref.WeakReference; +import java.util.concurrent.CountDownLatch; + +import javax.microedition.khronos.egl.EGL10; +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.egl.EGLDisplay; + +public class AxmolPlayer extends FrameLayout { + // =========================================================== + // Constants + // =========================================================== + + private static final String TAG = AxmolPlayer.class.getSimpleName(); + + private final static int HANDLER_OPEN_IME_KEYBOARD = 2; + private final static int HANDLER_CLOSE_IME_KEYBOARD = 3; + + // =========================================================== + // Fields + // =========================================================== + + public static int sScreenWidth = 960; + public static int sScreenHeight = 640; + + private static Handler sHandler; + private static WeakReference sInstance; + + private static boolean sNativeInitialized = false; + + private AxmolEditBox mEditBox; + private TextInputListener mTextInputListener; + + private SurfaceView mSurfaceView; // GLSurfaceView or SurfaceView + + private boolean mSoftKeyboardShown = false; + private boolean mMultipleTouchEnabled = true; + + private boolean mEnableForceDoLayout = false; + + private boolean mIsVulkan = false; + + private boolean mSurfaceCreated = false; + + private CountDownLatch mNativePauseComplete; + + private WebViewHelper mWebViewHelper = null; + private EditBoxHelper mEditBoxHelper = null; + + public boolean isSoftKeyboardShown() { + return mSoftKeyboardShown; + } + + public void setSoftKeyboardShown(boolean softKeyboardShown) { + this.mSoftKeyboardShown = softKeyboardShown; + } + + public boolean isMultipleTouchEnabled() { + return mMultipleTouchEnabled; + } + + public void setEnableForceDoLayout(boolean flag){ + mEnableForceDoLayout = flag; + } + + // =========================================================== + // Constructors + // =========================================================== + + public AxmolPlayer(final Context ctx) { + super(ctx); + initView(ctx); + + sInstance = new WeakReference(this); + } + + // =========================================================== + // Initialization + // =========================================================== + + protected void initView(Context ctx) { + + mIsVulkan = AxmolEngine.nativeGetRenderAPI() == AxmolEngine.RENDER_API_VK; + + // FrameLayout + LayoutParams frameParams = new LayoutParams( + LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT + ); + setLayoutParams(frameParams); + + // Create hidden EditBox + mEditBox = new AxmolEditBox(ctx); + LayoutParams editParams = new LayoutParams( + LayoutParams.MATCH_PARENT, + LayoutParams.WRAP_CONTENT + ); + mEditBox.setLayoutParams(editParams); + mEditBox.setVisibility(View.GONE); + mEditBox.setImeOptions(EditorInfo.IME_ACTION_DONE); + addView(mEditBox); + + // Text input wrapper + mTextInputListener = new TextInputListener(this); + mEditBox.setOnEditorActionListener(mTextInputListener); + + // Handler for IME open/close + sHandler = new Handler(msg -> { + switch (msg.what) { + case HANDLER_OPEN_IME_KEYBOARD: + if (mEditBox != null) { + mEditBox.setVisibility(View.VISIBLE); + if (mEditBox.requestFocus()) { + mEditBox.removeTextChangedListener(mTextInputListener); + mEditBox.setText(""); + final String text = (String) msg.obj; + mEditBox.append(text); + mTextInputListener.setOriginText(text); + mEditBox.addTextChangedListener(mTextInputListener); + InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(mEditBox, 0); + Log.d(TAG, "showSoftInput"); + } + } + break; + case HANDLER_CLOSE_IME_KEYBOARD: + if (mEditBox != null) { + mEditBox.removeTextChangedListener(mTextInputListener); + InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(mEditBox.getWindowToken(), 0); + requestFocus(); + mEditBox.setVisibility(View.GONE); + if (ctx instanceof AxmolActivity) { + ((AxmolActivity) ctx).hideVirtualButton(); + } + Log.d(TAG, "HideSoftInput"); + } + break; + } + return true; + }); + + // Decide backend + if (mIsVulkan) { + initVulkanView(ctx); + } else { + initGLView(ctx); + } + + if(mWebViewHelper == null){ + mWebViewHelper = new WebViewHelper(this); + } + + if(mEditBoxHelper == null){ + mEditBoxHelper = new EditBoxHelper(this); + } + } + + private void initGLView(Context ctx) { + GLSurfaceView glView = new GLSurfaceView(ctx); + + final int[] glContextAttrs = AxmolEngine.nativeGetGLContextAttrs(); + AxmolEGLConfigChooser chooser = new AxmolEGLConfigChooser(glContextAttrs); + glView.setEGLConfigChooser(chooser); + + glView.setEGLContextClientVersion(2); + glView.setFocusableInTouchMode(true); + glView.setPreserveEGLContextOnPause(true); + + // only valid for GLES + AxmolRenderer mRenderer = new AxmolRenderer(this); + glView.setRenderer(mRenderer); + + mSurfaceView = glView; + addView(mSurfaceView); + } + + private void initVulkanView(Context ctx) { + SurfaceView vkView = new SurfaceView(ctx); + vkView.getHolder().addCallback(new SurfaceHolder.Callback() { + @Override + public void surfaceCreated(SurfaceHolder holder) { + onNativeSurfaceCreated(holder.getSurface()); + } + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { + AxmolPlayer.nativeOnSurfaceChanged(width, height); + } + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + } + }); + mSurfaceView = vkView; + addView(mSurfaceView); + } + + public Surface getSurface() { + return mSurfaceView.getHolder().getSurface(); + } + + public AxmolEditBox getEditText() { + return this.mEditBox; + } + + // =========================================================== + // Static access + // =========================================================== + + public static AxmolPlayer getInstance() { + return sInstance != null ? sInstance.get() : null; + } + + public static void queueAccelerometer(final float x, final float y, final float z, final long timestamp) { + AxmolEngine.runOnAxmolThread(new Runnable() { + @Override + public void run() { + AxmolAccelerometer.onSensorChanged(x, y, z, timestamp); + } + }); + } + + // =========================================================== + // IME control + // =========================================================== + + @SuppressWarnings("unused") + public static void openIMEKeyboard() { + AxmolPlayer player = getInstance(); + if(player == null) return; + final Message msg = new Message(); + msg.what = HANDLER_OPEN_IME_KEYBOARD; + msg.obj = player.getContentText(); + sHandler.sendMessage(msg); + } + + @SuppressWarnings("unused") + public static void closeIMEKeyboard() { + final Message msg = new Message(); + msg.what = HANDLER_CLOSE_IME_KEYBOARD; + sHandler.sendMessage(msg); + } + + public void insertText(final String text) { + AxmolPlayer.nativeInsertText(text); + } + + public void deleteBackward(int numChars) { + AxmolPlayer.nativeDeleteBackward(numChars); + } + + private String getContentText() { + return AxmolPlayer.nativeGetContentText(); + } + + // =========================================================== + // Touch & Key Events + // =========================================================== + + @Override + public boolean onTouchEvent(final MotionEvent pMotionEvent) { + // these data are used in ACTION_MOVE and ACTION_CANCEL + final int pointerNumber = pMotionEvent.getPointerCount(); + final int[] ids = new int[pointerNumber]; + final float[] xs = new float[pointerNumber]; + final float[] ys = new float[pointerNumber]; + + if (mSoftKeyboardShown){ + InputMethodManager imm = (InputMethodManager)this.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + View view = ((Activity)this.getContext()).getCurrentFocus(); + if (null != view) { + imm.hideSoftInputFromWindow(view.getWindowToken(),0); + } + this.requestFocus(); + mSoftKeyboardShown = false; + } + + for (int i = 0; i < pointerNumber; i++) { + ids[i] = pMotionEvent.getPointerId(i); + xs[i] = pMotionEvent.getX(i); + ys[i] = pMotionEvent.getY(i); + } + + switch (pMotionEvent.getAction() & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_POINTER_DOWN: + final int indexPointerDown = pMotionEvent.getAction() >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; + if (!mMultipleTouchEnabled && indexPointerDown != 0) { + break; + } + final int idPointerDown = pMotionEvent.getPointerId(indexPointerDown); + final float xPointerDown = pMotionEvent.getX(indexPointerDown); + final float yPointerDown = pMotionEvent.getY(indexPointerDown); + + AxmolEngine.runOnAxmolThread(new Runnable() { + @Override + public void run() { + AxmolPlayer.nativeTouchesBegin(idPointerDown, xPointerDown, yPointerDown); + } + }); + break; + + case MotionEvent.ACTION_DOWN: + // there are only one finger on the screen + final int idDown = pMotionEvent.getPointerId(0); + final float xDown = xs[0]; + final float yDown = ys[0]; + + AxmolEngine.runOnAxmolThread(new Runnable() { + @Override + public void run() { + AxmolPlayer.nativeTouchesBegin(idDown, xDown, yDown); + } + }); + break; + + case MotionEvent.ACTION_MOVE: + if (!mMultipleTouchEnabled) { + // handle only touch with id == 0 + for (int i = 0; i < pointerNumber; i++) { + if (ids[i] == 0) { + final int[] idsMove = new int[]{0}; + final float[] xsMove = new float[]{xs[i]}; + final float[] ysMove = new float[]{ys[i]}; + AxmolEngine.runOnAxmolThread(new Runnable() { + @Override + public void run() { + AxmolPlayer.nativeTouchesMove(idsMove, xsMove, ysMove); + } + }); + break; + } + } + } else { + AxmolEngine.runOnAxmolThread(new Runnable() { + @Override + public void run() { + AxmolPlayer.nativeTouchesMove(ids, xs, ys); + } + }); + } + break; + + case MotionEvent.ACTION_POINTER_UP: + final int indexPointUp = pMotionEvent.getAction() >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; + if (!mMultipleTouchEnabled && indexPointUp != 0) { + break; + } + final int idPointerUp = pMotionEvent.getPointerId(indexPointUp); + final float xPointerUp = pMotionEvent.getX(indexPointUp); + final float yPointerUp = pMotionEvent.getY(indexPointUp); + + AxmolEngine.runOnAxmolThread(new Runnable() { + @Override + public void run() { + AxmolPlayer.nativeTouchesEnd(idPointerUp, xPointerUp, yPointerUp); + } + }); + break; + + case MotionEvent.ACTION_UP: + // there are only one finger on the screen + final int idUp = pMotionEvent.getPointerId(0); + final float xUp = xs[0]; + final float yUp = ys[0]; + + AxmolEngine.runOnAxmolThread(new Runnable() { + @Override + public void run() { + AxmolPlayer.nativeTouchesEnd(idUp, xUp, yUp); + } + }); + break; + + case MotionEvent.ACTION_CANCEL: + if (!mMultipleTouchEnabled) { + // handle only touch with id == 0 + for (int i = 0; i < pointerNumber; i++) { + if (ids[i] == 0) { + final int[] idsCancel = new int[]{0}; + final float[] xsCancel = new float[]{xs[i]}; + final float[] ysCancel = new float[]{ys[i]}; + AxmolEngine.runOnAxmolThread(new Runnable() { + @Override + public void run() { + AxmolPlayer.nativeTouchesCancel(idsCancel, xsCancel, ysCancel); + } + }); + break; + } + } + } else { + AxmolEngine.runOnAxmolThread(new Runnable() { + @Override + public void run() { + AxmolPlayer.nativeTouchesCancel(ids, xs, ys); + } + }); + } + break; + } + + /* + if (BuildConfig.DEBUG) { + AxmolGLSurfaceView.dumpMotionEvent(pMotionEvent); + } + */ + return true; + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + + if(!this.isInEditMode()) { + sScreenWidth = w; + sScreenHeight = h; + } + } + + @Override + public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) { + switch (pKeyCode) { + case KeyEvent.KEYCODE_BACK: + case KeyEvent.KEYCODE_MENU: + case KeyEvent.KEYCODE_DPAD_LEFT: + case KeyEvent.KEYCODE_DPAD_RIGHT: + case KeyEvent.KEYCODE_DPAD_UP: + case KeyEvent.KEYCODE_DPAD_DOWN: + case KeyEvent.KEYCODE_ENTER: + case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: + case KeyEvent.KEYCODE_DPAD_CENTER: + AxmolEngine.runOnAxmolThread(new Runnable() { + @Override + public void run() { + AxmolPlayer.nativeKeyEvent(pKeyCode, true); + } + }); + return true; + default: + return super.onKeyDown(pKeyCode, pKeyEvent); + } + } + + @Override + public boolean onKeyUp(final int keyCode, KeyEvent event) { + switch (keyCode) { + case KeyEvent.KEYCODE_BACK: + case KeyEvent.KEYCODE_MENU: + case KeyEvent.KEYCODE_DPAD_LEFT: + case KeyEvent.KEYCODE_DPAD_RIGHT: + case KeyEvent.KEYCODE_DPAD_UP: + case KeyEvent.KEYCODE_DPAD_DOWN: + case KeyEvent.KEYCODE_ENTER: + case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: + case KeyEvent.KEYCODE_DPAD_CENTER: + AxmolEngine.runOnAxmolThread(new Runnable() { + @Override + public void run() { + AxmolPlayer.nativeKeyEvent(keyCode, false); + } + }); + return true; + default: + return super.onKeyUp(keyCode, event); + } + } + + // =========================================================== + // Pause/Resume + // =========================================================== + + public void onPause() + { + if (mSurfaceView != null) { + if(!mIsVulkan) + ((GLSurfaceView)mSurfaceView).onPause(); + } + } + + public void onResume() + { + if (mSurfaceView != null) { + if(!mIsVulkan) + ((GLSurfaceView)mSurfaceView).onResume(); + } + } + + public void handleOnResume() { + if (AxmolEngine.sNativePaused) { + AxmolPlayer.nativeOnResume(); + AxmolEngine.sNativePaused = false; + } + + if (mSurfaceView != null) { + if(!mIsVulkan) + ((GLSurfaceView)mSurfaceView).setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY); + } + } + + public void handleOnPause() { + if (mSurfaceView != null) { + if(!mIsVulkan) + ((GLSurfaceView)mSurfaceView).setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); + } + if (sNativeInitialized) { + mNativePauseComplete = new CountDownLatch(1); + /** + * onPause may be invoked before onSurfaceCreated, + * and engine will be initialized correctly after + * onSurfaceCreated is invoked. Can not invoke any + * native method before onSurfaceCreated is invoked + */ + + AxmolPlayer.nativeOnPause(); + AxmolEngine.sNativePaused = true; + + mNativePauseComplete.countDown(); + } + } + + public void waitForPauseToComplete() { + while (mNativePauseComplete.getCount() > 0) { + try { + mNativePauseComplete.await(); + } catch (InterruptedException e) { + Log.e(TAG, "Pause wait interrupted", e); + } + } + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + if(mEnableForceDoLayout){ + /*This is a hot-fix for some android devices which don't do layout when the main window + * is paned. We refresh the layout in 24 frames per seconds. + * When the editBox is lose focus or when user begin to type, the do layout is disabled. + */ + final Handler handler = new Handler(); + handler.postDelayed(new Runnable() { + @Override + public void run() { + //Do something after 100ms + requestLayout(); + invalidate(); + } + }, 1000 / 24); + + } + + } + + // =========================================================== + // Debug Motion Event (preserve original dumpMotionEvent) + // =========================================================== + + // private static void dumpMotionEvent(final MotionEvent event) { + // final String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE", + // "POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" }; + // final StringBuilder sb = new StringBuilder(); + // final int action = event.getAction(); + // final int actionCode = action & MotionEvent.ACTION_MASK; + // sb.append("event ACTION_").append(names[actionCode]); + // if (actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_POINTER_UP) { + // sb.append("(pid ").append(action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT); + // sb.append(")"); + // } + // sb.append("["); + // for (int i = 0; i < event.getPointerCount(); i++) { + // sb.append("#").append(i); + // sb.append("(pid ").append(event.getPointerId(i)); + // sb.append(")=").append((int) event.getX(i)); + // sb.append(",").append((int) event.getY(i)); + // if (i + 1 < event.getPointerCount()) { + // sb.append(";"); + // } + // } + // sb.append("]"); + // Log.d(TAG, sb.toString()); + // } + + // =========================================================== + // Inner and Anonymous Classes + // =========================================================== + + private class AxmolEGLConfigChooser implements GLSurfaceView.EGLConfigChooser + { + private int[] mConfigAttributes; + private final int EGL_OPENGL_ES2_BIT = 0x04; + private final int EGL_OPENGL_ES3_BIT = 0x40; + public AxmolEGLConfigChooser(int redSize, int greenSize, int blueSize, int alphaSize, int depthSize, int stencilSize, int multisamplingCount) + { + mConfigAttributes = new int[] {redSize, greenSize, blueSize, alphaSize, depthSize, stencilSize, multisamplingCount}; + } + public AxmolEGLConfigChooser(int[] attributes) + { + mConfigAttributes = attributes; + } + + @Override + public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) + { + int[][] EGLAttributes = { + { + // GL ES 2 with user set + EGL10.EGL_RED_SIZE, mConfigAttributes[0], + EGL10.EGL_GREEN_SIZE, mConfigAttributes[1], + EGL10.EGL_BLUE_SIZE, mConfigAttributes[2], + EGL10.EGL_ALPHA_SIZE, mConfigAttributes[3], + EGL10.EGL_DEPTH_SIZE, mConfigAttributes[4], + EGL10.EGL_STENCIL_SIZE, mConfigAttributes[5], + EGL10.EGL_SAMPLE_BUFFERS, (mConfigAttributes[6] > 0) ? 1 : 0, + EGL10.EGL_SAMPLES, mConfigAttributes[6], + EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL10.EGL_NONE + }, + { + // GL ES 2 with user set 16 bit depth buffer + EGL10.EGL_RED_SIZE, mConfigAttributes[0], + EGL10.EGL_GREEN_SIZE, mConfigAttributes[1], + EGL10.EGL_BLUE_SIZE, mConfigAttributes[2], + EGL10.EGL_ALPHA_SIZE, mConfigAttributes[3], + EGL10.EGL_DEPTH_SIZE, mConfigAttributes[4] >= 24 ? 16 : mConfigAttributes[4], + EGL10.EGL_STENCIL_SIZE, mConfigAttributes[5], + EGL10.EGL_SAMPLE_BUFFERS, (mConfigAttributes[6] > 0) ? 1 : 0, + EGL10.EGL_SAMPLES, mConfigAttributes[6], + EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL10.EGL_NONE + }, + { + // GL ES 2 with user set 16 bit depth buffer without multisampling + EGL10.EGL_RED_SIZE, mConfigAttributes[0], + EGL10.EGL_GREEN_SIZE, mConfigAttributes[1], + EGL10.EGL_BLUE_SIZE, mConfigAttributes[2], + EGL10.EGL_ALPHA_SIZE, mConfigAttributes[3], + EGL10.EGL_DEPTH_SIZE, mConfigAttributes[4] >= 24 ? 16 : mConfigAttributes[4], + EGL10.EGL_STENCIL_SIZE, mConfigAttributes[5], + EGL10.EGL_SAMPLE_BUFFERS, 0, + EGL10.EGL_SAMPLES, 0, + EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL10.EGL_NONE + }, + { + // GL ES 2 by default + EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL10.EGL_NONE + } + }; + + EGLConfig result = null; + for (int[] eglAtribute : EGLAttributes) { + result = this.doChooseConfig(egl, display, eglAtribute); + if (result != null) + return result; + } + + Log.e(Context.DEVICE_POLICY_SERVICE, "Can not select an EGLConfig for rendering."); + return null; + } + + private EGLConfig doChooseConfig(EGL10 egl, EGLDisplay display, int[] attributes) { + EGLConfig[] configs = new EGLConfig[1]; + int[] matchedConfigNum = new int[1]; + boolean result = egl.eglChooseConfig(display, attributes, configs, 1, matchedConfigNum); + if (result && matchedConfigNum[0] > 0) { + return configs[0]; + } + return null; + } + } + + // =========================================================== + // Native methods for AxmolPlayer + // =========================================================== + + public void onNativeSurfaceCreated(Surface surface) { + boolean isWarmStart = !mSurfaceCreated; + mSurfaceCreated = true; + AxmolPlayer.nativeOnSurfaceCreated(surface, sScreenWidth, sScreenHeight, isWarmStart); + if(!sNativeInitialized) { + sNativeInitialized = true; + } + } + + public static native void nativeRenderFrame(); + public static native void nativeOnResume(); + public static native void nativeOnPause(); + + public static native String nativeGetContentText(); + public static native void nativeInsertText(String text); + public static native void nativeDeleteBackward(int numChars); + + public static native void nativeTouchesBegin(final int id, final float x, final float y); + public static native void nativeTouchesEnd(final int id, final float x, final float y); + public static native void nativeTouchesMove(final int[] ids, final float[] xs, final float[] ys); + public static native void nativeTouchesCancel(final int[] ids, final float[] xs, final float[] ys); + public static native boolean nativeKeyEvent(final int keyCode,boolean isPressed); + + public static native void nativeOnSurfaceCreated(Object surface, final int width, final int height, boolean isWarmStart); + public static native void nativeOnSurfaceChanged(final int width, final int height); +} diff --git a/axmol/platform/android/java/src/dev/axmol/lib/AxmolRenderer.java b/axmol/platform/android/java/src/dev/axmol/lib/AxmolRenderer.java index d60d69ffc4ae..ef25b0acd5cc 100644 --- a/axmol/platform/android/java/src/dev/axmol/lib/AxmolRenderer.java +++ b/axmol/platform/android/java/src/dev/axmol/lib/AxmolRenderer.java @@ -25,6 +25,7 @@ of this software and associated documentation files (the "Software"), to deal package dev.axmol.lib; import android.opengl.GLSurfaceView; +import android.view.Surface; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; @@ -45,16 +46,18 @@ public class AxmolRenderer implements GLSurfaceView.Renderer { // =========================================================== private long mLastTickInNanoSeconds; - private int mScreenWidth; - private int mScreenHeight; - private static boolean gNativeInitialized = false; - private static boolean gNativeIsPaused = false; - private boolean mSurfaceCreated = false; + + private AxmolPlayer mPlayer = null; // =========================================================== // Constructors // =========================================================== + public AxmolRenderer(AxmolPlayer player) + { + mPlayer = player; + } + // =========================================================== // Getter & Setter // =========================================================== @@ -63,34 +66,19 @@ public static void setAnimationInterval(float interval) { sAnimationInterval = (long) (interval * AxmolRenderer.NANOSECONDSPERSECOND); } - public void setScreenWidthAndHeight(final int surfaceWidth, final int surfaceHeight) { - this.mScreenWidth = surfaceWidth; - this.mScreenHeight = surfaceHeight; - } - // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== @Override public void onSurfaceCreated(final GL10 GL10, final EGLConfig EGLConfig) { - AxmolRenderer.nativeInit(this.mScreenWidth, this.mScreenHeight); this.mLastTickInNanoSeconds = System.nanoTime(); - - boolean isWarmStart = !mSurfaceCreated; - mSurfaceCreated = true; - - if (gNativeInitialized) { - // This must be from an OpenGL context loss - nativeOnContextLost(isWarmStart); - } else { - gNativeInitialized = true; - } + mPlayer.onNativeSurfaceCreated(mPlayer.getSurface()); } @Override public void onSurfaceChanged(final GL10 GL10, final int width, final int height) { - AxmolRenderer.nativeOnSurfaceChanged(width, height); + AxmolPlayer.nativeOnSurfaceChanged(width, height); } @Override @@ -98,7 +86,7 @@ public void onDrawFrame(final GL10 gl) { /* * Render time MUST be counted in, or the FPS will slower than appointed. */ - AxmolRenderer.nativeRender(); + AxmolPlayer.nativeRenderFrame(); /* * No need to use algorithm in default(60,90,120... FPS) situation, * since onDrawFrame() was called by system 60 times per second by default. @@ -116,85 +104,4 @@ public void onDrawFrame(final GL10 gl) { this.mLastTickInNanoSeconds = System.nanoTime(); } } - - // =========================================================== - // Methods - // =========================================================== - - private static native void nativeTouchesBegin(final int id, final float x, final float y); - private static native void nativeTouchesEnd(final int id, final float x, final float y); - private static native void nativeTouchesMove(final int[] ids, final float[] xs, final float[] ys); - private static native void nativeTouchesCancel(final int[] ids, final float[] xs, final float[] ys); - private static native boolean nativeKeyEvent(final int keyCode,boolean isPressed); - private static native void nativeRender(); - private static native void nativeInit(final int width, final int height); - private static native void nativeOnContextLost(final boolean isWarmStart); - private static native void nativeOnSurfaceChanged(final int width, final int height); - private static native void nativeOnPause(); - private static native void nativeOnResume(); - - public void handleActionDown(final int id, final float x, final float y) { - AxmolRenderer.nativeTouchesBegin(id, x, y); - } - - public void handleActionUp(final int id, final float x, final float y) { - AxmolRenderer.nativeTouchesEnd(id, x, y); - } - - public void handleActionCancel(final int[] ids, final float[] xs, final float[] ys) { - AxmolRenderer.nativeTouchesCancel(ids, xs, ys); - } - - public void handleActionMove(final int[] ids, final float[] xs, final float[] ys) { - AxmolRenderer.nativeTouchesMove(ids, xs, ys); - } - - public void handleKeyDown(final int keyCode) { - AxmolRenderer.nativeKeyEvent(keyCode, true); - } - - public void handleKeyUp(final int keyCode) { - AxmolRenderer.nativeKeyEvent(keyCode, false); - } - - public void handleOnPause() { - /** - * onPause may be invoked before onSurfaceCreated, - * and engine will be initialized correctly after - * onSurfaceCreated is invoked. Can not invoke any - * native method before onSurfaceCreated is invoked - */ - if (!gNativeInitialized) - return; - - AxmolRenderer.nativeOnPause(); - gNativeIsPaused = true; - } - - public void handleOnResume() { - if (gNativeIsPaused) { - AxmolRenderer.nativeOnResume(); - gNativeIsPaused = false; - } - } - - private static native void nativeInsertText(final String text); - private static native void nativeDeleteBackward(final int numChars); - private static native String nativeGetContentText(); - - public void handleInsertText(final String text) { - AxmolRenderer.nativeInsertText(text); - } - - public void handleDeleteBackward(final int numChars) { - AxmolRenderer.nativeDeleteBackward(numChars); - } - - public String getContentText() { - return AxmolRenderer.nativeGetContentText(); - } - - // =========================================================== - // Inner and Anonymous Classes - // =========================================================== } diff --git a/axmol/platform/android/java/src/dev/axmol/lib/AxmolWebView.java b/axmol/platform/android/java/src/dev/axmol/lib/AxmolWebView.java index f94256f84744..586b6e53dfef 100644 --- a/axmol/platform/android/java/src/dev/axmol/lib/AxmolWebView.java +++ b/axmol/platform/android/java/src/dev/axmol/lib/AxmolWebView.java @@ -1,18 +1,18 @@ /**************************************************************************** Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - + https://axmol.dev/ - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -111,7 +111,7 @@ public boolean shouldOverrideUrlLoading(WebView view, final String urlString) { try { URI uri = URI.create(urlString); if (uri != null && uri.getScheme().equals(mJSScheme)) { - AxmolEngine.runOnGLThread(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { WebViewHelper._onJsCallback(mViewTag, urlString); @@ -127,7 +127,7 @@ public void run() { CountDownLatch latch = new CountDownLatch(1); // run worker on cocos thread - AxmolEngine.runOnGLThread(new ShouldStartLoadingWorker(latch, result, mViewTag, urlString)); + AxmolEngine.runOnAxmolThread(new ShouldStartLoadingWorker(latch, result, mViewTag, urlString)); // wait for result from cocos thread try { @@ -142,7 +142,7 @@ public void run() { @Override public void onPageFinished(WebView view, final String url) { super.onPageFinished(view, url); - AxmolEngine.runOnGLThread(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { WebViewHelper._didFinishLoading(mViewTag, url); @@ -154,7 +154,7 @@ public void run() { public void onReceivedError(WebView view, int errorCode, String description, final String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); AxmolActivity activity = (AxmolActivity)getContext(); - AxmolEngine.runOnGLThread(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { WebViewHelper._didFailLoading(mViewTag, failingUrl); diff --git a/axmol/platform/android/java/src/dev/axmol/lib/EditBoxHelper.java b/axmol/platform/android/java/src/dev/axmol/lib/EditBoxHelper.java index d7293b6fbe94..dafc2d00717b 100644 --- a/axmol/platform/android/java/src/dev/axmol/lib/EditBoxHelper.java +++ b/axmol/platform/android/java/src/dev/axmol/lib/EditBoxHelper.java @@ -49,30 +49,18 @@ of this software and associated documentation files (the "Software"), to deal public class EditBoxHelper { private static final String TAG = EditBoxHelper.class.getSimpleName(); private static AxmolActivity mActivity; - private static ResizeLayout mFrameLayout; + private static AxmolPlayer sAxmolPlayer; private static SparseArray mEditBoxArray; private static int mViewTag = 0; private static float mPadding = 5.0f; //Call native methods - private static native void editBoxEditingDidBegin(int index); - public static void __editBoxEditingDidBegin(int index){ - editBoxEditingDidBegin(index); - } - - private static native void editBoxEditingChanged(int index, String text); - public static void __editBoxEditingChanged(int index, String text){ - editBoxEditingChanged(index, text); - } - - private static native void editBoxEditingDidEnd(int index, String text, int action); - public static void __editBoxEditingDidEnd(int index, String text, int action) { - editBoxEditingDidEnd(index, text, action); - } - + private static native void nativeEditBoxEditingDidBegin(int index); + private static native void nativeEditBoxEditingChanged(int index, String text); + private static native void nativeEditBoxEditingDidEnd(int index, String text, int action); - public EditBoxHelper(ResizeLayout layout) { - EditBoxHelper.mFrameLayout = layout; + public EditBoxHelper(AxmolPlayer player) { + EditBoxHelper.sAxmolPlayer = player; EditBoxHelper.mActivity = (AxmolActivity) AxmolActivity.getContext(); EditBoxHelper.mEditBoxArray = new SparseArray(); @@ -113,7 +101,7 @@ public void run() { lParams.height = height; lParams.gravity = Gravity.TOP | Gravity.LEFT; - mFrameLayout.addView(editBox, lParams); + sAxmolPlayer.addView(editBox, lParams); editBox.setTag(false); editBox.addTextChangedListener(new TextWatcher() { @Override @@ -131,10 +119,10 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { public void afterTextChanged(final Editable s) { if (!editBox.getChangedTextProgrammatically()) { if ((Boolean) editBox.getTag()) { - AxmolEngine.runOnGLThread(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { - EditBoxHelper.__editBoxEditingChanged(index, s.toString()); + nativeEditBoxEditingChanged(index, s.toString()); } }); @@ -153,31 +141,31 @@ public void onFocusChange(View v, boolean hasFocus) { editBox.setTag(true); editBox.setChangedTextProgrammatically(false); if (hasFocus) { - AxmolEngine.runOnGLThread(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { editBox.endAction = AxmolEditBox.kEndActionUnknown; - EditBoxHelper.__editBoxEditingDidBegin(index); + nativeEditBoxEditingDidBegin(index); } }); editBox.setSelection(editBox.getText().length()); - mFrameLayout.setEnableForceDoLayout(true); - mActivity.getGLSurfaceView().setSoftKeyboardShown(true); + sAxmolPlayer.setEnableForceDoLayout(true); + mActivity.getPlayer().setSoftKeyboardShown(true); Log.d(TAG, "edit box get focus"); } else { editBox.setVisibility(View.GONE); // Note that we must to copy a string to prevent string content is modified // on UI thread while 's.toString' is invoked at the same time. final String text = new String(editBox.getText().toString()); - AxmolEngine.runOnGLThread(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { int action = editBox.endAction; - EditBoxHelper.__editBoxEditingDidEnd(index, text, action); + nativeEditBoxEditingDidEnd(index, text, action); } }); mActivity.hideVirtualButton(); - mFrameLayout.setEnableForceDoLayout(false); + sAxmolPlayer.setEnableForceDoLayout(false); Log.d(TAG, "edit box lose focus"); } } @@ -227,7 +215,7 @@ public void run() { AxmolEditBox editBox = mEditBoxArray.get(index); if (editBox != null) { mEditBoxArray.remove(index); - mFrameLayout.removeView(editBox); + sAxmolPlayer.removeView(editBox); Log.d(TAG, "remove EditBox"); } } @@ -428,9 +416,9 @@ private static void openKeyboardOnUiThread(int index) { AxmolEditBox editBox = mEditBoxArray.get(index); if (null != editBox) { editBox.requestFocus(); - mActivity.getGLSurfaceView().requestLayout(); + mActivity.getPlayer().requestLayout(); imm.showSoftInput(editBox, 0); - mActivity.getGLSurfaceView().setSoftKeyboardShown(true); + mActivity.getPlayer().setSoftKeyboardShown(true); } } @@ -444,8 +432,8 @@ private static void closeKeyboardOnUiThread(int index) { AxmolEditBox editBox = mEditBoxArray.get(index); if (null != editBox) { imm.hideSoftInputFromWindow(editBox.getWindowToken(), 0); - mActivity.getGLSurfaceView().setSoftKeyboardShown(false); - mActivity.getGLSurfaceView().requestFocus(); + mActivity.getPlayer().setSoftKeyboardShown(false); + mActivity.getPlayer().requestFocus(); // can take effect after GLSurfaceView has focus mActivity.hideVirtualButton(); } diff --git a/axmol/platform/android/java/src/dev/axmol/lib/GameControllerAdapter.java b/axmol/platform/android/java/src/dev/axmol/lib/GameControllerAdapter.java index 443877ec0076..d6babb07d973 100644 --- a/axmol/platform/android/java/src/dev/axmol/lib/GameControllerAdapter.java +++ b/axmol/platform/android/java/src/dev/axmol/lib/GameControllerAdapter.java @@ -1,18 +1,18 @@ /**************************************************************************** Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - + https://axmol.dev/ - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,7 +28,7 @@ of this software and associated documentation files (the "Software"), to deal public class GameControllerAdapter { private static ArrayList sRunnableFrameStartList = null; - + public static void addRunnableToFrameStartList(Runnable runnable) { if (sRunnableFrameStartList == null) sRunnableFrameStartList = new ArrayList(); @@ -49,51 +49,51 @@ public static void onDrawFrameStart() { } } } - + public static void onConnected(final String vendorName, final int controller) { - AxmolEngine.runOnGLThread(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { nativeControllerConnected(vendorName, controller); - } + } }); } - + public static void onDisconnected(final String vendorName, final int controller) { - AxmolEngine.runOnGLThread(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { nativeControllerDisconnected(vendorName, controller); - } + } }); } - + public static void onButtonEvent(final String vendorName, final int controller, final int button, final boolean isPressed, final float value, final boolean isAnalog) { - AxmolEngine.runOnGLThread(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { nativeControllerButtonEvent(vendorName, controller, button, isPressed, value, isAnalog); - } + } }); } - + public static void onAxisEvent(final String vendorName, final int controller, final int axisID, final float value, final boolean isAnalog) { - AxmolEngine.runOnGLThread(new Runnable() { + AxmolEngine.runOnAxmolThread(new Runnable() { @Override public void run() { nativeControllerAxisEvent(vendorName, controller, axisID, value, isAnalog); - } + } }); } - + private static native void nativeControllerConnected(final String vendorName, final int controller); private static native void nativeControllerDisconnected(final String vendorName, final int controller); private static native void nativeControllerButtonEvent(final String vendorName, final int controller, final int button, final boolean isPressed, final float value, final boolean isAnalog); diff --git a/axmol/platform/android/java/src/dev/axmol/lib/ResizeLayout.java b/axmol/platform/android/java/src/dev/axmol/lib/ResizeLayout.java deleted file mode 100644 index dffb9b640e51..000000000000 --- a/axmol/platform/android/java/src/dev/axmol/lib/ResizeLayout.java +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** - Copyright (c) 2010-2013 cocos2d-x.org - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - - https://axmol.dev/ - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ -package dev.axmol.lib; - -import android.content.Context; -import android.os.Handler; -import android.util.AttributeSet; -import android.widget.FrameLayout; - -public class ResizeLayout extends FrameLayout { - private boolean mEnableForceDoLayout = false; - - public ResizeLayout(Context context){ - super(context); - } - - public ResizeLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public void setEnableForceDoLayout(boolean flag){ - mEnableForceDoLayout = flag; - } - - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - super.onLayout(changed, l, t, r, b); - if(mEnableForceDoLayout){ - /*This is a hot-fix for some android devices which don't do layout when the main window - * is paned. We refresh the layout in 24 frames per seconds. - * When the editBox is lose focus or when user begin to type, the do layout is disabled. - */ - final Handler handler = new Handler(); - handler.postDelayed(new Runnable() { - @Override - public void run() { - //Do something after 100ms - requestLayout(); - invalidate(); - } - }, 1000 / 24); - - } - - } - -} diff --git a/axmol/platform/android/java/src/dev/axmol/lib/TextInputWrapper.java b/axmol/platform/android/java/src/dev/axmol/lib/TextInputListener.java similarity index 84% rename from axmol/platform/android/java/src/dev/axmol/lib/TextInputWrapper.java rename to axmol/platform/android/java/src/dev/axmol/lib/TextInputListener.java index f12e5e026bca..78ca6a937165 100644 --- a/axmol/platform/android/java/src/dev/axmol/lib/TextInputWrapper.java +++ b/axmol/platform/android/java/src/dev/axmol/lib/TextInputListener.java @@ -27,25 +27,24 @@ of this software and associated documentation files (the "Software"), to deal import android.content.Context; import android.text.Editable; import android.text.TextWatcher; -import android.util.Log; import android.view.KeyEvent; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; -public class TextInputWrapper implements TextWatcher, OnEditorActionListener { +public class TextInputListener implements TextWatcher, OnEditorActionListener { // =========================================================== // Constants // =========================================================== - private static final String TAG = TextInputWrapper.class.getSimpleName(); + private static final String TAG = TextInputListener.class.getSimpleName(); // =========================================================== // Fields // =========================================================== - private final AxmolGLSurfaceView mGLSurfaceView; + private final AxmolPlayer mAxmolPlayer; private String mText; private String mOriginText; @@ -53,8 +52,8 @@ public class TextInputWrapper implements TextWatcher, OnEditorActionListener { // Constructors // =========================================================== - public TextInputWrapper(final AxmolGLSurfaceView pAxmolGLSurfaceView) { - this.mGLSurfaceView = pAxmolGLSurfaceView; + public TextInputListener(final AxmolPlayer player) { + this.mAxmolPlayer = player; } // =========================================================== @@ -62,7 +61,7 @@ public TextInputWrapper(final AxmolGLSurfaceView pAxmolGLSurfaceView) { // =========================================================== private boolean isFullScreenEdit() { - final TextView textField = this.mGLSurfaceView.getEditText(); + final TextView textField = this.mAxmolPlayer.getEditText(); final InputMethodManager imm = (InputMethodManager) textField.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); return imm.isFullscreenMode(); } @@ -91,13 +90,13 @@ public void afterTextChanged(final Editable s) { } if (old_i < this.mText.length()) { - this.mGLSurfaceView.deleteBackward(this.mText.length() - old_i); + this.mAxmolPlayer.deleteBackward(this.mText.length() - old_i); } int nModified = s.length() - new_i; if (nModified > 0) { final String insertText = s.subSequence(new_i, s.length()).toString(); - this.mGLSurfaceView.insertText(insertText); + this.mAxmolPlayer.insertText(insertText); } this.mText = s.toString(); @@ -115,11 +114,11 @@ public void onTextChanged(final CharSequence pCharSequence, final int start, fin @Override public boolean onEditorAction(final TextView pTextView, final int pActionID, final KeyEvent pKeyEvent) { - if (this.mGLSurfaceView.getEditText() == pTextView && this.isFullScreenEdit()) { + if (this.mAxmolPlayer.getEditText() == pTextView && this.isFullScreenEdit()) { // user press the action button, delete all old text and insert new text if (null != mOriginText) { if (!this.mOriginText.isEmpty()) { - this.mGLSurfaceView.deleteBackward(this.mOriginText.length()); + this.mAxmolPlayer.deleteBackward(this.mOriginText.length()); } } @@ -137,12 +136,12 @@ public boolean onEditorAction(final TextView pTextView, final int pActionID, fin } final String insertText = text; - this.mGLSurfaceView.insertText(insertText); + this.mAxmolPlayer.insertText(insertText); } if (pActionID == EditorInfo.IME_ACTION_DONE) { - this.mGLSurfaceView.requestFocus(); + this.mAxmolPlayer.requestFocus(); } return false; } diff --git a/axmol/platform/android/java/src/dev/axmol/lib/WebViewHelper.java b/axmol/platform/android/java/src/dev/axmol/lib/WebViewHelper.java index ac5fccdadf37..4e4648070269 100644 --- a/axmol/platform/android/java/src/dev/axmol/lib/WebViewHelper.java +++ b/axmol/platform/android/java/src/dev/axmol/lib/WebViewHelper.java @@ -1,18 +1,18 @@ /**************************************************************************** Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - + https://axmol.dev/ - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -47,13 +47,13 @@ public class WebViewHelper { private static final String TAG = WebViewHelper.class.getSimpleName(); private static Handler sHandler; private static AxmolActivity sAxmolActivity; - private static FrameLayout sLayout; + private static AxmolPlayer sAxmolPlayer; private static SparseArray webViews; private static int viewTag = 0; - public WebViewHelper(FrameLayout layout) { - WebViewHelper.sLayout = layout; + public WebViewHelper(AxmolPlayer layout) { + WebViewHelper.sAxmolPlayer = layout; WebViewHelper.sHandler = new Handler(Looper.myLooper()); WebViewHelper.sAxmolActivity = (AxmolActivity) AxmolActivity.getContext(); @@ -93,7 +93,7 @@ public void run() { FrameLayout.LayoutParams lParams = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); - sLayout.addView(webView, lParams); + sAxmolPlayer.addView(webView, lParams); webViews.put(index, webView); } @@ -108,7 +108,7 @@ public void run() { AxmolWebView webView = webViews.get(index); if (webView != null) { webViews.remove(index); - sLayout.removeView(webView); + sAxmolPlayer.removeView(webView); } } }); diff --git a/axmol/platform/android/javaactivity-android.cpp b/axmol/platform/android/javaactivity-android.cpp index 78dce15de476..c40c17fc083b 100644 --- a/axmol/platform/android/javaactivity-android.cpp +++ b/axmol/platform/android/javaactivity-android.cpp @@ -79,74 +79,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) return JNI_VERSION_1_4; } -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeInit(JNIEnv*, jclass, jint w, jint h) -{ - RenderViewImpl::loadGLES2(); - - auto director = ax::Director::getInstance(); - auto renderView = director->getRenderView(); - if (!renderView) - { - renderView = ax::RenderViewImpl::createWithRect( - "axmol3", Rect{ax::Rect{0, 0, static_cast(w), static_cast(h)}}); - director->setRenderView(renderView); - - ax::Application::getInstance()->run(); - } - else - { - axdrv->resetState(); - director->resetMatrixStack(); - ax::EventCustom recreatedEvent(EVENT_RENDERER_RECREATED); - director->getEventDispatcher()->dispatchEvent(&recreatedEvent, true); - director->setRenderDefaults(); -#if AX_ENABLE_CONTEXT_LOSS_RECOVERY - ax::VolatileTextureMgr::reloadAllTextures(); -#endif - } -} - -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeOnContextLost(JNIEnv*, jclass, jboolean isWarmStart) -{ -#if AX_ENABLE_RESTART_APPLICATION_ON_CONTEXT_LOST - auto director = ax::Director::getInstance(); - ax::EventCustom recreatedEvent(EVENT_APP_RESTARTING); - director->getEventDispatcher()->dispatchEvent(&recreatedEvent, true); - - // Pop to root scene, replace with an empty scene, and clear all cached data before restarting - director->popToRootScene(); - auto rootScene = Scene::create(); - director->replaceScene(rootScene); - director->purgeCachedData(); - - JniHelper::callStaticVoidMethod("dev/axmol/lib/AxmolEngine", "restartProcess"); -#endif - - if (isWarmStart) - { - auto director = ax::Director::getInstance(); - ax::EventCustom warmStartEvent(EVENT_APP_WARM_START); - director->getEventDispatcher()->dispatchEvent(&warmStartEvent, true); - } -} - -JNIEXPORT jintArray JNICALL Java_dev_axmol_lib_AxmolActivity_getGLContextAttrs(JNIEnv* env, jclass) -{ - auto app = ax::Application::getInstance(); - app->initContextAttrs(); - const auto& contextAttrs = Application::getContextAttrs(); - - int tmp[7] = {contextAttrs.redBits, contextAttrs.greenBits, contextAttrs.blueBits, - contextAttrs.alphaBits, contextAttrs.depthBits, contextAttrs.stencilBits, - contextAttrs.multisamplingCount}; - - jintArray glContextAttrsJava = env->NewIntArray(7); - env->SetIntArrayRegion(glContextAttrsJava, 0, 7, tmp); - - return glContextAttrsJava; -} - -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeOnSurfaceChanged(JNIEnv*, jclass, jint w, jint h) +JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolPlayer_nativeOnSurfaceChanged(JNIEnv*, jclass, jint w, jint h) { auto renderView = ax::Director::getInstance()->getRenderView(); if (renderView) diff --git a/axmol/platform/android/jni/Java_dev_axmol_lib_AxmolAccelerometer.cpp b/axmol/platform/android/jni/AxmolAccelerometerJni.cpp similarity index 100% rename from axmol/platform/android/jni/Java_dev_axmol_lib_AxmolAccelerometer.cpp rename to axmol/platform/android/jni/AxmolAccelerometerJni.cpp diff --git a/axmol/platform/android/jni/Java_dev_axmol_lib_AxmolEngine.cpp b/axmol/platform/android/jni/AxmolEngineJni.cpp similarity index 82% rename from axmol/platform/android/jni/Java_dev_axmol_lib_AxmolEngine.cpp rename to axmol/platform/android/jni/AxmolEngineJni.cpp index 89896d3996b5..8b06afd26c5f 100644 --- a/axmol/platform/android/jni/Java_dev_axmol_lib_AxmolEngine.cpp +++ b/axmol/platform/android/jni/AxmolEngineJni.cpp @@ -23,14 +23,17 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ****************************************************************************/ +#include "axmol/platform/android/jni/AxmolEngineJni.h" #include #include #include #include #include "axmol/platform/android/jni/JniHelper.h" #include "axmol/platform/android/FileUtils-android.h" -#include "axmol/platform/android/jni/Java_dev_axmol_lib_AxmolEngine.h" - +#include "axmol/platform/Application.h" +#include "axmol/base/EventType.h" +#include "axmol/base/EventCustom.h" +#include "axmol/base/EventDispatcher.h" #include "axmol/base/text_utils.h" #define LOG_TAG "Java_dev_axmol_lib_AxmolEngine.cpp" @@ -41,20 +44,23 @@ static const char* className = "dev.axmol.lib.AxmolEngine"; static EditTextCallback s_editTextCallback = nullptr; static void* s_ctx = nullptr; -static std::string g_apkPath; +static std::string s_apkPath; using namespace ax; -using namespace std; extern "C" { -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolEngine_nativeSetContext(JNIEnv* env, - jclass, - jobject context, - jobject assetManager) +// This is the first call from java after JNI_OnLoad +JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolEngine_nativeInit(JNIEnv* env, + jclass, + jobject context, + jobject assetManager) { JniHelper::setClassLoaderFrom(context); FileUtilsAndroid::setAssetManagerFromJava(assetManager); + + auto app = ax::Application::getInstance(); + app->initContextAttrs(); } JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolEngine_nativeSetEditTextDialogResult(JNIEnv* env, @@ -92,7 +98,12 @@ JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolEngine_nativeCall0(JNIEnv* env, j operation(reinterpret_cast(static_cast(param))); } -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolEngine_nativeRunOnGLThread(JNIEnv* env, jclass, jobject runnable) +JNIEXPORT int JNICALL Java_dev_axmol_lib_AxmolEngine_nativeGetRenderAPI(JNIEnv* env, jclass) +{ + return AX_RENDER_API; +} + +JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolEngine_nativeRunOnAxmolThread(JNIEnv* env, jclass, jobject runnable) { using jobject_type = std::remove_pointer_t; struct jobject_delete @@ -111,16 +122,31 @@ JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolEngine_nativeRunOnGLThread(JNIEnv } }); } + +JNIEXPORT jintArray JNICALL Java_dev_axmol_lib_AxmolEngine_nativeGetGLContextAttrs(JNIEnv* env, jclass) +{ + auto app = ax::Application::getInstance(); + const auto& contextAttrs = Application::getContextAttrs(); + + int tmp[7] = {contextAttrs.redBits, contextAttrs.greenBits, contextAttrs.blueBits, + contextAttrs.alphaBits, contextAttrs.depthBits, contextAttrs.stencilBits, + contextAttrs.multisamplingCount}; + + jintArray glContextAttrsJava = env->NewIntArray(7); + env->SetIntArrayRegion(glContextAttrsJava, 0, 7, tmp); + + return glContextAttrsJava; +} } const char* getApkPath() { - if (g_apkPath.empty()) + if (s_apkPath.empty()) { - g_apkPath = JniHelper::callStaticStringMethod(className, "getAssetsPath"); + s_apkPath = JniHelper::callStaticStringMethod(className, "getAssetsPath"); } - return g_apkPath.c_str(); + return s_apkPath.c_str(); } std::string getPackageNameJNI() diff --git a/axmol/platform/android/jni/Java_dev_axmol_lib_AxmolEngine.h b/axmol/platform/android/jni/AxmolEngineJni.h similarity index 100% rename from axmol/platform/android/jni/Java_dev_axmol_lib_AxmolEngine.h rename to axmol/platform/android/jni/AxmolEngineJni.h diff --git a/axmol/platform/android/jni/AxmolPlayerJni.cpp b/axmol/platform/android/jni/AxmolPlayerJni.cpp new file mode 100644 index 000000000000..a75ba3ab9fc6 --- /dev/null +++ b/axmol/platform/android/jni/AxmolPlayerJni.cpp @@ -0,0 +1,247 @@ +/**************************************************************************** +Copyright (c) 2010 cocos2d-x.org +Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + +https://axmol.dev/ + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +****************************************************************************/ +#include "axmol/base/IMEDispatcher.h" +#include "axmol/base/Director.h" +#include "axmol/base/Scheduler.h" +#include "axmol/base/EventType.h" +#include "axmol/base/EventCustom.h" +#include "axmol/base/EventDispatcher.h" +#include "axmol/platform/Application.h" +#include "axmol/platform/android/RenderViewImpl-android.h" +#include "axmol/base/text_utils.h" +#include "axmol/platform/android/jni/JniHelper.h" +#include "axmol/rhi/DriverBase.h" +#include "axmol/renderer/TextureCache.h" +#include +#include + +using namespace ax; + +static ANativeWindow* s_nativeWindow; + +ANativeWindow* axmolGetANativeWindow() +{ + return s_nativeWindow; +} + +static void axmolDispatchContextLost(bool isWarmStart) +{ +#if AX_ENABLE_RESTART_APPLICATION_ON_CONTEXT_LOST + auto director = ax::Director::getInstance(); + ax::EventCustom recreatedEvent(EVENT_APP_RESTARTING); + director->getEventDispatcher()->dispatchEvent(&recreatedEvent, true); + + // Pop to root scene, replace with an empty scene, and clear all cached data before restarting + director->popToRootScene(); + auto rootScene = Scene::create(); + director->replaceScene(rootScene); + director->purgeCachedData(); + + JniHelper::callStaticVoidMethod("dev/axmol/lib/AxmolEngine", "restartProcess"); +#endif + + if (isWarmStart) + { + auto director = ax::Director::getInstance(); + ax::EventCustom warmStartEvent(EVENT_APP_WARM_START); + director->getEventDispatcher()->dispatchEvent(&warmStartEvent, true); + } +} + +extern "C" { + +JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolPlayer_nativeOnSurfaceCreated(JNIEnv* env, + jclass, + jobject surface, + jint w, + jint h, + jboolean isWarmStart) +{ + if (s_nativeWindow) + { + ANativeWindow_release(s_nativeWindow); + } + s_nativeWindow = ANativeWindow_fromSurface(env, surface); + auto director = ax::Director::getInstance(); + auto renderView = director->getRenderView(); + if (!renderView) + { + renderView = ax::RenderViewImpl::createWithRect( + "axmol3", Rect{ax::Rect{0, 0, static_cast(w), static_cast(h)}}); + director->setRenderView(renderView); + + auto app = ax::Application::getInstance(); + ax::Application::getInstance()->run(); + } + else + { +#if AX_RENDER_API == AX_RENDER_API_VK + director->getScheduler()->runOnAxmolThread( + [renderView]() { static_cast(renderView)->recreateVkSurface(true); }); +#elif AX_RENDER_API == AX_RENDER_API_GL + axdrv->resetState(); + director->resetMatrixStack(); + ax::EventCustom recreatedEvent(EVENT_RENDERER_RECREATED); + director->getEventDispatcher()->dispatchEvent(&recreatedEvent, true); + director->setRenderDefaults(); +# if AX_ENABLE_CONTEXT_LOSS_RECOVERY + ax::VolatileTextureMgr::reloadAllTextures(); + axmolDispatchContextLost(isWarmStart); +# endif +#endif + } +} + +JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolPlayer_nativeRenderFrame(JNIEnv*, jclass) +{ + ax::Director::getInstance()->renderFrame(); +} + +JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolPlayer_nativeTouchesBegin(JNIEnv*, jclass, jint id, jfloat x, jfloat y) +{ + intptr_t idlong = id; + ax::Director::getInstance()->getRenderView()->handleTouchesBegin(1, &idlong, &x, &y); +} + +JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolPlayer_nativeTouchesEnd(JNIEnv*, jclass, jint id, jfloat x, jfloat y) +{ + intptr_t idlong = id; + ax::Director::getInstance()->getRenderView()->handleTouchesEnd(1, &idlong, &x, &y); +} + +JNIEXPORT void JNICALL +Java_dev_axmol_lib_AxmolPlayer_nativeTouchesMove(JNIEnv* env, jclass, jintArray ids, jfloatArray xs, jfloatArray ys) +{ + int size = env->GetArrayLength(ids); + jint id[size]; + jfloat x[size]; + jfloat y[size]; + + env->GetIntArrayRegion(ids, 0, size, id); + env->GetFloatArrayRegion(xs, 0, size, x); + env->GetFloatArrayRegion(ys, 0, size, y); + + intptr_t idlong[size]; + for (int i = 0; i < size; i++) + idlong[i] = id[i]; + + ax::Director::getInstance()->getRenderView()->handleTouchesMove(size, idlong, x, y); +} + +JNIEXPORT void JNICALL +Java_dev_axmol_lib_AxmolPlayer_nativeTouchesCancel(JNIEnv* env, jclass, jintArray ids, jfloatArray xs, jfloatArray ys) +{ + int size = env->GetArrayLength(ids); + jint id[size]; + jfloat x[size]; + jfloat y[size]; + + env->GetIntArrayRegion(ids, 0, size, id); + env->GetFloatArrayRegion(xs, 0, size, x); + env->GetFloatArrayRegion(ys, 0, size, y); + + intptr_t idlong[size]; + for (int i = 0; i < size; i++) + idlong[i] = id[i]; + + ax::Director::getInstance()->getRenderView()->handleTouchesCancel(size, idlong, x, y); +} + +#define KEYCODE_BACK 0x04 +#define KEYCODE_MENU 0x52 +#define KEYCODE_DPAD_UP 0x13 +#define KEYCODE_DPAD_DOWN 0x14 +#define KEYCODE_DPAD_LEFT 0x15 +#define KEYCODE_DPAD_RIGHT 0x16 +#define KEYCODE_ENTER 0x42 +#define KEYCODE_PLAY 0x7e +#define KEYCODE_DPAD_CENTER 0x17 + +static std::unordered_map g_keyCodeMap = { + {KEYCODE_BACK, ax::EventKeyboard::KeyCode::KEY_ESCAPE}, + {KEYCODE_MENU, ax::EventKeyboard::KeyCode::KEY_MENU}, + {KEYCODE_DPAD_UP, ax::EventKeyboard::KeyCode::KEY_DPAD_UP}, + {KEYCODE_DPAD_DOWN, ax::EventKeyboard::KeyCode::KEY_DPAD_DOWN}, + {KEYCODE_DPAD_LEFT, ax::EventKeyboard::KeyCode::KEY_DPAD_LEFT}, + {KEYCODE_DPAD_RIGHT, ax::EventKeyboard::KeyCode::KEY_DPAD_RIGHT}, + {KEYCODE_ENTER, ax::EventKeyboard::KeyCode::KEY_ENTER}, + {KEYCODE_PLAY, ax::EventKeyboard::KeyCode::KEY_PLAY}, + {KEYCODE_DPAD_CENTER, ax::EventKeyboard::KeyCode::KEY_DPAD_CENTER}, + +}; + +JNIEXPORT jboolean JNICALL Java_dev_axmol_lib_AxmolPlayer_nativeKeyEvent(JNIEnv*, + jclass, + jint keyCode, + jboolean isPressed) +{ + auto iterKeyCode = g_keyCodeMap.find(keyCode); + if (iterKeyCode == g_keyCodeMap.end()) + { + return JNI_FALSE; + } + + ax::EventKeyboard event(iterKeyCode->second, isPressed); + ax::Director::getInstance()->getEventDispatcher()->dispatchEvent(&event); + return JNI_TRUE; +} + +JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolPlayer_nativeOnPause(JNIEnv*, jclass) +{ + if (Director::getInstance()->getRenderView()) + { + Application::getInstance()->applicationDidEnterBackground(); + ax::EventCustom backgroundEvent(EVENT_COME_TO_BACKGROUND); + ax::Director::getInstance()->getEventDispatcher()->dispatchEvent(&backgroundEvent, true); + } +} + +JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolPlayer_nativeOnResume(JNIEnv*, jclass) +{ + if (Director::getInstance()->getRenderView()) + { + Application::getInstance()->applicationWillEnterForeground(); + ax::EventCustom foregroundEvent(EVENT_COME_TO_FOREGROUND); + ax::Director::getInstance()->getEventDispatcher()->dispatchEvent(&foregroundEvent, true); + } +} + +JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolPlayer_nativeInsertText(JNIEnv* env, jclass, jstring text) +{ + std::string strValue = ax::text_utils::getStringUTFCharsJNI(env, text); + ax::IMEDispatcher::sharedDispatcher()->dispatchInsertText(strValue.c_str(), strValue.size()); +} + +JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolPlayer_nativeDeleteBackward(JNIEnv*, jclass, jint numChars) +{ + ax::IMEDispatcher::sharedDispatcher()->dispatchDeleteBackward(numChars); +} + +JNIEXPORT jstring JNICALL Java_dev_axmol_lib_AxmolPlayer_nativeGetContentText(JNIEnv* env, jclass) +{ + auto pszText = ax::IMEDispatcher::sharedDispatcher()->getContentText(); + return ax::text_utils::newStringUTFJNI(env, pszText); +} +} diff --git a/axmol/platform/android/jni/Java_dev_axmol_lib_BitmapHelper.cpp b/axmol/platform/android/jni/BitmapHelperJni.cpp similarity index 100% rename from axmol/platform/android/jni/Java_dev_axmol_lib_BitmapHelper.cpp rename to axmol/platform/android/jni/BitmapHelperJni.cpp diff --git a/axmol/platform/android/jni/Java_dev_axmol_lib_BitmapHelper.h b/axmol/platform/android/jni/BitmapHelperJni.h similarity index 100% rename from axmol/platform/android/jni/Java_dev_axmol_lib_BitmapHelper.h rename to axmol/platform/android/jni/BitmapHelperJni.h diff --git a/axmol/platform/android/jni/Java_dev_axmol_lib_AxmolRenderer.cpp b/axmol/platform/android/jni/Java_dev_axmol_lib_AxmolRenderer.cpp deleted file mode 100644 index 6008df436651..000000000000 --- a/axmol/platform/android/jni/Java_dev_axmol_lib_AxmolRenderer.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). - - https://axmol.dev/ - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#include "axmol/base/IMEDispatcher.h" -#include "axmol/base/Director.h" -#include "axmol/base/EventType.h" -#include "axmol/base/EventCustom.h" -#include "axmol/base/EventDispatcher.h" -#include "axmol/platform/Application.h" -#include "axmol/platform/FileUtils.h" -#include - -#include "axmol/base/text_utils.h" - -using namespace ax; - -extern "C" { - -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeRender(JNIEnv*, jclass) -{ - ax::Director::getInstance()->mainLoop(); -} - -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeOnPause(JNIEnv*, jclass) -{ - if (Director::getInstance()->getRenderView()) - { - Application::getInstance()->applicationDidEnterBackground(); - ax::EventCustom backgroundEvent(EVENT_COME_TO_BACKGROUND); - ax::Director::getInstance()->getEventDispatcher()->dispatchEvent(&backgroundEvent, true); - } -} - -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeOnResume(JNIEnv*, jclass) -{ - if (Director::getInstance()->getRenderView()) - { - Application::getInstance()->applicationWillEnterForeground(); - ax::EventCustom foregroundEvent(EVENT_COME_TO_FOREGROUND); - ax::Director::getInstance()->getEventDispatcher()->dispatchEvent(&foregroundEvent, true); - } -} - -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeInsertText(JNIEnv* env, jclass, jstring text) -{ - std::string strValue = ax::text_utils::getStringUTFCharsJNI(env, text); - const char* pszText = strValue.c_str(); - ax::IMEDispatcher::sharedDispatcher()->dispatchInsertText(pszText, strlen(pszText)); -} - -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeDeleteBackward(JNIEnv*, jclass, jint numChars) -{ - ax::IMEDispatcher::sharedDispatcher()->dispatchDeleteBackward(numChars); -} - -JNIEXPORT jstring JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeGetContentText(JNIEnv* env, jclass) -{ - auto pszText = ax::IMEDispatcher::sharedDispatcher()->getContentText(); - return ax::text_utils::newStringUTFJNI(env, pszText); -} -} diff --git a/axmol/platform/android/jni/TouchesJni.cpp b/axmol/platform/android/jni/TouchesJni.cpp deleted file mode 100644 index 007ae06cfeea..000000000000 --- a/axmol/platform/android/jni/TouchesJni.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/**************************************************************************** -Copyright (c) 2010 cocos2d-x.org -Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - -https://axmol.dev/ - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -****************************************************************************/ -#include "axmol/base/Director.h" -#include "axmol/base/EventKeyboard.h" -#include "axmol/base/EventDispatcher.h" -#include "axmol/platform/android/RenderViewImpl-android.h" - -#include -#include - -using namespace ax; - -extern "C" { -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeTouchesBegin(JNIEnv*, jclass, jint id, jfloat x, jfloat y) -{ - intptr_t idlong = id; - ax::Director::getInstance()->getRenderView()->handleTouchesBegin(1, &idlong, &x, &y); -} - -JNIEXPORT void JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeTouchesEnd(JNIEnv*, jclass, jint id, jfloat x, jfloat y) -{ - intptr_t idlong = id; - ax::Director::getInstance()->getRenderView()->handleTouchesEnd(1, &idlong, &x, &y); -} - -JNIEXPORT void JNICALL -Java_dev_axmol_lib_AxmolRenderer_nativeTouchesMove(JNIEnv* env, jclass, jintArray ids, jfloatArray xs, jfloatArray ys) -{ - int size = env->GetArrayLength(ids); - jint id[size]; - jfloat x[size]; - jfloat y[size]; - - env->GetIntArrayRegion(ids, 0, size, id); - env->GetFloatArrayRegion(xs, 0, size, x); - env->GetFloatArrayRegion(ys, 0, size, y); - - intptr_t idlong[size]; - for (int i = 0; i < size; i++) - idlong[i] = id[i]; - - ax::Director::getInstance()->getRenderView()->handleTouchesMove(size, idlong, x, y); -} - -JNIEXPORT void JNICALL -Java_dev_axmol_lib_AxmolRenderer_nativeTouchesCancel(JNIEnv* env, jclass, jintArray ids, jfloatArray xs, jfloatArray ys) -{ - int size = env->GetArrayLength(ids); - jint id[size]; - jfloat x[size]; - jfloat y[size]; - - env->GetIntArrayRegion(ids, 0, size, id); - env->GetFloatArrayRegion(xs, 0, size, x); - env->GetFloatArrayRegion(ys, 0, size, y); - - intptr_t idlong[size]; - for (int i = 0; i < size; i++) - idlong[i] = id[i]; - - ax::Director::getInstance()->getRenderView()->handleTouchesCancel(size, idlong, x, y); -} - -#define KEYCODE_BACK 0x04 -#define KEYCODE_MENU 0x52 -#define KEYCODE_DPAD_UP 0x13 -#define KEYCODE_DPAD_DOWN 0x14 -#define KEYCODE_DPAD_LEFT 0x15 -#define KEYCODE_DPAD_RIGHT 0x16 -#define KEYCODE_ENTER 0x42 -#define KEYCODE_PLAY 0x7e -#define KEYCODE_DPAD_CENTER 0x17 - -static std::unordered_map g_keyCodeMap = { - {KEYCODE_BACK, ax::EventKeyboard::KeyCode::KEY_ESCAPE}, - {KEYCODE_MENU, ax::EventKeyboard::KeyCode::KEY_MENU}, - {KEYCODE_DPAD_UP, ax::EventKeyboard::KeyCode::KEY_DPAD_UP}, - {KEYCODE_DPAD_DOWN, ax::EventKeyboard::KeyCode::KEY_DPAD_DOWN}, - {KEYCODE_DPAD_LEFT, ax::EventKeyboard::KeyCode::KEY_DPAD_LEFT}, - {KEYCODE_DPAD_RIGHT, ax::EventKeyboard::KeyCode::KEY_DPAD_RIGHT}, - {KEYCODE_ENTER, ax::EventKeyboard::KeyCode::KEY_ENTER}, - {KEYCODE_PLAY, ax::EventKeyboard::KeyCode::KEY_PLAY}, - {KEYCODE_DPAD_CENTER, ax::EventKeyboard::KeyCode::KEY_DPAD_CENTER}, - -}; - -JNIEXPORT jboolean JNICALL Java_dev_axmol_lib_AxmolRenderer_nativeKeyEvent(JNIEnv*, - jclass, - jint keyCode, - jboolean isPressed) -{ - auto iterKeyCode = g_keyCodeMap.find(keyCode); - if (iterKeyCode == g_keyCodeMap.end()) - { - return JNI_FALSE; - } - - ax::EventKeyboard event(iterKeyCode->second, isPressed); - ax::Director::getInstance()->getEventDispatcher()->dispatchEvent(&event); - return JNI_TRUE; -} -} diff --git a/axmol/platform/desktop/RenderViewImpl.cpp b/axmol/platform/desktop/RenderViewImpl.cpp index 8845371012bb..ef9f923332d4 100644 --- a/axmol/platform/desktop/RenderViewImpl.cpp +++ b/axmol/platform/desktop/RenderViewImpl.cpp @@ -57,6 +57,8 @@ The RenderViewImpl for win32,linux,macos,wasm # include "axmol/rhi/opengl/DriverGL.h" # include "axmol/rhi/opengl/MacrosGL.h" # include "axmol/rhi/opengl/OpenGLState.h" +#elif AX_RENDER_API == AX_RENDER_API_VK +# include "axmol/rhi/vulkan/DriverVK.h" #endif // #if (AX_TARGET_PLATFORM == AX_PLATFORM_MAC) /** glfw3native.h */ @@ -242,11 +244,11 @@ class GLFWEventHandler }; RenderViewImpl* GLFWEventHandler::_view = nullptr; -const std::string RenderViewImpl::EVENT_WINDOW_POSITIONED = "glview_window_positioned"; -const std::string RenderViewImpl::EVENT_WINDOW_RESIZED = "glview_window_resized"; -const std::string RenderViewImpl::EVENT_WINDOW_FOCUSED = "glview_window_focused"; -const std::string RenderViewImpl::EVENT_WINDOW_UNFOCUSED = "glview_window_unfocused"; -const std::string RenderViewImpl::EVENT_WINDOW_CLOSE = "glview_window_close"; +const std::string RenderViewImpl::EVENT_WINDOW_POSITIONED = "_ax_window_positioned"; +const std::string RenderViewImpl::EVENT_WINDOW_RESIZED = "_ax_window_resized"; +const std::string RenderViewImpl::EVENT_WINDOW_FOCUSED = "_ax_window_focused"; +const std::string RenderViewImpl::EVENT_WINDOW_UNFOCUSED = "_ax_window_unfocused"; +const std::string RenderViewImpl::EVENT_WINDOW_CLOSE = "_ax_window_close"; //////////////////////////////////////////////////// @@ -451,19 +453,23 @@ void* RenderViewImpl::getNativeWindow() const void* RenderViewImpl::getNativeDisplay() const { -#if AX_TARGET_PLATFORM == AX_PLATFORM_WIN32 +#if AX_RENDER_API == AX_RENDER_API_VK + return _vkSurface; +#else +# if AX_TARGET_PLATFORM == AX_PLATFORM_WIN32 return glfwGetWin32Window(_mainWindow); -#elif AX_TARGET_PLATFORM == AX_PLATFORM_MAC -# if AX_RENDER_API == AX_RENDER_API_MTL +# elif AX_TARGET_PLATFORM == AX_PLATFORM_MAC +# if AX_RENDER_API == AX_RENDER_API_MTL return (void*)glfwGetCocoaView(_mainWindow); -# else +# else return (void*)glfwGetNSGLContext(_mainWindow); -# endif -#elif AX_TARGET_PLATFORM == AX_PLATFORM_LINUX +# endif +# elif AX_TARGET_PLATFORM == AX_PLATFORM_LINUX int platform = glfwGetPlatform(); return platform == GLFW_PLATFORM_WAYLAND ? (void*)glfwGetWaylandDisplay() : (void*)glfwGetX11Display(); -#else +# else return nullptr; +# endif #endif } @@ -620,6 +626,8 @@ bool RenderViewImpl::initWithRect(std::string_view viewName, return false; } + glfwSetWindowSizeLimits(_mainWindow, 1, 1, GLFW_DONT_CARE, GLFW_DONT_CARE); + #if AX_RENDER_API == AX_RENDER_API_GL glfwMakeContextCurrent(_mainWindow); @@ -646,6 +654,22 @@ bool RenderViewImpl::initWithRect(std::string_view viewName, glfwGetFramebufferSize(_mainWindow, &fbWidth, &fbHeight); updateRenderSurface(fbWidth, fbHeight, SurfaceUpdateFlag::RenderSizeChanged | SurfaceUpdateFlag::SilentUpdate); +#if AX_RENDER_API == AX_RENDER_API_VK + auto _createSurface = [](VkInstance inst, void* window, VkSurfaceKHR* surface) { + return glfwCreateWindowSurface(inst, static_cast(window), nullptr, surface); + }; + auto driver = static_cast(axdrv); + const rhi::vk::SurfaceCreateInfo createInfo{ + .window = _mainWindow, .width = fbWidth, .height = fbHeight, .createFunc = _createSurface}; + bool ok = driver->recreateSurface(createInfo); + if (!ok) + { + AXLOGE("Failed to create Vulkan window surface."); + return false; + } + _vkSurface = driver->getSurface(); +#endif + int w, h; glfwGetWindowSize(_mainWindow, &w, &h); updateScaledWindowSize(w, h, SurfaceUpdateFlag::WindowSizeChanged | SurfaceUpdateFlag::SilentUpdate); @@ -755,6 +779,10 @@ bool RenderViewImpl::isGfxContextReady() void RenderViewImpl::end() { +#if AX_RENDER_API == AX_RENDER_API_VK + _vkSurface = nullptr; +#endif + if (_mainWindow) { glfwSetWindowShouldClose(_mainWindow, 1); @@ -998,8 +1026,6 @@ void RenderViewImpl::setWindowSizeLimits(int minwidth, int minheight, int maxwid void RenderViewImpl::onGLFWFramebufferSizeCallback(GLFWwindow* window, int fbWidth, int fbHeight) { AXLOGD("RenderViewImpl::onGLFWFramebufferSizeCallback: ({}, {})", fbWidth, fbHeight); - if (fbWidth == 0 || fbHeight == 0) - return; updateRenderSurface(fbWidth, fbHeight, SurfaceUpdateFlag::RenderSizeChanged); } @@ -1007,8 +1033,6 @@ void RenderViewImpl::onGLFWFramebufferSizeCallback(GLFWwindow* window, int fbWid void RenderViewImpl::onGLFWWindowSizeCallback(GLFWwindow* /*window*/, int w, int h) { AXLOGD("RenderViewImpl::onGLFWWindowSizeCallback: ({}, {})", w, h); - if (w == 0 || h == 0) - return; updateScaledWindowSize(w, h, SurfaceUpdateFlag::WindowSizeChanged); @@ -1042,9 +1066,6 @@ void RenderViewImpl::setWindowSize(float width, float height) void RenderViewImpl::updateScaledWindowSize(int w, int h, uint8_t updateFlag) { - if (w == 0 || h == 0) - return; - updateRenderScale(); double scaledWidth = w / (double)_windowZoomFactor; diff --git a/axmol/platform/desktop/RenderViewImpl.h b/axmol/platform/desktop/RenderViewImpl.h index 8dfe20403dd3..de90e839b9ee 100644 --- a/axmol/platform/desktop/RenderViewImpl.h +++ b/axmol/platform/desktop/RenderViewImpl.h @@ -31,6 +31,9 @@ THE SOFTWARE. #include "axmol/platform/Common.h" #include "axmol/platform/RenderView.h" #include "axmol/base/EventMouse.h" +#if AX_RENDER_API == AX_RENDER_API_VK +# include "glad/vulkan.h" +#endif #include "GLFW/glfw3.h" #if defined(__EMSCRIPTEN__) # include "axmol/tlx/pod_vector.hpp" @@ -188,6 +191,9 @@ class AX_DLL RenderViewImpl : public RenderView GLFWwindow* _mainWindow; GLFWmonitor* _monitor; +#if AX_RENDER_API == AX_RENDER_API_VK + VkSurfaceKHR _vkSurface{nullptr}; +#endif std::string _glfwError; diff --git a/axmol/platform/ios/DirectorCaller-ios.mm b/axmol/platform/ios/DirectorCaller-ios.mm index bfabc4ae0b74..4e5e4f758023 100644 --- a/axmol/platform/ios/DirectorCaller-ios.mm +++ b/axmol/platform/ios/DirectorCaller-ios.mm @@ -148,7 +148,7 @@ - (void)doCaller:(id)sender #endif CFTimeInterval dt = ((CADisplayLink*)displayLink).timestamp - lastDisplayTime; lastDisplayTime = ((CADisplayLink*)displayLink).timestamp; - director->mainLoop(dt); + director->renderFrame(dt); } } diff --git a/axmol/platform/linux/Application-linux.cpp b/axmol/platform/linux/Application-linux.cpp index 628a82e8305a..27de6f7573b9 100644 --- a/axmol/platform/linux/Application-linux.cpp +++ b/axmol/platform/linux/Application-linux.cpp @@ -72,7 +72,7 @@ int Application::run() { lastTime = std::chrono::steady_clock::now(); - director->mainLoop(); + director->renderFrame(); renderView->pollEvents(); auto interval = std::chrono::steady_clock::now() - lastTime; @@ -87,14 +87,14 @@ int Application::run() } } /* Only work on Desktop - * Director::mainLoop is really one frame logic + * Director::renderFrame is really one frame logic * when we want to close the window, we should call Director::end(); - * then call Director::mainLoop to do release of internal resources + * then call Director::renderFrame to do release of internal resources */ if (renderView->isGfxContextReady()) { director->end(); - director->mainLoop(); + director->renderFrame(); director = nullptr; } renderView->release(); diff --git a/axmol/platform/mac/Application-mac.mm b/axmol/platform/mac/Application-mac.mm index 1743e54fb169..dad25112c087 100644 --- a/axmol/platform/mac/Application-mac.mm +++ b/axmol/platform/mac/Application-mac.mm @@ -75,7 +75,7 @@ of this software and associated documentation files (the "Software"), to deal { lastTime = std::chrono::steady_clock::now(); - director->mainLoop(); + director->renderFrame(); renderView->pollEvents(); auto interval = std::chrono::steady_clock::now() - lastTime; @@ -87,14 +87,14 @@ of this software and associated documentation files (the "Software"), to deal } /* Only work on Desktop - * Director::mainLoop is really one frame logic + * Director::renderFrame is really one frame logic * when we want to close the window, we should call Director::end(); - * then call Director::mainLoop to do release of internal resources + * then call Director::renderFrame to do release of internal resources */ if (renderView->isGfxContextReady()) { director->end(); - director->mainLoop(); + director->renderFrame(); } renderView->release(); diff --git a/axmol/platform/wasm/Application-wasm.cpp b/axmol/platform/wasm/Application-wasm.cpp index 9c769a430a1d..cb4d231fddb8 100644 --- a/axmol/platform/wasm/Application-wasm.cpp +++ b/axmol/platform/wasm/Application-wasm.cpp @@ -154,7 +154,7 @@ static void renderFrame() auto director = __director; auto renderView = director->getRenderView(); - director->mainLoop(); + director->renderFrame(); renderView->pollEvents(); if (renderView->windowShouldClose()) @@ -165,7 +165,7 @@ static void renderFrame() if (renderView->isGfxContextReady()) { director->end(); - director->mainLoop(); + director->renderFrame(); } renderView->release(); diff --git a/axmol/platform/win32/Application-win32.cpp b/axmol/platform/win32/Application-win32.cpp index 2d444ef7080b..261bad64783c 100644 --- a/axmol/platform/win32/Application-win32.cpp +++ b/axmol/platform/win32/Application-win32.cpp @@ -104,7 +104,7 @@ int Application::run() if (interval >= _animationInterval.QuadPart) { nLast.QuadPart = nNow.QuadPart; - director->mainLoop(); + director->renderFrame(); renderView->pollEvents(); } else @@ -124,7 +124,7 @@ int Application::run() if (renderView->isGfxContextReady()) { director->end(); - director->mainLoop(); + director->renderFrame(); director = nullptr; } renderView->release(); diff --git a/axmol/platform/winrt/RenderViewImpl-winrt.cpp b/axmol/platform/winrt/RenderViewImpl-winrt.cpp index 75226f2d6efb..a9b0e3d9adc7 100644 --- a/axmol/platform/winrt/RenderViewImpl-winrt.cpp +++ b/axmol/platform/winrt/RenderViewImpl-winrt.cpp @@ -517,7 +517,7 @@ void RenderViewImpl::OnRendering() { if (m_running && m_initialized) { - Director::getInstance()->mainLoop(); + Director::getInstance()->renderFrame(); } } diff --git a/axmol/platform/winrt/xaml/SwapChainPage.cpp b/axmol/platform/winrt/xaml/SwapChainPage.cpp index eb9378d1104a..f73408e1db3c 100644 --- a/axmol/platform/winrt/xaml/SwapChainPage.cpp +++ b/axmol/platform/winrt/xaml/SwapChainPage.cpp @@ -254,7 +254,7 @@ void SwapChainPage::StartRenderLoop() auto dispatcher = Windows::UI::Xaml::Window::Current().CoreWindow().Dispatcher(); // Create a task for rendering that will be run on a background thread. - auto renderMainLoop = ([this, dispatcher](Windows::Foundation::IAsyncAction const& action) { + auto renderFrame = ([this, dispatcher](Windows::Foundation::IAsyncAction const& action) { if (!m_renderer) { m_renderer = std::make_shared(m_panelWidth, m_panelHeight, m_dpi, m_orientation, dispatcher, @@ -386,7 +386,7 @@ void SwapChainPage::StartRenderLoop() // Run task on a dedicated high priority background thread. m_renderLoopWorker = Windows::System::Threading::ThreadPool::RunAsync( - renderMainLoop, Windows::System::Threading::WorkItemPriority::High, + renderFrame, Windows::System::Threading::WorkItemPriority::High, Windows::System::Threading::WorkItemOptions::TimeSliced); } diff --git a/axmol/renderer/Renderer.cpp b/axmol/renderer/Renderer.cpp index ff0826fa1daa..6c04300bcafe 100644 --- a/axmol/renderer/Renderer.cpp +++ b/axmol/renderer/Renderer.cpp @@ -189,11 +189,11 @@ Renderer::~Renderer() free(_triBatchesToDraw); - AX_SAFE_RELEASE(_depthStencilState); - AX_SAFE_RELEASE(_commandBuffer); - AX_SAFE_RELEASE(_renderPipeline); AX_SAFE_RELEASE(_defaultRT); AX_SAFE_RELEASE(_offscreenRT); + AX_SAFE_RELEASE(_depthStencilState); + AX_SAFE_RELEASE(_renderPipeline); + AX_SAFE_RELEASE(_context); } void Renderer::init() @@ -205,16 +205,16 @@ void Renderer::init() auto driver = axdrv; auto nativeDisplay = Director::getInstance()->getRenderView()->getNativeDisplay(); - _commandBuffer = driver->createCommandBuffer(nativeDisplay); + _context = driver->createRenderContext(nativeDisplay); _dsDesc.flags = DepthStencilFlags::ALL; _currentRT = _defaultRT = driver->createDefaultRenderTarget(); - _commandBuffer->setScreenRenderTarget(_defaultRT); + _context->setScreenRenderTarget(_defaultRT); _renderPipeline = driver->createRenderPipeline(); - _commandBuffer->setRenderPipeline(_renderPipeline); + _context->setRenderPipeline(_renderPipeline); _depthStencilState = driver->createDepthStencilState(); - _commandBuffer->setDepthStencilState(_depthStencilState); + _context->setDepthStencilState(_depthStencilState); } rhi::RenderTarget* Renderer::getOffscreenRenderTarget() @@ -316,7 +316,7 @@ void Renderer::processRenderCommand(RenderCommand* command) drawBatchedTriangles(); _queuedTotalIndexCount = _queuedTotalVertexCount = 0; -#if AX_RENDER_API == AX_RENDER_API_MTL +#if AX_RENDER_API == AX_RENDER_API_MTL || AX_RENDER_API == AX_RENDER_API_VK _queuedIndexCount = _queuedVertexCount = 0; _triangleCommandBufferManager.prepareNextBuffer(); _vertexBuffer = _triangleCommandBufferManager.getVertexBuffer(); @@ -326,7 +326,7 @@ void Renderer::processRenderCommand(RenderCommand* command) // queue it _queuedTriangleCommands.emplace_back(cmd); -#if AX_RENDER_API == AX_RENDER_API_MTL +#if AX_RENDER_API == AX_RENDER_API_MTL || AX_RENDER_API == AX_RENDER_API_VK _queuedIndexCount += cmd->getIndexCount(); _queuedVertexCount += cmd->getVertexCount(); #endif @@ -428,14 +428,14 @@ void Renderer::render() bool Renderer::beginFrame() { - return _commandBuffer->beginFrame(); + return _context->beginFrame(); } void Renderer::endFrame() { - _commandBuffer->endFrame(); + _context->endFrame(); -#if AX_RENDER_API == AX_RENDER_API_MTL +#if AX_RENDER_API == AX_RENDER_API_MTL || AX_RENDER_API == AX_RENDER_API_VK _triangleCommandBufferManager.putbackAllBuffers(); _vertexBuffer = _triangleCommandBufferManager.getVertexBuffer(); _indexBuffer = _triangleCommandBufferManager.getIndexBuffer(); @@ -610,7 +610,7 @@ void Renderer::drawBatchedTriangles() return; /************** 1: Setup up vertices/indices *************/ -#if AX_RENDER_API == AX_RENDER_API_MTL +#if AX_RENDER_API == AX_RENDER_API_MTL || AX_RENDER_API == AX_RENDER_API_VK unsigned int vertexBufferFillOffset = _queuedTotalVertexCount - _queuedVertexCount; unsigned int indexBufferFillOffset = _queuedTotalIndexCount - _queuedIndexCount; #else @@ -674,7 +674,7 @@ void Renderer::drawBatchedTriangles() firstCommand = false; } batchesTotal++; -#if AX_RENDER_API == AX_RENDER_API_MTL +#if AX_RENDER_API == AX_RENDER_API_MTL || AX_RENDER_API == AX_RENDER_API_VK _vertexBuffer->updateSubData(_verts, vertexBufferFillOffset * sizeof(_verts[0]), _filledVertex * sizeof(_verts[0])); _indexBuffer->updateSubData(_indices, indexBufferFillOffset * sizeof(_indices[0]), _filledIndex * sizeof(_indices[0])); @@ -686,15 +686,15 @@ void Renderer::drawBatchedTriangles() /************** 2: Draw *************/ beginRenderPass(); - _commandBuffer->setVertexBuffer(_vertexBuffer); - _commandBuffer->setIndexBuffer(_indexBuffer); + _context->setVertexBuffer(_vertexBuffer); + _context->setIndexBuffer(_indexBuffer); for (int i = 0; i < batchesTotal; ++i) { auto& drawInfo = _triBatchesToDraw[i]; - _commandBuffer->updatePipelineState(_currentRT, drawInfo.cmd->getPipelineDesc()); - _commandBuffer->drawElements(rhi::PrimitiveType::TRIANGLE, rhi::IndexFormat::U_SHORT, drawInfo.indicesToDraw, - drawInfo.offset * sizeof(_indices[0])); + _context->updatePipelineState(_currentRT, drawInfo.cmd->getPipelineDesc()); + _context->drawElements(rhi::PrimitiveType::TRIANGLE, rhi::IndexFormat::U_SHORT, drawInfo.indicesToDraw, + drawInfo.offset * sizeof(_indices[0])); _drawnBatches++; _drawnVertices += _triBatchesToDraw[i].indicesToDraw; @@ -705,7 +705,7 @@ void Renderer::drawBatchedTriangles() /************** 3: Cleanup *************/ _queuedTriangleCommands.clear(); -#if AX_RENDER_API == AX_RENDER_API_MTL +#if AX_RENDER_API == AX_RENDER_API_MTL || AX_RENDER_API == AX_RENDER_API_VK _queuedIndexCount = 0; _queuedVertexCount = 0; #endif @@ -719,35 +719,35 @@ void Renderer::drawCustomCommand(RenderCommand* command) cmd->getBeforeCallback()(); beginRenderPass(); - _commandBuffer->setVertexBuffer(cmd->getVertexBuffer()); + _context->setVertexBuffer(cmd->getVertexBuffer()); - _commandBuffer->updatePipelineState(_currentRT, cmd->getPipelineDesc()); + _context->updatePipelineState(_currentRT, cmd->getPipelineDesc()); auto drawType = cmd->getDrawType(); switch (drawType) { case CustomCommand::DrawType::ELEMENT: - _commandBuffer->setIndexBuffer(cmd->getIndexBuffer()); - _commandBuffer->drawElements(cmd->getPrimitiveType(), cmd->getIndexFormat(), cmd->getIndexDrawCount(), - cmd->getIndexDrawOffset(), cmd->isWireframe()); + _context->setIndexBuffer(cmd->getIndexBuffer()); + _context->drawElements(cmd->getPrimitiveType(), cmd->getIndexFormat(), cmd->getIndexDrawCount(), + cmd->getIndexDrawOffset(), cmd->isWireframe()); _drawnVertices += cmd->getIndexDrawCount(); break; case CustomCommand::DrawType::ELEMENT_INSTANCED: - _commandBuffer->setIndexBuffer(cmd->getIndexBuffer()); - _commandBuffer->setInstanceBuffer(cmd->getInstanceBuffer()); - _commandBuffer->drawElementsInstanced(cmd->getPrimitiveType(), cmd->getIndexFormat(), cmd->getIndexDrawCount(), - cmd->getIndexDrawOffset(), cmd->getInstanceCount(), cmd->isWireframe()); + _context->setIndexBuffer(cmd->getIndexBuffer()); + _context->setInstanceBuffer(cmd->getInstanceBuffer()); + _context->drawElementsInstanced(cmd->getPrimitiveType(), cmd->getIndexFormat(), cmd->getIndexDrawCount(), + cmd->getIndexDrawOffset(), cmd->getInstanceCount(), cmd->isWireframe()); _drawnVertices += cmd->getIndexDrawCount() * cmd->getInstanceCount(); break; case CustomCommand::DrawType::ARRAY: - _commandBuffer->drawArrays(cmd->getPrimitiveType(), cmd->getVertexDrawStart(), cmd->getVertexDrawCount(), - cmd->isWireframe()); + _context->drawArrays(cmd->getPrimitiveType(), cmd->getVertexDrawStart(), cmd->getVertexDrawCount(), + cmd->isWireframe()); _drawnVertices += cmd->getVertexDrawCount(); break; case CustomCommand::DrawType::ARRAY_INSTANCED: - _commandBuffer->setInstanceBuffer(cmd->getInstanceBuffer()); - _commandBuffer->drawArraysInstanced(cmd->getPrimitiveType(), cmd->getVertexDrawStart(), - cmd->getVertexDrawCount(), cmd->getInstanceCount(), cmd->isWireframe()); + _context->setInstanceBuffer(cmd->getInstanceBuffer()); + _context->drawArraysInstanced(cmd->getPrimitiveType(), cmd->getVertexDrawStart(), cmd->getVertexDrawCount(), + cmd->getInstanceCount(), cmd->isWireframe()); _drawnVertices += cmd->getVertexDrawCount() * cmd->getInstanceCount(); break; default:; @@ -822,25 +822,27 @@ bool Renderer::checkVisibility(const Mat4& transform, const Vec2& size) return ret; } -void Renderer::readPixels(rhi::RenderTarget* rt, std::function callback) +void Renderer::readPixels(rhi::RenderTarget* rt, + bool preserveAxisHint, + std::function callback) { assert(!!rt); // read pixels from screen, metal renderer backend: screen texture must not be a framebufferOnly if (rt == _defaultRT) - _commandBuffer->setFrameBufferOnly(false); + _context->setFrameBufferOnly(false); - _commandBuffer->readPixels(rt, std::move(callback)); + _context->readPixels(rt, preserveAxisHint, std::move(callback)); } -void Renderer::resizeSwapchain(uint32_t width, uint32_t height) +void Renderer::updateSurface(void* surface, uint32_t width, uint32_t height) { - if (_commandBuffer) - _commandBuffer->resizeSwapchain(width, height); + if (_context) + _context->updateSurface(surface, width, height); } void Renderer::beginRenderPass() { - _commandBuffer->beginRenderPass(_currentRT, _renderPassDesc); + _context->beginRenderPass(_currentRT, _renderPassDesc); // Disable depth/stencil access if render target has no relevant attachments. auto depthStencil = _dsDesc; @@ -851,19 +853,19 @@ void Renderer::beginRenderPass() DepthStencilFlags::STENCIL_TEST); } - _commandBuffer->updateDepthStencilState(depthStencil); - _commandBuffer->setStencilReferenceValue(_stencilRef); + _context->setStencilReferenceValue(_stencilRef); + _context->updateDepthStencilState(depthStencil); - _commandBuffer->setViewport(_viewport.x, _viewport.y, _viewport.width, _viewport.height); - _commandBuffer->setCullMode(_cullMode); - _commandBuffer->setWinding(_winding); - _commandBuffer->setScissorRect(_scissorState.isEnabled, _scissorState.rect.x, _scissorState.rect.y, - _scissorState.rect.width, _scissorState.rect.height); + _context->setViewport(_viewport.x, _viewport.y, _viewport.width, _viewport.height); + _context->setCullMode(_cullMode); + _context->setWinding(_winding); + _context->setScissorRect(_scissorState.isEnabled, _scissorState.rect.x, _scissorState.rect.y, + _scissorState.rect.width, _scissorState.rect.height); } void Renderer::endRenderPass() { - _commandBuffer->endRenderPass(); + _context->endRenderPass(); } void Renderer::clear(ClearFlag flags, const Color& color, float depth, unsigned int stencil, float globalOrder) @@ -884,14 +886,18 @@ void Renderer::clear(ClearFlag flags, const Color& color, float depth, unsigned if (bitmask::any(flags, ClearFlag::DEPTH)) descriptor.clearDepthValue = depth; + else + descriptor.flags.discardStart |= TargetBufferFlags::DEPTH; if (bitmask::any(flags, ClearFlag::STENCIL)) descriptor.clearStencilValue = stencil; + else + descriptor.flags.discardStart |= TargetBufferFlags::STENCIL; - _commandBuffer->setScissorRect(_scissorState.isEnabled, _scissorState.rect.x, _scissorState.rect.y, - _scissorState.rect.width, _scissorState.rect.height); - _commandBuffer->beginRenderPass(_currentRT, descriptor); - _commandBuffer->endRenderPass(); + _context->setScissorRect(_scissorState.isEnabled, _scissorState.rect.x, _scissorState.rect.y, + _scissorState.rect.width, _scissorState.rect.height); + _context->beginRenderPass(_currentRT, descriptor); + _context->endRenderPass(); }; addCommand(command); } diff --git a/axmol/renderer/Renderer.h b/axmol/renderer/Renderer.h index 8b0bc8a6a7ec..cefc59e445c7 100644 --- a/axmol/renderer/Renderer.h +++ b/axmol/renderer/Renderer.h @@ -49,7 +49,7 @@ using Winding = rhi::Winding; namespace rhi { class Buffer; -class CommandBuffer; +class RenderContext; class RenderPipeline; class RenderPass; class Texture; @@ -64,6 +64,7 @@ class GroupCommand; class CallbackCommand; struct PipelineDesc; class Texture2D; +class RenderView; /** Class that knows how to sort `RenderCommand` objects. Since the commands that have `z == 0` are "pushed back" in @@ -131,6 +132,8 @@ Whenever possible prefer to use `TrianglesCommand` objects since the renderer wi */ class AX_DLL Renderer { + friend class RenderView; + public: /**The max number of vertices in a vertex buffer object.*/ static const int VBO_SIZE = 65536; @@ -406,13 +409,19 @@ class AX_DLL Renderer bool getScissorTest() const; ///< Get whether scissor test is enabled or not. const ScissorRect& getScissorRect() const; ///< Get scissor rectangle. - rhi::CommandBuffer* getCommandBuffer() const { return _commandBuffer; } + rhi::RenderContext* getContext() const { return _context; } /** returns whether or not a rectangle is visible or not */ bool checkVisibility(const Mat4& transform, const Vec2& size); /** read pixels from RenderTarget or screen framebuffer */ - void readPixels(rhi::RenderTarget* rt, std::function callback); + void readPixels(rhi::RenderTarget* rt, std::function callback) + { + readPixels(rt, false, std::move(callback)); + } + void readPixels(rhi::RenderTarget* rt, + bool preserveAxisHint, + std::function callback); void beginRenderPass(); /// Begin a render pass. void endRenderPass(); @@ -490,7 +499,7 @@ class AX_DLL Renderer void popStateBlock(); - void resizeSwapchain(uint32_t width, uint32_t height); + void updateSurface(void* surface, uint32_t width, uint32_t height); rhi::RenderPipeline* _renderPipeline = nullptr; @@ -516,7 +525,7 @@ class AX_DLL Renderer rhi::Buffer* _indexBuffer = nullptr; TriangleCommandBufferManager _triangleCommandBufferManager; - rhi::CommandBuffer* _commandBuffer = nullptr; + rhi::RenderContext* _context = nullptr; rhi::RenderPassDesc _renderPassDesc; rhi::DepthStencilState* _depthStencilState = nullptr; diff --git a/axmol/renderer/Texture2D.cpp b/axmol/renderer/Texture2D.cpp index 6d77b80a42e4..c24809004dde 100644 --- a/axmol/renderer/Texture2D.cpp +++ b/axmol/renderer/Texture2D.cpp @@ -362,7 +362,7 @@ bool Texture2D::initWithSpec(rhi::TextureDesc desc, default: break; } -#elif AX_RENDER_API == AX_RENDER_API_D3D +#elif AX_RENDER_API == AX_RENDER_API_D3D || AX_RENDER_API == AX_RENDER_API_VK switch (renderFormat) { case PixelFormat::RGB8: diff --git a/axmol/renderer/VertexLayoutManager.cpp b/axmol/renderer/VertexLayoutManager.cpp index 8adf8f2016b7..8112f2812930 100644 --- a/axmol/renderer/VertexLayoutManager.cpp +++ b/axmol/renderer/VertexLayoutManager.cpp @@ -146,7 +146,7 @@ struct BuiltinVertexDefine desc.startLayout(1); desc.addAttrib(rhi::VERTEX_INPUT_NAME_POSITION, program->getVertexInputDesc(rhi::VertexInputKind::POSITION), - rhi::VertexFormat::FLOAT2, 0, false); + rhi::VertexFormat::FLOAT3, 0, false); desc.endLayout(); } diff --git a/axmol/renderer/shaders/base.glsl b/axmol/renderer/shaders/base.glsl index ac6f6161615c..d87d615b562d 100644 --- a/axmol/renderer/shaders/base.glsl +++ b/axmol/renderer/shaders/base.glsl @@ -34,3 +34,29 @@ # define RG8_CHANNEL xy # define FWIDTH(dist) 0.4 + + +// ============================================================================ +// Axmol Shader Binding Conventions +// ============================================================================ +// +// To ensure consistent resource binding across all shaders in Axmol: +// +// - Uniform blocks are bound to set = 0 +// - Samplers/textures are bound to set = 1 +// - Vertex shader uniform block uses binding = 0 +// - Fragment shader uniform block uses binding = 1 +// +// These conventions minimize confusion and make pipeline layout predictable. +// If future changes are needed (e.g., adding more sets or bindings), +// update this header and notify contributors. +// +// ============================================================================ + +// Descriptor set indices +#define UNIFORM_SET 0 +#define SAMPLER_SET 1 + +// Binding indices within uniform set +#define VS_UB_BINDING 0 // Vertex shader uniform block +#define FS_UB_BINDING 1 // Fragment shader uniform block diff --git a/axmol/renderer/shaders/cameraClear.vert b/axmol/renderer/shaders/cameraClear.vert index e4d9df3cce50..419fb12d9932 100644 --- a/axmol/renderer/shaders/cameraClear.vert +++ b/axmol/renderer/shaders/cameraClear.vert @@ -7,7 +7,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; layout(location = COLOR0) out vec4 v_color; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { float depth; }; diff --git a/axmol/renderer/shaders/color.frag b/axmol/renderer/shaders/color.frag index 7c6b823fc1d5..9ba7681565b5 100644 --- a/axmol/renderer/shaders/color.frag +++ b/axmol/renderer/shaders/color.frag @@ -2,7 +2,7 @@ precision highp float; precision highp int; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; }; diff --git a/axmol/renderer/shaders/colorNormal.frag b/axmol/renderer/shaders/colorNormal.frag index 7ac61787e4ca..68e43f6c9cf6 100644 --- a/axmol/renderer/shaders/colorNormal.frag +++ b/axmol/renderer/shaders/colorNormal.frag @@ -9,7 +9,7 @@ layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = POINTLIGHT) in vec3 v_vertexToPointLightDirection[MAX_POINT_LIGHT_NUM]; layout(location = SPOTLIGHT) in vec3 v_vertexToSpotLightDirection[MAX_SPOT_LIGHT_NUM]; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vvec3_def(u_DirLightSourceColor, MAX_DIRECTIONAL_LIGHT_NUM); vvec3_def(u_DirLightSourceDirection, MAX_DIRECTIONAL_LIGHT_NUM); vvec3_def(u_PointLightSourceColor, MAX_POINT_LIGHT_NUM); diff --git a/axmol/renderer/shaders/colorNormalTexture.frag b/axmol/renderer/shaders/colorNormalTexture.frag index 77e8fe8d8f21..42d7aeb4e854 100644 --- a/axmol/renderer/shaders/colorNormalTexture.frag +++ b/axmol/renderer/shaders/colorNormalTexture.frag @@ -19,13 +19,13 @@ layout(location = SPOTLIGHT_NORM) in vec3 v_spotLightDirection[MAX_SPOT_LIGHT_NU layout(location = NORMAL) in vec3 v_normal; #endif -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; #ifdef USE_NORMAL_MAPPING -layout(binding = 1) uniform sampler2D u_normalTex; +layout(set = 1, binding = 1) uniform sampler2D u_normalTex; #endif -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vvec3_def(u_DirLightSourceColor, MAX_DIRECTIONAL_LIGHT_NUM); vvec3_def(u_DirLightSourceDirection, MAX_DIRECTIONAL_LIGHT_NUM); vvec3_def(u_PointLightSourceColor, MAX_POINT_LIGHT_NUM); diff --git a/axmol/renderer/shaders/colorTexture.frag b/axmol/renderer/shaders/colorTexture.frag index cb9e8446d689..71a66026e6ec 100644 --- a/axmol/renderer/shaders/colorTexture.frag +++ b/axmol/renderer/shaders/colorTexture.frag @@ -3,11 +3,11 @@ precision highp float; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; }; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; layout(location = SV_Target0) out vec4 FragColor; diff --git a/axmol/renderer/shaders/dualSampler.frag b/axmol/renderer/shaders/dualSampler.frag index eace0e6b44ec..86748c05adc0 100644 --- a/axmol/renderer/shaders/dualSampler.frag +++ b/axmol/renderer/shaders/dualSampler.frag @@ -7,7 +7,7 @@ precision highp sampler2DArray; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2DArray u_tex0; +layout(set = 1, binding = 0) uniform sampler2DArray u_tex0; layout(location = SV_Target0) out vec4 FragColor; diff --git a/axmol/renderer/shaders/dualSampler_gray.frag b/axmol/renderer/shaders/dualSampler_gray.frag index f49377cae8de..c2793f1e5db2 100644 --- a/axmol/renderer/shaders/dualSampler_gray.frag +++ b/axmol/renderer/shaders/dualSampler_gray.frag @@ -6,7 +6,7 @@ precision highp sampler2DArray; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2DArray u_tex0; +layout(set = 1, binding = 0) uniform sampler2DArray u_tex0; layout(location = SV_Target0) out vec4 FragColor; diff --git a/axmol/renderer/shaders/dualSampler_hsv.frag b/axmol/renderer/shaders/dualSampler_hsv.frag index 4fb24771c27e..8e008b3cfa30 100644 --- a/axmol/renderer/shaders/dualSampler_hsv.frag +++ b/axmol/renderer/shaders/dualSampler_hsv.frag @@ -8,9 +8,9 @@ precision highp sampler2DArray; layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = COLOR0) in vec4 v_color; -layout(binding = 0) uniform sampler2DArray u_tex0; +layout(set = 1, binding = 0) uniform sampler2DArray u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec3 u_hsv; }; diff --git a/axmol/renderer/shaders/grayScale.frag b/axmol/renderer/shaders/grayScale.frag index ce65d65c3c92..596c1d5d2867 100644 --- a/axmol/renderer/shaders/grayScale.frag +++ b/axmol/renderer/shaders/grayScale.frag @@ -7,7 +7,7 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; layout(location = SV_Target0) out vec4 FragColor; diff --git a/axmol/renderer/shaders/hsv.frag b/axmol/renderer/shaders/hsv.frag index 6994e0bb53af..25e78cbc59a7 100644 --- a/axmol/renderer/shaders/hsv.frag +++ b/axmol/renderer/shaders/hsv.frag @@ -6,9 +6,9 @@ precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = COLOR0) in vec4 v_color; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec3 u_hsv; }; diff --git a/axmol/renderer/shaders/label_distanceGlow.frag b/axmol/renderer/shaders/label_distanceGlow.frag index b1257b648e05..dce7646f9821 100644 --- a/axmol/renderer/shaders/label_distanceGlow.frag +++ b/axmol/renderer/shaders/label_distanceGlow.frag @@ -5,9 +5,9 @@ precision highp float; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_textColor; // text color vec4 u_effectColor; // effect color (rgb = color, a = intensity) float u_effectWidth; // glow width in pixels diff --git a/axmol/renderer/shaders/label_distanceNormal.frag b/axmol/renderer/shaders/label_distanceNormal.frag index e1e340db5c59..3474e1e70d13 100644 --- a/axmol/renderer/shaders/label_distanceNormal.frag +++ b/axmol/renderer/shaders/label_distanceNormal.frag @@ -6,9 +6,9 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_textColor; }; diff --git a/axmol/renderer/shaders/label_distanceOutline.frag b/axmol/renderer/shaders/label_distanceOutline.frag index 6a09832344e2..9c406a516949 100644 --- a/axmol/renderer/shaders/label_distanceOutline.frag +++ b/axmol/renderer/shaders/label_distanceOutline.frag @@ -10,9 +10,9 @@ const float outlineScale = 0.425; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_textColor; vec4 u_effectColor; float u_effectWidth; // outline thickness in pixels diff --git a/axmol/renderer/shaders/label_normal.frag b/axmol/renderer/shaders/label_normal.frag index 0de11b6c5b56..a594a29126de 100644 --- a/axmol/renderer/shaders/label_normal.frag +++ b/axmol/renderer/shaders/label_normal.frag @@ -7,9 +7,9 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_textColor; }; diff --git a/axmol/renderer/shaders/label_outline.frag b/axmol/renderer/shaders/label_outline.frag index 464f4081a2ff..d0e9e441b060 100644 --- a/axmol/renderer/shaders/label_outline.frag +++ b/axmol/renderer/shaders/label_outline.frag @@ -5,9 +5,9 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_effectColor; vec4 u_textColor; int u_labelPass; // 0: text, 1: outline, 2: shadow diff --git a/axmol/renderer/shaders/layer_radialGradient.frag b/axmol/renderer/shaders/layer_radialGradient.frag index a37f90acea17..92b4717b7531 100644 --- a/axmol/renderer/shaders/layer_radialGradient.frag +++ b/axmol/renderer/shaders/layer_radialGradient.frag @@ -4,7 +4,7 @@ precision highp int; layout(location = POSITION) in vec4 v_position; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_startColor; vec4 u_endColor; vec2 u_center; diff --git a/axmol/renderer/shaders/lineColor.vert b/axmol/renderer/shaders/lineColor.vert index ff9ac81a3754..78a61eb99cd2 100644 --- a/axmol/renderer/shaders/lineColor.vert +++ b/axmol/renderer/shaders/lineColor.vert @@ -6,7 +6,7 @@ layout(location = COLOR0) in vec4 a_color; layout(location = COLOR0) out vec4 v_color; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/particle.vert b/axmol/renderer/shaders/particle.vert index 9bdb379f2560..cfc43956be00 100644 --- a/axmol/renderer/shaders/particle.vert +++ b/axmol/renderer/shaders/particle.vert @@ -8,7 +8,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; layout(location = COLOR0) out vec4 v_color; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_PMatrix; }; diff --git a/axmol/renderer/shaders/particleColor.frag b/axmol/renderer/shaders/particleColor.frag index a095f11264a5..8b7c113403ea 100644 --- a/axmol/renderer/shaders/particleColor.frag +++ b/axmol/renderer/shaders/particleColor.frag @@ -5,7 +5,7 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; }; diff --git a/axmol/renderer/shaders/particleTexture.frag b/axmol/renderer/shaders/particleTexture.frag index 32936c55be5b..3a80dc463132 100644 --- a/axmol/renderer/shaders/particleTexture.frag +++ b/axmol/renderer/shaders/particleTexture.frag @@ -6,9 +6,9 @@ precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = COLOR0) in vec4 v_color; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; }; diff --git a/axmol/renderer/shaders/posUVColor2D.vert b/axmol/renderer/shaders/posUVColor2D.vert index 9ed22529ae47..f7da2727552d 100644 --- a/axmol/renderer/shaders/posUVColor2D.vert +++ b/axmol/renderer/shaders/posUVColor2D.vert @@ -7,7 +7,7 @@ layout(location = COLOR0) in vec4 a_color; layout(location = COLOR0) out vec4 v_color; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/position.vert b/axmol/renderer/shaders/position.vert index 8cafb640c63c..75cb4692d987 100644 --- a/axmol/renderer/shaders/position.vert +++ b/axmol/renderer/shaders/position.vert @@ -1,13 +1,13 @@ #version 310 es -layout(location = POSITION) in vec4 a_position; +layout(location = POSITION) in vec3 a_position; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; void main() { - gl_Position = u_MVPMatrix * a_position; + gl_Position = u_MVPMatrix * vec4(a_position, 1.0f); } diff --git a/axmol/renderer/shaders/positionColor.vert b/axmol/renderer/shaders/positionColor.vert index e6ea0a57bc45..8c96273d18ac 100644 --- a/axmol/renderer/shaders/positionColor.vert +++ b/axmol/renderer/shaders/positionColor.vert @@ -6,7 +6,7 @@ layout(location = COLOR0) in vec4 a_color; layout(location = COLOR0) out vec4 v_color; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/positionColorLengthTexture.vert b/axmol/renderer/shaders/positionColorLengthTexture.vert index dd3a83dd5a29..55ea276a64cf 100644 --- a/axmol/renderer/shaders/positionColorLengthTexture.vert +++ b/axmol/renderer/shaders/positionColorLengthTexture.vert @@ -12,7 +12,7 @@ layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { float u_alpha; mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/positionColorTextureAsPointsize.vert b/axmol/renderer/shaders/positionColorTextureAsPointsize.vert index c0fcfb1fbce9..c8237288cdff 100644 --- a/axmol/renderer/shaders/positionColorTextureAsPointsize.vert +++ b/axmol/renderer/shaders/positionColorTextureAsPointsize.vert @@ -8,7 +8,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = COLOR0) out vec4 v_color; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { float u_alpha; mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/positionNormalTexture.vert b/axmol/renderer/shaders/positionNormalTexture.vert index c74d4d88f889..661a96e58396 100644 --- a/axmol/renderer/shaders/positionNormalTexture.vert +++ b/axmol/renderer/shaders/positionNormalTexture.vert @@ -30,7 +30,7 @@ layout(location = NORMAL) out vec3 v_normal; #endif -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { #ifdef USE_NORMAL_MAPPING vvec3_def(u_DirLightSourceDirection, MAX_DIRECTIONAL_LIGHT_NUM); vvec3_def(u_SpotLightSourceDirection, MAX_SPOT_LIGHT_NUM); diff --git a/axmol/renderer/shaders/positionTexture.frag b/axmol/renderer/shaders/positionTexture.frag index b78dffcec9ee..eca8baff04aa 100644 --- a/axmol/renderer/shaders/positionTexture.frag +++ b/axmol/renderer/shaders/positionTexture.frag @@ -5,7 +5,7 @@ precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; layout(location = SV_Target0) out vec4 FragColor; diff --git a/axmol/renderer/shaders/positionTexture.vert b/axmol/renderer/shaders/positionTexture.vert index 048d7dc59e65..889fd660b862 100644 --- a/axmol/renderer/shaders/positionTexture.vert +++ b/axmol/renderer/shaders/positionTexture.vert @@ -7,7 +7,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/positionTextureColor.frag b/axmol/renderer/shaders/positionTextureColor.frag index 80b6e280a89d..42b88540292e 100644 --- a/axmol/renderer/shaders/positionTextureColor.frag +++ b/axmol/renderer/shaders/positionTextureColor.frag @@ -1,11 +1,12 @@ #version 310 es +#include "base.glsl" precision highp float; precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = SAMPLER_SET, binding = 0) uniform sampler2D u_tex0; layout(location = SV_Target0) out vec4 FragColor; diff --git a/axmol/renderer/shaders/positionTextureColor.vert b/axmol/renderer/shaders/positionTextureColor.vert index 39a0d9761969..cb5b78e9ae51 100644 --- a/axmol/renderer/shaders/positionTextureColor.vert +++ b/axmol/renderer/shaders/positionTextureColor.vert @@ -1,4 +1,5 @@ #version 310 es +#include "base.glsl" layout(location = POSITION) in vec4 a_position; layout(location = TEXCOORD0) in vec2 a_texCoord; @@ -7,7 +8,7 @@ layout(location = COLOR0) in vec4 a_color; layout(location = COLOR0) out vec4 v_color; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = UNIFORM_SET, binding = VS_UB_BINDING) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/positionTextureColorAlphaTest.frag b/axmol/renderer/shaders/positionTextureColorAlphaTest.frag index 2a63cd34c173..e8523f63a96d 100644 --- a/axmol/renderer/shaders/positionTextureColorAlphaTest.frag +++ b/axmol/renderer/shaders/positionTextureColorAlphaTest.frag @@ -7,9 +7,9 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { float u_alpha_value; }; diff --git a/axmol/renderer/shaders/positionTextureGray.frag b/axmol/renderer/shaders/positionTextureGray.frag index d01133dde380..93f75e1fb033 100644 --- a/axmol/renderer/shaders/positionTextureGray.frag +++ b/axmol/renderer/shaders/positionTextureGray.frag @@ -5,7 +5,7 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; layout(location = SV_Target0) out vec4 FragColor; diff --git a/axmol/renderer/shaders/positionTextureGrayAlpha.frag b/axmol/renderer/shaders/positionTextureGrayAlpha.frag index 9abd1fc8aebc..3a607f128490 100644 --- a/axmol/renderer/shaders/positionTextureGrayAlpha.frag +++ b/axmol/renderer/shaders/positionTextureGrayAlpha.frag @@ -5,7 +5,7 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; layout(location = SV_Target0) out vec4 FragColor; diff --git a/axmol/renderer/shaders/positionUColor.vert b/axmol/renderer/shaders/positionUColor.vert index b39f61f78780..8c0e99f8d552 100644 --- a/axmol/renderer/shaders/positionUColor.vert +++ b/axmol/renderer/shaders/positionUColor.vert @@ -4,7 +4,7 @@ layout(location = POSITION) in vec2 a_position; layout(location = COLOR0) out vec4 v_color; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { vec4 u_color; mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/quadColor.frag b/axmol/renderer/shaders/quadColor.frag index a095f11264a5..8b7c113403ea 100644 --- a/axmol/renderer/shaders/quadColor.frag +++ b/axmol/renderer/shaders/quadColor.frag @@ -5,7 +5,7 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; }; diff --git a/axmol/renderer/shaders/quadColor.vert b/axmol/renderer/shaders/quadColor.vert index e9c2727f563d..1a74df178afb 100644 --- a/axmol/renderer/shaders/quadColor.vert +++ b/axmol/renderer/shaders/quadColor.vert @@ -7,7 +7,7 @@ layout(location = COLOR0) in vec4 a_color; layout(location = COLOR0) out vec4 v_color; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/quadTexture.frag b/axmol/renderer/shaders/quadTexture.frag index ec50c0a8d414..67c8b9b3d0b5 100644 --- a/axmol/renderer/shaders/quadTexture.frag +++ b/axmol/renderer/shaders/quadTexture.frag @@ -6,9 +6,9 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; }; diff --git a/axmol/renderer/shaders/quadTexture.vert b/axmol/renderer/shaders/quadTexture.vert index 7507c529f4cc..91902a986272 100644 --- a/axmol/renderer/shaders/quadTexture.vert +++ b/axmol/renderer/shaders/quadTexture.vert @@ -9,7 +9,7 @@ layout(location = TEXCOORD0) out vec2 v_texCoord; layout(location = COLOR0) out vec4 v_color; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/skinPositionNormalTexture.vert b/axmol/renderer/shaders/skinPositionNormalTexture.vert index 3e13c18ef48b..0b8a6456991e 100644 --- a/axmol/renderer/shaders/skinPositionNormalTexture.vert +++ b/axmol/renderer/shaders/skinPositionNormalTexture.vert @@ -36,7 +36,7 @@ layout(location = SPOTLIGHT_NORM) out vec3 v_spotLightDirection[MAX_SPOT_LIGHT_N layout(location = NORMAL) out vec3 v_normal; #endif -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { #ifdef USE_NORMAL_MAPPING vvec3_def(u_DirLightSourceDirection, MAX_DIRECTIONAL_LIGHT_NUM); vvec3_def(u_SpotLightSourceDirection, MAX_SPOT_LIGHT_NUM); diff --git a/axmol/renderer/shaders/skinPositionTexture.vert b/axmol/renderer/shaders/skinPositionTexture.vert index 6e4d7893c81b..59a698db1156 100644 --- a/axmol/renderer/shaders/skinPositionTexture.vert +++ b/axmol/renderer/shaders/skinPositionTexture.vert @@ -15,7 +15,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; // Varyings layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { vec4 u_matrixPalette[SKINNING_JOINT_COUNT * 3]; mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/skybox.frag b/axmol/renderer/shaders/skybox.frag index 2f9586f93945..9130b9616dc4 100644 --- a/axmol/renderer/shaders/skybox.frag +++ b/axmol/renderer/shaders/skybox.frag @@ -3,9 +3,9 @@ precision highp float; precision highp int; layout(location = TEXCOORD0) in vec3 v_reflect; -layout(binding = 0) uniform samplerCube u_Env; +layout(set = 1, binding = 0) uniform samplerCube u_Env; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; }; diff --git a/axmol/renderer/shaders/skybox.vert b/axmol/renderer/shaders/skybox.vert index 64ab2080bffe..d3f7d01a23ea 100644 --- a/axmol/renderer/shaders/skybox.vert +++ b/axmol/renderer/shaders/skybox.vert @@ -4,7 +4,7 @@ layout(location = POSITION) in vec3 a_position; layout(location = TEXCOORD0) out vec3 v_reflect; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_cameraRot; }; diff --git a/axmol/renderer/shaders/terrain.frag b/axmol/renderer/shaders/terrain.frag index e166232937e2..040fd6aa1a29 100644 --- a/axmol/renderer/shaders/terrain.frag +++ b/axmol/renderer/shaders/terrain.frag @@ -6,10 +6,10 @@ precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = NORMAL) in vec3 v_normal; -layout(binding = 0) uniform sampler2D u_details[4]; // will take slot 0~3 -layout(binding = 4) uniform sampler2D u_alphaMap; -layout(binding = 5) uniform sampler2D u_lightMap; -layout(std140) uniform fs_ub { +layout(set = 1, binding = 0) uniform sampler2D u_details[4]; // will take slot 0~3 +layout(set = 1, binding = 4) uniform sampler2D u_alphaMap; +layout(set = 1, binding = 5) uniform sampler2D u_lightMap; +layout(std140, set = 0, binding = 1) uniform fs_ub { int u_has_alpha; int u_has_light_map; vfloat_def(u_detailSize, 4); diff --git a/axmol/renderer/shaders/terrain.vert b/axmol/renderer/shaders/terrain.vert index d1786fcff9af..dca0d3052bdf 100644 --- a/axmol/renderer/shaders/terrain.vert +++ b/axmol/renderer/shaders/terrain.vert @@ -6,7 +6,7 @@ layout(location = NORMAL) in vec3 a_normal; layout(location = TEXCOORD0) out vec2 v_texCoord; layout(location = NORMAL) out vec3 v_normal; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/unlit.vert b/axmol/renderer/shaders/unlit.vert index 63226dc28bc8..3933ae6ee417 100644 --- a/axmol/renderer/shaders/unlit.vert +++ b/axmol/renderer/shaders/unlit.vert @@ -7,7 +7,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/unlit_instance.vert b/axmol/renderer/shaders/unlit_instance.vert index 5b5765c69faa..05f71908f77e 100644 --- a/axmol/renderer/shaders/unlit_instance.vert +++ b/axmol/renderer/shaders/unlit_instance.vert @@ -5,7 +5,7 @@ layout (location = TEXCOORD0) in vec2 a_texCoord; layout (location = TEXCOORD1) in mat4 a_instance; layout (location = TEXCOORD0) out vec2 v_texCoord; -layout(std140, binding = 0) uniform vs_ub { +layout(std140, binding = 0, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/axmol/renderer/shaders/videoTextureBGRA.frag b/axmol/renderer/shaders/videoTextureBGRA.frag index 473191c6cb74..cd1fd1ee8d54 100644 --- a/axmol/renderer/shaders/videoTextureBGRA.frag +++ b/axmol/renderer/shaders/videoTextureBGRA.frag @@ -5,7 +5,7 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; layout(location = SV_Target0) out vec4 FragColor; diff --git a/axmol/renderer/shaders/videoTextureI420.frag b/axmol/renderer/shaders/videoTextureI420.frag index d8c04bac97ce..b7f32e9c3535 100644 --- a/axmol/renderer/shaders/videoTextureI420.frag +++ b/axmol/renderer/shaders/videoTextureI420.frag @@ -8,11 +8,11 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; // Y sample: LumaTexture -layout(binding = 1) uniform sampler2D u_tex1; // U sample: ChromaTexture -layout(binding = 2) uniform sampler2D u_tex2; // V sample: ChromaTexture +layout(set = 1, binding = 0) uniform sampler2D u_tex0; // Y sample: LumaTexture +layout(set = 1, binding = 1) uniform sampler2D u_tex1; // U sample: ChromaTexture +layout(set = 1, binding = 2) uniform sampler2D u_tex2; // V sample: ChromaTexture -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { mat4 colorTransform; }; diff --git a/axmol/renderer/shaders/videoTextureNV12.frag b/axmol/renderer/shaders/videoTextureNV12.frag index e9f5938d71ee..0f0f428a42a4 100644 --- a/axmol/renderer/shaders/videoTextureNV12.frag +++ b/axmol/renderer/shaders/videoTextureNV12.frag @@ -8,10 +8,10 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; // Y sample: LumaTexture -layout(binding = 1) uniform sampler2D u_tex1; // UV sample: ChromaTexture +layout(binding = 0, set = 1) uniform sampler2D u_tex0; // Y sample: LumaTexture +layout(binding = 1, set = 1) uniform sampler2D u_tex1; // UV sample: ChromaTexture -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { mat4 colorTransform; }; diff --git a/axmol/renderer/shaders/videoTextureYUY2.frag b/axmol/renderer/shaders/videoTextureYUY2.frag index cc8baf01eb7d..44eb737253a5 100644 --- a/axmol/renderer/shaders/videoTextureYUY2.frag +++ b/axmol/renderer/shaders/videoTextureYUY2.frag @@ -7,10 +7,10 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; // Y sample -layout(binding = 1) uniform sampler2D u_tex1; // UV sample +layout(set = 1, binding = 0) uniform sampler2D u_tex0; // Y sample +layout(set = 1, binding = 1) uniform sampler2D u_tex1; // UV sample -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { mat4 colorTransform; }; diff --git a/axmol/renderer/shaders/vr.frag b/axmol/renderer/shaders/vr.frag index 5f1595e1536e..058471a2675d 100644 --- a/axmol/renderer/shaders/vr.frag +++ b/axmol/renderer/shaders/vr.frag @@ -4,7 +4,7 @@ precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = TEXCOORD1) in float v_vignette; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; layout(location = SV_Target0) out vec4 FragColor; diff --git a/axmol/rhi/CMakeLists.txt b/axmol/rhi/CMakeLists.txt index 90ffb0a773b1..4f238ea41a04 100644 --- a/axmol/rhi/CMakeLists.txt +++ b/axmol/rhi/CMakeLists.txt @@ -3,7 +3,7 @@ set(_AX_RHI_HEADER rhi/axmol-rhi.h rhi/RHITypes.h rhi/Buffer.h - rhi/CommandBuffer.h + rhi/RenderContext.h rhi/DepthStencilState.h rhi/DriverBase.h rhi/PixelBufferDesc.h @@ -22,7 +22,7 @@ set(_AX_RHI_HEADER ) set(_AX_RHI_SRC - rhi/CommandBuffer.cpp + rhi/RenderContext.cpp rhi/DepthStencilState.cpp rhi/DriverBase.cpp rhi/ShaderModule.cpp @@ -41,7 +41,7 @@ if(AX_RENDER_API STREQUAL "gl") list(APPEND _AX_RHI_HEADER rhi/opengl/OpenGLState.h rhi/opengl/BufferGL.h - rhi/opengl/CommandBufferGL.h + rhi/opengl/RenderContextGL.h rhi/opengl/DepthStencilStateGL.h rhi/opengl/DriverGL.h rhi/opengl/MacrosGL.h @@ -57,7 +57,7 @@ if(AX_RENDER_API STREQUAL "gl") list(APPEND _AX_RHI_SRC rhi/opengl/OpenGLState.cpp rhi/opengl/BufferGL.cpp - rhi/opengl/CommandBufferGL.cpp + rhi/opengl/RenderContextGL.cpp rhi/opengl/DepthStencilStateGL.cpp rhi/opengl/DriverGL.cpp rhi/opengl/ProgramGL.cpp @@ -72,7 +72,7 @@ elseif(AX_RENDER_API STREQUAL "mtl") list(APPEND _AX_RHI_HEADER rhi/metal/BufferMTL.h rhi/metal/BufferManager.h - rhi/metal/CommandBufferMTL.h + rhi/metal/RenderContextMTL.h rhi/metal/RenderTargetMTL.h rhi/metal/DepthStencilStateMTL.h rhi/metal/DriverMTL.h @@ -86,7 +86,7 @@ elseif(AX_RENDER_API STREQUAL "mtl") list(APPEND _AX_RHI_SRC rhi/metal/BufferMTL.mm rhi/metal/BufferManager.mm - rhi/metal/CommandBufferMTL.mm + rhi/metal/RenderContextMTL.mm rhi/metal/RenderTargetMTL.mm rhi/metal/DepthStencilStateMTL.mm rhi/metal/DriverMTL.mm @@ -99,7 +99,7 @@ elseif(AX_RENDER_API STREQUAL "mtl") elseif(AX_RENDER_API STREQUAL "d3d") list(APPEND _AX_RHI_HEADER rhi/d3d/BufferD3D.h - rhi/d3d/CommandBufferD3D.h + rhi/d3d/RenderContextD3D.h rhi/d3d/RenderTargetD3D.h rhi/d3d/DepthStencilStateD3D.h rhi/d3d/DriverD3D.h @@ -113,7 +113,7 @@ elseif(AX_RENDER_API STREQUAL "d3d") list(APPEND _AX_RHI_SRC rhi/d3d/BufferD3D.cpp - rhi/d3d/CommandBufferD3D.cpp + rhi/d3d/RenderContextD3D.cpp rhi/d3d/RenderTargetD3D.cpp rhi/d3d/DepthStencilStateD3D.cpp rhi/d3d/DriverD3D.cpp @@ -124,4 +124,34 @@ elseif(AX_RENDER_API STREQUAL "d3d") rhi/d3d/ProgramD3D.cpp rhi/d3d/VertexLayoutD3D.cpp ) +elseif(AX_RENDER_API STREQUAL "vk") + list(APPEND _AX_RHI_HEADER + rhi/vulkan/BufferVK.h + rhi/vulkan/RenderContextVK.h + rhi/vulkan/RenderTargetVK.h + rhi/vulkan/DepthStencilStateVK.h + rhi/vulkan/DriverVK.h + rhi/vulkan/RenderPipelineVK.h + rhi/vulkan/ShaderModuleVK.h + rhi/vulkan/TextureVK.h + rhi/vulkan/UtilsVK.h + rhi/vulkan/ProgramVK.h + rhi/vulkan/VertexLayoutVK.h + rhi/vulkan/SemaphorePoolVK.h + ) + + list(APPEND _AX_RHI_SRC + rhi/vulkan/BufferVK.cpp + rhi/vulkan/RenderContextVK.cpp + rhi/vulkan/RenderTargetVK.cpp + rhi/vulkan/DepthStencilStateVK.cpp + rhi/vulkan/DriverVK.cpp + rhi/vulkan/RenderPipelineVK.cpp + rhi/vulkan/ShaderModuleVK.cpp + rhi/vulkan/TextureVK.cpp + rhi/vulkan/UtilsVK.cpp + rhi/vulkan/ProgramVK.cpp + rhi/vulkan/VertexLayoutVK.cpp + rhi/vulkan/SemaphorePoolVK.cpp + ) endif() diff --git a/axmol/rhi/DriverBase.h b/axmol/rhi/DriverBase.h index a861ae7b6fa4..dee74ceac5bd 100644 --- a/axmol/rhi/DriverBase.h +++ b/axmol/rhi/DriverBase.h @@ -36,7 +36,7 @@ namespace ax::rhi { -class CommandBuffer; +class RenderContext; class Buffer; class ShaderModule; class RenderPipeline; @@ -72,12 +72,22 @@ enum class FeatureType : uint32_t * @{ */ +struct DriverCaps +{ + int maxAttributes = 0; ///< Maximum attribute count. + int maxTextureSize = 0; ///< Maximum texture size. + int maxTextureUnits = 0; ///< Maximum texture unit. + int maxSamplesAllowed = 0; ///< Maximum sampler count. +}; + /** * New or create resources from DriverBase. */ class AX_DLL DriverBase { public: + struct Caps + {}; friend class ShaderCache; friend class SamplerCache; @@ -90,11 +100,11 @@ class AX_DLL DriverBase virtual ~DriverBase() = default; /** - * New a CommandBuffer object, not auto released. + * New a Render Context object, not auto released. * @param surfaceContext, current is win32 HWND or IUnkown*(swapChainPanel) - * @return A CommandBuffer object. + * @return A RenderContext object. */ - virtual CommandBuffer* createCommandBuffer(void* surfaceContext) = 0; + virtual RenderContext* createRenderContext(void* surfaceContext) = 0; /** * New a Buffer object, not auto released. @@ -105,7 +115,7 @@ class AX_DLL DriverBase * BufferUsage::STATIC, BufferUsage::DYNAMIC. * @return A Buffer object. */ - virtual Buffer* createBuffer(size_t size, BufferType type, BufferUsage usage) = 0; + virtual Buffer* createBuffer(size_t size, BufferType type, BufferUsage usage, const void* inital = nullptr) = 0; /** * New a Texture object, not auto released. @@ -182,25 +192,27 @@ class AX_DLL DriverBase * Get maximum texture size. * @return Maximum texture size. */ - inline int getMaxTextureSize() const { return _maxTextureSize; } + inline int getMaxTextureSize() const { return _caps.maxTextureSize; } /** * Get maximum attribute counts. * @return Maximum attribute counts. */ - inline int getMaxAttributes() const { return _maxAttributes; } + inline int getMaxAttributes() const { return _caps.maxAttributes; } /** * Get maximum texture unit. * @return Maximum texture unit. */ - inline int getMaxTextureUnits() const { return _maxTextureUnits; } + inline int getMaxTextureUnits() const { return _caps.maxTextureUnits; } /** * Get maximum sampler count. * @return Maximum sampler count. */ - inline int getMaxSamplesAllowed() const { return _maxSamplesAllowed; } + inline int getMaxSamplesAllowed() const { return _caps.maxSamplesAllowed; } + + virtual void cleanPendingResources() {} protected: /** @@ -214,11 +226,7 @@ class AX_DLL DriverBase virtual SamplerHandle createSampler(const SamplerDesc& desc) = 0; virtual void destroySampler(SamplerHandle&) = 0; - // TODO: driverCaps - int _maxAttributes = 0; ///< Maximum attribute count. - int _maxTextureSize = 0; ///< Maximum texture size. - int _maxTextureUnits = 0; ///< Maximum texture unit. - int _maxSamplesAllowed = 0; ///< Maximum sampler count. + DriverCaps _caps; private: static DriverBase* _instance; diff --git a/axmol/rhi/ProgramState.cpp b/axmol/rhi/ProgramState.cpp index d690a81ac55c..9a4790e4b744 100644 --- a/axmol/rhi/ProgramState.cpp +++ b/axmol/rhi/ProgramState.cpp @@ -268,19 +268,26 @@ void ProgramState::setCallbackUniform(const rhi::UniformLocation& uniformLocatio void ProgramState::setUniform(const rhi::UniformLocation& uniformLocation, const void* data, std::size_t size) { if (uniformLocation.stages[0]) - setUniform(uniformLocation.stages[0].location, data, size, uniformLocation.stages[0].offset, 0); + { +#if AX_RENDER_API == AX_RENDER_API_GL + auto& info = uniformLocation.stages[0]; + const auto resolvedOffset = info.location + info.offset; +#else + const auto resolvedOffset = uniformLocation.stages[0].offset; +#endif + setUniform(data, size, resolvedOffset, 0); + } #if AX_RENDER_API != AX_RENDER_API_GL if (uniformLocation.stages[1]) - setUniform(uniformLocation.stages[1].location, data, size, uniformLocation.stages[1].offset, - _vertexUniformBufferStart); + setUniform(data, size, uniformLocation.stages[1].offset, _vertexUniformBufferStart); #endif } -void ProgramState::setUniform(int location, const void* data, std::size_t size, int offset, int start) +void ProgramState::setUniform(const void* data, std::size_t size, int offset, int start) { assert(offset >= 0); - assert(start + location + offset + size <= _uniformBuffer.size()); - memcpy(_uniformBuffer.data() + start + location + offset, data, size); + assert(start + offset + size <= _uniformBuffer.size()); + memcpy(_uniformBuffer.data() + start + offset, data, size); } void ProgramState::setTexture(rhi::Texture* texture) diff --git a/axmol/rhi/ProgramState.h b/axmol/rhi/ProgramState.h index d1464ceadfcc..cc6d49ca515c 100644 --- a/axmol/rhi/ProgramState.h +++ b/axmol/rhi/ProgramState.h @@ -326,13 +326,12 @@ class AX_DLL ProgramState : public Object protected: /** * Set the vertex uniform data. - * @param location Specifies the uniform location. * @param data Specifies the new values to be used for the specified uniform variable. * @param size Specifies the uniform data size. * @param offset Specifies the offset of the uniform in bytes. * @param start Specifies the start offset of the uniform in bytes. */ - void setUniform(int location, const void* data, std::size_t size, int offset, int start); + void setUniform(const void* data, std::size_t size, int offset, int start); /** * Reset uniform informations when EGL context lost diff --git a/axmol/rhi/RHITypes.h b/axmol/rhi/RHITypes.h index 7dff81ab2664..11094069c4fc 100644 --- a/axmol/rhi/RHITypes.h +++ b/axmol/rhi/RHITypes.h @@ -400,8 +400,6 @@ struct BlendDesc { ColorWriteMask writeMask = ColorWriteMask::ALL; - bool blendEnabled = false; - BlendOp rgbBlendOp = BlendOp::ADD; BlendOp alphaBlendOp = BlendOp::ADD; @@ -409,12 +407,15 @@ struct BlendDesc BlendFactor destinationRGBBlendFactor = BlendFactor::ZERO; BlendFactor sourceAlphaBlendFactor = BlendFactor::ONE; BlendFactor destinationAlphaBlendFactor = BlendFactor::ZERO; + + bool blendEnabled = false; + char padding[3] = {}; }; struct UniformInfo { - int count = 0; // element count - int location = -1; + int count = 0; // element count + int location = -1; // see also @StageUniformLocation // in opengl, type means uniform data type, i.e. GL_FLOAT_VEC2, while in metal type means data basic type, i.e. // float @@ -425,6 +426,12 @@ struct UniformInfo struct StageUniformLocation { + /* + * gl: base_offset + * d3d: semantic_index + * metal: binding_index + * vulkan: binding_index + */ int location = -1; int offset = -1; @@ -470,7 +477,11 @@ struct UniformLocation struct VertexInputDesc { std::string semantic; - int location = -1; // gl: location, d3d: semantic_index, metal: index + // gl: location, + // d3d: semantic_index + // metal: binding_index + // vulkan: binding_index + int location = -1; int count = 0; int format = 0; }; diff --git a/axmol/rhi/CommandBuffer.cpp b/axmol/rhi/RenderContext.cpp similarity index 83% rename from axmol/rhi/CommandBuffer.cpp rename to axmol/rhi/RenderContext.cpp index 2fa78a7db0e1..6318c3db9217 100644 --- a/axmol/rhi/CommandBuffer.cpp +++ b/axmol/rhi/RenderContext.cpp @@ -23,12 +23,12 @@ THE SOFTWARE. ****************************************************************************/ -#include "axmol/rhi/CommandBuffer.h" +#include "axmol/rhi/RenderContext.h" namespace ax::rhi { -void CommandBuffer::updatePipelineState(const RenderTarget* rt, const PipelineDesc& desc) +void RenderContext::updatePipelineState(const RenderTarget* rt, const PipelineDesc& desc) { _programState = desc.programState; _vertexLayout = desc.vertexLayout; @@ -37,16 +37,16 @@ void CommandBuffer::updatePipelineState(const RenderTarget* rt, const PipelineDe assert(_vertexLayout); } -void CommandBuffer::setStencilReferenceValue(uint32_t value) +void RenderContext::setStencilReferenceValue(uint32_t value) { _stencilReferenceValue = value; } -bool CommandBuffer::resizeSwapchain(uint32_t /*width*/, uint32_t /*height*/) +bool RenderContext::updateSurface(void* /*surface*/, uint32_t /*width*/, uint32_t /*height*/) { return true; } -void CommandBuffer::setFrameBufferOnly(bool /*frameBufferOnly*/) {} +void RenderContext::setFrameBufferOnly(bool /*frameBufferOnly*/) {} } // namespace ax::rhi diff --git a/axmol/rhi/CommandBuffer.h b/axmol/rhi/RenderContext.h similarity index 88% rename from axmol/rhi/CommandBuffer.h rename to axmol/rhi/RenderContext.h index f579ceb5dd5f..a2e36c6b78ec 100644 --- a/axmol/rhi/CommandBuffer.h +++ b/axmol/rhi/RenderContext.h @@ -63,9 +63,9 @@ struct DepthStencilDesc; /** * @brief Store encoded commands for the GPU to execute. - * A command buffer stores encoded commands until the buffer is committed for execution by the GPU + * A Render Context stores encoded commands until the buffer is committed for execution by the GPU */ -class CommandBuffer : public ax::Object +class RenderContext : public ax::Object { public: /** @@ -76,14 +76,14 @@ class CommandBuffer : public ax::Object void setScreenRenderTarget(RenderTarget* rt) { _screenRT = rt; } /** - * @brief Resize swapchain when window size changed - * + * @brief Updates surface when the window resized or surface recretad + * @param surface * @param width * @param height * @return true * @return false */ - virtual bool resizeSwapchain(uint32_t width, uint32_t height); + virtual bool updateSurface(void* surface, uint32_t width, uint32_t height); /** * Set depthStencil status once @@ -108,7 +108,7 @@ class CommandBuffer : public ax::Object * Begin a render pass, initial color, depth and stencil attachment. * @param desc Specifies a group of render targets that hold the results of a render pass. */ - virtual void beginRenderPass(const RenderTarget* renderTarget, const RenderPassDesc& desc) = 0; + virtual void beginRenderPass(RenderTarget* renderTarget, const RenderPassDesc& desc) = 0; /** * Update depthStencil status, improvment: for metal backend cache it @@ -234,10 +234,16 @@ class CommandBuffer : public ax::Object virtual void setScissorRect(bool isEnabled, float x, float y, float width, float height) = 0; /** - * Get a screen snapshot - * @param callback A callback to deal with screen snapshot image. + * Read pixels from the specified render target. + * + * @param rt The render target to read pixels from. + * @param preserveAxisHint A hint indicating whether to preserve the original axis orientation + * (e.g., avoid vertical flip). Note: support may vary across drivers/backends. + * @param callback A callback invoked with the resulting pixel buffer description. */ - virtual void readPixels(RenderTarget* rt, std::function callback) = 0; + virtual void readPixels(RenderTarget* rt, + bool preserveAxisHint, + std::function callback) = 0; /** * This property controls whether or not the drawables' @@ -255,13 +261,13 @@ class CommandBuffer : public ax::Object * Update both front and back stencil reference value. * @param value Specifies stencil reference value. */ - void setStencilReferenceValue(unsigned int value); + virtual void setStencilReferenceValue(uint32_t value); protected: - virtual ~CommandBuffer() = default; + virtual ~RenderContext() = default; - const RenderTarget* _screenRT{nullptr}; // weak ref (managed by Renderer) - const RenderTarget* _currentRT{nullptr}; // weak ref (managed by Renderer) + RenderTarget* _screenRT{nullptr}; // weak ref (managed by Renderer) + RenderTarget* _currentRT{nullptr}; // weak ref (managed by Renderer) ProgramState* _programState{nullptr}; // weak ref VertexLayout* _vertexLayout{nullptr}; // weak ref unsigned int _stencilReferenceValue = 0; ///< front stencil reference value diff --git a/axmol/rhi/RenderPassDesc.h b/axmol/rhi/RenderPassDesc.h index 21d0459739a3..d16b50d0780e 100644 --- a/axmol/rhi/RenderPassDesc.h +++ b/axmol/rhi/RenderPassDesc.h @@ -44,19 +44,21 @@ struct RenderPassFlags * bitmask indicating which buffers to clear at the beginning of a render pass. * This implies discard. */ - TargetBufferFlags clear; + TargetBufferFlags clear{TargetBufferFlags::NONE}; /** * bitmask indicating which buffers to discard at the beginning of a render pass. * Discarded buffers have uninitialized content, they must be entirely drawn over or cleared. */ - TargetBufferFlags discardStart; + TargetBufferFlags discardStart{TargetBufferFlags::NONE}; /** * bitmask indicating which buffers to discard at the end of a render pass. * Discarded buffers' content becomes invalid, they must not be read from again. */ - TargetBufferFlags discardEnd; + TargetBufferFlags discardEnd{TargetBufferFlags::NONE}; + + uint8_t padding{0}; }; /** diff --git a/axmol/rhi/axmol-rhi.h b/axmol/rhi/axmol-rhi.h index 2b83a9f814a4..44246e160a2f 100644 --- a/axmol/rhi/axmol-rhi.h +++ b/axmol/rhi/axmol-rhi.h @@ -29,7 +29,7 @@ #include "axmol/rhi/RenderPipeline.h" #include "axmol/rhi/DriverBase.h" #include "axmol/rhi/RHITypes.h" -#include "axmol/rhi/CommandBuffer.h" +#include "axmol/rhi/RenderContext.h" #include "axmol/rhi/Buffer.h" #include "axmol/rhi/VertexLayout.h" #include "axmol/rhi/Texture.h" diff --git a/axmol/rhi/axslc-spec.h b/axmol/rhi/axslc-spec.h index 13908f825a3b..fd5c3fffe110 100644 --- a/axmol/rhi/axslc-spec.h +++ b/axmol/rhi/axslc-spec.h @@ -1,5 +1,5 @@ // The Axmol Shader Compiler spec, define macros and structs, can be include anywhere -// match with axslcc-1.9.0+ +// match with axslcc-3.0.0+ #pragma once @@ -13,7 +13,7 @@ namespace axslc #pragma pack(push, 1) -#define SC_CHUNK sc_makefourcc('S', 'G', 'S', ' ') +#define SC_CHUNK sc_makefourcc('S', 'G', 'S', '3') #define SC_CHUNK_STAG sc_makefourcc('S', 'T', 'A', 'G') #define SC_CHUNK_REFL sc_makefourcc('R', 'E', 'F', 'L') #define SC_CHUNK_CODE sc_makefourcc('C', 'O', 'D', 'E') @@ -48,6 +48,17 @@ namespace axslc #define SC_IMAGEDIM_BUFFER sc_makefourcc('B', 'U', 'F', 'F') #define SC_IMAGEDIM_SUBPASS sc_makefourcc('S', 'U', 'B', 'P') +enum Dim +{ + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + DimCube = 3, + DimRect = 4, + DimBuffer = 5, + DimSubpassData = 6 +}; + // SGS chunk struct sc_chunk { @@ -64,7 +75,7 @@ struct sc_chunk_refl uint32_t num_uniform_buffers; uint32_t num_storage_images; uint32_t num_storage_buffers; - uint16_t flatten_ubos; + uint16_t flatten_ubo; uint16_t debug_info; // inputs: sc_refl_input[num_inputs] @@ -83,13 +94,16 @@ struct sc_refl_input uint32_t format; }; +// @since 3.0.0, modified struct sc_refl_texture { char name[32]; int32_t binding; - uint32_t image_dim; - uint8_t multisample; - uint8_t is_array; + uint8_t image_dim; // @see enum Dim: Dim1D, Dim2D, Dim3D, DimCube ... + uint8_t multisample : 1; // whether sampler2DMS + uint8_t arrayed : 1; // whether samplerXXArray + uint8_t reserved : 6; // reserved field + uint16_t count; }; struct sc_refl_buffer diff --git a/axmol/rhi/d3d/BufferD3D.h b/axmol/rhi/d3d/BufferD3D.h index e5bf3ae696b9..c08e932dc8b6 100644 --- a/axmol/rhi/d3d/BufferD3D.h +++ b/axmol/rhi/d3d/BufferD3D.h @@ -29,6 +29,7 @@ #include "axmol/rhi/Buffer.h" #include "axmol/platform/win32/ComPtr.h" +#include "axmol/tlx/byte_buffer.hpp" namespace ax::rhi::d3d { @@ -58,7 +59,7 @@ class BufferImpl final : public Buffer std::size_t size, BufferType type, BufferUsage usage, - const void* initial = nullptr); + const void* initial); void updateData(const void* data, std::size_t size) override; void updateSubData(const void* data, std::size_t offset, std::size_t size) override; @@ -72,8 +73,8 @@ class BufferImpl final : public Buffer size_t _capacity{0}; - std::vector _defaultData; - bool _needDefaultStoredData = true; + axstd::byte_buffer _defaultData; + bool _needDefaultStoredData = false; ID3D11Device* _device; // weak ref ID3D11DeviceContext* _context; // weak ref diff --git a/axmol/rhi/d3d/DriverD3D.cpp b/axmol/rhi/d3d/DriverD3D.cpp index 81b8440c27c2..d2ad5abdc515 100644 --- a/axmol/rhi/d3d/DriverD3D.cpp +++ b/axmol/rhi/d3d/DriverD3D.cpp @@ -22,7 +22,7 @@ THE SOFTWARE. ****************************************************************************/ #include "axmol/rhi/d3d/DriverD3D.h" -#include "axmol/rhi/d3d/CommandBufferD3D.h" +#include "axmol/rhi/d3d/RenderContextD3D.h" #include "axmol/rhi/d3d/BufferD3D.h" #include "axmol/rhi/d3d/TextureD3D.h" #include "axmol/rhi/d3d/ProgramD3D.h" @@ -197,18 +197,13 @@ void DriverImpl::init() } _dxgiAdapter->GetDesc(&_adapterDesc); - // _maxAttributes = D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT; - // _maxTextureSize = 16384; - // _maxTextureUnits = D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; - // _maxSamplesAllowed = 1; + _caps.maxAttributes = D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT; // 16 - _maxAttributes = D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT; // 16 + _caps.maxTextureUnits = D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; // 128 - _maxTextureUnits = D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; // 128 + _caps.maxTextureSize = EstimateMaxTexSize(_device->GetFeatureLevel()); - _maxTextureSize = EstimateMaxTexSize(_device->GetFeatureLevel()); - - _maxSamplesAllowed = static_cast(FindMaxMsaaSamples(_device, DXGI_FORMAT_R8G8B8A8_UNORM)); + _caps.maxSamplesAllowed = static_cast(FindMaxMsaaSamples(_device, DXGI_FORMAT_R8G8B8A8_UNORM)); } DriverImpl::~DriverImpl() @@ -339,14 +334,14 @@ HRESULT DriverImpl::createD3DDevice(int requestDriverType, int createFlags) &_context); } -CommandBuffer* DriverImpl::createCommandBuffer(void* surfaceContext) +RenderContext* DriverImpl::createRenderContext(void* surfaceContext) { - return new CommandBufferImpl(this, surfaceContext); + return new RenderContextImpl(this, surfaceContext); } -Buffer* DriverImpl::createBuffer(std::size_t size, BufferType type, BufferUsage usage) +Buffer* DriverImpl::createBuffer(std::size_t size, BufferType type, BufferUsage usage, const void* initial) { - return new BufferImpl(_device, _context, size, type, usage); + return new BufferImpl(_device, _context, size, type, usage, initial); } /** diff --git a/axmol/rhi/d3d/DriverD3D.h b/axmol/rhi/d3d/DriverD3D.h index 7dc4054aa447..34fbb4804d5d 100644 --- a/axmol/rhi/d3d/DriverD3D.h +++ b/axmol/rhi/d3d/DriverD3D.h @@ -46,20 +46,6 @@ namespace ax::rhi::d3d class DriverImpl : public DriverBase { public: - /* The max vertex attribs, it's not how many device supports which may be lower. */ - static constexpr uint32_t MAX_VERTEX_ATTRIBS = 16; - - /* The vertex data buffers binding index start, the axslcc(SPIRV-Cross), default UBO binding index is 0, - scope is per stage in MSL - */ - static constexpr uint32_t VBO_BINDING_INDEX_START = 0; - - /* The vertex instancing buffer binding index */ - static constexpr uint32_t VBO_INSTANCING_BINDING_INDEX = VBO_BINDING_INDEX_START + 1; - - /* The default attribs binding index */ - static constexpr uint32_t DEFAULT_ATTRIBS_BINDING_INDEX = VBO_BINDING_INDEX_START + MAX_VERTEX_ATTRIBS; - static constexpr D3D_FEATURE_LEVEL DEFAULT_REATURE_LEVELS[2] = { D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0, @@ -73,10 +59,10 @@ class DriverImpl : public DriverBase /// @name Setters & Getters /** - * Create a CommandBuffer object. - * @return A CommandBuffer object. + * Create a RenderContext object. + * @return A RenderContext object. */ - CommandBuffer* createCommandBuffer(void* surfaceContext) override; + RenderContext* createRenderContext(void* surfaceContext) override; /** * Create a Buffer object. @@ -87,7 +73,7 @@ class DriverImpl : public DriverBase * BufferUsage::STATIC, BufferUsage::DYNAMIC. * @return A Buffer object. */ - Buffer* createBuffer(std::size_t size, BufferType type, BufferUsage usage) override; + Buffer* createBuffer(std::size_t size, BufferType type, BufferUsage usage, const void* initial) override; /** * Create a Texture object. diff --git a/axmol/rhi/d3d/CommandBufferD3D.cpp b/axmol/rhi/d3d/RenderContextD3D.cpp similarity index 93% rename from axmol/rhi/d3d/CommandBufferD3D.cpp rename to axmol/rhi/d3d/RenderContextD3D.cpp index 1cc5264d6cc6..9d78dd428673 100644 --- a/axmol/rhi/d3d/CommandBufferD3D.cpp +++ b/axmol/rhi/d3d/RenderContextD3D.cpp @@ -21,7 +21,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ****************************************************************************/ -#include "axmol/rhi/d3d/CommandBufferD3D.h" +#include "axmol/rhi/d3d/RenderContextD3D.h" #include "axmol/rhi/d3d/RenderTargetD3D.h" #include "axmol/rhi/d3d/RenderPipelineD3D.h" #include "axmol/rhi/d3d/DepthStencilStateD3D.h" @@ -194,7 +194,7 @@ static HRESULT runOnUIThread(const ComPtr& dispatcher, _Fty&& f static constexpr DXGI_FORMAT _AX_SWAPCHAIN_FORMAT = DXGI_FORMAT_R8G8B8A8_UNORM; -CommandBufferImpl::CommandBufferImpl(DriverImpl* driver, void* surfaceContext) +RenderContextImpl::RenderContextImpl(DriverImpl* driver, void* surfaceContext) { _driverImpl = driver; @@ -402,7 +402,7 @@ CommandBufferImpl::CommandBufferImpl(DriverImpl* driver, void* surfaceContext) _nullSRVs.reserve(8); } -CommandBufferImpl::~CommandBufferImpl() +RenderContextImpl::~RenderContextImpl() { // cleanup GPU resources UtilsD3D::updateDefaultRenderTargetAttachments(nullptr, nullptr); @@ -414,7 +414,7 @@ CommandBufferImpl::~CommandBufferImpl() _rasterState.Reset(); } -bool CommandBufferImpl::resizeSwapchain(uint32_t width, uint32_t height) +bool RenderContextImpl::updateSurface(void* /*surface*/, uint32_t width, uint32_t height) { if (!_swapChain || !_driverImpl || !_screenRT) return false; @@ -445,26 +445,26 @@ bool CommandBufferImpl::resizeSwapchain(uint32_t width, uint32_t height) return true; } -void CommandBufferImpl::setDepthStencilState(DepthStencilState* depthStencilState) +void RenderContextImpl::setDepthStencilState(DepthStencilState* depthStencilState) { _depthStencilState = static_cast(depthStencilState); } -void CommandBufferImpl::setRenderPipeline(RenderPipeline* renderPipeline) +void RenderContextImpl::setRenderPipeline(RenderPipeline* renderPipeline) { _renderPipeline = static_cast(renderPipeline); } -bool CommandBufferImpl::beginFrame() +bool RenderContextImpl::beginFrame() { return true; } -void CommandBufferImpl::beginRenderPass(const RenderTarget* renderTarget, const RenderPassDesc& renderPassDesc) +void RenderContextImpl::beginRenderPass(RenderTarget* renderTarget, const RenderPassDesc& renderPassDesc) { auto context = _driverImpl->getContext(); - auto activeRT = static_cast(renderTarget); + auto activeRT = static_cast(renderTarget); if (_renderPassDesc == renderPassDesc && _currentRT == activeRT && !activeRT->isDirty()) { ; @@ -496,18 +496,18 @@ void CommandBufferImpl::beginRenderPass(const RenderTarget* renderTarget, const static_cast(renderPassDesc.clearStencilValue)); } -void CommandBufferImpl::updateDepthStencilState(const DepthStencilDesc& desc) +void RenderContextImpl::updateDepthStencilState(const DepthStencilDesc& desc) { _depthStencilState->update(desc); } -void CommandBufferImpl::updatePipelineState(const RenderTarget* rt, const PipelineDesc& desc) +void RenderContextImpl::updatePipelineState(const RenderTarget* rt, const PipelineDesc& desc) { - CommandBuffer::updatePipelineState(rt, desc); + RenderContext::updatePipelineState(rt, desc); _renderPipeline->update(rt, desc); } -void CommandBufferImpl::setViewport(int x, int y, unsigned int w, unsigned int h) +void RenderContextImpl::setViewport(int x, int y, unsigned int w, unsigned int h) { D3D11_VIEWPORT viewport = {}; viewport.TopLeftX = static_cast(x); @@ -520,7 +520,7 @@ void CommandBufferImpl::setViewport(int x, int y, unsigned int w, unsigned int h _driverImpl->getContext()->RSSetViewports(1, &viewport); } -void CommandBufferImpl::setCullMode(CullMode mode) +void RenderContextImpl::setCullMode(CullMode mode) { if (_rasterDesc.cullMode != mode) { @@ -529,7 +529,7 @@ void CommandBufferImpl::setCullMode(CullMode mode) } } -void CommandBufferImpl::setWinding(Winding winding) +void RenderContextImpl::setWinding(Winding winding) { if (_rasterDesc.winding != winding) { @@ -538,7 +538,7 @@ void CommandBufferImpl::setWinding(Winding winding) } } -void CommandBufferImpl::setScissorRect(bool isEnabled, float x, float y, float width, float height) +void RenderContextImpl::setScissorRect(bool isEnabled, float x, float y, float width, float height) { D3D11_RECT rect{}; @@ -580,7 +580,7 @@ void CommandBufferImpl::setScissorRect(bool isEnabled, float x, float y, float w _driverImpl->getContext()->RSSetScissorRects(1, &rect); } -void CommandBufferImpl::updateRasterizerState() +void RenderContextImpl::updateRasterizerState() { if (!_rasterDesc.dirtyFlags && _rasterState) return; @@ -616,7 +616,7 @@ void CommandBufferImpl::updateRasterizerState() _rasterDesc.dirtyFlags = 0; } -void CommandBufferImpl::setVertexBuffer(Buffer* buffer) +void RenderContextImpl::setVertexBuffer(Buffer* buffer) { assert(buffer != nullptr); if (buffer == nullptr || _vertexBuffer == buffer) @@ -627,7 +627,7 @@ void CommandBufferImpl::setVertexBuffer(Buffer* buffer) _vertexBuffer = static_cast(buffer); } -void CommandBufferImpl::setIndexBuffer(Buffer* buffer) +void RenderContextImpl::setIndexBuffer(Buffer* buffer) { assert(buffer != nullptr); if (buffer == nullptr || _indexBuffer == buffer) @@ -638,7 +638,7 @@ void CommandBufferImpl::setIndexBuffer(Buffer* buffer) _indexBuffer = static_cast(buffer); } -void CommandBufferImpl::setInstanceBuffer(Buffer* buffer) +void RenderContextImpl::setInstanceBuffer(Buffer* buffer) { assert(buffer != nullptr); if (buffer == nullptr || _instanceBuffer == buffer) @@ -649,7 +649,7 @@ void CommandBufferImpl::setInstanceBuffer(Buffer* buffer) _instanceBuffer = static_cast(buffer); } -void CommandBufferImpl::drawArrays(PrimitiveType primitiveType, std::size_t start, std::size_t count, bool wireframe) +void RenderContextImpl::drawArrays(PrimitiveType primitiveType, std::size_t start, std::size_t count, bool wireframe) { prepareDrawing(); auto context = _driverImpl->getContext(); @@ -657,7 +657,7 @@ void CommandBufferImpl::drawArrays(PrimitiveType primitiveType, std::size_t star context->Draw(static_cast(count), static_cast(start)); } -void CommandBufferImpl::drawArraysInstanced(PrimitiveType primitiveType, +void RenderContextImpl::drawArraysInstanced(PrimitiveType primitiveType, std::size_t start, std::size_t count, int instanceCount, @@ -669,7 +669,7 @@ void CommandBufferImpl::drawArraysInstanced(PrimitiveType primitiveType, context->DrawInstanced(static_cast(count), static_cast(instanceCount), static_cast(start), 0); } -void CommandBufferImpl::drawElements(PrimitiveType primitiveType, +void RenderContextImpl::drawElements(PrimitiveType primitiveType, IndexFormat indexType, std::size_t count, std::size_t offset, @@ -694,7 +694,7 @@ void CommandBufferImpl::drawElements(PrimitiveType primitiveType, context->DrawIndexed(indexCount, startIndex, 0); } -void CommandBufferImpl::drawElementsInstanced(PrimitiveType primitiveType, +void RenderContextImpl::drawElementsInstanced(PrimitiveType primitiveType, IndexFormat indexType, std::size_t count, std::size_t offset, @@ -718,7 +718,7 @@ void CommandBufferImpl::drawElementsInstanced(PrimitiveType primitiveType, context->DrawIndexedInstanced(static_cast(count), static_cast(instanceCount), startIndex, 0, 0); } -void CommandBufferImpl::endRenderPass() +void RenderContextImpl::endRenderPass() { _programState = nullptr; _vertexLayout = nullptr; @@ -736,7 +736,7 @@ void CommandBufferImpl::endRenderPass() } } -void CommandBufferImpl::prepareDrawing() +void RenderContextImpl::prepareDrawing() { assert(_programState); updateRasterizerState(); @@ -775,20 +775,15 @@ void CommandBufferImpl::prepareDrawing() context->IASetVertexBuffers(0, 2, vbs, strides, offsets); } - // bind uniform buffer: glsl-optimizer is bound to index 1, axslcc: bound to 0 - constexpr int bindingIndex = DriverImpl::VBO_BINDING_INDEX_START; - auto vertUB = _programState->getVertexUniformBuffer(); + // bind vertex uniform buffer + auto vertUB = _programState->getVertexUniformBuffer(); if (!vertUB.empty()) - { - program->bindVertexUniformBuffer(context, vertUB.data(), vertUB.size(), bindingIndex); - } + program->bindVertexUniformBuffer(context, vertUB.data(), vertUB.size(), VS_UBO_BINDING_INDEX); - // bind fragmentBuffer + // bind fragment uniform Buffer auto fragUB = _programState->getFragmentUniformBuffer(); if (!fragUB.empty()) - { - program->bindFragmentUniformBuffer(context, fragUB.data(), fragUB.size(), bindingIndex); - } + program->bindFragmentUniformBuffer(context, fragUB.data(), fragUB.size(), FS_UBO_BINDING_INDEX); // bind texture _textureBounds = 0; @@ -811,7 +806,7 @@ void CommandBufferImpl::prepareDrawing() _depthStencilState->apply(context, _stencilReferenceValue); } -void CommandBufferImpl::endFrame() +void RenderContextImpl::endFrame() { HRESULT hr = _swapChain->Present(_syncInterval, _presentFlags); #ifdef NDEBUG @@ -832,7 +827,9 @@ void CommandBufferImpl::endFrame() #endif } -void CommandBufferImpl::readPixels(RenderTarget* rt, std::function callback) +void RenderContextImpl::readPixels(RenderTarget* rt, + bool /*preserveAxisHint*/, + std::function callback) { PixelBufferDesc pbd; @@ -863,7 +860,7 @@ void CommandBufferImpl::readPixels(RenderTarget* rt, std::function(rt)->getColorAttachment(0).texure; assert(tex); diff --git a/axmol/rhi/d3d/CommandBufferD3D.h b/axmol/rhi/d3d/RenderContextD3D.h similarity index 90% rename from axmol/rhi/d3d/CommandBufferD3D.h rename to axmol/rhi/d3d/RenderContextD3D.h index 38760d97512d..d1eee5d656fe 100644 --- a/axmol/rhi/d3d/CommandBufferD3D.h +++ b/axmol/rhi/d3d/RenderContextD3D.h @@ -23,7 +23,7 @@ ****************************************************************************/ #pragma once -#include "axmol/rhi/CommandBuffer.h" +#include "axmol/rhi/RenderContext.h" #include "axmol/rhi/d3d/DriverD3D.h" #include "axmol/platform/win32/ComPtr.h" @@ -55,21 +55,31 @@ struct RasterStateDesc }; /** - * @brief A D3D11-based CommandBuffer implementation + * @brief A D3D11-based RenderContext implementation * */ -class CommandBufferImpl : public CommandBuffer +class RenderContextImpl : public RenderContext { public: + /* The max vertex attribs, it's not how many device supports which may be lower. */ + static constexpr uint32_t MAX_VERTEX_ATTRIBS = 16; + + static constexpr uint32_t VI_BINDING_INDEX = 0; + static constexpr uint32_t VI_INSTANCING_BINDING_INDEX = 1; + + // match axmol shaders + static constexpr uint32_t VS_UBO_BINDING_INDEX = 0; + static constexpr uint32_t FS_UBO_BINDING_INDEX = 1; + /// @name Constructor, Destructor and Initializers /** * @param driver The device for which d3d::DriverImpl object was created. * @param surfaceContext hwnd or IUnkown*(SwapChainPanel) */ - CommandBufferImpl(DriverImpl* driver, void* surfaceContext); - ~CommandBufferImpl() override; + RenderContextImpl(DriverImpl* driver, void* surfaceContext); + ~RenderContextImpl() override; - bool resizeSwapchain(uint32_t width, uint32_t height) override; + bool updateSurface(void* surface, uint32_t width, uint32_t height) override; /** * Set depthStencil status @@ -98,7 +108,7 @@ class CommandBufferImpl : public CommandBuffer * MTLRenderCommandEncoder is cached if current RenderPassDesc is identical to previous one. * @param descriptor Specifies a group of render targets that hold the results of a render pass. */ - void beginRenderPass(const RenderTarget* renderTarget, const RenderPassDesc& descriptor) override; + void beginRenderPass(RenderTarget* renderTarget, const RenderPassDesc& descriptor) override; /** * Update depthStencil status, improvment: for metal backend cache it @@ -209,11 +219,9 @@ class CommandBufferImpl : public CommandBuffer */ void setScissorRect(bool isEnabled, float x, float y, float width, float height) override; - /** - * Read pixels from RenderTarget - * @param callback A callback to deal with pixel data read. - */ - void readPixels(RenderTarget* rt, std::function callback) override; + void readPixels(RenderTarget* rt, + bool preserveAxisHint, + std::function callback) override; protected: void readPixels(RenderTarget* rt, UINT x, UINT y, UINT width, UINT height, PixelBufferDesc& pbd); diff --git a/axmol/rhi/d3d/ShaderModuleD3D.cpp b/axmol/rhi/d3d/ShaderModuleD3D.cpp index 2db3628daec6..a3f12ec0f254 100644 --- a/axmol/rhi/d3d/ShaderModuleD3D.cpp +++ b/axmol/rhi/d3d/ShaderModuleD3D.cpp @@ -168,7 +168,7 @@ void ShaderModuleImpl::compileShader(ID3D11Device* device, ShaderStage stage, st refl.num_storage_buffers = ibs.read(); // skip infos we don't need - ibs.advance(sizeof(sc_chunk_refl) - offsetof(sc_chunk_refl, flatten_ubos)); + ibs.advance(sizeof(sc_chunk_refl) - offsetof(sc_chunk_refl, flatten_ubo)); SLCReflectContext context{&refl, &ibs}; @@ -312,17 +312,19 @@ void ShaderModuleImpl::reflectUniforms(SLCReflectContext* context) void ShaderModuleImpl::reflectSamplers(SLCReflectContext* context) { + constexpr auto skip_fields_bytes = static_cast(sizeof(sc_refl_texture::image_dim) + sizeof(uint8_t)); + const auto samplerCount = context->refl->num_textures; + if (samplerCount <= 0) + return; auto ibs = context->ibs; for (int i = 0; i < context->refl->num_textures; ++i) { + UniformInfo uniform{}; std::string_view name = _sc_read_name(ibs); - auto binding = ibs->read(); - - ibs->advance(sizeof(sc_refl_texture) - offsetof(sc_refl_texture, image_dim)); + uniform.location = ibs->read(); // sampler binding index + ibs->advance(skip_fields_bytes); + uniform.count = (std::max)(1, static_cast(ibs->read())); - UniformInfo uniform; - uniform.location = binding; - uniform.bufferOffset = -1; _activeUniformInfos[name] = uniform; } } diff --git a/axmol/rhi/d3d/VertexLayoutD3D.cpp b/axmol/rhi/d3d/VertexLayoutD3D.cpp index 1a3ab80ad0f1..99688b782c74 100644 --- a/axmol/rhi/d3d/VertexLayoutD3D.cpp +++ b/axmol/rhi/d3d/VertexLayoutD3D.cpp @@ -24,6 +24,7 @@ #include "axmol/rhi/d3d/VertexLayoutD3D.h" #include "axmol/rhi/d3d/ProgramD3D.h" #include "axmol/rhi/d3d/DriverD3D.h" +#include "axmol/rhi/d3d/RenderContextD3D.h" namespace ax::rhi::d3d { @@ -86,7 +87,8 @@ void VertexLayoutImpl::apply(ID3D11DeviceContext* context, Program* program) con inputElements.reserve(bindings.size()); auto appendElement = [&inputElements](const InputBindingDesc& inputDesc) { - const auto inputSlot = inputDesc.instanceStepRate ? 1 : 0; + const auto inputSlot = inputDesc.instanceStepRate ? RenderContextImpl::VI_INSTANCING_BINDING_INDEX + : RenderContextImpl::VI_BINDING_INDEX; const auto inputSlotClass = inputDesc.instanceStepRate ? D3D11_INPUT_PER_INSTANCE_DATA : D3D11_INPUT_PER_VERTEX_DATA; if (inputDesc.format != VertexFormat::MAT4) diff --git a/axmol/rhi/metal/BufferMTL.h b/axmol/rhi/metal/BufferMTL.h index 38c9b5be48af..3351a1efa678 100644 --- a/axmol/rhi/metal/BufferMTL.h +++ b/axmol/rhi/metal/BufferMTL.h @@ -54,7 +54,7 @@ class BufferImpl : public Buffer * @param usage Specifies the expected usage pattern of the data store. The symbolic constant must be * BufferUsage::STATIC, BufferUsage::DYNAMIC. */ - BufferImpl(id mtlDevice, std::size_t size, BufferType type, BufferUsage usage); + BufferImpl(id mtlDevice, std::size_t size, BufferType type, BufferUsage usage, const void* inital); ~BufferImpl(); /// @name Update Buffer diff --git a/axmol/rhi/metal/BufferMTL.mm b/axmol/rhi/metal/BufferMTL.mm index f6e078215e39..24ad3a5e205b 100644 --- a/axmol/rhi/metal/BufferMTL.mm +++ b/axmol/rhi/metal/BufferMTL.mm @@ -29,7 +29,11 @@ of this software and associated documentation files (the "Software"), to deal namespace ax::rhi::mtl { -BufferImpl::BufferImpl(id mtlDevice, std::size_t size, BufferType type, BufferUsage usage) +BufferImpl::BufferImpl(id mtlDevice, + std::size_t size, + BufferType type, + BufferUsage usage, + const void* initial) : Buffer(size, type, usage) { if (BufferUsage::DYNAMIC == usage) @@ -50,6 +54,9 @@ of this software and associated documentation files (the "Software"), to deal { _mtlBuffer = [mtlDevice newBufferWithLength:size options:MTLResourceStorageModeShared]; } + + if (initial) + updateData(initial, size); } BufferImpl::~BufferImpl() diff --git a/axmol/rhi/metal/DriverMTL.h b/axmol/rhi/metal/DriverMTL.h index 9270c670a1c0..d740a157a3a5 100644 --- a/axmol/rhi/metal/DriverMTL.h +++ b/axmol/rhi/metal/DriverMTL.h @@ -98,10 +98,10 @@ class DriverImpl : public DriverBase /// @name Setters & Getters /** - * New a CommandBuffer object. - * @return A CommandBuffer object. + * New a RenderContext object. + * @return A RenderContext object. */ - CommandBuffer* createCommandBuffer(void*) override; + RenderContext* createRenderContext(void*) override; /** * New a Buffer object. @@ -112,7 +112,7 @@ class DriverImpl : public DriverBase * BufferUsage::STATIC, BufferUsage::DYNAMIC. * @return A Buffer object. */ - Buffer* createBuffer(std::size_t size, BufferType type, BufferUsage usage) override; + Buffer* createBuffer(std::size_t size, BufferType type, BufferUsage usage, const void* initial) override; /** * New a Texture object. diff --git a/axmol/rhi/metal/DriverMTL.mm b/axmol/rhi/metal/DriverMTL.mm index fef5fff00904..12a4dcabb113 100644 --- a/axmol/rhi/metal/DriverMTL.mm +++ b/axmol/rhi/metal/DriverMTL.mm @@ -24,7 +24,7 @@ of this software and associated documentation files (the "Software"), to deal ****************************************************************************/ #include "axmol/rhi/metal/DriverMTL.h" -#include "axmol/rhi/metal/CommandBufferMTL.h" +#include "axmol/rhi/metal/RenderContextMTL.h" #include "axmol/rhi/metal/BufferMTL.h" #include "axmol/rhi/metal/RenderPipelineMTL.h" #include "axmol/rhi/metal/ShaderModuleMTL.h" @@ -429,22 +429,22 @@ bool supportS3TC(FeatureSet featureSet) UtilsMTL::initGPUTextureFormats(); - _maxAttributes = getMaxVertexAttributes(_featureSet); - _maxSamplesAllowed = getMaxSamplerEntries(_featureSet); - _maxTextureUnits = getMaxTextureEntries(_featureSet); - _maxTextureSize = getMaxTextureWidthHeight(_featureSet); + _caps.maxAttributes = getMaxVertexAttributes(_featureSet); + _caps.maxSamplesAllowed = getMaxSamplerEntries(_featureSet); + _caps.maxTextureUnits = getMaxTextureEntries(_featureSet); + _caps.maxTextureSize = getMaxTextureWidthHeight(_featureSet); } DriverImpl::~DriverImpl() {} -CommandBuffer* DriverImpl::createCommandBuffer(void* surfaceContext) +RenderContext* DriverImpl::createRenderContext(void* surfaceContext) { - return new CommandBufferImpl(this, surfaceContext); + return new RenderContextImpl(this, surfaceContext); } -Buffer* DriverImpl::createBuffer(std::size_t size, BufferType type, BufferUsage usage) +Buffer* DriverImpl::createBuffer(std::size_t size, BufferType type, BufferUsage usage, const void* initial) { - return new BufferImpl(_mtlDevice, size, type, usage); + return new BufferImpl(_mtlDevice, size, type, usage, initial); } Texture* DriverImpl::createTexture(const TextureDesc& descriptor) diff --git a/axmol/rhi/metal/CommandBufferMTL.h b/axmol/rhi/metal/RenderContextMTL.h similarity index 92% rename from axmol/rhi/metal/CommandBufferMTL.h rename to axmol/rhi/metal/RenderContextMTL.h index 29eb8d960d01..4493534e4b9d 100644 --- a/axmol/rhi/metal/CommandBufferMTL.h +++ b/axmol/rhi/metal/RenderContextMTL.h @@ -25,7 +25,7 @@ #pragma once -#include "axmol/rhi/CommandBuffer.h" +#include "axmol/rhi/RenderContext.h" #include "axmol/rhi/metal/DriverMTL.h" #include @@ -44,25 +44,17 @@ class DepthStencilStateImpl; * @brief Store encoded commands for the GPU to execute. * A command buffer stores encoded commands until the buffer is committed for execution by the GPU */ -class CommandBufferImpl : public CommandBuffer +class RenderContextImpl : public RenderContext { public: /// @name Constructor, Destructor and Initializers /** * @param driver The device for which MTLCommandQueue object was created. */ - CommandBufferImpl(DriverImpl* driver, void* surfaceContext); - ~CommandBufferImpl(); + RenderContextImpl(DriverImpl* driver, void* surfaceContext); + ~RenderContextImpl(); - /** - * @brief Resize metal swapchain when window size changed - * - * @param width - * @param height - * @return true - * @return false - */ - bool resizeSwapchain(uint32_t width, uint32_t height) override; + bool updateSurface(void* surface, uint32_t width, uint32_t height) override; /** * Set depthStencil status @@ -91,7 +83,7 @@ class CommandBufferImpl : public CommandBuffer * MTLRenderCommandEncoder is cached if current RenderPassDesc is identical to previous one. * @param descriptor Specifies a group of render targets that hold the results of a render pass. */ - void beginRenderPass(const RenderTarget* renderTarget, const RenderPassDesc& descriptor) override; + void beginRenderPass(RenderTarget* renderTarget, const RenderPassDesc& descriptor) override; /** * Update depthStencil status, improvment: for metal backend cache it @@ -204,11 +196,9 @@ class CommandBufferImpl : public CommandBuffer */ void setScissorRect(bool isEnabled, float x, float y, float width, float height) override; - /** - * Read pixels from RenderTarget - * @param callback A callback to deal with pixel data read. - */ - void readPixels(RenderTarget* rt, std::function callback) override; + void readPixels(RenderTarget* rt, + bool preserveAxisHint, + std::function callback) override; id getRenderCommandEncoder() const { return _mtlRenderEncoder; } @@ -252,7 +242,6 @@ class CommandBufferImpl : public CommandBuffer void afterDraw(); void flush(); void flushCaptureCommands(); - void updateRenderCommandEncoder(const RenderTarget* renderTarget, const RenderPassDesc& renderPassParams); static CAMetalLayer* _mtlLayer; static id _currentDrawable; @@ -271,7 +260,6 @@ class CommandBufferImpl : public CommandBuffer unsigned int _renderTargetHeight = 0; dispatch_semaphore_t _frameBoundarySemaphore; - const RenderTarget* _currentRenderTarget = nil; // weak ref RenderPassDesc _currentRenderPassDesc; NSAutoreleasePool* _autoReleasePool = nil; diff --git a/axmol/rhi/metal/CommandBufferMTL.mm b/axmol/rhi/metal/RenderContextMTL.mm similarity index 87% rename from axmol/rhi/metal/CommandBufferMTL.mm rename to axmol/rhi/metal/RenderContextMTL.mm index 6c7c98e93398..7f7dba3eb178 100644 --- a/axmol/rhi/metal/CommandBufferMTL.mm +++ b/axmol/rhi/metal/RenderContextMTL.mm @@ -23,7 +23,7 @@ of this software and associated documentation files (the "Software"), to deal THE SOFTWARE. ****************************************************************************/ -#include "axmol/rhi/metal/CommandBufferMTL.h" +#include "axmol/rhi/metal/RenderContextMTL.h" #include "axmol/rhi/metal/BufferMTL.h" #include "axmol/rhi/metal/DriverMTL.h" #include "axmol/rhi/metal/RenderPipelineMTL.h" @@ -46,6 +46,10 @@ of this software and associated documentation files (the "Software"), to deal namespace { +// match with axmol 3.1 shader +static constexpr int VS_UBO_BINDING_INDEX = 0; +static constexpr int FS_UBO_BINDING_INDEX = 1; + #define byte(n) ((n) * 8) #define bit(n) (n) static uint8_t getBitsPerElementMTL(MTLPixelFormat pixleFormat) @@ -144,10 +148,10 @@ static MTLCullMode toMTLCullMode(CullMode mode) } // namespace -CAMetalLayer* CommandBufferImpl::_mtlLayer = nil; -id CommandBufferImpl::_currentDrawable = nil; +CAMetalLayer* RenderContextImpl::_mtlLayer = nil; +id RenderContextImpl::_currentDrawable = nil; -CommandBufferImpl::CommandBufferImpl(DriverImpl* driver, void* surfaceContext) +RenderContextImpl::RenderContextImpl(DriverImpl* driver, void* surfaceContext) { _frameBoundarySemaphore = dispatch_semaphore_create(MAX_INFLIGHT_BUFFER); auto mtlDevice = driver->getMTLDevice(); @@ -188,7 +192,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) UtilsMTL::updateDefaultDepthStencilAttachment(_mtlLayer); } -CommandBufferImpl::~CommandBufferImpl() +RenderContextImpl::~RenderContextImpl() { // Wait for all frames to finish by submitting and waiting on a dummy command buffer. flush(); @@ -200,24 +204,24 @@ static MTLCullMode toMTLCullMode(CullMode mode) dispatch_semaphore_signal(_frameBoundarySemaphore); } -bool CommandBufferImpl::resizeSwapchain(uint32_t width, uint32_t height) +bool RenderContextImpl::updateSurface(void* /*surface*/, uint32_t width, uint32_t height) { [_mtlLayer setDrawableSize:CGSizeMake(width, height)]; UtilsMTL::updateDefaultDepthStencilAttachment(_mtlLayer); return true; } -void CommandBufferImpl::setDepthStencilState(DepthStencilState* depthStencilState) +void RenderContextImpl::setDepthStencilState(DepthStencilState* depthStencilState) { _depthStencilStateImpl = static_cast(depthStencilState); } -void CommandBufferImpl::setRenderPipeline(RenderPipeline* renderPipeline) +void RenderContextImpl::setRenderPipeline(RenderPipeline* renderPipeline) { _renderPipelineImpl = static_cast(renderPipeline); } -bool CommandBufferImpl::beginFrame() +bool RenderContextImpl::beginFrame() { _autoReleasePool = [[NSAutoreleasePool alloc] init]; dispatch_semaphore_wait(_frameBoundarySemaphore, DISPATCH_TIME_FOREVER); @@ -231,16 +235,15 @@ static MTLCullMode toMTLCullMode(CullMode mode) return true; } -void CommandBufferImpl::updateRenderCommandEncoder(const RenderTarget* renderTarget, - const RenderPassDesc& renderPassDesc) +void RenderContextImpl::beginRenderPass(RenderTarget* renderTarget, const RenderPassDesc& renderPassDesc) { - if (_mtlRenderEncoder != nil && _currentRenderPassDesc == renderPassDesc && _currentRenderTarget == renderTarget && + if (_mtlRenderEncoder != nil && _currentRenderPassDesc == renderPassDesc && _currentRT == renderTarget && !renderTarget->isDirty()) { return; } - _currentRenderTarget = renderTarget; + _currentRT = renderTarget; _currentRenderPassDesc = renderPassDesc; if (_mtlRenderEncoder != nil) @@ -255,27 +258,22 @@ static MTLCullMode toMTLCullMode(CullMode mode) _renderTargetHeight = (unsigned int)mtlDesc.colorAttachments[0].texture.height; _mtlRenderEncoder = [_currentCmdBuffer renderCommandEncoderWithDescriptor:mtlDesc]; [_mtlRenderEncoder retain]; -} - -void CommandBufferImpl::beginRenderPass(const RenderTarget* renderTarget, const RenderPassDesc& renderPassDesc) -{ - updateRenderCommandEncoder(renderTarget, renderPassDesc); // [_mtlRenderEncoder setFrontFacingWinding:MTLWindingCounterClockwise]; } -void CommandBufferImpl::updateDepthStencilState(const DepthStencilDesc& desc) +void RenderContextImpl::updateDepthStencilState(const DepthStencilDesc& desc) { _depthStencilStateImpl->update(desc); } -void CommandBufferImpl::updatePipelineState(const RenderTarget* rt, const PipelineDesc& desc) +void RenderContextImpl::updatePipelineState(const RenderTarget* rt, const PipelineDesc& desc) { - CommandBuffer::updatePipelineState(rt, desc); + RenderContext::updatePipelineState(rt, desc); _renderPipelineImpl->update(rt, desc); [_mtlRenderEncoder setRenderPipelineState:_renderPipelineImpl->getMTLRenderPipelineState()]; } -void CommandBufferImpl::setViewport(int x, int y, unsigned int w, unsigned int h) +void RenderContextImpl::setViewport(int x, int y, unsigned int w, unsigned int h) { MTLViewport viewport; viewport.originX = x; @@ -287,17 +285,17 @@ static MTLCullMode toMTLCullMode(CullMode mode) [_mtlRenderEncoder setViewport:viewport]; } -void CommandBufferImpl::setCullMode(CullMode mode) +void RenderContextImpl::setCullMode(CullMode mode) { [_mtlRenderEncoder setCullMode:toMTLCullMode(mode)]; } -void CommandBufferImpl::setWinding(Winding winding) +void RenderContextImpl::setWinding(Winding winding) { [_mtlRenderEncoder setFrontFacingWinding:toMTLWinding(winding)]; } -void CommandBufferImpl::setVertexBuffer(Buffer* buffer) +void RenderContextImpl::setVertexBuffer(Buffer* buffer) { // Vertex buffer is bound in index DEFAULT_ATTRIBS_BINDING_INDEX. [_mtlRenderEncoder setVertexBuffer:static_cast(buffer)->getMTLBuffer() @@ -305,7 +303,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) atIndex:DriverImpl::DEFAULT_ATTRIBS_BINDING_INDEX]; } -void CommandBufferImpl::setInstanceBuffer(Buffer* buffer) +void RenderContextImpl::setInstanceBuffer(Buffer* buffer) { // Vertex instancing transform buffer is bound in index VBO_INSTANCING_BINDING_INDEX. // TODO: sync device binding macros to AXSLCC @@ -314,7 +312,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) atIndex:DriverImpl::VBO_INSTANCING_BINDING_INDEX]; } -void CommandBufferImpl::setIndexBuffer(Buffer* buffer) +void RenderContextImpl::setIndexBuffer(Buffer* buffer) { assert(buffer != nullptr); if (!buffer) @@ -324,7 +322,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) [_mtlIndexBuffer retain]; } -void CommandBufferImpl::drawArrays(PrimitiveType primitiveType, +void RenderContextImpl::drawArrays(PrimitiveType primitiveType, std::size_t start, std::size_t count, bool wireframe /* unused */) @@ -333,7 +331,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) [_mtlRenderEncoder drawPrimitives:toMTLPrimitive(primitiveType) vertexStart:start vertexCount:count]; } -void CommandBufferImpl::drawArraysInstanced(PrimitiveType primitiveType, +void RenderContextImpl::drawArraysInstanced(PrimitiveType primitiveType, std::size_t start, std::size_t count, int instanceCount, @@ -346,7 +344,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) instanceCount:instanceCount]; } -void CommandBufferImpl::drawElements(PrimitiveType primitiveType, +void RenderContextImpl::drawElements(PrimitiveType primitiveType, IndexFormat indexType, std::size_t count, std::size_t offset, @@ -360,7 +358,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) indexBufferOffset:offset]; } -void CommandBufferImpl::drawElementsInstanced(PrimitiveType primitiveType, +void RenderContextImpl::drawElementsInstanced(PrimitiveType primitiveType, IndexFormat indexType, std::size_t count, std::size_t offset, @@ -376,12 +374,14 @@ static MTLCullMode toMTLCullMode(CullMode mode) instanceCount:instanceCount]; } -void CommandBufferImpl::endRenderPass() +void RenderContextImpl::endRenderPass() { afterDraw(); } -void CommandBufferImpl::readPixels(RenderTarget* rt, std::function callback) +void RenderContextImpl::readPixels(RenderTarget* rt, + bool /*preserveAxisHint*/, + std::function callback) { auto rtMTL = static_cast(rt); @@ -392,7 +392,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) _captureCallbacks.emplace_back(texture, std::move(callback)); } -void CommandBufferImpl::endFrame() +void RenderContextImpl::endFrame() { [_mtlRenderEncoder endEncoding]; [_mtlRenderEncoder release]; @@ -413,7 +413,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) [_autoReleasePool drain]; } -void CommandBufferImpl::endEncoding() +void RenderContextImpl::endEncoding() { if (_mtlRenderEncoder) { @@ -423,7 +423,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) _mtlRenderEncoder = nil; } -void CommandBufferImpl::flush() +void RenderContextImpl::flush() { if (_currentCmdBuffer) { @@ -437,7 +437,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) } } -void CommandBufferImpl::flushCaptureCommands() +void RenderContextImpl::flushCaptureCommands() { if (!_captureCallbacks.empty()) { @@ -476,7 +476,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) } } -void CommandBufferImpl::afterDraw() +void RenderContextImpl::afterDraw() { if (_mtlIndexBuffer) { @@ -488,7 +488,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) _vertexLayout = nullptr; } -void CommandBufferImpl::prepareDrawing() const +void RenderContextImpl::prepareDrawing() const { setUniformBuffer(); setTextures(); @@ -502,7 +502,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) } } -void CommandBufferImpl::setTextures() const +void RenderContextImpl::setTextures() const { for (const auto& [bindingIndex, bindingSet] : _programState->getTextureBindingSets()) { @@ -518,7 +518,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) } } -void CommandBufferImpl::setUniformBuffer() const +void RenderContextImpl::setUniformBuffer() const { if (_programState) { @@ -526,24 +526,21 @@ static MTLCullMode toMTLCullMode(CullMode mode) for (auto& cb : callbackUniforms) cb.second(_programState, cb.first); - // axslcc spec, bound to 0 - constexpr int bindingIndex = DriverImpl::VBO_BINDING_INDEX_START; - auto vertexUB = _programState->getVertexUniformBuffer(); if (!vertexUB.empty()) { - [_mtlRenderEncoder setVertexBytes:vertexUB.data() length:vertexUB.size() atIndex:bindingIndex]; + [_mtlRenderEncoder setVertexBytes:vertexUB.data() length:vertexUB.size() atIndex:VS_UBO_BINDING_INDEX]; } auto fragUB = _programState->getFragmentUniformBuffer(); if (!fragUB.empty()) { - [_mtlRenderEncoder setFragmentBytes:fragUB.data() length:fragUB.size() atIndex:bindingIndex]; + [_mtlRenderEncoder setFragmentBytes:fragUB.data() length:fragUB.size() atIndex:FS_UBO_BINDING_INDEX]; } } } -void CommandBufferImpl::setScissorRect(bool isEnabled, float x, float y, float width, float height) +void RenderContextImpl::setScissorRect(bool isEnabled, float x, float y, float width, float height) { MTLScissorRect scissorRect; if (isEnabled) @@ -573,7 +570,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) [_mtlRenderEncoder setScissorRect:scissorRect]; } -void CommandBufferImpl::readPixels(id texture, +void RenderContextImpl::readPixels(id texture, std::size_t origX, std::size_t origY, std::size_t rectWidth, @@ -627,12 +624,12 @@ static MTLCullMode toMTLCullMode(CullMode mode) [oneOffBuffer waitUntilCompleted]; } -void CommandBufferImpl::setFrameBufferOnly(bool frameBufferOnly) +void RenderContextImpl::setFrameBufferOnly(bool frameBufferOnly) { [_mtlLayer setFramebufferOnly:frameBufferOnly]; } -id CommandBufferImpl::getCurrentDrawable() +id RenderContextImpl::getCurrentDrawable() { if (!_currentDrawable) _currentDrawable = [_mtlLayer nextDrawable]; @@ -640,7 +637,7 @@ static MTLCullMode toMTLCullMode(CullMode mode) return _currentDrawable; } -void CommandBufferImpl::resetCurrentDrawable() +void RenderContextImpl::resetCurrentDrawable() { _currentDrawable = nil; } diff --git a/axmol/rhi/metal/RenderTargetMTL.h b/axmol/rhi/metal/RenderTargetMTL.h index e047312c476c..96c52a3cb7be 100644 --- a/axmol/rhi/metal/RenderTargetMTL.h +++ b/axmol/rhi/metal/RenderTargetMTL.h @@ -1,6 +1,6 @@ #pragma once #include "axmol/rhi/RenderTarget.h" -#include "axmol/rhi/metal/CommandBufferMTL.h" +#include "axmol/rhi/metal/RenderContextMTL.h" namespace ax::rhi::mtl { diff --git a/axmol/rhi/metal/RenderTargetMTL.mm b/axmol/rhi/metal/RenderTargetMTL.mm index 436837184261..fc242c1e8a85 100644 --- a/axmol/rhi/metal/RenderTargetMTL.mm +++ b/axmol/rhi/metal/RenderTargetMTL.mm @@ -1,7 +1,7 @@ #include "axmol/rhi/metal/RenderTargetMTL.h" #include "axmol/rhi/metal/UtilsMTL.h" #include "axmol/rhi/metal/TextureMTL.h" -#include "axmol/rhi/metal/CommandBufferMTL.h" +#include "axmol/rhi/metal/RenderContextMTL.h" namespace ax::rhi::mtl { @@ -91,7 +91,7 @@ static MTLStoreAction getStoreAction(const RenderPassDesc& params, TargetBufferF RenderTargetImpl::Attachment RenderTargetImpl::getColorAttachment(int index) const { if (isDefaultRenderTarget() && index == 0) - return {CommandBufferImpl::getCurrentDrawable().texture, 0}; + return {RenderContextImpl::getCurrentDrawable().texture, 0}; auto& rb = this->_color[index]; return RenderTargetImpl::Attachment{ static_cast(rb) ? static_cast(rb.texture)->internalHandle() : nil, rb.level}; diff --git a/axmol/rhi/metal/ShaderModuleMTL.mm b/axmol/rhi/metal/ShaderModuleMTL.mm index 426c55a115b3..60c3781af36a 100644 --- a/axmol/rhi/metal/ShaderModuleMTL.mm +++ b/axmol/rhi/metal/ShaderModuleMTL.mm @@ -127,7 +127,7 @@ of this software and associated documentation files (the "Software"), to deal refl.num_storage_buffers = ibs.read(); // skip infos we don't need - ibs.advance(sizeof(sc_chunk_refl) - offsetof(sc_chunk_refl, flatten_ubos)); + ibs.advance(sizeof(sc_chunk_refl) - offsetof(sc_chunk_refl, flatten_ubo)); SLCReflectContext context{&refl, &ibs}; @@ -245,17 +245,19 @@ of this software and associated documentation files (the "Software"), to deal void ShaderModuleImpl::reflectSamplers(SLCReflectContext* context) { + constexpr auto skip_fields_bytes = static_cast(sizeof(sc_refl_texture::image_dim) + sizeof(uint8_t)); + const auto samplerCount = context->refl->num_textures; + if (samplerCount <= 0) + return; auto ibs = context->ibs; for (int i = 0; i < context->refl->num_textures; ++i) { + UniformInfo uniform{}; std::string_view name = _sc_read_name(ibs); - auto binding = ibs->read(); - - ibs->advance(sizeof(sc_refl_texture) - offsetof(sc_refl_texture, image_dim)); + uniform.location = ibs->read(); // sampler binding index + ibs->advance(skip_fields_bytes); + uniform.count = (std::max)(1, static_cast(ibs->read())); - UniformInfo uniform; - uniform.location = binding; - uniform.bufferOffset = -1; _activeUniformInfos[name] = uniform; } } diff --git a/axmol/rhi/opengl/BufferGL.cpp b/axmol/rhi/opengl/BufferGL.cpp index b059132fdc84..f94c9b4f288f 100644 --- a/axmol/rhi/opengl/BufferGL.cpp +++ b/axmol/rhi/opengl/BufferGL.cpp @@ -49,10 +49,14 @@ GLenum toGLUsage(const BufferUsage& usage) } } // namespace -BufferImpl::BufferImpl(std::size_t size, BufferType type, BufferUsage usage) : Buffer(size, type, usage) +BufferImpl::BufferImpl(std::size_t size, BufferType type, BufferUsage usage, const void* initial) + : Buffer(size, type, usage) { glGenBuffers(1, &_buffer); + if (initial) + updateData(initial, size); + #if AX_ENABLE_CONTEXT_LOSS_RECOVERY _backToForegroundListener = EventListenerCustom::create(EVENT_RENDERER_RECREATED, [this](EventCustom*) { this->reloadBuffer(); }); diff --git a/axmol/rhi/opengl/BufferGL.h b/axmol/rhi/opengl/BufferGL.h index c3a79a1c3012..b07924b9901b 100644 --- a/axmol/rhi/opengl/BufferGL.h +++ b/axmol/rhi/opengl/BufferGL.h @@ -50,7 +50,7 @@ class BufferImpl : public Buffer * @param usage Specifies the expected usage pattern of the data store. The symbolic constant must be * BufferUsage::STATIC, BufferUsage::DYNAMIC. */ - BufferImpl(std::size_t size, BufferType type, BufferUsage usage); + BufferImpl(std::size_t size, BufferType type, BufferUsage usage, const void* initial); ~BufferImpl(); /** diff --git a/axmol/rhi/opengl/DriverGL.cpp b/axmol/rhi/opengl/DriverGL.cpp index 91d1bb62bd18..79fbd2a0643d 100644 --- a/axmol/rhi/opengl/DriverGL.cpp +++ b/axmol/rhi/opengl/DriverGL.cpp @@ -27,7 +27,7 @@ #include "axmol/rhi/opengl/RenderPipelineGL.h" #include "axmol/rhi/opengl/BufferGL.h" #include "axmol/rhi/opengl/ShaderModuleGL.h" -#include "axmol/rhi/opengl/CommandBufferGL.h" +#include "axmol/rhi/opengl/RenderContextGL.h" #include "axmol/rhi/opengl/TextureGL.h" #include "axmol/rhi/opengl/DepthStencilStateGL.h" #include "axmol/rhi/opengl/ProgramGL.h" @@ -132,9 +132,9 @@ DriverImpl::DriverImpl() } // caps - glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &_maxAttributes); - glGetIntegerv(GL_MAX_TEXTURE_SIZE, &_maxTextureSize); - glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &_maxTextureUnits); + glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &_caps.maxAttributes); + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &_caps.maxTextureSize); + glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &_caps.maxTextureUnits); // exts GL_EnumAllExtensions([this](const std::string_view& ext) { @@ -191,14 +191,14 @@ GLint DriverImpl::getDefaultFBO() const return _defaultFBO; } -CommandBuffer* DriverImpl::createCommandBuffer(void*) +RenderContext* DriverImpl::createRenderContext(void*) { - return new CommandBufferImpl(); + return new RenderContextImpl(); } -Buffer* DriverImpl::createBuffer(std::size_t size, BufferType type, BufferUsage usage) +Buffer* DriverImpl::createBuffer(std::size_t size, BufferType type, BufferUsage usage, const void* initial) { - return new BufferImpl(size, type, usage); + return new BufferImpl(size, type, usage, initial); } Texture* DriverImpl::createTexture(const TextureDesc& desc) diff --git a/axmol/rhi/opengl/DriverGL.h b/axmol/rhi/opengl/DriverGL.h index 54184ac8c05e..318f2908d8d6 100644 --- a/axmol/rhi/opengl/DriverGL.h +++ b/axmol/rhi/opengl/DriverGL.h @@ -64,10 +64,10 @@ class DriverImpl : public DriverBase GLuint getSharedVAO() const { return _sharedVAO; } /** - * Create a CommandBuffer object, not auto released. - * @return A CommandBuffer object. + * Create a RenderContext object, not auto released. + * @return A RenderContext object. */ - CommandBuffer* createCommandBuffer(void*) override; + RenderContext* createRenderContext(void*) override; /** * New a Buffer object, not auto released. @@ -78,7 +78,7 @@ class DriverImpl : public DriverBase * BufferUsage::STATIC, BufferUsage::DYNAMIC. * @return A Buffer object. */ - Buffer* createBuffer(std::size_t size, BufferType type, BufferUsage usage) override; + Buffer* createBuffer(std::size_t size, BufferType type, BufferUsage usage, const void* initial) override; /** * New a Texture object, not auto released. diff --git a/axmol/rhi/opengl/ProgramGL.cpp b/axmol/rhi/opengl/ProgramGL.cpp index f23dc79bfa69..dd2971913de7 100644 --- a/axmol/rhi/opengl/ProgramGL.cpp +++ b/axmol/rhi/opengl/ProgramGL.cpp @@ -272,12 +272,12 @@ void ProgramImpl::reflectUniformInfos() /* * construct _activeUniformInfos: uniformName-->UniformInfo */ - UniformInfo uniform; GLint nameLen = 0; GLint numOfUniforms = 0; glGetProgramiv(_program, GL_ACTIVE_UNIFORMS, &numOfUniforms); for (GLint i = 0; i < numOfUniforms; ++i) { + UniformInfo uniform{}; buffer.resize(MAX_UNIFORM_NAME_LENGTH + 1); glGetActiveUniform(_program, i, static_cast(buffer.size()), &nameLen, &uniform.count, &uniform.type, buffer.data()); @@ -312,8 +312,7 @@ void ProgramImpl::reflectUniformInfos() { // must be samper: sampler2D, sampler2DArray, samplerCube assert(uniform.type == GL_SAMPLER_2D || uniform.type == GL_SAMPLER_CUBE || uniform.type == GL_SAMPLER_2D_ARRAY); - uniform.location = glGetUniformLocation(_program, uniformName.data()); - uniform.bufferOffset = -1; + uniform.location = glGetUniformLocation(_program, uniformName.data()); } _activeUniformInfos[uniformName] = uniform; diff --git a/axmol/rhi/opengl/CommandBufferGL.cpp b/axmol/rhi/opengl/RenderContextGL.cpp similarity index 87% rename from axmol/rhi/opengl/CommandBufferGL.cpp rename to axmol/rhi/opengl/RenderContextGL.cpp index 08244d9579d6..1362e629fb9e 100644 --- a/axmol/rhi/opengl/CommandBufferGL.cpp +++ b/axmol/rhi/opengl/RenderContextGL.cpp @@ -23,7 +23,7 @@ THE SOFTWARE. ****************************************************************************/ -#include "axmol/rhi/opengl/CommandBufferGL.h" +#include "axmol/rhi/opengl/RenderContextGL.h" #include "axmol/rhi/opengl/BufferGL.h" #include "axmol/rhi/opengl/RenderPipelineGL.h" #include "axmol/rhi/opengl/TextureGL.h" @@ -49,21 +49,21 @@ namespace ax::rhi::gl # define AX_HAVE_MAP_BUFFER_RANGE 0 #endif -CommandBufferImpl::CommandBufferImpl() {} +RenderContextImpl::RenderContextImpl() {} -CommandBufferImpl::~CommandBufferImpl() +RenderContextImpl::~RenderContextImpl() { cleanResources(); } -bool CommandBufferImpl::beginFrame() +bool RenderContextImpl::beginFrame() { return true; } -void CommandBufferImpl::beginRenderPass(const RenderTarget* rt, const RenderPassDesc& descriptor) +void RenderContextImpl::beginRenderPass(RenderTarget* rt, const RenderPassDesc& descriptor) { - auto rtGL = static_cast(rt); + auto rtGL = static_cast(rt); rtGL->bindFrameBuffer(); rtGL->update(); @@ -127,12 +127,12 @@ void CommandBufferImpl::beginRenderPass(const RenderTarget* rt, const RenderPass CHECK_GL_ERROR_DEBUG(); } -void CommandBufferImpl::setDepthStencilState(DepthStencilState* depthStencilState) +void RenderContextImpl::setDepthStencilState(DepthStencilState* depthStencilState) { _depthStencilStateImpl = static_cast(depthStencilState); } -void CommandBufferImpl::setRenderPipeline(RenderPipeline* renderPipeline) +void RenderContextImpl::setRenderPipeline(RenderPipeline* renderPipeline) { _renderPipeline = static_cast(renderPipeline); } @@ -141,7 +141,7 @@ void CommandBufferImpl::setRenderPipeline(RenderPipeline* renderPipeline) * Update depthStencil status, improvment: for metal backend cache it * @param depthStencilState Specifies the depth and stencil status */ -void CommandBufferImpl::updateDepthStencilState(const DepthStencilDesc& desc) +void RenderContextImpl::updateDepthStencilState(const DepthStencilDesc& desc) { _depthStencilStateImpl->update(desc); } @@ -150,29 +150,29 @@ void CommandBufferImpl::updateDepthStencilState(const DepthStencilDesc& desc) * Update render pipeline status * @param depthStencilState Specifies the depth and stencil status */ -void CommandBufferImpl::updatePipelineState(const RenderTarget* rt, const PipelineDesc& desc) +void RenderContextImpl::updatePipelineState(const RenderTarget* rt, const PipelineDesc& desc) { - CommandBuffer::updatePipelineState(rt, desc); + RenderContext::updatePipelineState(rt, desc); _renderPipeline->update(rt, desc); } -void CommandBufferImpl::setViewport(int x, int y, unsigned int w, unsigned int h) +void RenderContextImpl::setViewport(int x, int y, unsigned int w, unsigned int h) { __state->viewport(_viewport.set(x, y, w, h)); } -void CommandBufferImpl::setCullMode(CullMode mode) +void RenderContextImpl::setCullMode(CullMode mode) { _cullMode = mode; } -void CommandBufferImpl::setWinding(Winding winding) +void RenderContextImpl::setWinding(Winding winding) { __state->winding(UtilsGL::toGLFrontFace(winding)); } -void CommandBufferImpl::setVertexBuffer(Buffer* buffer) +void RenderContextImpl::setVertexBuffer(Buffer* buffer) { assert(buffer != nullptr); if (buffer == nullptr || _vertexBuffer == buffer) @@ -183,7 +183,7 @@ void CommandBufferImpl::setVertexBuffer(Buffer* buffer) _vertexBuffer = static_cast(buffer); } -void CommandBufferImpl::setIndexBuffer(Buffer* buffer) +void RenderContextImpl::setIndexBuffer(Buffer* buffer) { assert(buffer != nullptr); if (buffer == nullptr || _indexBuffer == buffer) @@ -194,7 +194,7 @@ void CommandBufferImpl::setIndexBuffer(Buffer* buffer) _indexBuffer = static_cast(buffer); } -void CommandBufferImpl::setInstanceBuffer(Buffer* buffer) +void RenderContextImpl::setInstanceBuffer(Buffer* buffer) { assert(buffer != nullptr); if (buffer == nullptr || _instanceBuffer == buffer) @@ -205,7 +205,7 @@ void CommandBufferImpl::setInstanceBuffer(Buffer* buffer) _instanceBuffer = static_cast(buffer); } -void CommandBufferImpl::drawArrays(PrimitiveType primitiveType, std::size_t start, std::size_t count, bool wireframe) +void RenderContextImpl::drawArrays(PrimitiveType primitiveType, std::size_t start, std::size_t count, bool wireframe) { prepareDrawing(); #if !AX_GLES_PROFILE // glPolygonMode is only supported in Desktop OpenGL @@ -223,7 +223,7 @@ void CommandBufferImpl::drawArrays(PrimitiveType primitiveType, std::size_t star cleanResources(); } -void CommandBufferImpl::drawArraysInstanced(PrimitiveType primitiveType, +void RenderContextImpl::drawArraysInstanced(PrimitiveType primitiveType, std::size_t start, std::size_t count, int instanceCount, @@ -245,7 +245,7 @@ void CommandBufferImpl::drawArraysInstanced(PrimitiveType primitiveType, cleanResources(); } -void CommandBufferImpl::drawElements(PrimitiveType primitiveType, +void RenderContextImpl::drawElements(PrimitiveType primitiveType, IndexFormat indexType, std::size_t count, std::size_t offset, @@ -270,7 +270,7 @@ void CommandBufferImpl::drawElements(PrimitiveType primitiveType, cleanResources(); } -void CommandBufferImpl::drawElementsInstanced(PrimitiveType primitiveType, +void RenderContextImpl::drawElementsInstanced(PrimitiveType primitiveType, IndexFormat indexType, std::size_t count, std::size_t offset, @@ -296,16 +296,16 @@ void CommandBufferImpl::drawElementsInstanced(PrimitiveType primitiveType, cleanResources(); } -void CommandBufferImpl::endRenderPass() +void RenderContextImpl::endRenderPass() { AX_SAFE_RELEASE_NULL(_indexBuffer); AX_SAFE_RELEASE_NULL(_vertexBuffer); AX_SAFE_RELEASE_NULL(_instanceBuffer); } -void CommandBufferImpl::endFrame() {} +void RenderContextImpl::endFrame() {} -void CommandBufferImpl::prepareDrawing() const +void RenderContextImpl::prepareDrawing() const { const auto& program = _renderPipeline->getProgram(); __state->useProgram(program->internalHandle()); @@ -330,7 +330,7 @@ void CommandBufferImpl::prepareDrawing() const __state->disableCullFace(); } -void CommandBufferImpl::bindVertexBuffer(uint32_t& usedBits) const +void RenderContextImpl::bindVertexBuffer(uint32_t& usedBits) const { assert(_vertexLayout); @@ -338,7 +338,7 @@ void CommandBufferImpl::bindVertexBuffer(uint32_t& usedBits) const vl->apply(_vertexBuffer, _instanceBuffer, usedBits); } -void CommandBufferImpl::bindUniforms(ProgramImpl* program) const +void RenderContextImpl::bindUniforms(ProgramImpl* program) const { if (_programState) { @@ -379,13 +379,13 @@ void CommandBufferImpl::bindUniforms(ProgramImpl* program) const } } -void CommandBufferImpl::cleanResources() +void RenderContextImpl::cleanResources() { _programState = nullptr; _vertexLayout = nullptr; } -void CommandBufferImpl::setScissorRect(bool isEnabled, float x, float y, float width, float height) +void RenderContextImpl::setScissorRect(bool isEnabled, float x, float y, float width, float height) { if (isEnabled) __state->enableScissor(x, y, width, height); @@ -393,12 +393,15 @@ void CommandBufferImpl::setScissorRect(bool isEnabled, float x, float y, float w __state->disableScissor(); } -void CommandBufferImpl::readPixels(RenderTarget* rt, std::function callback) +void RenderContextImpl::readPixels(RenderTarget* rt, + bool preserveAxisHint, + std::function callback) { PixelBufferDesc pbd; if (rt->isDefaultRenderTarget()) { // read pixels from screen - readPixels(rt, _viewport.x, _viewport.y, _viewport.width, _viewport.height, _viewport.width * 4, false, pbd); + readPixels(rt, _viewport.x, _viewport.y, _viewport.width, _viewport.height, _viewport.width * 4, + preserveAxisHint, pbd); } else { @@ -407,19 +410,19 @@ void CommandBufferImpl::readPixels(RenderTarget* rt, std::functiongetWidth(), colorAttachment->getHeight(), - colorAttachment->getWidth() * 4, false, pbd); + colorAttachment->getWidth() * 4, preserveAxisHint, pbd); } } callback(pbd); } -void CommandBufferImpl::readPixels(RenderTarget* rt, +void RenderContextImpl::readPixels(RenderTarget* rt, int x, int y, uint32_t width, uint32_t height, uint32_t bytesPerRow, - bool eglCacheHint, + bool preserveAxisHint, PixelBufferDesc& pbd) { auto rtGL = static_cast(rt); @@ -444,7 +447,7 @@ void CommandBufferImpl::readPixels(RenderTarget* rt, if (buffer_ptr) { - if (!eglCacheHint) + if (!preserveAxisHint) { // we need to flip the buffer vertically to match our API uint8_t* wptr = pbd._data.resize(bufferSize); diff --git a/axmol/rhi/opengl/CommandBufferGL.h b/axmol/rhi/opengl/RenderContextGL.h similarity index 94% rename from axmol/rhi/opengl/CommandBufferGL.h rename to axmol/rhi/opengl/RenderContextGL.h index b004e84dd00f..06908d6ac4a7 100644 --- a/axmol/rhi/opengl/CommandBufferGL.h +++ b/axmol/rhi/opengl/RenderContextGL.h @@ -26,7 +26,7 @@ #pragma once #include "axmol/rhi/RHITypes.h" -#include "axmol/rhi/CommandBuffer.h" +#include "axmol/rhi/RenderContext.h" #include "axmol/base/EventListenerCustom.h" #include "axmol/platform/GL.h" @@ -51,11 +51,11 @@ class DepthStencilStateImpl; * @brief Store encoded commands for the GPU to execute. * A command buffer stores encoded commands until the buffer is committed for execution by the GPU */ -class CommandBufferImpl : public CommandBuffer +class RenderContextImpl : public RenderContext { public: - CommandBufferImpl(); - ~CommandBufferImpl(); + RenderContextImpl(); + ~RenderContextImpl(); /** * Set depthStencil status once * @param depthStencilState Specifies the depth and stencil status @@ -79,7 +79,7 @@ class CommandBufferImpl : public CommandBuffer * Begin a render pass, initial color, depth and stencil attachment. * @param descriptor Specifies a group of render targets that hold the results of a render pass. */ - void beginRenderPass(const RenderTarget* rt, const RenderPassDesc& descriptor) override; + void beginRenderPass(RenderTarget* rt, const RenderPassDesc& descriptor) override; /** * Update depthStencil status, improvment: for metal backend cache it @@ -199,22 +199,17 @@ class CommandBufferImpl : public CommandBuffer */ void setScissorRect(bool isEnabled, float x, float y, float width, float height) override; - /** - * Get a screen snapshot - * @param callback A callback to deal with screen snapshot image. - */ - void readPixels(RenderTarget* rt, std::function callback) override; + void readPixels(RenderTarget* rt, + bool preserveAxisHint, + std::function callback) override; - /** - * For internal use only - */ void readPixels(RenderTarget* rt, int x, int y, uint32_t width, uint32_t height, uint32_t bytesPerRow, - bool eglCacheHint, + bool preserveAxisHint, PixelBufferDesc& pbd); protected: diff --git a/axmol/rhi/vulkan/BufferVK.cpp b/axmol/rhi/vulkan/BufferVK.cpp new file mode 100644 index 000000000000..7e5bcdfd9d9d --- /dev/null +++ b/axmol/rhi/vulkan/BufferVK.cpp @@ -0,0 +1,232 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#include "axmol/rhi/vulkan/BufferVK.h" +#include "axmol/rhi/vulkan/DriverVK.h" + +namespace ax::rhi::vk +{ + +// BufferUsage -> VkBufferUsageFlags / VkMemoryPropertyFlags +static void translateUsage(BufferUsage in, VkBufferUsageFlags& outUsage, VkMemoryPropertyFlags& outMemProps) +{ + switch (in) + { + case BufferUsage::DYNAMIC: // GPU read, CPU write + outUsage = + VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; + outMemProps = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; + break; + + case BufferUsage::STATIC: // GPU read/write, updated via staging + outUsage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | + VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; + outMemProps = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; + break; + + case BufferUsage::IMMUTABLE: // GPU read, must provide initial data + outUsage = + VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; + outMemProps = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; + break; + } +} + +// BufferType -> VkBufferUsageFlags +static VkBufferUsageFlags translateBindFlag(BufferType t) +{ + switch (t) + { + case BufferType::VERTEX: + return VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; + + case BufferType::INDEX: + return VK_BUFFER_USAGE_INDEX_BUFFER_BIT; + + case BufferType::UNIFORM: + return VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; + + case BufferType::PIXEL_PACK_BUFFER: + // read backbuffer,map as staging or copy target + return VK_BUFFER_USAGE_TRANSFER_DST_BIT; + + default: + AXLOGW("Unknown BufferType: {}", static_cast(t)); + return 0; + } +} + +static inline std::size_t alignTo(std::size_t value, std::size_t alignment) +{ + return (value + alignment - 1) & ~(alignment - 1); +} + +/* -------------------------------------------------- ctor */ +BufferImpl::BufferImpl(DriverImpl* driver, std::size_t size, BufferType type, BufferUsage usage, const void* initial) + : Buffer(size, type, usage), _driver(driver) +{ + translateUsage(usage, _usageFlags, _memoryProperties); + _usageFlags |= translateBindFlag(type); + + _capacity = (type == BufferType::UNIFORM) ? alignTo(size, 16) : size; + + if (initial && size) + _defaultData.assign(static_cast(initial), static_cast(initial) + size); + + if (usage != BufferUsage::IMMUTABLE || initial) + createNativeBuffer(initial); +} + +BufferImpl::~BufferImpl() +{ + if (_buffer != VK_NULL_HANDLE) + _driver->queueDisposal(_buffer); + if (_memory != VK_NULL_HANDLE) + _driver->queueDisposal(_memory); +} + +/* -------------------------------------------------- createNativeBuffer */ +void BufferImpl::createNativeBuffer(const void* initial) +{ + VkBufferCreateInfo bufferInfo{}; + bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; + bufferInfo.size = _capacity; + bufferInfo.usage = _usageFlags; + bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + + auto device = _driver->getDevice(); + if (vkCreateBuffer(device, &bufferInfo, nullptr, &_buffer) != VK_SUCCESS) + { + AXLOGE("Failed to create VkBuffer, size={}, alignedSize={}", _size, _capacity); + assert(false && "Failed to create VkBuffer"); + } + + VkMemoryRequirements memReq; + vkGetBufferMemoryRequirements(device, _buffer, &memReq); + + VkMemoryAllocateInfo allocInfo{}; + allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + allocInfo.allocationSize = memReq.size; + allocInfo.memoryTypeIndex = _driver->findMemoryType(memReq.memoryTypeBits, _memoryProperties); + + if (vkAllocateMemory(device, &allocInfo, nullptr, &_memory) != VK_SUCCESS) + { + AXLOGE("Failed to allocate VkDeviceMemory"); + assert(false && "Failed to allocate VkDeviceMemory"); + } + + vkBindBufferMemory(device, _buffer, _memory, 0); + + if (initial) + updateData(initial, _capacity); +} + +/* -------------------------------------------------- updateData */ +void BufferImpl::updateData(const void* data, std::size_t size) +{ + assert(size <= _size); + assert(data); + + updateSubData(data, 0, size); +} + +/* -------------------------------------------------- updateSubData */ +void BufferImpl::updateSubData(const void* data, std::size_t offset, std::size_t size) +{ + assert(data && (offset + size <= _size)); + + auto device = _driver->getDevice(); + + if (_memoryProperties & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) + { + // Host visible memory: directly map and copy + void* mapped = nullptr; + vkMapMemory(device, _memory, offset, size, 0, &mapped); + std::memcpy(static_cast(mapped), data, size); + vkUnmapMemory(device, _memory); + } + else + { + // Device local memory: use staging buffer + isolate commands + VkBuffer stagingBuf; + VkDeviceMemory stagingMem; + + // Create staging buffer + VkBufferCreateInfo bufInfo{VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO}; + bufInfo.size = size; + bufInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; + bufInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + vkCreateBuffer(device, &bufInfo, nullptr, &stagingBuf); + + // Allocate staging memory (host visible + coherent) + VkMemoryRequirements memReq{}; + vkGetBufferMemoryRequirements(device, stagingBuf, &memReq); + VkMemoryAllocateInfo allocInfo{VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO}; + allocInfo.allocationSize = memReq.size; + allocInfo.memoryTypeIndex = _driver->findMemoryType( + memReq.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + vkAllocateMemory(device, &allocInfo, nullptr, &stagingMem); + vkBindBufferMemory(device, stagingBuf, stagingMem, 0); + + // Map staging memory and copy data + void* mapped = nullptr; + vkMapMemory(device, stagingMem, 0, size, 0, &mapped); + std::memcpy(mapped, data, size); + vkUnmapMemory(device, stagingMem); + + // Record copy command + auto submission = _driver->startIsolateSubmission(); + VkBufferCopy copyRegion{}; + copyRegion.srcOffset = 0; + copyRegion.dstOffset = offset; + copyRegion.size = size; + vkCmdCopyBuffer(submission.cmd, stagingBuf, _buffer, 1, ©Region); + _driver->finishIsolateSubmission(submission); + + // Destroy staging resources + vkDestroyBuffer(device, stagingBuf, nullptr); + vkFreeMemory(device, stagingMem, nullptr); + } + + // Update default stored data + if (_needDefaultStoredData) + { + if (_defaultData.size() < offset + size) + _defaultData.resize(offset + size); + std::memcpy(_defaultData.data() + offset, data, size); + } +} + +/* -------------------------------------------------- usingDefaultStoredData */ +void BufferImpl::usingDefaultStoredData(bool needDefaultStoredData) +{ + _needDefaultStoredData = needDefaultStoredData; + + if (needDefaultStoredData && !_defaultData.empty()) + { + // restore to default, write to GPU immediately + updateData(_defaultData.data(), _defaultData.size()); + } +} + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/BufferVK.h b/axmol/rhi/vulkan/BufferVK.h new file mode 100644 index 000000000000..22cbf992d211 --- /dev/null +++ b/axmol/rhi/vulkan/BufferVK.h @@ -0,0 +1,87 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include +#include +#include + +#include "axmol/rhi/Buffer.h" +#include "axmol/tlx/byte_buffer.hpp" + +namespace ax::rhi::vk +{ + +class DriverImpl; + +/** + * @addtogroup _vk + * @{ + */ + +/** + * @brief A Vulkan-based Buffer implementation + * + */ +class BufferImpl final : public Buffer +{ +public: + /** + * @param device Vulkan logical device + * @param physical Vulkan physical device (for memory properties) + * @param size request size of buffer + * @param type BufferType::VERTEX or BufferType::INDEX + * @param usage BufferUsage::STATIC / DYNAMIC / STREAM + * @param initial initial data + */ + BufferImpl(DriverImpl*, std::size_t size, BufferType type, BufferUsage usage, const void* initial); + + ~BufferImpl(); + + void updateData(const void* data, std::size_t size) override; + void updateSubData(const void* data, std::size_t offset, std::size_t size) override; + void usingDefaultStoredData(bool needDefaultStoredData) override; + + VkBuffer internalHandle() const noexcept { return _buffer; } + VkBufferUsageFlags getUsageFlags() const noexcept { return _usageFlags; } + +private: + void createNativeBuffer(const void* initial); + + size_t _capacity{0}; + + axstd::byte_buffer _defaultData; + bool _needDefaultStoredData = false; + + DriverImpl* _driver{nullptr}; + VkBuffer _buffer{VK_NULL_HANDLE}; + VkDeviceMemory _memory{VK_NULL_HANDLE}; + + VkBufferUsageFlags _usageFlags{VK_BUFFER_USAGE_VERTEX_BUFFER_BIT}; + VkMemoryPropertyFlags _memoryProperties{VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT}; +}; + +/** @} */ + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/DepthStencilStateVK.cpp b/axmol/rhi/vulkan/DepthStencilStateVK.cpp new file mode 100644 index 000000000000..07d652adeb40 --- /dev/null +++ b/axmol/rhi/vulkan/DepthStencilStateVK.cpp @@ -0,0 +1,134 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#include "axmol/rhi/vulkan/DepthStencilStateVK.h" +#include "axmol/tlx/hash.hpp" +#include + +namespace ax::rhi::vk +{ +namespace +{ +// Convert CompareFunc to VkCompareOp +static VkCompareOp to_vk(CompareFunc func) +{ + switch (func) + { + case CompareFunc::NEVER: + return VK_COMPARE_OP_NEVER; + case CompareFunc::LESS: + return VK_COMPARE_OP_LESS; + case CompareFunc::LESS_EQUAL: + return VK_COMPARE_OP_LESS_OR_EQUAL; + case CompareFunc::GREATER: + return VK_COMPARE_OP_GREATER; + case CompareFunc::GREATER_EQUAL: + return VK_COMPARE_OP_GREATER_OR_EQUAL; + case CompareFunc::EQUAL: + return VK_COMPARE_OP_EQUAL; + case CompareFunc::NOT_EQUAL: + return VK_COMPARE_OP_NOT_EQUAL; + case CompareFunc::ALWAYS: + return VK_COMPARE_OP_ALWAYS; + default: + return VK_COMPARE_OP_LESS_OR_EQUAL; + } +} + +// Convert StencilOp to VkStencilOp +static VkStencilOp to_vk(StencilOp op) +{ + switch (op) + { + case StencilOp::KEEP: + return VK_STENCIL_OP_KEEP; + case StencilOp::ZERO: + return VK_STENCIL_OP_ZERO; + case StencilOp::REPLACE: + return VK_STENCIL_OP_REPLACE; + case StencilOp::INVERT: + return VK_STENCIL_OP_INVERT; + case StencilOp::INCREMENT_WRAP: + return VK_STENCIL_OP_INCREMENT_AND_WRAP; + case StencilOp::DECREMENT_WRAP: + return VK_STENCIL_OP_DECREMENT_AND_WRAP; + default: + return VK_STENCIL_OP_KEEP; + } +} + +static VkStencilOpState make_op_state(const StencilDesc& s) +{ + VkStencilOpState st{}; + st.failOp = to_vk(s.stencilFailureOp); + st.passOp = to_vk(s.depthStencilPassOp); + st.depthFailOp = to_vk(s.depthFailureOp); + st.compareOp = to_vk(s.stencilCompareFunc); + st.compareMask = s.readMask; + st.writeMask = s.writeMask; + st.reference = 0; // reference value set at draw time + return st; +} +} // namespace + +DepthStencilStateImpl::DepthStencilStateImpl() +{ + _hash = axstd::hash_bytes(&_dsDesc, sizeof(_dsDesc)); + + // Disabled state + _disableInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; + _disableInfo.depthTestEnable = VK_FALSE; + _disableInfo.depthWriteEnable = VK_FALSE; + _disableInfo.depthCompareOp = VK_COMPARE_OP_ALWAYS; + _disableInfo.stencilTestEnable = VK_FALSE; + + _activeInfo = _disableInfo; +} + +void DepthStencilStateImpl::update(const DepthStencilDesc& desc) +{ + DepthStencilState::update(desc); + + _hash = axstd::hash_bytes(&_dsDesc, sizeof(_dsDesc)); + + if (!isEnabled()) + { + _activeInfo = _disableInfo; + return; + } + + VkPipelineDepthStencilStateCreateInfo info{}; + info.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; + + info.depthTestEnable = bitmask::any(desc.flags, DepthStencilFlags::DEPTH_TEST) ? VK_TRUE : VK_FALSE; + info.depthWriteEnable = bitmask::any(desc.flags, DepthStencilFlags::DEPTH_WRITE) ? VK_TRUE : VK_FALSE; + info.depthCompareOp = to_vk(desc.depthCompareFunc); + + info.stencilTestEnable = bitmask::any(desc.flags, DepthStencilFlags::STENCIL_TEST) ? VK_TRUE : VK_FALSE; + info.front = make_op_state(desc.frontFaceStencil); + info.back = make_op_state(desc.backFaceStencil); + + _activeInfo = info; +} + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/DepthStencilStateVK.h b/axmol/rhi/vulkan/DepthStencilStateVK.h new file mode 100644 index 000000000000..041719ac843c --- /dev/null +++ b/axmol/rhi/vulkan/DepthStencilStateVK.h @@ -0,0 +1,55 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once +#include "axmol/rhi/DepthStencilState.h" +#include +#include + +namespace ax::rhi::vk +{ +/** + * @brief A Vulkan-based DepthStencilState implementation + */ +class DepthStencilStateImpl : public DepthStencilState +{ +public: + DepthStencilStateImpl(); + + void update(const DepthStencilDesc& desc) override; + + uintptr_t getHash() const { return _hash; } + + // Return the Vulkan depth-stencil state create info + const VkPipelineDepthStencilStateCreateInfo& getVkDepthStencilState() const { return _activeInfo; } + +private: + VkDevice _device{VK_NULL_HANDLE}; + + uintptr_t _hash{0}; + + VkPipelineDepthStencilStateCreateInfo _activeInfo{}; + VkPipelineDepthStencilStateCreateInfo _disableInfo{}; +}; + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/DriverVK.cpp b/axmol/rhi/vulkan/DriverVK.cpp new file mode 100644 index 000000000000..499938db52b1 --- /dev/null +++ b/axmol/rhi/vulkan/DriverVK.cpp @@ -0,0 +1,946 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#include "axmol/rhi/vulkan/DriverVK.h" +#include "axmol/rhi/vulkan/RenderContextVK.h" +#include "axmol/rhi/vulkan/BufferVK.h" +#include "axmol/rhi/vulkan/TextureVK.h" +#include "axmol/rhi/vulkan/ProgramVK.h" +#include "axmol/rhi/vulkan/ShaderModuleVK.h" +#include "axmol/rhi/vulkan/RenderTargetVK.h" +#include "axmol/rhi/vulkan/RenderPipelineVK.h" +#include "axmol/rhi/vulkan/DepthStencilStateVK.h" +#include "axmol/rhi/vulkan/VertexLayoutVK.h" +#include "axmol/rhi/RHITypes.h" + +#include "axmol/base/Logging.h" + +#include +#include +#include + +namespace ax::rhi +{ +DriverBase* DriverBase::getInstance() +{ + if (!_instance) + { + _instance = new vk::DriverImpl(); + static_cast(_instance)->init(); + } + + return _instance; +} + +void DriverBase::destroyInstance() +{ + AX_SAFE_DELETE(_instance); +} +} // namespace ax::rhi + +namespace ax::rhi::vk +{ + +namespace +{ +static std::string vendorToString(uint32_t vendorId) +{ + // Common PCI vendor IDs; Vulkan doesn't standardize vendor strings + switch (vendorId) + { + case 0x10DE: + return "NVIDIA"; + case 0x8086: + return "Intel"; + case 0x1002: + return "AMD"; + case 0x13B5: + return "ARM"; + case 0x5143: + return "Qualcomm"; + case 0x106B: + return "Apple"; + case 0x144D: + return "Samsung"; + case 0x15AD: + return "VMware"; + case 0x1AE0: + return "Google"; + case 0x14E4: + return "Broadcom"; + default: + return "Unknown"; + } +} + +static bool isValidationLayerAvailable(const char* layerName) +{ + uint32_t layerCount = 0; + vkEnumerateInstanceLayerProperties(&layerCount, nullptr); + + std::vector availableLayers(layerCount); + vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.data()); + + for (const auto& layer : availableLayers) + { + if (strcmp(layer.layerName, layerName) == 0) + return true; + } + return false; +} + +static VKAPI_ATTR VkBool32 VKAPI_CALL vkDebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageType, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, + void* pUserData) +{ + const char* subTag = "vulkan"; + + if (messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) + { + AXLOGD("[{}] {}", subTag, pCallbackData->pMessage); + } + else if (messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) + { + AXLOGI("[{}] {}", subTag, pCallbackData->pMessage); + } + else if (messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) + { + AXLOGW("[{}] {}", subTag, pCallbackData->pMessage); + } + else if (messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) + { + AXLOGE("[{}] {}", subTag, pCallbackData->pMessage); + } + return VK_FALSE; +} + +static std::pair resolveAdapter(const axstd::pod_vector& devices, + VkInstance instance, + PowerPreference pref) +{ + VkPhysicalDevice bestDevice = VK_NULL_HANDLE; + uint32_t bestGraphicsQueueFamily = UINT32_MAX; + int bestScore = -1; + + for (auto index = 0; index < devices.size(); ++index) + { + auto pd = devices[index]; + VkPhysicalDeviceProperties props{}; + vkGetPhysicalDeviceProperties(pd, &props); + + uint32_t qCount = 0; + vkGetPhysicalDeviceQueueFamilyProperties(pd, &qCount, nullptr); + std::vector qprops(qCount); + vkGetPhysicalDeviceQueueFamilyProperties(pd, &qCount, qprops.data()); + + bool hasGraphicsQueue = false; + uint32_t graphicsQueueFamily = UINT32_MAX; + for (uint32_t i = 0; i < qCount; ++i) + { + if (qprops[i].queueCount > 0 && (qprops[i].queueFlags & VK_QUEUE_GRAPHICS_BIT)) + { + hasGraphicsQueue = true; + graphicsQueueFamily = i; + break; + } + } + if (!hasGraphicsQueue) + continue; // skip devices without graphics queue + + // --- Score device --- + int score = 0; + + // Power preference + switch (pref) + { + case PowerPreference::HighPerformance: + if (props.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) + { + score += 100; + // Prefer newer Vulkan versions + score += static_cast(props.apiVersion); + + // Prefer larger VRAM (optional) + VkPhysicalDeviceMemoryProperties memProps{}; + vkGetPhysicalDeviceMemoryProperties(pd, &memProps); + VkDeviceSize vram = 0; + for (uint32_t i = 0; i < memProps.memoryHeapCount; ++i) + { + if (memProps.memoryHeaps[i].flags & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) + vram += memProps.memoryHeaps[i].size; + } + score += static_cast(vram / (1024 * 1024 * 256)); // add points per 256MB + } + break; + case PowerPreference::LowPower: + if (props.deviceType == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) + score += 100; + break; + case PowerPreference::Auto: + score += (100 - index); + break; + } + + // --- Select best --- + if (score > bestScore) + { + bestScore = score; + bestDevice = pd; + bestGraphicsQueueFamily = graphicsQueueFamily; + } + } + + return {bestDevice, bestGraphicsQueueFamily}; +} + +// Helper: create a depth-stencil image as TextureImpl +TextureImpl* createDepthStencilAttachment(DriverImpl* driver, const VkExtent2D& extent) +{ + TextureDesc depthDesc{}; + depthDesc.textureType = TextureType::TEXTURE_2D; + depthDesc.width = static_cast(extent.width); + depthDesc.height = static_cast(extent.height); + depthDesc.arraySize = 1; + depthDesc.mipLevels = 1; + depthDesc.pixelFormat = PixelFormat::D24S8; + depthDesc.textureUsage = TextureUsage::RENDER_TARGET; + + auto tex = new TextureImpl(driver, depthDesc); + // init image, imageView + tex->updateData(nullptr, extent.width, extent.height, 0); + return tex; +} + +} // namespace + +DriverImpl::DriverImpl() {} +DriverImpl::~DriverImpl() +{ + cleanPendingResources(); + + if (_commandPool) + { + vkDestroyCommandPool(_device, _commandPool, nullptr); + _commandPool = VK_NULL_HANDLE; + } + + if (_surface) + vkDestroySurfaceKHR(_factory, _surface, nullptr); + if (_debugMessenger) + vkDestroyDebugUtilsMessengerEXT(_factory, _debugMessenger, nullptr); + if (_device) + vkDestroyDevice(_device, nullptr); + if (_factory) + vkDestroyInstance(_factory, nullptr); +} + +void DriverImpl::init() +{ + // Load basic Vulkan functions without instance/device + gladLoaderLoadVulkan(nullptr, nullptr, nullptr); + + initializeFactory(); + initializeDevice(); + + // Load remaining Vulkan functions with instance/device + gladLoaderLoadVulkan(_factory, _physical, _device); + + if (_debugCreateInfo.sType == VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) + { + if (vkCreateDebugUtilsMessengerEXT(_factory, &_debugCreateInfo, nullptr, &_debugMessenger) != VK_SUCCESS) + { + AXLOGW("Vulkan validation layer not available!"); + } + } + + // Query device properties and capabilities + VkPhysicalDeviceProperties props{}; + vkGetPhysicalDeviceProperties(_physical, &props); + + _vendor = vendorToString(props.vendorID); + _renderer = props.deviceName; + _version = fmt::format("Vulkan-{}.{}.{}", VK_VERSION_MAJOR(props.apiVersion), VK_VERSION_MINOR(props.apiVersion), + VK_VERSION_PATCH(props.apiVersion)); + _shaderVersion = "SPIR-V 1.x"; + + _caps.maxAttributes = static_cast(MAX_VERTEX_ATTRIBS); // pipeline-defined + _caps.maxTextureUnits = 32; // conservative default; descriptor count varies per layout + _caps.maxTextureSize = static_cast(props.limits.maxImageDimension2D); + _caps.maxSamplesAllowed = static_cast(props.limits.framebufferColorSampleCounts); +} + +void DriverImpl::initializeFactory() +{ + auto& contextAttrs = Application::getContextAttrs(); + + VkApplicationInfo appInfo{}; + appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + appInfo.pApplicationName = "Axmol"; + appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0); + appInfo.pEngineName = "Axmol3"; + appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0); + appInfo.apiVersion = VK_API_VERSION_1_3; // axmol requires vulkan-1.3 + + // Collect required extensions + axstd::pod_vector extensions; + extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME); + +#if AX_TARGET_PLATFORM == AX_PLATFORM_WIN32 + extensions.push_back("VK_KHR_win32_surface"); +#elif AX_TARGET_PLATFORM == AX_PLATFORM_ANDROID + extensions.push_back("VK_KHR_android_surface"); +#elif AX_TARGET_PLATFORM == AX_PLATFORM_LINUX + const char* waylandDisplay = getenv("WAYLAND_DISPLAY"); + const char* x11Display = getenv("DISPLAY"); + if (waylandDisplay) + extensions.push_back("VK_KHR_wayland_surface"); + else if (x11Display) + extensions.push_back("VK_KHR_xcb_surface"); + else + { + AXLOGE("Unsupported window platform: neither WAYLAND_DISPLAY nor DISPLAY found"); + assert(false); + } +#endif + + const auto shouldCreateDebugLayer = + contextAttrs.debugLayerEnabled && isValidationLayerAvailable("VK_LAYER_KHRONOS_validation"); + + if (shouldCreateDebugLayer) + extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + + VkInstanceCreateInfo createInfo{}; + createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + createInfo.pApplicationInfo = &appInfo; + createInfo.enabledExtensionCount = static_cast(extensions.size()); + createInfo.ppEnabledExtensionNames = extensions.data(); + + if (shouldCreateDebugLayer) + { + _debugCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; + _debugCreateInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + _debugCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; + _debugCreateInfo.pfnUserCallback = vkDebugCallback; + + const std::array validationLayers = {"VK_LAYER_KHRONOS_validation"}; + createInfo.enabledLayerCount = static_cast(validationLayers.size()); + createInfo.ppEnabledLayerNames = validationLayers.data(); + createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*)&_debugCreateInfo; + } + else + { + createInfo.enabledLayerCount = 0; + createInfo.pNext = nullptr; + } + + // Instance layers/extensions are platform-dependent; keep minimal for core init + VkResult vr = vkCreateInstance(&createInfo, nullptr, &_factory); + AXASSERT(vr == VK_SUCCESS && _factory != VK_NULL_HANDLE, "vkCreateInstance failed"); +} + +void DriverImpl::initializeDevice() +{ + auto& contextAttrs = Application::getContextAttrs(); + + // Select a physical device + uint32_t count = 0; + vkEnumeratePhysicalDevices(_factory, &count, nullptr); + AXASSERT(count > 0, "No Vulkan physical devices found"); + + axstd::pod_vector devices(count); + vkEnumeratePhysicalDevices(_factory, &count, devices.data()); + + auto [physical, graphicsQueueFamily] = resolveAdapter(devices, _factory, contextAttrs.powerPreference); + AXASSERT(physical != VK_NULL_HANDLE && graphicsQueueFamily != UINT32_MAX, "No available GPU"); + _physical = physical; + _graphicsQueueFamily = graphicsQueueFamily; + + // validate dynamicPrimitiveTopologyUnrestricted supported + // FIXME: if dynamicPrimitiveTopologyUnrestricted, fallback to baked InputAssemblyState? + VkPhysicalDeviceExtendedDynamicState3PropertiesEXT dynState3Props{ + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT}; + + VkPhysicalDeviceProperties2 props2{.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, + .pNext = &dynState3Props}; + + vkGetPhysicalDeviceProperties2(_physical, &props2); + AXLOGI("axmol: vulkan dynamicPrimitiveTopologyUnrestricted={}", + dynState3Props.dynamicPrimitiveTopologyUnrestricted); + + /* + * https://vulkan.lunarg.com/doc/view/1.4.328.1/windows/antora/spec/latest/chapters/drawing.html#VUID-vkCmdDraw-dynamicPrimitiveTopologyUnrestricted-07500 + */ + axstd::pod_vector deviceExtensions; + deviceExtensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME); + deviceExtensions.push_back(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); + + // enable extended dynamic state + VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extDynState{ + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT, + .extendedDynamicState = VK_TRUE}; + + VkPhysicalDeviceExtendedDynamicState2FeaturesEXT extDynState2{ + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, + .extendedDynamicState2 = VK_TRUE}; + + VkPhysicalDeviceExtendedDynamicState3FeaturesEXT extDynState3{ + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT}; + + // Chain features + if (dynState3Props.dynamicPrimitiveTopologyUnrestricted) + { + extDynState.pNext = &extDynState2; + extDynState2.pNext = &extDynState3; + deviceExtensions.push_back(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); + deviceExtensions.push_back(VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME); + } + + // queue create info + float priority = 1.0f; + VkDeviceQueueCreateInfo qinfo{}; + qinfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + qinfo.queueFamilyIndex = _graphicsQueueFamily; + qinfo.queueCount = 1; + qinfo.pQueuePriorities = &priority; + + VkDeviceCreateInfo dinfo{}; + dinfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; + dinfo.queueCreateInfoCount = 1; + dinfo.pQueueCreateInfos = &qinfo; + dinfo.pNext = &extDynState; + dinfo.enabledExtensionCount = deviceExtensions.size(); + dinfo.ppEnabledExtensionNames = deviceExtensions.data(); + + VkResult vr = vkCreateDevice(_physical, &dinfo, nullptr, &_device); + AXASSERT(vr == VK_SUCCESS && _device != VK_NULL_HANDLE, "vkCreateDevice failed"); + + vkGetDeviceQueue(_device, _graphicsQueueFamily, 0, &_graphicsQueue); + AXASSERT(_graphicsQueue != VK_NULL_HANDLE, "vkGetDeviceQueue graphics failed"); + + // create _transientCommandPool + VkCommandPoolCreateInfo poolInfo{}; + poolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; + poolInfo.queueFamilyIndex = _graphicsQueueFamily; + poolInfo.flags = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT | VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; + + vr = vkCreateCommandPool(_device, &poolInfo, nullptr, &_commandPool); + AXASSERT(vr == VK_SUCCESS && _commandPool != VK_NULL_HANDLE, "vkCreateCommandPool failed for transient pool"); +} + +bool DriverImpl::recreateSurface(const SurfaceCreateInfo& info) +{ + auto oldSurface = _surface; + auto result = info.createFunc(_factory, info.window, &_surface); + if (result != VK_SUCCESS) + return false; + + _surfaceInitalExtent.width = info.width; + _surfaceInitalExtent.height = info.height; + + uint32_t queueCount = 0; + vkGetPhysicalDeviceQueueFamilyProperties(_physical, &queueCount, nullptr); + std::vector qprops(queueCount); + vkGetPhysicalDeviceQueueFamilyProperties(_physical, &queueCount, qprops.data()); + + _presentQueueFamily = UINT32_MAX; + for (uint32_t i = 0; i < queueCount; ++i) + { + VkBool32 presentSupport = VK_FALSE; + vkGetPhysicalDeviceSurfaceSupportKHR(_physical, i, _surface, &presentSupport); + if (qprops[i].queueCount > 0 && presentSupport == VK_TRUE) + { + _presentQueueFamily = i; + break; + } + } + + AXASSERT(_presentQueueFamily != UINT32_MAX, "No present queue family found"); + + if (_presentQueueFamily == _graphicsQueueFamily) + { + _presentQueue = _graphicsQueue; + } + else + { + vkGetDeviceQueue(_device, _presentQueueFamily, 0, &_presentQueue); + AXASSERT(_presentQueue != VK_NULL_HANDLE, "vkGetDeviceQueue present failed"); + } + + if (oldSurface) + vkDestroySurfaceKHR(_factory, oldSurface, nullptr); + + return true; +} + +RenderContext* DriverImpl::createRenderContext(void* surfaceContext) +{ + // Swapchain management is out-of-scope here; pass VK_NULL_HANDLE for now + _lastRenderContext = new RenderContextImpl(this, static_cast(surfaceContext)); + return _lastRenderContext; +} + +Buffer* DriverImpl::createBuffer(std::size_t size, BufferType type, BufferUsage usage, const void* initial) +{ + return new BufferImpl(this, size, type, usage, initial); +} + +Texture* DriverImpl::createTexture(const TextureDesc& descriptor) +{ + return new TextureImpl(this, descriptor); +} + +RenderTarget* DriverImpl::createDefaultRenderTarget() +{ + // Default RT: will use swapchain image wrapped externally; here return an empty target + return new RenderTargetImpl(this, true); +} + +RenderTarget* DriverImpl::createRenderTarget(Texture* colorAttachment, Texture* depthStencilAttachment) +{ + auto rt = new RenderTargetImpl(this, false); + RenderTarget::ColorAttachment colors{{colorAttachment, 0}}; + rt->setColorAttachment(colors); + rt->setDepthStencilAttachment(depthStencilAttachment); + return rt; +} + +DepthStencilState* DriverImpl::createDepthStencilState() +{ + return new DepthStencilStateImpl(); +} + +RenderPipeline* DriverImpl::createRenderPipeline() +{ + return new RenderPipelineImpl(_device); +} + +Program* DriverImpl::createProgram(std::string_view vertexShader, std::string_view fragmentShader) +{ + return new ProgramImpl(vertexShader, fragmentShader); +} + +ShaderModule* DriverImpl::createShaderModule(ShaderStage stage, std::string_view source) +{ + return new ShaderModuleImpl(_device, stage, source); +} + +SamplerHandle DriverImpl::createSampler(const SamplerDesc& desc) +{ + VkSamplerCreateInfo info{}; + info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; + + // Filter mapping + const bool minLinear = ((int)desc.minFilter & (int)SamplerFilter::MIN_LINEAR) != 0; + const bool magLinear = ((int)desc.magFilter & (int)SamplerFilter::MAG_LINEAR) != 0; + const bool mipLinear = ((int)desc.mipFilter & (int)SamplerFilter::MIP_LINEAR) != 0; + + info.magFilter = magLinear ? VK_FILTER_LINEAR : VK_FILTER_NEAREST; + info.minFilter = minLinear ? VK_FILTER_LINEAR : VK_FILTER_NEAREST; + info.mipmapMode = mipLinear ? VK_SAMPLER_MIPMAP_MODE_LINEAR : VK_SAMPLER_MIPMAP_MODE_NEAREST; + + // Address mode mapping + auto addrModeOf = [](SamplerAddressMode m) -> VkSamplerAddressMode { + switch (m) + { + case SamplerAddressMode::REPEAT: + return VK_SAMPLER_ADDRESS_MODE_REPEAT; + case SamplerAddressMode::MIRROR: + return VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT; + case SamplerAddressMode::CLAMP: + return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + case SamplerAddressMode::BORDER: + return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER; + default: + return VK_SAMPLER_ADDRESS_MODE_REPEAT; + } + }; + info.addressModeU = addrModeOf(desc.sAddressMode); + info.addressModeV = addrModeOf(desc.tAddressMode); + info.addressModeW = addrModeOf(desc.wAddressMode); + + // Compare func (used for shadow samplers) + info.compareEnable = (desc.compareFunc != CompareFunc::ALWAYS && desc.compareFunc != CompareFunc::NEVER); + auto cmpOf = [](CompareFunc f) -> VkCompareOp { + switch (f) + { + case CompareFunc::NEVER: + return VK_COMPARE_OP_NEVER; + case CompareFunc::LESS: + return VK_COMPARE_OP_LESS; + case CompareFunc::LESS_EQUAL: + return VK_COMPARE_OP_LESS_OR_EQUAL; + case CompareFunc::GREATER: + return VK_COMPARE_OP_GREATER; + case CompareFunc::GREATER_EQUAL: + return VK_COMPARE_OP_GREATER_OR_EQUAL; + case CompareFunc::EQUAL: + return VK_COMPARE_OP_EQUAL; + case CompareFunc::NOT_EQUAL: + return VK_COMPARE_OP_NOT_EQUAL; + case CompareFunc::ALWAYS: + return VK_COMPARE_OP_ALWAYS; + default: + return VK_COMPARE_OP_ALWAYS; + } + }; + info.compareOp = cmpOf(desc.compareFunc); + + // Anisotropy + info.anisotropyEnable = (desc.minFilter == SamplerFilter::MIN_ANISOTROPIC) ? VK_TRUE : VK_FALSE; + info.maxAnisotropy = (desc.anisotropy > 0 ? static_cast(desc.anisotropy) : 1.0f); + + info.borderColor = VK_BORDER_COLOR_INT_OPAQUE_BLACK; + info.unnormalizedCoordinates = VK_FALSE; + info.minLod = 0.0f; + info.maxLod = VK_LOD_CLAMP_NONE; + info.mipLodBias = 0.0f; + + VkSampler sampler{}; + VkResult vr = vkCreateSampler(_device, &info, nullptr, &sampler); + AXASSERT(vr == VK_SUCCESS, "vkCreateSampler failed"); + return sampler; +} + +void DriverImpl::destroySampler(SamplerHandle& h) +{ + if (h) + { + queueDisposal(static_cast(h)); + h = VK_NULL_HANDLE; + } +} + +VertexLayout* DriverImpl::createVertexLayout(VertexLayoutDesc&& desc) +{ + return new VertexLayoutImpl(std::move(desc)); +} + +std::string DriverImpl::getVendor() const +{ + return _vendor; +} +std::string DriverImpl::getRenderer() const +{ + return _renderer; +} +std::string DriverImpl::getVersion() const +{ + return _version; +} +std::string DriverImpl::getShaderVersion() const +{ + return _shaderVersion; +} + +bool DriverImpl::checkForFeatureSupported(FeatureType feature) +{ + // Basic, conservative feature checks; consider querying format properties for stricter checks + switch (feature) + { + case FeatureType::VAO: + case FeatureType::VERTEX_ATTRIB_BINDING: + return true; // Vulkan pipelines handle vertex input layouts + + case FeatureType::DEPTH24: + { + VkFormatProperties fp{}; + vkGetPhysicalDeviceFormatProperties(_physical, VK_FORMAT_X8_D24_UNORM_PACK32, &fp); + return (fp.optimalTilingFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) != 0; + } + + case FeatureType::PACKED_DEPTH_STENCIL: + { + VkFormatProperties fp{}; + vkGetPhysicalDeviceFormatProperties(_physical, VK_FORMAT_D24_UNORM_S8_UINT, &fp); + return (fp.optimalTilingFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) != 0; + } + + case FeatureType::IMG_FORMAT_BGRA8888: + { + VkFormatProperties fp{}; + vkGetPhysicalDeviceFormatProperties(_physical, VK_FORMAT_B8G8R8A8_UNORM, &fp); + return (fp.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) != 0; + } + + case FeatureType::S3TC: + { + VkFormatProperties fp{}; + vkGetPhysicalDeviceFormatProperties(_physical, VK_FORMAT_BC3_UNORM_BLOCK, &fp); + return (fp.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) != 0; + } + + case FeatureType::ASTC: + { + VkFormatProperties fp{}; + vkGetPhysicalDeviceFormatProperties(_physical, VK_FORMAT_ASTC_4x4_UNORM_BLOCK, &fp); + return (fp.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) != 0; + } + + default: + return false; + } +} + +uint32_t DriverImpl::findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties) const +{ + VkPhysicalDeviceMemoryProperties memProperties; + vkGetPhysicalDeviceMemoryProperties(_physical, &memProperties); + + for (uint32_t i = 0; i < memProperties.memoryTypeCount; i++) + { + if ((typeFilter & (1 << i)) && (memProperties.memoryTypes[i].propertyFlags & properties) == properties) + return i; + } + AXASSERT(false, "failed to find suitable memory type!"); + return 0; +} + +VkResult DriverImpl::allocateCommandBuffers(VkCommandBuffer* cmds, uint32_t count) +{ // allocate one primary command buffer from transient pool + std::lock_guard lk(_commandPoolMutex); + + VkCommandBufferAllocateInfo allocInfo{}; + allocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + allocInfo.commandPool = _commandPool; + allocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + allocInfo.commandBufferCount = count; + + VkResult res = vkAllocateCommandBuffers(_device, &allocInfo, cmds); + AXASSERT(res == VK_SUCCESS && *cmds != VK_NULL_HANDLE, "vkAllocateCommandBuffers failed"); + return res; +} + +void DriverImpl::freeCommandBuffers(VkCommandBuffer* cmds, uint32_t count) +{ + std::lock_guard lk(_commandPoolMutex); + vkFreeCommandBuffers(_device, _commandPool, count, cmds); +} + +IsolateSubmission DriverImpl::allocateIsolateSubmission() +{ + VkCommandBuffer cmd{nullptr}; + VkFence fence{nullptr}; + + allocateCommandBuffers(&cmd, 1); + + constexpr VkFenceCreateInfo fenceInfo{.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, + .flags = VK_FENCE_CREATE_SIGNALED_BIT}; + + auto res = vkCreateFence(_device, &fenceInfo, nullptr, &fence); + AXASSERT(res == VK_SUCCESS && cmd != VK_NULL_HANDLE, "vkCreateFence failed"); + + return IsolateSubmission{cmd, fence}; +} + +void DriverImpl::freeIsolateSubmission(IsolateSubmission& submission) +{ + freeCommandBuffers(&submission.cmd, 1); + if (submission.fence) + vkDestroyFence(_device, submission.fence, nullptr); + + submission.cmd = VK_NULL_HANDLE; + submission.fence = VK_NULL_HANDLE; +} + +void DriverImpl::beginRecordingIsolateSubmission(const IsolateSubmission& submission) +{ + VkCommandBufferBeginInfo beginInfo{}; + beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; + + if (submission.fence) + vkResetFences(_device, 1, &submission.fence); + + auto res = vkBeginCommandBuffer(submission.cmd, &beginInfo); + AXASSERT(res == VK_SUCCESS, "vkBeginCommandBuffer failed"); +} + +void DriverImpl::commitIsolateSubmission(const IsolateSubmission& submission) +{ + AXASSERT(submission.cmd != VK_NULL_HANDLE, "endSingleTimeCommands called with null cmd"); + + VkResult res = vkEndCommandBuffer(submission.cmd); + AXASSERT(res == VK_SUCCESS, "vkEndCommandBuffer failed"); + + VkSubmitInfo submitInfo{}; + submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submitInfo.commandBufferCount = 1; + submitInfo.pCommandBuffers = &submission.cmd; + + res = vkQueueSubmit(_graphicsQueue, 1, &submitInfo, submission.fence); + AXASSERT(res == VK_SUCCESS, "vkQueueSubmit failed"); + + // wait for this fence (only this submission) + if (submission.fence) + { + res = vkWaitForFences(_device, 1, &submission.fence, VK_TRUE, UINT64_MAX); + AXASSERT(res == VK_SUCCESS, "vkWaitForFences failed"); + } +} + +void DriverImpl::destroyFramebuffer(VkFramebuffer fb) +{ + vkDestroyFramebuffer(_device, fb, nullptr); +} + +void DriverImpl::destroyRenderPass(VkRenderPass rp) +{ + vkDestroyRenderPass(_device, rp, nullptr); + if (_lastRenderContext) + _lastRenderContext->removeCachedPipelines(rp); +} + +void DriverImpl::queueDisposal(VkSampler sampler) +{ + _disposalQueue.push_back({DisposableResource::Type::Sampler, {.sampler = sampler}}); +} +void DriverImpl::queueDisposal(VkImage image) +{ + _disposalQueue.push_back({DisposableResource::Type::Image, {.image = image}}); +} +void DriverImpl::queueDisposal(VkImageView view) +{ + _disposalQueue.push_back({DisposableResource::Type::ImageView, {.view = view}}); +} +void DriverImpl::queueDisposal(VkBuffer buffer) +{ + _disposalQueue.push_back({DisposableResource::Type::Buffer, {.buffer = buffer}}); +} +void DriverImpl::queueDisposal(VkDeviceMemory memory) +{ + _disposalQueue.push_back({DisposableResource::Type::Memory, {.memory = memory}}); +} + +void DriverImpl::releaseDisposalResources() +{ + if (!_disposalQueue.empty()) + { + vkDeviceWaitIdle(_device); + for (auto& res : _disposalQueue) + { + switch (res.type) + { + case DisposableResource::Type::Image: + vkDestroyImage(_device, res.image, nullptr); + break; + case DisposableResource::Type::ImageView: + vkDestroyImageView(_device, res.view, nullptr); + break; + case DisposableResource::Type::Buffer: + vkDestroyBuffer(_device, res.buffer, nullptr); + break; + case DisposableResource::Type::Memory: + vkFreeMemory(_device, res.memory, nullptr); + break; + case DisposableResource::Type::Sampler: + vkDestroySampler(_device, res.sampler, nullptr); + break; + } + } + _disposalQueue.clear(); + } +} + +void DriverImpl::cleanPendingResources() +{ + if (!_disposalQueue.empty()) + { + releaseDisposalResources(); + } +} + +// Rebuild swapchain attachments from a swapchain image handle. +// Note: swapchainImage must be a VkImage (provided as void* to keep signature parity). +void DriverImpl::rebuildSwapchainAttachments(const axstd::pod_vector& images, + const axstd::pod_vector& imageViews, + const VkExtent2D& extent, + PixelFormat imagePF) +{ + // Destroy previous attachments + destroySwapchainAttachments(); + + if (images.empty() || imageViews.empty()) + return; + + TextureDesc colorDesc{}; + colorDesc.textureType = TextureType::TEXTURE_2D; + colorDesc.width = static_cast(extent.width); + colorDesc.height = static_cast(extent.height); + colorDesc.arraySize = 1; + colorDesc.mipLevels = 1; + colorDesc.pixelFormat = imagePF; + colorDesc.textureUsage = TextureUsage::RENDER_TARGET; + + for (auto i = 0; i < images.size(); ++i) + { + VkImage swapchainImage = images[i]; + VkImageView imageView = imageViews[i]; + // Wrap the swapchain VkImage as TextureImpl (color attachment) + // Important: TextureImpl(VkImage) does not own the image memory; it should create a VkImageView for sampling. + auto colorTex = new TextureImpl(this, swapchainImage, imageView); + // Update descriptor (sampler, mip info, etc.). The TextureImpl should create view if missing. + colorTex->updateTextureDesc(colorDesc); + _swapchainColorAttachments.push_back(colorTex); + } + + // Create a matching depth-stencil attachment + _swapchainDepthStencilAttachment = createDepthStencilAttachment(this, extent); +} + +void DriverImpl::destroySwapchainAttachments() +{ + if (!_swapchainColorAttachments.empty()) + { + for (auto tex : _swapchainColorAttachments) + delete tex; + _swapchainColorAttachments.clear(); + } + if (_swapchainDepthStencilAttachment) + { + delete _swapchainDepthStencilAttachment; + _swapchainDepthStencilAttachment = nullptr; + } +} + +// Getters for default attachments +void DriverImpl::setSwapchainCurrentImageIndex(uint32_t imageIndex) +{ + _currentSwapchainImageIndex = imageIndex; +} + +TextureImpl* DriverImpl::getSwapchainColorAttachment() +{ + return _swapchainColorAttachments[_currentSwapchainImageIndex]; +} + +TextureImpl* DriverImpl::getSwapchainDepthStencilAttachment() +{ + return _swapchainDepthStencilAttachment; +} + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/DriverVK.h b/axmol/rhi/vulkan/DriverVK.h new file mode 100644 index 000000000000..b4f991a3b42a --- /dev/null +++ b/axmol/rhi/vulkan/DriverVK.h @@ -0,0 +1,222 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include "axmol/rhi/DriverBase.h" +#include +#include +#include +#include +#include + +namespace ax::rhi::vk +{ + +class RenderContextImpl; +class DriverImpl; +class TextureImpl; + +struct DisposableResource +{ + enum class Type + { + Sampler, + Image, + ImageView, + Buffer, + Memory + }; + Type type; + union + { + VkSampler sampler; + VkImage image; + VkImageView view; + VkBuffer buffer; + VkDeviceMemory memory; + }; +}; + +struct IsolateSubmission +{ + VkCommandBuffer cmd{VK_NULL_HANDLE}; + VkFence fence{VK_NULL_HANDLE}; + + operator VkCommandBuffer() { return cmd; } +}; + +using CreateSurfaceFunc = std::function; +struct SurfaceCreateInfo +{ + void* window{}; + int width{0}; + int height{0}; + CreateSurfaceFunc createFunc{}; +}; + +class DriverImpl : public DriverBase +{ + friend class RenderContextImpl; + +public: + static constexpr uint32_t MAX_VERTEX_ATTRIBS = 16; + static constexpr uint32_t VBO_BINDING_INDEX_START = 0; + static constexpr uint32_t VBO_INSTANCING_BINDING_INDEX = VBO_BINDING_INDEX_START + 1; + static constexpr uint32_t DEFAULT_ATTRIBS_BINDING_INDEX = VBO_BINDING_INDEX_START + MAX_VERTEX_ATTRIBS; + + DriverImpl(); + ~DriverImpl(); + + void init(); + + bool recreateSurface(const SurfaceCreateInfo& info); + VkSurfaceKHR getSurface() const { return _surface; } + + const VkExtent2D& getSurfaceInitialExtent() const { return _surfaceInitalExtent; } + + RenderContext* createRenderContext(void* surfaceContext) override; + Buffer* createBuffer(std::size_t size, BufferType type, BufferUsage usage, const void* initial) override; + Texture* createTexture(const TextureDesc& descriptor) override; + RenderTarget* createDefaultRenderTarget() override; + RenderTarget* createRenderTarget(Texture* colorAttachment, Texture* depthStencilAttachment) override; + DepthStencilState* createDepthStencilState() override; + RenderPipeline* createRenderPipeline() override; + Program* createProgram(std::string_view vertexShader, std::string_view fragmentShader) override; + VertexLayout* createVertexLayout(VertexLayoutDesc&& desc) override; + + std::string getVendor() const override; + std::string getRenderer() const override; + std::string getVersion() const override; + std::string getShaderVersion() const override; + + bool checkForFeatureSupported(FeatureType feature) override; + + void cleanPendingResources() override; + + VkPhysicalDevice getPhysical() const { return _physical; } + VkDevice getDevice() const { return _device; } + + VkQueue getGraphicsQueue() const { return _graphicsQueue; } + uint32_t getGraphicsQueueFamily() const { return _graphicsQueueFamily; } + + VkQueue getPresentQueue() const { return _presentQueue; } + uint32_t getPresentQueueFamily() const { return _presentQueueFamily; } + + // Find suitable memory type index + uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties) const; + + VkResult allocateCommandBuffers(VkCommandBuffer* cmds, uint32_t count); + void freeCommandBuffers(VkCommandBuffer* cmds, uint32_t count); + + IsolateSubmission startIsolateSubmission() + { + auto submission = allocateIsolateSubmission(); + beginRecordingIsolateSubmission(submission); + return submission; + } + + void finishIsolateSubmission(IsolateSubmission& submission) + { + commitIsolateSubmission(submission); + freeIsolateSubmission(submission); + } + + IsolateSubmission allocateIsolateSubmission(); + void freeIsolateSubmission(IsolateSubmission& submission); + + void beginRecordingIsolateSubmission(const IsolateSubmission& submission); + void commitIsolateSubmission(const IsolateSubmission& submission); + + void destroyFramebuffer(VkFramebuffer); + void destroyRenderPass(VkRenderPass); + + void queueDisposal(VkImage image); + void queueDisposal(VkImageView view); + void queueDisposal(VkBuffer buffer); + void queueDisposal(VkDeviceMemory memory); + void queueDisposal(VkSampler sampler); + + void releaseDisposalResources(); + + void rebuildSwapchainAttachments(const axstd::pod_vector& images, + const axstd::pod_vector&, + const VkExtent2D&, + PixelFormat imagePF); + + void destroySwapchainAttachments(); + + void setSwapchainCurrentImageIndex(uint32_t imageIndex); + + // Get the current swapchain color attachment by recorded swapchain image index + TextureImpl* getSwapchainColorAttachment(); + + // Get the current swapchain depth-stencil attachment + TextureImpl* getSwapchainDepthStencilAttachment(); + + void waitDeviceIdle() { vkDeviceWaitIdle(_device); } + +protected: + ShaderModule* createShaderModule(ShaderStage stage, std::string_view source) override; + SamplerHandle createSampler(const SamplerDesc& desc) override; + void destroySampler(SamplerHandle& h) override; + +private: + void initializeFactory(); + void initializeDevice(); + + RenderContextImpl* _lastRenderContext{nullptr}; + + VkDebugUtilsMessengerCreateInfoEXT _debugCreateInfo{}; + VkDebugUtilsMessengerEXT _debugMessenger{VK_NULL_HANDLE}; + + VkInstance _factory{VK_NULL_HANDLE}; + VkPhysicalDevice _physical{VK_NULL_HANDLE}; + VkDevice _device{VK_NULL_HANDLE}; + VkSurfaceKHR _surface{VK_NULL_HANDLE}; + VkExtent2D _surfaceInitalExtent{}; + + VkQueue _graphicsQueue{VK_NULL_HANDLE}; + VkQueue _presentQueue{VK_NULL_HANDLE}; + + // command pool + VkCommandPool _commandPool{VK_NULL_HANDLE}; + std::mutex _commandPoolMutex; + + std::deque _disposalQueue; + + uint32_t _graphicsQueueFamily{0}; + uint32_t _presentQueueFamily{0}; + + std::string _vendor; + std::string _renderer; + std::string _version; + std::string _shaderVersion; + + // store and provide swapchain render target attachments + axstd::pod_vector _swapchainColorAttachments; + uint32_t _currentSwapchainImageIndex = 0; + TextureImpl* _swapchainDepthStencilAttachment = nullptr; +}; + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/ProgramVK.cpp b/axmol/rhi/vulkan/ProgramVK.cpp new file mode 100644 index 000000000000..bb30fbc352af --- /dev/null +++ b/axmol/rhi/vulkan/ProgramVK.cpp @@ -0,0 +1,117 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#include "ProgramVK.h" +#include "BufferVK.h" +#include "axmol/rhi/ShaderCache.h" +#include "axmol/rhi/DriverBase.h" +#include "axmol/base/Logging.h" + +namespace ax::rhi::vk +{ + +ProgramImpl::ProgramImpl(std::string_view vertexShader, std::string_view fragmentShader) + : Program(vertexShader, fragmentShader) +{ + _vertexShader = static_cast(ShaderCache::getInstance()->acquireVertexShaderModule(_vsSource)); + _fragmentShader = + static_cast(ShaderCache::getInstance()->acquireFragmentShaderModule(_fsSource)); +} + +ProgramImpl::~ProgramImpl() +{ + AX_SAFE_RELEASE(_vertexShader); + AX_SAFE_RELEASE(_fragmentShader); +} + +const VertexInputDesc* ProgramImpl::getVertexInputDesc(VertexInputKind name) const +{ + return _vertexShader->getVertexInputDesc(name); +} + +const VertexInputDesc* ProgramImpl::getVertexInputDesc(std::string_view name) const +{ + return _vertexShader->getVertexInputDesc(name); +} + +const axstd::string_map& ProgramImpl::getActiveVertexInputs() const +{ + return _vertexShader->getActiveVertexInputs(); +} + +UniformLocation ProgramImpl::getUniformLocation(rhi::Uniform name) const +{ + auto& vert = _vertexShader->getUniformInfo(name); + auto& frag = _fragmentShader->getUniformInfo(name); + + return UniformLocation{{frag.location, frag.location == -1 ? -1 : static_cast(frag.bufferOffset)}, + {vert.location, vert.location == -1 ? -1 : static_cast(vert.bufferOffset)}}; +} + +UniformLocation ProgramImpl::getUniformLocation(std::string_view uniform) const +{ + auto& vert = _vertexShader->getUniformInfo(uniform); + auto& frag = _fragmentShader->getUniformInfo(uniform); + + if (vert.location != -1 && frag.location != -1) + { + AXASSERT(vert.type == frag.type && vert.count == frag.count && vert.size == frag.size, + "Same vertex and fragment uniform must match in type and size"); + } + + return UniformLocation{{frag.location, frag.location == -1 ? -1 : static_cast(frag.bufferOffset)}, + {vert.location, vert.location == -1 ? -1 : static_cast(vert.bufferOffset)}}; +} + +int ProgramImpl::getMaxVertexLocation() const +{ + return _vertexShader->getMaxLocation(); +} + +int ProgramImpl::getMaxFragmentLocation() const +{ + return _fragmentShader->getMaxLocation(); +} + +std::size_t ProgramImpl::getUniformBufferSize(ShaderStage stage) const +{ + switch (stage) + { + case ShaderStage::VERTEX: + return _vertexShader->getUniformBufferSize(); + case ShaderStage::FRAGMENT: + return _fragmentShader->getUniformBufferSize(); + default: + AXASSERT(false, "Invalid shader stage."); + break; + } + return 0; +} + +const axstd::string_map& ProgramImpl::getActiveUniformInfos(ShaderStage stage) const +{ + return stage == ShaderStage::VERTEX ? _vertexShader->getActiveUniformInfos() + : _fragmentShader->getActiveUniformInfos(); +} + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/ProgramVK.h b/axmol/rhi/vulkan/ProgramVK.h new file mode 100644 index 000000000000..c41385e36ab2 --- /dev/null +++ b/axmol/rhi/vulkan/ProgramVK.h @@ -0,0 +1,68 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include "axmol/rhi/Program.h" +#include "ShaderModuleVK.h" + +namespace ax::rhi::vk +{ +class BufferImpl; + +/** + * @brief A Vulkan-based ShaderProgram implementation + */ +class ProgramImpl : public Program +{ +public: + ProgramImpl(std::string_view vertexShader, std::string_view fragmentShader); + ~ProgramImpl() override; + + UniformLocation getUniformLocation(std::string_view uniform) const override; + UniformLocation getUniformLocation(rhi::Uniform name) const override; + + const VertexInputDesc* getVertexInputDesc(std::string_view name) const override; + const VertexInputDesc* getVertexInputDesc(VertexInputKind name) const override; + + const axstd::string_map& getActiveVertexInputs() const override; + + ShaderModuleImpl* getVertexShader() const { return _vertexShader; } + ShaderModuleImpl* getFragmentShader() const { return _fragmentShader; } + + int getMaxVertexLocation() const override; + int getMaxFragmentLocation() const override; + + std::size_t getUniformBufferSize(ShaderStage stage) const override; + const axstd::string_map& getActiveUniformInfos(ShaderStage stage) const override; + + // Vulkan specific: return VkShaderModule handles + VkShaderModule getVSModule() const { return _vertexShader->internalHandle(); } + VkShaderModule getFSModule() const { return _fragmentShader->internalHandle(); } + +private: + ShaderModuleImpl* _vertexShader = nullptr; + ShaderModuleImpl* _fragmentShader = nullptr; +}; + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/RenderContextVK.cpp b/axmol/rhi/vulkan/RenderContextVK.cpp new file mode 100644 index 000000000000..9a0d227757b6 --- /dev/null +++ b/axmol/rhi/vulkan/RenderContextVK.cpp @@ -0,0 +1,1318 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#include "axmol/rhi/vulkan/RenderContextVK.h" +#include "axmol/rhi/vulkan/RenderTargetVK.h" +#include "axmol/rhi/vulkan/RenderPipelineVK.h" +#include "axmol/rhi/vulkan/DepthStencilStateVK.h" +#include "axmol/rhi/vulkan/VertexLayoutVK.h" +#include "axmol/rhi/vulkan/ProgramVK.h" +#include "axmol/rhi/vulkan/BufferVK.h" +#include "axmol/rhi/vulkan/TextureVK.h" +#include "axmol/rhi/vulkan/UtilsVK.h" +#include "axmol/rhi/vulkan/DriverVK.h" +#include "axmol/rhi/vulkan/SemaphorePoolVK.h" +#include "axmol/rhi/DriverBase.h" +#include "axmol/base/Logging.h" + +#include +#include +#include + +namespace ax::rhi::vk +{ + +/* + * Helper: map PrimitiveType to VkPrimitiveTopology + * + * In the current Axmol Vulkan backend, LINE_LOOP is not supported in order + * to reduce the number of PSOs (Pipeline State Objects). Vulkan does not + * provide a native LINE_LOOP topology; it must be emulated using LINE_STRIP + * with primitiveRestartEnable, which requires additional pipeline variants. + * + * If future contributors need LINE_LOOP support, they can: + * 1. Extend this mapping to include LINE_LOOP → LINE_STRIP, + * 2. Create additional pipelines with primitiveRestart enabled, + * 3. Or contact the Axmol maintainers to discuss adding official support. + * + * By default, Axmol relies on TRIANGLE_LIST and other common topologies, + * which cover the majority of rendering scenarios. + */ +static VkPrimitiveTopology toVkPrimitiveTopology(PrimitiveType type) +{ + switch (type) + { + case PrimitiveType::POINT: + return VK_PRIMITIVE_TOPOLOGY_POINT_LIST; + case PrimitiveType::LINE: + return VK_PRIMITIVE_TOPOLOGY_LINE_LIST; + case PrimitiveType::LINE_LOOP: + AXLOGE("axmol-vulkan RHI doesn't support LINE_LOOP"); + return VK_PRIMITIVE_TOPOLOGY_LINE_STRIP; // Vulkan has no LINE_LOOP + case PrimitiveType::LINE_STRIP: + return VK_PRIMITIVE_TOPOLOGY_LINE_STRIP; + case PrimitiveType::TRIANGLE: + return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + case PrimitiveType::TRIANGLE_STRIP: + return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; + default: + return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + } +} + +// Helper: map IndexFormat to VkIndexType +static VkIndexType toVkIndexType(IndexFormat fmt) +{ + switch (fmt) + { + case IndexFormat::U_SHORT: + return VK_INDEX_TYPE_UINT16; + case IndexFormat::U_INT: + return VK_INDEX_TYPE_UINT32; + default: + return VK_INDEX_TYPE_UINT32; + } +} + +inline bool nearlyEqual(float a, float b, float eps = 1e-6f) +{ + return std::fabs(a - b) < eps; +} + +inline bool operator==(const VkViewport& a, const VkViewport& b) +{ + return nearlyEqual(a.x, b.x) && nearlyEqual(a.y, b.y) && nearlyEqual(a.width, b.width) && + nearlyEqual(a.height, b.height) && nearlyEqual(a.minDepth, b.minDepth) && + nearlyEqual(a.maxDepth, b.maxDepth); +} + +inline bool operator==(const VkRect2D& a, const VkRect2D& b) +{ + return a.offset.x == b.offset.x && a.offset.y == b.offset.y && a.extent.width == b.extent.width && + a.extent.height == b.extent.height; +} + +static void destroySemphores(axstd::pod_vector& semaphores, VkDevice device) +{ + for (auto semaphore : semaphores) + vkDestroySemaphore(device, semaphore, nullptr); + semaphores.clear(); +} + +// NOTE: This implementation assumes the existence of a Vulkan driver context that owns device, queues, +// swapchain, render pass, and descriptor management. Adapt integration points to your driver as needed. + +RenderContextImpl::RenderContextImpl(DriverImpl* driver, VkSurfaceKHR surface) +{ + _driver = driver; + _surface = surface; + _graphicsQueue = driver->getGraphicsQueue(); + _presentQueue = driver->getPresentQueue(); + _device = driver->getDevice(); + + // Create a command pool for allocating command buffers + VkCommandPoolCreateInfo poolInfo{}; + poolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; + poolInfo.queueFamilyIndex = driver->getGraphicsQueueFamily(); + poolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; + VkResult vr = vkCreateCommandPool(_device, &poolInfo, nullptr, &_commandPool); + AXASSERT(vr == VK_SUCCESS, "vkCreateCommandPool failed"); + + auto& extent = driver->getSurfaceInitialExtent(); + _screenWidth = extent.width; + _screenHeight = extent.height; + + createCommandBuffers(); +#if !_AX_USE_DESCRIPTOR_CACHE + createDescriptorPool(); +#endif + recreateSwapchain(); + + // create frame fence objects + constexpr VkFenceCreateInfo fenceInfo{.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, + .flags = VK_FENCE_CREATE_SIGNALED_BIT}; + + for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) + { + if (vkCreateFence(_device, &fenceInfo, nullptr, &_inFlightFences[i]) != VK_SUCCESS) + { + AXASSERT(false, "failed to create synchronization objects for a frame!"); + } + } + + // reserve descriptor sets + _descriptorWritesPerFrame.reserve(16); + _descriptorImageInfosPerFrame.reserve(16); + + // Create per-frame uniform ring buffers (capacity can be tuned) + createUniformRingBuffers(1 * 1024 * 1024); // 1 MB per frame +} + +RenderContextImpl::~RenderContextImpl() +{ + vkDeviceWaitIdle(_device); + + destroyUniformRingBuffers(); + + destroySemphores(_renderFinishedSemaphores, _device); + destroySemphores(_acquireCompleteSemaphores, _device); + + for (auto fence : _inFlightFences) + vkDestroyFence(_device, fence, nullptr); + _inFlightFences.fill(VK_NULL_HANDLE); +#if !_AX_USE_DESCRIPTOR_CACHE + for (auto pool : _descriptorPools) + vkDestroyDescriptorPool(_device, pool, nullptr); + _descriptorPools.fill(VK_NULL_HANDLE); +#endif + vkFreeCommandBuffers(_device, _commandPool, static_cast(_commandBuffers.size()), _commandBuffers.data()); + _commandBuffers.fill(VK_NULL_HANDLE); + + if (_commandPool) + { + vkDestroyCommandPool(_device, _commandPool, nullptr); + _commandPool = VK_NULL_HANDLE; + } + + _driver->destroySwapchainAttachments(); + + for (auto view : _swapchainImageViews) + vkDestroyImageView(_device, view, nullptr); + + if (_swapchain != VK_NULL_HANDLE) + vkDestroySwapchainKHR(_device, _swapchain, nullptr); + + _swapchainImageViews.clear(); + _swapchainImages.clear(); +} + +// Create per-frame uniform ring buffers with persistent mapping +void RenderContextImpl::createUniformRingBuffers(std::size_t capacityBytes) +{ + // Query minUniformBufferOffsetAlignment from physical device limits + + auto device = _driver->getDevice(); + + VkPhysicalDeviceProperties props{}; + vkGetPhysicalDeviceProperties(_driver->getPhysical(), &props); + std::size_t devAlign = std::max(1, props.limits.minUniformBufferOffsetAlignment); + + for (int i = 0; i < MAX_FRAMES_IN_FLIGHT; ++i) + { + UniformRingBuffer& ring = _uniformRings[i]; + ring.capacity = capacityBytes; + ring.align = devAlign; + + // Create buffer + VkBufferCreateInfo bci{}; + bci.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; + bci.size = ring.capacity; + bci.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; // descriptor updates will use (buffer, offset, range) + bci.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + VkResult br = vkCreateBuffer(device, &bci, nullptr, &ring.buffer); + AXASSERT(br == VK_SUCCESS, "vkCreateBuffer (uniform ring) failed"); + + // Allocate memory (HOST_VISIBLE | prefer COHERENT) + VkMemoryRequirements memReq{}; + vkGetBufferMemoryRequirements(device, ring.buffer, &memReq); + + uint32_t typeIndex = _driver->findMemoryType( + memReq.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + + VkMemoryAllocateInfo mai{}; + mai.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + mai.allocationSize = memReq.size; + mai.memoryTypeIndex = typeIndex; + + VkResult ar = vkAllocateMemory(device, &mai, nullptr, &ring.memory); + AXASSERT(ar == VK_SUCCESS, "vkAllocateMemory (uniform ring) failed"); + + VkResult brm = vkBindBufferMemory(device, ring.buffer, ring.memory, 0); + AXASSERT(brm == VK_SUCCESS, "vkBindBufferMemory (uniform ring) failed"); + + // Persistently map + void* mapped = nullptr; + VkResult mr = vkMapMemory(device, ring.memory, 0, ring.capacity, 0, &mapped); + AXASSERT(mr == VK_SUCCESS, "vkMapMemory (uniform ring) failed"); + ring.mapped = static_cast(mapped); + ring.writeHead = 0; + ring.isCoherent = true; // we requested COHERENT, keep hint for flush decisions + } +} + +// Destroy per-frame uniform ring buffers +void RenderContextImpl::destroyUniformRingBuffers() +{ + vkDeviceWaitIdle(_device); + + auto device = _device; + for (int i = 0; i < MAX_FRAMES_IN_FLIGHT; ++i) + { + UniformRingBuffer& ring = _uniformRings[i]; + if (ring.mapped) + { + vkUnmapMemory(device, ring.memory); + ring.mapped = nullptr; + } + if (ring.buffer != VK_NULL_HANDLE) + { + vkDestroyBuffer(device, ring.buffer, nullptr); + ring.buffer = VK_NULL_HANDLE; + } + if (ring.memory != VK_NULL_HANDLE) + { + vkFreeMemory(device, ring.memory, nullptr); + ring.memory = VK_NULL_HANDLE; + } + } +} + +// Reset current frame ring buffer write head after its fence is signaled +void RenderContextImpl::resetUniformRingForCurrentFrame() +{ + UniformRingBuffer& ring = _uniformRings[_currentFrame]; + ring.writeHead = 0; +} + +// Allocate aligned slice from current frame's ring buffer +RenderContextImpl::UniformSlice RenderContextImpl::allocateUniformSlice(std::size_t size) +{ + UniformRingBuffer& ring = _uniformRings[_currentFrame]; + + // Align allocation size to device requirement + std::size_t aligned = (size + ring.align - 1) & ~(ring.align - 1); + + // Simple overflow check (can be replaced by grow or fallback) + AXASSERT(ring.writeHead + aligned <= ring.capacity, "Uniform ring buffer overflow"); + + UniformSlice s{}; + s.offset = ring.writeHead; + s.size = size; + s.cpuPtr = ring.mapped + s.offset; + + ring.writeHead += aligned; + return s; +} + +void RenderContextImpl::createCommandBuffers() +{ + VkCommandBufferAllocateInfo allocInfo{}; + allocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + allocInfo.commandPool = _commandPool; + allocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + allocInfo.commandBufferCount = MAX_FRAMES_IN_FLIGHT; // allocate all at once + + auto result = vkAllocateCommandBuffers(_device, &allocInfo, _commandBuffers.data()); + AXASSERT(result == VK_SUCCESS, "vkAllocateCommandBuffers failed"); +} + +#if !_AX_USE_DESCRIPTOR_CACHE +void RenderContextImpl::createDescriptorPool() +{ + // Define the descriptor types and counts supported by the pool + constexpr VkDescriptorPoolSize poolSizes[] = { + {VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 64}, {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 64}, + /*{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 32},*/ // SSBO, unused currently + }; + + constexpr uint32_t MAX_DESCRIPTOR_SETS_PER_FRAME = 1024; + + VkDescriptorPoolCreateInfo poolInfo{}; + poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; + poolInfo.poolSizeCount = static_cast(std::size(poolSizes)); + poolInfo.pPoolSizes = poolSizes; + poolInfo.maxSets = MAX_DESCRIPTOR_SETS_PER_FRAME; // Maximum number of descriptor sets that can be allocated + poolInfo.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT; + // Allow individual descriptor sets to be freed for flexible management + + for (auto i = 0; i < MAX_FRAMES_IN_FLIGHT; ++i) + { + VkResult res = vkCreateDescriptorPool(_device, &poolInfo, nullptr, &_descriptorPools[i]); + AXASSERT(res == VK_SUCCESS, "Failed to create descriptor pool"); + } +} +#endif + +bool RenderContextImpl::updateSurface(void* surface, uint32_t width, uint32_t height) +{ + if (width == _screenWidth && height == _screenHeight && _surface == surface) + return true; + + _surface = (VkSurfaceKHR)surface; + _screenWidth = width; + _screenHeight = height; + _swapchainDirty = true; + return true; +} + +void RenderContextImpl::recreateSwapchain() +{ + auto physical = _driver->getPhysical(); + + // Query supported surface formats + uint32_t formatCount; + vkGetPhysicalDeviceSurfaceFormatsKHR(physical, _surface, &formatCount, nullptr); + std::vector formats(formatCount); + vkGetPhysicalDeviceSurfaceFormatsKHR(physical, _surface, &formatCount, formats.data()); + + // Choose suitable surface format + VkSurfaceFormatKHR surfaceFormat{.format = VK_FORMAT_UNDEFINED}; + PixelFormat pixelFormat{}; + int bestScore = -1; + for (auto& sf : formats) + { + int score = 0; + + PixelFormat pf{}; + if (sf.colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) + { + if (sf.format == VK_FORMAT_R8G8B8A8_UNORM) + { + pf = PixelFormat::RGBA8; + score = 2; + } + else if (sf.format == VK_FORMAT_B8G8R8A8_UNORM) + { + pf = PixelFormat::BGRA8; + score = 1; + } + } + + if (score > bestScore) + { + bestScore = score; + surfaceFormat = sf; + pixelFormat = pf; + } + } + + if (surfaceFormat.format == VK_FORMAT_UNDEFINED) + { + throw std::runtime_error( + "No suitable surface format found (need R8G8B8A8_UNORM or B8G8R8A8_UNORM with SRGB nonlinear)."); + } + + // Query supported present modes + uint32_t presentModeCount; + vkGetPhysicalDeviceSurfacePresentModesKHR(physical, _surface, &presentModeCount, nullptr); + std::vector presentModes(presentModeCount); + vkGetPhysicalDeviceSurfacePresentModesKHR(physical, _surface, &presentModeCount, presentModes.data()); + + VkPresentModeKHR chosenPresentMode = VK_PRESENT_MODE_FIFO_KHR; // guaranteed + +#if !defined(__ANDROID__) + for (auto& pm : presentModes) + { + if (pm == VK_PRESENT_MODE_MAILBOX_KHR) + { + chosenPresentMode = pm; + break; + } + } +#endif + + // Query surface capabilities + VkSurfaceCapabilitiesKHR caps; + vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physical, _surface, &caps); + + VkSurfaceTransformFlagBitsKHR preTransform = caps.currentTransform; +#if defined(__ANDROID__) + if (caps.currentTransform & VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR || + caps.currentTransform & VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR) + { + preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + } +#endif + + VkExtent2D extent = caps.currentExtent; + if (extent.width == UINT32_MAX) + { + extent.width = _screenWidth; + extent.height = _screenHeight; + } + if (extent.width == 0 || extent.height == 0) + { + AXLOGE("axmol: Failed to create swapchain: extent width/height is 0"); + } + + uint32_t imageCount = caps.minImageCount + 1; + if (caps.maxImageCount > 0 && imageCount > caps.maxImageCount) + imageCount = caps.maxImageCount; + + // Destroy old swapchain and swapchain images if exists + if (_swapchain != VK_NULL_HANDLE) + { + for (auto view : _swapchainImageViews) + vkDestroyImageView(_device, view, nullptr); + vkDestroySwapchainKHR(_device, _swapchain, nullptr); + } + + // Create new swapchain + VkSwapchainCreateInfoKHR scInfo{}; + scInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; + scInfo.surface = _surface; + scInfo.minImageCount = imageCount; + scInfo.imageFormat = surfaceFormat.format; + scInfo.imageColorSpace = surfaceFormat.colorSpace; + scInfo.imageExtent = extent; + scInfo.imageArrayLayers = 1; + scInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + scInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; + scInfo.preTransform = preTransform; + scInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; + scInfo.presentMode = chosenPresentMode; + scInfo.clipped = VK_TRUE; + scInfo.oldSwapchain = VK_NULL_HANDLE; + + VkResult vr = vkCreateSwapchainKHR(_device, &scInfo, nullptr, &_swapchain); + if (vr == VK_ERROR_SURFACE_LOST_KHR) + return; + AXASSERT(vr == VK_SUCCESS, "vkCreateSwapchainKHR failed"); + + // Retrieve swapchain images + uint32_t swapImageCount; + vkGetSwapchainImagesKHR(_device, _swapchain, &swapImageCount, nullptr); + _swapchainImages.resize(swapImageCount); + vkGetSwapchainImagesKHR(_device, _swapchain, &swapImageCount, _swapchainImages.data()); + + // Create image views + _swapchainImageViews.resize(swapImageCount); + for (size_t i = 0; i < _swapchainImages.size(); ++i) + { + VkImageViewCreateInfo viewInfo{}; + viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; + viewInfo.image = _swapchainImages[i]; + viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D; + viewInfo.format = surfaceFormat.format; + viewInfo.components = {VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY, + VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY}; + viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + viewInfo.subresourceRange.baseMipLevel = 0; + viewInfo.subresourceRange.levelCount = 1; + viewInfo.subresourceRange.baseArrayLayer = 0; + viewInfo.subresourceRange.layerCount = 1; + + vr = vkCreateImageView(_device, &viewInfo, nullptr, &_swapchainImageViews[i]); + AXASSERT(vr == VK_SUCCESS, "vkCreateImageView failed"); + } + + _driver->rebuildSwapchainAttachments(_swapchainImages, _swapchainImageViews, extent, pixelFormat); + + // re-create render finished semaphores + if (!_renderFinishedSemaphores.empty()) + destroySemphores(_renderFinishedSemaphores, _device); + if (!_acquireCompleteSemaphores.empty()) + destroySemphores(_acquireCompleteSemaphores, _device); + + VkSemaphoreCreateInfo sci{.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO}; + _renderFinishedSemaphores.resize(swapImageCount, VK_NULL_HANDLE); + _acquireCompleteSemaphores.resize(swapImageCount, VK_NULL_HANDLE); + for (uint32_t i = 0; i < swapImageCount; ++i) + { + VkResult r = vkCreateSemaphore(_device, &sci, nullptr, &_renderFinishedSemaphores[i]); + AXASSERT(r == VK_SUCCESS, "vkCreateSemaphore failed"); + r = vkCreateSemaphore(_device, &sci, nullptr, &_acquireCompleteSemaphores[i]); + AXASSERT(r == VK_SUCCESS, "vkCreateSemaphore failed"); + } + + // Sync screen size + if (_screenWidth != extent.width || _screenHeight != extent.height) + { + _screenWidth = extent.width; + _screenHeight = extent.height; + } + + // Resets some state + _currentFrame = 0; + _currentImageIndex = 0; + _lastError = 0; + _suboptimal = false; + _semaphoreIndex = _acquireCompleteSemaphores.size() - 1; +} + +void RenderContextImpl::setDepthStencilState(DepthStencilState* depthStencilState) +{ + _depthStencilState = static_cast(depthStencilState); +} + +void RenderContextImpl::setRenderPipeline(RenderPipeline* renderPipeline) +{ + _renderPipeline = static_cast(renderPipeline); +} + +bool RenderContextImpl::beginFrame() +{ + if (_swapchainDirty) [[unlikely]] + { + vkDeviceWaitIdle(_device); + recreateSwapchain(); + static_cast(_screenRT)->invalidate(); + _swapchainDirty = false; + } + + if (_lastError) + return false; // if error not cleared, skip frame + + // wait for previous frame to finish + vkWaitForFences(_device, 1, &_inFlightFences[_currentFrame], VK_TRUE, UINT64_MAX); + + // Reset uniform ring write head for this frame + resetUniformRingForCurrentFrame(); + + const uint32_t prevSemaphoreIndex = _semaphoreIndex; + _semaphoreIndex = (_semaphoreIndex + 1) % _acquireCompleteSemaphores.size(); + const auto maxImageIndex = static_cast(_swapchainImages.size()); + + VkResult result = + vkAcquireNextImageKHR(_device, _swapchain, UINT64_MAX, _acquireCompleteSemaphores[_semaphoreIndex], + VK_NULL_HANDLE, &_currentImageIndex); + while (_currentImageIndex > maxImageIndex && (result == VK_SUCCESS || result == VK_SUBOPTIMAL_KHR)) + { + result = vkAcquireNextImageKHR(_device, _swapchain, UINT64_MAX, _acquireCompleteSemaphores[_semaphoreIndex], + VK_NULL_HANDLE, &_currentImageIndex); + } + + if (!handleSwapchainResult(result, SwapchainOp::Acquire, prevSemaphoreIndex)) + return false; + + _inFrame = true; + + vkResetFences(_device, 1, &_inFlightFences[_currentFrame]); + + _driver->setSwapchainCurrentImageIndex(_currentImageIndex); + + _currentCmdBuffer = _commandBuffers[_currentFrame]; + vkResetCommandBuffer(_currentCmdBuffer, 0); + +#if _AX_USE_DESCRIPTOR_CACHE + auto& descriptorStates = _inFlightDescriptorStates[_currentFrame]; + for (auto& state : descriptorStates) + _renderPipeline->recycleDescriptorState(state); + descriptorStates.clear(); +#else + auto descriptorPool = _descriptorPools[_currentFrame]; + vkResetDescriptorPool(_device, descriptorPool, 0); // safe: only reset current frame pool +#endif + + VkCommandBufferBeginInfo const binfo{ + .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, + .flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, + }; + VkResult vr = vkBeginCommandBuffer(_currentCmdBuffer, &binfo); + AXASSERT(vr == VK_SUCCESS, "vkBeginCommandBuffer failed"); + + return true; +} + +void RenderContextImpl::beginRenderPass(RenderTarget* renderTarget, const RenderPassDesc& renderPassDesc) +{ + assert(_inFrame); + auto rtImpl = static_cast(renderTarget); + + _currentRT = renderTarget; + + // Cache target size from first color attachment + auto colorAttachment = rtImpl->getColorAttachment(0); + _renderTargetWidth = colorAttachment->getDesc().width; + _renderTargetHeight = colorAttachment->getDesc().height; + + // Delegate to RenderTargetImplVK: it will select/create VkRenderPass and VkFramebuffer + rtImpl->beginRenderPass(_currentCmdBuffer, renderPassDesc, _renderTargetWidth, _renderTargetHeight); +} + +void RenderContextImpl::endRenderPass() +{ + auto rtImpl = static_cast(_currentRT); + rtImpl->endRenderPass(_currentCmdBuffer); + + // Reset state cache + _programState = nullptr; + _vertexLayout = nullptr; + _boundPipeline = nullptr; + + AX_SAFE_RELEASE_NULL(_indexBuffer); + AX_SAFE_RELEASE_NULL(_vertexBuffer); + AX_SAFE_RELEASE_NULL(_instanceBuffer); +} + +void RenderContextImpl::endFrame() +{ + VkResult vr = vkEndCommandBuffer(_currentCmdBuffer); + AXASSERT(vr == VK_SUCCESS, "vkEndCommandBuffer failed"); + + // If non-coherent, flush written uniform range before submit (optional) + { + UniformRingBuffer& ring = _uniformRings[_currentFrame]; + if (!ring.isCoherent && ring.writeHead > 0) + { + VkMappedMemoryRange range{VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE}; + range.memory = ring.memory; + range.offset = 0; + range.size = ring.writeHead; + vkFlushMappedMemoryRanges(_device, 1, &range); + } + } + + const VkSemaphore waitSemaphores[] = {_acquireCompleteSemaphores[_semaphoreIndex]}; + const VkPipelineStageFlags waitSemaphoreStages[] = {VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT}; + + // New render-finished semaphore from pool + VkSemaphore submissionSemaphore = _renderFinishedSemaphores[_currentImageIndex]; + + VkSubmitInfo submitInfo{}; + submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submitInfo.commandBufferCount = 1; + submitInfo.pCommandBuffers = &_currentCmdBuffer; + submitInfo.waitSemaphoreCount = 1; + submitInfo.pWaitSemaphores = waitSemaphores; + submitInfo.pWaitDstStageMask = waitSemaphoreStages; + submitInfo.signalSemaphoreCount = 1; + submitInfo.pSignalSemaphores = &submissionSemaphore; + + vr = vkQueueSubmit(_graphicsQueue, 1, &submitInfo, _inFlightFences[_currentFrame]); + AXASSERT(vr == VK_SUCCESS, "vkQueueSubmit failed"); + + // Present: wait on render-finished semaphore + VkPresentInfoKHR presentInfo{}; + presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; + presentInfo.waitSemaphoreCount = 1; + presentInfo.pWaitSemaphores = &submissionSemaphore; + presentInfo.swapchainCount = 1; + presentInfo.pSwapchains = &_swapchain; + presentInfo.pImageIndices = &_currentImageIndex; + + vr = vkQueuePresentKHR(_presentQueue, &presentInfo); + bool succeed = handleSwapchainResult(vr, SwapchainOp::Present, 0); + + if (!_postFrameOps.empty()) + { + for (auto& op : _postFrameOps) + op(); + + _postFrameOps.clear(); + } + + _driver->releaseDisposalResources(); + + // Advance frame index for multi-frame-in-flight + if (succeed) + _currentFrame = (_currentFrame + 1) % MAX_FRAMES_IN_FLIGHT; + + _inFrame = false; +} + +bool RenderContextImpl::handleSwapchainResult(VkResult result, SwapchainOp op, uint32_t prevSemaphoreIndex) +{ + if (result == VK_SUCCESS) + return true; + + switch (result) + { + case VK_SUBOPTIMAL_KHR: + if (!_suboptimal) + { + _suboptimal = true; + if (op == SwapchainOp::Present) + AXLOGW("axmol: vkQueuePresentKHR suboptimal swap chain."); + else + AXLOGW("axmol: vkAcquireNextImageKHR suboptimal swap chain."); + } + return true; + + case VK_ERROR_OUT_OF_DATE_KHR: + if (op == SwapchainOp::Present) + { + AXLOGI("vkQueuePresentKHR: swapchain out of date when present"); + } + else + { + AXLOGI("vkAcquireNextImageKHR: swapchain out of date"); + _semaphoreIndex = prevSemaphoreIndex; // revert + } + break; + + case VK_ERROR_SURFACE_LOST_KHR: + if (op == SwapchainOp::Present) + { + AXLOGI("vkQueuePresentKHR: surface lost"); + } + else + { + AXLOGI("vkAcquireNextImageKHR: surface lost"); + _semaphoreIndex = prevSemaphoreIndex; // revert + } + break; + + default: + if (op == SwapchainOp::Present) + { + AXLOGE("axmol: vkQueuePresentKHR fail: {}", (unsigned int)result); + AXASSERT(result && false, "vkQueuePresentKHR failed"); + } + else + { + AXLOGE("axmol: vkAcquireNextImageKHR fail: {}", (unsigned int)result); + AXASSERT(false, "vkAcquireNextImageKHR failed"); + } + break; + } + _lastError = result; + + return false; +} + +void RenderContextImpl::updateDepthStencilState(const DepthStencilDesc& desc) +{ + AXASSERT(_depthStencilState, "DepthStencilStateImpl not set"); + _depthStencilState->update(desc); +} + +void RenderContextImpl::setViewport(int x, int y, unsigned int w, unsigned int h) +{ + if (w == 0 || h == 0) + return; + + VkViewport vp{}; + +#if 1 + vp.x = static_cast(x); + vp.y = static_cast(y + h); + vp.width = static_cast(w); + vp.height = -static_cast(h); + vp.minDepth = 0.0f; + vp.maxDepth = 1.0f; +#else + vp.x = static_cast(x); + vp.y = static_cast(y); + vp.width = static_cast(w); + vp.height = static_cast(h); + vp.minDepth = 0.0f; + vp.maxDepth = 1.0f; +#endif + + if (vp != _cachedViewport) + { + _cachedViewport = vp; + markDynamicStateDirty(DynamicStateBits::Viewport); + } +} + +void RenderContextImpl::setScissorRect(bool isEnabled, float x, float y, float width, float height) +{ + VkRect2D rect{}; + if (isEnabled) + { + const float rtW = static_cast(_renderTargetWidth); + const float rtH = static_cast(_renderTargetHeight); + + // Clamp and normalize coordinates + const int32_t minX = static_cast(std::clamp(x, 0.f, rtW)); + const int32_t minY = static_cast(std::clamp(y, 0.f, rtH)); + const int32_t maxX = static_cast(std::clamp(x + width, 0.f, rtW)); + const int32_t maxY = static_cast(std::clamp(y + height, 0.f, rtH)); + + rect.offset.x = minX; + rect.offset.y = static_cast(rtH) - maxY; // filp Y + rect.extent.width = static_cast(std::max(0, maxX - minX)); + rect.extent.height = static_cast(std::max(0, maxY - minY)); + } + else + { + rect.offset = {0, 0}; + rect.extent = {_renderTargetWidth, _renderTargetHeight}; + } + + if (_scissorEnabled != isEnabled || _cachedScissor != rect) + { + _scissorEnabled = isEnabled; + _cachedScissor = rect; + markDynamicStateDirty(DynamicStateBits::Scissor); + } +} + +void RenderContextImpl::setCullMode(CullMode mode) +{ + VkCullModeFlags nativeMode{0}; + switch (mode) + { + case CullMode::NONE: + nativeMode = VK_CULL_MODE_NONE; + break; + case CullMode::BACK: + nativeMode = VK_CULL_MODE_BACK_BIT; + break; + case CullMode::FRONT: + nativeMode = VK_CULL_MODE_FRONT_BIT; + break; + } + + if (_cachedCullMode != nativeMode) + { + _cachedCullMode = nativeMode; + markDynamicStateDirty(DynamicStateBits::CullMode); + } +} + +void RenderContextImpl::setWinding(Winding winding) +{ + VkFrontFace frontFace = VkFrontFace::VK_FRONT_FACE_MAX_ENUM; + switch (winding) + { + case Winding::CLOCK_WISE: + frontFace = VK_FRONT_FACE_CLOCKWISE; + break; + case Winding::COUNTER_CLOCK_WISE: + frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; + break; + } + + if (frontFace != _cachedFrontFace) + { + _cachedFrontFace = frontFace; + markDynamicStateDirty(DynamicStateBits::FrontFace); + } +} + +void RenderContextImpl::setStencilReferenceValue(uint32_t value) +{ + if (value != _stencilReferenceValue) + { + RenderContext::setStencilReferenceValue(value); + markDynamicStateDirty(DynamicStateBits::StencilRef); + } +} + +void RenderContextImpl::setVertexBuffer(Buffer* buffer) +{ + if (!buffer || _vertexBuffer == buffer) + return; + buffer->retain(); + AX_SAFE_RELEASE(_vertexBuffer); + _vertexBuffer = static_cast(buffer); +} + +void RenderContextImpl::setIndexBuffer(Buffer* buffer) +{ + if (!buffer || _indexBuffer == buffer) + return; + buffer->retain(); + AX_SAFE_RELEASE(_indexBuffer); + _indexBuffer = static_cast(buffer); +} + +void RenderContextImpl::setInstanceBuffer(Buffer* buffer) +{ + if (!buffer || _instanceBuffer == buffer) + return; + buffer->retain(); + AX_SAFE_RELEASE(_instanceBuffer); + _instanceBuffer = static_cast(buffer); +} + +void RenderContextImpl::updatePipelineState(const RenderTarget* rt, const PipelineDesc& desc) +{ + RenderContext::updatePipelineState(rt, desc); + AXASSERT(_renderPipeline, "RenderPipelineImpl not set"); + _renderPipeline->prepareUpdate(_depthStencilState); + _renderPipeline->update(rt, desc); + + // Bind pipeline + auto pipeline = _renderPipeline->getVkPipeline(); + if (_boundPipeline != pipeline) + { + vkCmdBindPipeline(_currentCmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline); + _boundPipeline = pipeline; + bitmask::set(_inFlightDynamicDirtyBits[_currentFrame], PIPELINE_REQUIRED_DYNAMIC_BITS); + } +} + +void RenderContextImpl::applyPendingDynamicStates() +{ + // Viewport + if (bitmask::any(_inFlightDynamicDirtyBits[_currentFrame], DynamicStateBits::Viewport)) + { + vkCmdSetViewport(_currentCmdBuffer, 0, 1, &_cachedViewport); + bitmask::clear(_inFlightDynamicDirtyBits[_currentFrame], DynamicStateBits::Viewport); + } + + // Scissor + if (bitmask::any(_inFlightDynamicDirtyBits[_currentFrame], DynamicStateBits::Scissor)) + { + vkCmdSetScissor(_currentCmdBuffer, 0, 1, &_cachedScissor); + bitmask::clear(_inFlightDynamicDirtyBits[_currentFrame], DynamicStateBits::Scissor); + } + + // Stencil reference if used + if (bitmask::any(_inFlightDynamicDirtyBits[_currentFrame], DynamicStateBits::StencilRef)) + { + vkCmdSetStencilReference(_currentCmdBuffer, VK_STENCIL_FRONT_AND_BACK, _stencilReferenceValue); + bitmask::clear(_inFlightDynamicDirtyBits[_currentFrame], DynamicStateBits::StencilRef); + } + + // CullMode and FrontFace via EXT dynamic state if available + if (bitmask::any(_inFlightDynamicDirtyBits[_currentFrame], DynamicStateBits::CullMode)) + { + vkCmdSetCullModeEXT(_currentCmdBuffer, _cachedCullMode); + bitmask::clear(_inFlightDynamicDirtyBits[_currentFrame], DynamicStateBits::CullMode); + } + if (bitmask::any(_inFlightDynamicDirtyBits[_currentFrame], DynamicStateBits::FrontFace)) + { + vkCmdSetFrontFaceEXT(_currentCmdBuffer, _cachedFrontFace); + bitmask::clear(_inFlightDynamicDirtyBits[_currentFrame], DynamicStateBits::FrontFace); + } +} + +void RenderContextImpl::removeCachedPipelines(VkRenderPass rp) +{ + if (_renderPipeline) + _renderPipeline->removeCachedPipelines(rp); +} + +void RenderContextImpl::prepareDrawing() +{ + AXASSERT(_programState, "ProgramState must be set before drawing"); + AXASSERT(_renderPipeline, "RenderPipelineImpl must be set before drawing"); + AXASSERT(_boundPipeline, "boundPipeline must be set before drawing"); + + applyPendingDynamicStates(); + + // Populate CPU-side uniforms via callbacks + for (auto& cb : _programState->getCallbackUniforms()) + cb.second(_programState, cb.first); + + // Acquire descriptor sets for this frame, matching current pipeline layout + VkPipelineLayout pipelineLayout = _renderPipeline->getVkPipelineLayout(); + const auto dslState = _renderPipeline->getDescriptorSetLayoutState(); + +#if _AX_USE_DESCRIPTOR_CACHE + auto& descriptorState = _inFlightDescriptorStates[_currentFrame].emplace_back(); + bool ok = _renderPipeline->acquireDescriptorState(descriptorState, _currentFrame); + AXASSERT(ok, "Failed to acquire descriptor sets"); + auto& descriptorSets = descriptorState.sets; +#else + VkDescriptorSetAllocateInfo allocInfo{}; + allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; + allocInfo.descriptorPool = _descriptorPools[_currentFrame]; + auto descriptorSetLayoutState = _renderPipeline->getDescriptorSetLayoutState(); + allocInfo.descriptorSetCount = descriptorSetLayoutState->descriptorSetLayoutCount; + allocInfo.pSetLayouts = descriptorSetLayoutState->descriptorSetLayouts.data(); + + std::array descriptorSets{}; + VkResult res = vkAllocateDescriptorSets(_device, &allocInfo, descriptorSets.data()); + AXASSERT(res == VK_SUCCESS, "Failed to allocate descriptor sets"); +#endif + + assert(descriptorSets[RenderPipelineImpl::SET_INDEX_UBO]); + + // Prepare write lists sized to expected UBO + sampler descriptors + auto& writes = _descriptorWritesPerFrame; + writes.clear(); + writes.reserve(dslState->uniformDescriptorCount + dslState->samplerDescriptorCount); + + VkDescriptorBufferInfo bufferInfos[2] = {}; + + // --- Vertex UBO (set=0, binding=VS_UBO_BINDING_INDEX) --- + auto vertUB = _programState->getVertexUniformBuffer(); + if (!vertUB.empty()) + { + UniformSlice s = allocateUniformSlice(vertUB.size()); + std::memcpy(s.cpuPtr, vertUB.data(), vertUB.size()); + + VkWriteDescriptorSet& write = writes.emplace_back(); + VkDescriptorBufferInfo& bufferInfo = bufferInfos[0]; + + bufferInfo.buffer = _uniformRings[_currentFrame].buffer; + bufferInfo.offset = static_cast(s.offset); + bufferInfo.range = static_cast(vertUB.size()); + + write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + write.dstSet = descriptorSets[RenderPipelineImpl::SET_INDEX_UBO]; // renamed index + write.dstBinding = VS_UBO_BINDING_INDEX; + write.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + write.descriptorCount = 1; + write.pBufferInfo = &bufferInfo; + } + + // --- Fragment UBO (set=0, binding=FS_UBO_BINDING_INDEX) --- + auto fragUB = _programState->getFragmentUniformBuffer(); + if (!fragUB.empty()) + { + UniformSlice s = allocateUniformSlice(fragUB.size()); + std::memcpy(s.cpuPtr, fragUB.data(), fragUB.size()); + + VkWriteDescriptorSet& write = writes.emplace_back(); + VkDescriptorBufferInfo& bufferInfo = bufferInfos[1]; + + bufferInfo.buffer = _uniformRings[_currentFrame].buffer; + bufferInfo.offset = static_cast(s.offset); + bufferInfo.range = static_cast(fragUB.size()); + + write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + write.dstSet = descriptorSets[RenderPipelineImpl::SET_INDEX_UBO]; + write.dstBinding = FS_UBO_BINDING_INDEX; + write.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + write.descriptorCount = 1; + write.pBufferInfo = &bufferInfo; + } + + // --- Samplers (set=1, binding=N) --- + auto& imageInfos = _descriptorImageInfosPerFrame; + imageInfos.clear(); + imageInfos.reserve(dslState->samplerDescriptorCount); + + for (const auto& [bindingIndex, bindingSet] : _programState->getTextureBindingSets()) + { + const auto& texs = bindingSet.texs; + if (texs.empty()) + continue; + + // Remember current offset in imageInfos before appending + const size_t offset = imageInfos.size(); + + if (texs.size() == 1) + { + auto* textureImpl = static_cast(texs[0]); + VkDescriptorImageInfo& imageInfo = imageInfos.emplace_back(); + imageInfo.sampler = textureImpl->getSampler(); + imageInfo.imageView = textureImpl->internalHandle().view; + imageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + } + else + { + for (auto tex : texs) + { + auto textureImpl = static_cast(tex); + VkDescriptorImageInfo& imageInfo = imageInfos.emplace_back(); + imageInfo.sampler = textureImpl->getSampler(); + imageInfo.imageView = textureImpl->internalHandle().view; + imageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + } + } + + VkWriteDescriptorSet& write = writes.emplace_back(); + write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + write.dstSet = descriptorSets[RenderPipelineImpl::SET_INDEX_SAMPLER]; + write.dstBinding = bindingIndex; + write.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + write.descriptorCount = static_cast(texs.size()); + write.pImageInfo = imageInfos.data() + offset; + } + + // Commit descriptor writes + if (!writes.empty()) + { + vkUpdateDescriptorSets(_device, static_cast(writes.size()), writes.data(), 0, nullptr); + } + + // Bind descriptor sets: bind only the sets that exist + vkCmdBindDescriptorSets(_currentCmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, + dslState->descriptorSetLayoutCount, descriptorSets.data(), 0, nullptr); + + // Bind vertex buffers + if (!_instanceBuffer) + { + VkBuffer buffers[] = {_vertexBuffer->internalHandle()}; + VkDeviceSize offsets[] = {0}; + vkCmdBindVertexBuffers(_currentCmdBuffer, 0, 1, buffers, offsets); + } + else + { + VkBuffer buffers[] = {_vertexBuffer->internalHandle(), _instanceBuffer->internalHandle()}; + VkDeviceSize offsets[] = {0, 0}; + vkCmdBindVertexBuffers(_currentCmdBuffer, 0, 2, buffers, offsets); + } +} + +void RenderContextImpl::drawArrays(PrimitiveType primitiveType, + std::size_t start, + std::size_t count, + bool /*wireframe*/) +{ + prepareDrawing(); + vkCmdSetPrimitiveTopologyEXT(_currentCmdBuffer, toVkPrimitiveTopology(primitiveType)); + vkCmdDraw(_currentCmdBuffer, static_cast(count), 1, static_cast(start), 0); +} + +void RenderContextImpl::drawArraysInstanced(PrimitiveType primitiveType, + std::size_t start, + std::size_t count, + int instanceCount, + bool /*wireframe*/) +{ + prepareDrawing(); + vkCmdSetPrimitiveTopologyEXT(_currentCmdBuffer, toVkPrimitiveTopology(primitiveType)); + vkCmdDraw(_currentCmdBuffer, static_cast(count), static_cast(instanceCount), + static_cast(start), 0); +} + +void RenderContextImpl::drawElements(PrimitiveType primitiveType, + IndexFormat indexType, + std::size_t count, + std::size_t offset, + bool /*wireframe*/) +{ + prepareDrawing(); + + AXASSERT(_indexBuffer, "Index buffer must be set for drawElements"); + VkIndexType vkIndexType = toVkIndexType(indexType); + vkCmdBindIndexBuffer(_currentCmdBuffer, _indexBuffer->internalHandle(), 0, vkIndexType); + + vkCmdSetPrimitiveTopologyEXT(_currentCmdBuffer, toVkPrimitiveTopology(primitiveType)); + vkCmdDrawIndexed(_currentCmdBuffer, static_cast(count), 1, + static_cast(offset / (indexType == IndexFormat::U_SHORT ? 2u : 4u)), 0, 0); +} + +void RenderContextImpl::drawElementsInstanced(PrimitiveType primitiveType, + IndexFormat indexType, + std::size_t count, + std::size_t offset, + int instanceCount, + bool /*wireframe*/) +{ + prepareDrawing(); + + AXASSERT(_indexBuffer, "Index buffer must be set for drawElementsInstanced"); + VkIndexType vkIndexType = toVkIndexType(indexType); + vkCmdBindIndexBuffer(_currentCmdBuffer, _indexBuffer->internalHandle(), 0, vkIndexType); + + vkCmdSetPrimitiveTopologyEXT(_currentCmdBuffer, toVkPrimitiveTopology(primitiveType)); + vkCmdDrawIndexed(_currentCmdBuffer, static_cast(count), static_cast(instanceCount), + static_cast(offset / (indexType == IndexFormat::U_SHORT ? 2u : 4u)), 0, 0); +} + +void RenderContextImpl::readPixels(RenderTarget* rt, + bool preserveAxisHint, + std::function callback) +{ + AX_SAFE_RETAIN(rt); + + _postFrameOps.emplace_back([this, rt, preserveAxisHint, callback = std::move(callback)]() mutable { + readPixelsImpl(rt, preserveAxisHint, callback); + }); +} + +void RenderContextImpl::readPixelsImpl(RenderTarget* rt, + bool /*preserveAxisHint*/, + std::function& callback) +{ + PixelBufferDesc pbd{}; + auto* rtImpl = static_cast(rt); + + auto colorAttachment = rtImpl->getColorAttachment(0); + if (!colorAttachment) + { + callback(pbd); + return; + } + + // ensure last rendering commands submission finished + vkWaitForFences(_device, 1, &_inFlightFences[_currentFrame], VK_TRUE, UINT64_MAX); + + auto& colorDesc = colorAttachment->getDesc(); + + const uint32_t width = colorDesc.width; + const uint32_t height = colorDesc.height; + const VkFormat format = UtilsVK::toVKFormat(colorDesc.pixelFormat); + + // Basic stride for RGBA8 + const uint32_t pixelStride = 4; + const VkDeviceSize bufferSize = static_cast(width) * static_cast(height) * pixelStride; + + // Create HOST_VISIBLE | COHERENT staging buffer + VkBuffer stagingBuf = VK_NULL_HANDLE; + VkDeviceMemory stagingMem = VK_NULL_HANDLE; + + VkBufferCreateInfo bufInfo{VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO}; + bufInfo.size = bufferSize; + bufInfo.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT; + bufInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + AXASSERT(vkCreateBuffer(_device, &bufInfo, nullptr, &stagingBuf) == VK_SUCCESS, "vkCreateBuffer failed"); + + VkMemoryRequirements memReq{}; + vkGetBufferMemoryRequirements(_device, stagingBuf, &memReq); + + uint32_t typeIndex = _driver->findMemoryType( + memReq.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + + VkMemoryAllocateInfo allocInfo{VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO}; + allocInfo.allocationSize = memReq.size; + allocInfo.memoryTypeIndex = typeIndex; + AXASSERT(vkAllocateMemory(_device, &allocInfo, nullptr, &stagingMem) == VK_SUCCESS, "vkAllocateMemory failed"); + AXASSERT(vkBindBufferMemory(_device, stagingBuf, stagingMem, 0) == VK_SUCCESS, "vkBindBufferMemory failed"); + + auto submission = _driver->startIsolateSubmission(); + + VkCommandBufferBeginInfo const binfo{ + .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, + .flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, + }; + + const VkImage srcImage = colorAttachment->internalHandle().image; + + // Read the true current layout from tracker + VkImageLayout currentLayout = colorAttachment->getCurrentLayout(); + if (rtImpl->isDefaultRenderTarget() && currentLayout == VK_IMAGE_LAYOUT_UNDEFINED) + currentLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; + + // Transition to TRANSFER_SRC_OPTIMAL using TextureImpl + colorAttachment->transitionLayout(submission, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); + + // Copy image -> buffer + VkBufferImageCopy copyRegion{}; + copyRegion.bufferOffset = 0; + copyRegion.bufferRowLength = 0; // tightly packed + copyRegion.bufferImageHeight = 0; + copyRegion.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + copyRegion.imageSubresource.mipLevel = 0; + copyRegion.imageSubresource.baseArrayLayer = 0; + copyRegion.imageSubresource.layerCount = 1; + copyRegion.imageOffset = {0, 0, 0}; + copyRegion.imageExtent = {width, height, 1}; + + vkCmdCopyImageToBuffer(submission, srcImage, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, stagingBuf, 1, ©Region); + + // Restore to original layout using TextureImpl + colorAttachment->transitionLayout(submission, currentLayout); + + // Submit and wait + _driver->finishIsolateSubmission(submission); + + // Map and copy out + void* mapped = nullptr; + AXASSERT(vkMapMemory(_device, stagingMem, 0, bufferSize, 0, &mapped) == VK_SUCCESS, "vkMapMemory failed"); + + pbd._width = width; + pbd._height = height; + pbd._data.resize(static_cast(bufferSize)); + std::memcpy(pbd._data.data(), mapped, static_cast(bufferSize)); + + vkUnmapMemory(_device, stagingMem); + + // Cleanup + vkDestroyBuffer(_device, stagingBuf, nullptr); + vkFreeMemory(_device, stagingMem, nullptr); + + callback(pbd); +} + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/RenderContextVK.h b/axmol/rhi/vulkan/RenderContextVK.h new file mode 100644 index 000000000000..f4a86e202d2c --- /dev/null +++ b/axmol/rhi/vulkan/RenderContextVK.h @@ -0,0 +1,252 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once +#include "axmol/rhi/RenderContext.h" +#include "axmol/rhi/vulkan/RenderPipelineVK.h" +#include + +#define _AX_USE_DESCRIPTOR_CACHE 1 + +namespace ax::rhi::vk +{ +class BufferImpl; +class DepthStencilStateImpl; +class RenderPipelineImpl; +class RenderTargetImpl; +class DriverImpl; +class SemaphorePool; + +enum class DynamicStateBits : uint32_t +{ + None = 0, + Viewport = 1 << 0, + Scissor = 1 << 1, + StencilRef = 1 << 2, + CullMode = 1 << 3, + FrontFace = 1 << 4, + +}; + +AX_ENABLE_BITMASK_OPS(DynamicStateBits); + +class RenderContextImpl : public RenderContext +{ + static constexpr DynamicStateBits PIPELINE_REQUIRED_DYNAMIC_BITS = + DynamicStateBits::Viewport | DynamicStateBits::Scissor | DynamicStateBits::StencilRef | + DynamicStateBits::CullMode | DynamicStateBits::FrontFace; + +public: + // Maximum number of VkCommandBuffer handles managed simultaneously by VulkanCommands. + // + // This includes the "current" command buffer that is being written into, as well as any command + // buffers that have been submitted but have not yet finished rendering. Note that Filament can + // issue multiple commit calls in a single frame, and that we use a triple buffered swap chain on + // some platforms. + // + // Heuristic: Triple Buffering (3) multiplied by maximum number of renderpasses (15). + static constexpr int FVK_MAX_COMMAND_BUFFERS = 3 * 15; + static constexpr int IMAGE_READY_SEMAPHORE_COUNT = FVK_MAX_COMMAND_BUFFERS; + + static constexpr uint32_t VI_BINDING_INDEX = 0; + static constexpr uint32_t VI_INSTANCING_BINDING_INDEX = 1; + + static constexpr int VS_UBO_BINDING_INDEX = 0; + static constexpr int FS_UBO_BINDING_INDEX = 1; + static constexpr int MAX_FRAMES_IN_FLIGHT = RenderPipelineImpl::MAX_FRAMES_IN_FLIGHT; + + RenderContextImpl(DriverImpl* driver, VkSurfaceKHR surface); + ~RenderContextImpl() override; + + bool updateSurface(void* surface, uint32_t width, uint32_t height) override; + + void setDepthStencilState(DepthStencilState* depthStencilState) override; + void setRenderPipeline(RenderPipeline* renderPipeline) override; + + bool beginFrame() override; + void beginRenderPass(RenderTarget* renderTarget, const RenderPassDesc& descriptor) override; + void updateDepthStencilState(const DepthStencilDesc& descriptor) override; + void updatePipelineState(const RenderTarget* rt, const PipelineDesc& descriptor) override; + + void setViewport(int x, int y, unsigned int w, unsigned int h) override; + void setCullMode(CullMode mode) override; + void setWinding(Winding winding) override; + void setScissorRect(bool isEnabled, float x, float y, float width, float height) override; + + void setVertexBuffer(Buffer* buffer) override; + void setIndexBuffer(Buffer* buffer) override; + void setInstanceBuffer(Buffer* buffer) override; + + void drawArrays(PrimitiveType primitiveType, std::size_t start, std::size_t count, bool wireframe) override; + void drawArraysInstanced(PrimitiveType primitiveType, + std::size_t start, + std::size_t count, + int instanceCount, + bool wireframe) override; + void drawElements(PrimitiveType primitiveType, + IndexFormat indexType, + std::size_t count, + std::size_t offset, + bool wireframe) override; + void drawElementsInstanced(PrimitiveType primitiveType, + IndexFormat indexType, + std::size_t count, + std::size_t offset, + int instanceCount, + bool wireframe) override; + + void endRenderPass() override; + void endFrame() override; + + void readPixels(RenderTarget* rt, + bool preserveAxisHint, + std::function callback) override; + + void setStencilReferenceValue(uint32_t value) override; + + void prepareDrawing(); + + void removeCachedPipelines(VkRenderPass rp); + +private: + void recreateSwapchain(); + void createCommandBuffers(); + + enum class SwapchainOp + { + Acquire, + Present + }; + bool handleSwapchainResult(VkResult result, SwapchainOp op, uint32_t prevSemaphoreIndex); + +#if !_AX_USE_DESCRIPTOR_CACHE + void createDescriptorPool(); +#endif + + void readPixelsImpl(RenderTarget* rt, bool preserveAxisHint, std::function& callback); + + void markDynamicStateDirty(DynamicStateBits bits) noexcept + { + bitmask::set(_inFlightDynamicDirtyBits[0], bits); + bitmask::set(_inFlightDynamicDirtyBits[1], bits); + } + + void applyPendingDynamicStates(); + + DriverImpl* _driver{nullptr}; + VkSurfaceKHR _surface{VK_NULL_HANDLE}; + VkDevice _device{VK_NULL_HANDLE}; + + VkQueue _graphicsQueue{VK_NULL_HANDLE}; + VkQueue _presentQueue{VK_NULL_HANDLE}; + + VkSwapchainKHR _swapchain{VK_NULL_HANDLE}; + uint32_t _currentImageIndex{0}; // current swapchain image index + + VkCommandPool _commandPool{VK_NULL_HANDLE}; + + axstd::pod_vector _swapchainImages; + axstd::pod_vector _swapchainImageViews; + + uint32_t _semaphoreIndex{0}; + + uint32_t _currentFrame{0}; + std::array _inFlightDynamicDirtyBits{DynamicStateBits::None}; + std::array _commandBuffers; + std::array _inFlightFences{}; +#if !_AX_USE_DESCRIPTOR_CACHE + std::array _descriptorPools{}; +#endif + std::array, MAX_FRAMES_IN_FLIGHT> _inFlightDescriptorStates; + + axstd::pod_vector _acquireCompleteSemaphores; + axstd::pod_vector _renderFinishedSemaphores; + + axstd::pod_vector _descriptorWritesPerFrame; + axstd::pod_vector _descriptorImageInfosPerFrame; + + VkCommandBuffer _currentCmdBuffer{VK_NULL_HANDLE}; // weak pointer + + DepthStencilStateImpl* _depthStencilState{nullptr}; + RenderPipelineImpl* _renderPipeline{nullptr}; + BufferImpl* _vertexBuffer{nullptr}; + BufferImpl* _indexBuffer{nullptr}; + BufferImpl* _instanceBuffer{nullptr}; + + VkPipeline _boundPipeline{VK_NULL_HANDLE}; + +#pragma region Uniform ring buffer + + // Per-frame uniform ring buffer (persistently mapped) + struct UniformRingBuffer + { + VkBuffer buffer{VK_NULL_HANDLE}; + VkDeviceMemory memory{VK_NULL_HANDLE}; + uint8_t* mapped{nullptr}; // persistently mapped host pointer + std::size_t capacity{0}; // total bytes + std::size_t writeHead{0}; // current write offset + std::size_t align{256}; // device minUniformBufferOffsetAlignment (fallback 256) + bool isCoherent{true}; // memory coherency hint + }; + + // Allocate an aligned slice in current frame ring + struct UniformSlice + { + std::size_t offset{0}; + std::size_t size{0}; + uint8_t* cpuPtr{nullptr}; + }; + std::array _uniformRings{}; + + // Create ring buffers for all frames-in-flight + void createUniformRingBuffers(std::size_t capacityBytes); + // Destroy ring buffers + void destroyUniformRingBuffers(); + // Reset current frame ring write head (after waiting its fence) + void resetUniformRingForCurrentFrame(); + + UniformSlice allocateUniformSlice(std::size_t size); +#pragma endregion + + std::vector> _postFrameOps; + + uint32_t _renderTargetWidth{0}; + uint32_t _renderTargetHeight{0}; + + uint32_t _screenWidth{0}; + uint32_t _screenHeight{0}; + + VkViewport _cachedViewport{}; + VkRect2D _cachedScissor{}; + VkCullModeFlags _cachedCullMode{VK_CULL_MODE_NONE}; + VkFrontFace _cachedFrontFace{VK_FRONT_FACE_COUNTER_CLOCKWISE}; + + bool _scissorEnabled{false}; + + bool _swapchainDirty{false}; + bool _inFrame{false}; + bool _suboptimal{false}; + + uint32_t _lastError{0}; +}; +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/RenderPipelineVK.cpp b/axmol/rhi/vulkan/RenderPipelineVK.cpp new file mode 100644 index 000000000000..e21ae3228702 --- /dev/null +++ b/axmol/rhi/vulkan/RenderPipelineVK.cpp @@ -0,0 +1,603 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#include "axmol/rhi/vulkan/RenderPipelineVK.h" +#include "axmol/rhi/vulkan/RenderTargetVK.h" +#include "axmol/rhi/vulkan/DepthStencilStateVK.h" +#include "axmol/rhi/vulkan/VertexLayoutVK.h" +#include "axmol/rhi/vulkan/ProgramVK.h" +#include "axmol/rhi/vulkan/ShaderModuleVK.h" +#include "axmol/rhi/ProgramState.h" +#include "axmol/tlx/hlookup.hpp" +#include "axmol/tlx/hash.hpp" +#include + +namespace ax::rhi::vk +{ + +// --- Helpers: enum mapping and ID generation ------------------------------- + +static inline VkBlendOp toVkBlendOp(BlendOp op) +{ + switch (op) + { + case BlendOp::ADD: + return VK_BLEND_OP_ADD; + case BlendOp::SUBTRACT: + return VK_BLEND_OP_SUBTRACT; + case BlendOp::REVERSE_SUBTRACT: + return VK_BLEND_OP_REVERSE_SUBTRACT; + } + return VK_BLEND_OP_ADD; +} + +static inline VkBlendFactor toVkBlendFactor(BlendFactor f) +{ + switch (f) + { + case BlendFactor::ZERO: + return VK_BLEND_FACTOR_ZERO; + case BlendFactor::ONE: + return VK_BLEND_FACTOR_ONE; + case BlendFactor::SRC_COLOR: + return VK_BLEND_FACTOR_SRC_COLOR; + case BlendFactor::ONE_MINUS_SRC_COLOR: + return VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR; + case BlendFactor::SRC_ALPHA: + return VK_BLEND_FACTOR_SRC_ALPHA; + case BlendFactor::ONE_MINUS_SRC_ALPHA: + return VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; + case BlendFactor::DST_COLOR: + return VK_BLEND_FACTOR_DST_COLOR; + case BlendFactor::ONE_MINUS_DST_COLOR: + return VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR; + case BlendFactor::DST_ALPHA: + return VK_BLEND_FACTOR_DST_ALPHA; + case BlendFactor::ONE_MINUS_DST_ALPHA: + return VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA; + case BlendFactor::CONSTANT_ALPHA: + return VK_BLEND_FACTOR_CONSTANT_ALPHA; + case BlendFactor::SRC_ALPHA_SATURATE: + return VK_BLEND_FACTOR_SRC_ALPHA_SATURATE; + case BlendFactor::ONE_MINUS_CONSTANT_ALPHA: + return VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA; + case BlendFactor::BLEND_COLOR: + return VK_BLEND_FACTOR_CONSTANT_COLOR; // maps to blend constant + } + return VK_BLEND_FACTOR_ONE; +} + +static inline VkColorComponentFlags toVkColorMask(ColorWriteMask mask) +{ + VkColorComponentFlags flags = 0; + // Mask is user-defined bitset; check each flag + if ((static_cast(mask) & static_cast(ColorWriteMask::RED)) != 0) + flags |= VK_COLOR_COMPONENT_R_BIT; + if ((static_cast(mask) & static_cast(ColorWriteMask::GREEN)) != 0) + flags |= VK_COLOR_COMPONENT_G_BIT; + if ((static_cast(mask) & static_cast(ColorWriteMask::BLUE)) != 0) + flags |= VK_COLOR_COMPONENT_B_BIT; + if ((static_cast(mask) & static_cast(ColorWriteMask::ALPHA)) != 0) + flags |= VK_COLOR_COMPONENT_A_BIT; + return flags; +} + +// Generate a unique key for pipeline caching. +// +// Notes: +// - _activePipelineLayout and _activeDescriptorSetLayouts are derived from the active program, +// so they do not need to be hashed separately. +// - The pipeline cache key only needs to include states that directly affect pipeline creation: +// blendDesc (fixed-function blend state), program (shader combination), vertexLayout, +// and renderPass (framebuffer attachment formats). +// +// Important: +// - Axmol currently does not use dynamic rendering, so renderPass must be included in the hash +// to ensure pipelines are correctly distinguished by their attachment formats. +// - If Axmol adopts VK_KHR_dynamic_rendering in the future, renderPass will no longer need to be +// part of the key. In that case, attachment formats (color/depth/stencil) should be hashed instead. +// +// This design minimizes redundant PSOs while ensuring that any change in these critical states +// correctly triggers pipeline re-creation. +static inline uintptr_t makePipelineKey(const rhi::BlendDesc& blendDesc, + const DepthStencilStateImpl* dsState, + void* program, + uint32_t vlHash, + void* renderPass) +{ + struct HashMe + { + rhi::BlendDesc blend{}; + uintptr_t dsHash; + void* prog; + void* pass; + uint32_t vlHash; + uint32_t padding{0}; + }; + HashMe hashMe{ + .blend = blendDesc, .dsHash = dsState->getHash(), .prog = program, .pass = renderPass, .vlHash = vlHash}; + + return axstd::hash_bytes(&hashMe, sizeof(hashMe), 0); +} + +// Build the VkPipelineColorBlendAttachmentState from BlendDesc +static inline VkPipelineColorBlendAttachmentState makeVkBlendAttachment(const BlendDesc& desc) +{ + VkPipelineColorBlendAttachmentState att{}; + att.colorWriteMask = toVkColorMask(desc.writeMask); + att.blendEnable = desc.blendEnabled ? VK_TRUE : VK_FALSE; + att.srcColorBlendFactor = toVkBlendFactor(desc.sourceRGBBlendFactor); + att.dstColorBlendFactor = toVkBlendFactor(desc.destinationRGBBlendFactor); + att.colorBlendOp = toVkBlendOp(desc.rgbBlendOp); + att.srcAlphaBlendFactor = toVkBlendFactor(desc.sourceAlphaBlendFactor); + att.dstAlphaBlendFactor = toVkBlendFactor(desc.destinationAlphaBlendFactor); + att.alphaBlendOp = toVkBlendOp(desc.alphaBlendOp); + return att; +} + +RenderPipelineImpl::RenderPipelineImpl(VkDevice device) : _device(device) +{ + initializePipelineDefaults(); +} + +RenderPipelineImpl::~RenderPipelineImpl() +{ + vkDeviceWaitIdle(_device); + + for (auto& [_, res] : _pipelineLayoutCache) + { + if (res) + vkDestroyPipelineLayout(_device, res, nullptr); + } + _pipelineLayoutCache.clear(); + + for (auto& [_, state] : _descriptorLayoutCache) + { + auto& res = state.descriptorSetLayouts; + if (res[SET_INDEX_UBO]) + vkDestroyDescriptorSetLayout(_device, res[SET_INDEX_UBO], nullptr); + if (res[SET_INDEX_SAMPLER]) + vkDestroyDescriptorSetLayout(_device, res[SET_INDEX_SAMPLER], nullptr); + } + _descriptorLayoutCache.clear(); + + for (auto pool : _descriptorPools) + vkDestroyDescriptorPool(_device, pool, nullptr); + _descriptorPools.clear(); + + for (auto& [_, res] : _pipelineCache) + { + if (res) + vkDestroyPipeline(_device, res, nullptr); + } + _pipelineCache.clear(); +} + +void RenderPipelineImpl::initializePipelineDefaults() +{ + // Input Assembly + _iaState = {}; + _iaState.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; + _iaState.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + _iaState.primitiveRestartEnable = VK_FALSE; + + // Viewport/Scissor + _vpState = {}; + _vpState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; + _vpState.viewportCount = 1; + _vpState.scissorCount = 1; + + // Rasterizer + _rasterState = {}; + _rasterState.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; + _rasterState.depthClampEnable = VK_FALSE; + _rasterState.rasterizerDiscardEnable = VK_FALSE; + _rasterState.polygonMode = VK_POLYGON_MODE_FILL; + _rasterState.cullMode = VK_CULL_MODE_BACK_BIT; + _rasterState.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; + _rasterState.lineWidth = 1.0f; + + // Multisample + _msState = {}; + _msState.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; + _msState.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + _msState.sampleShadingEnable = VK_FALSE; + + // Dynamic States + static VkDynamicState dynamics[] = {VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR, + VK_DYNAMIC_STATE_STENCIL_REFERENCE, VK_DYNAMIC_STATE_BLEND_CONSTANTS, + VK_DYNAMIC_STATE_DEPTH_BIAS, VK_DYNAMIC_STATE_CULL_MODE_EXT, + VK_DYNAMIC_STATE_FRONT_FACE_EXT, VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT}; + _dynState = {}; + _dynState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; + _dynState.dynamicStateCount = static_cast(std::size(dynamics)); + _dynState.pDynamicStates = dynamics; + + // preallocate 1 descriptor pool + allocateDescriptorPool(); +} + +void RenderPipelineImpl::update(const RenderTarget* rt, const PipelineDesc& desc) +{ + // Validate inputs + if (!rt || !desc.programState || !desc.vertexLayout) + { + AXASSERT(false, "RenderPipelineImpl::update: invalid inputs"); + return; + } + + // 1) Retrieve VkRenderPass from RenderTargetImpl (owned/cached by RenderTarget) + // RenderTarget is expected to provide a Vulkan render pass handle. + // If your concrete type differs, adjust the accessor below. + auto* vkRT = static_cast(rt); + VkRenderPass renderPass = vkRT->getVkRenderPass(); // provided by RenderTargetImpl + + auto program = static_cast(desc.programState->getProgram()); + + updateBlendState(desc.blendDesc); + updateDescriptorSetLayouts(program); + updatePipelineLayout(program); + updateGraphicsPipeline(desc, renderPass, program); +} + +void RenderPipelineImpl::updateBlendState(const BlendDesc& blendDesc) +{ + _activeAttachment = makeVkBlendAttachment(blendDesc); + _activeBlendState = {}; + _activeBlendState.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; + _activeBlendState.logicOpEnable = VK_FALSE; + _activeBlendState.attachmentCount = 1; + _activeBlendState.pAttachments = &_activeAttachment; + std::fill(std::begin(_activeBlendState.blendConstants), std::end(_activeBlendState.blendConstants), 0.0f); +} + +void RenderPipelineImpl::updateDescriptorSetLayouts(ProgramImpl* program) +{ + uintptr_t progKey = (uintptr_t)program; + auto it = _descriptorLayoutCache.find(progKey); + if (it != _descriptorLayoutCache.end()) + { + _activeDSL = &it->second; + return; + } + + axstd::pod_vector ubBindings; + axstd::pod_vector samplerBindings; + + DescriptorSetLayoutState dslState{}; + + // VS uniform blocks -> set=0 + auto vs = program->getVertexShader(); + for (auto& ub : vs->getActiveUniformBlockInfos()) + { + VkDescriptorSetLayoutBinding& b = ubBindings.emplace_back(); + b.binding = ub.binding; + b.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + b.descriptorCount = 1; + b.stageFlags = VK_SHADER_STAGE_VERTEX_BIT; + b.pImmutableSamplers = nullptr; + + ++dslState.uniformDescriptorCount; + } + + // FS uniform blocks -> set=0 + auto fs = program->getFragmentShader(); + for (auto& ub : fs->getActiveUniformBlockInfos()) + { + VkDescriptorSetLayoutBinding& b = ubBindings.emplace_back(); + b.binding = ub.binding; + b.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + b.descriptorCount = 1; + b.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; + b.pImmutableSamplers = nullptr; + + ++dslState.uniformDescriptorCount; + } + + // FS samplers -> set=1 + for (auto& smp : fs->getActiveSamplerInfos()) + { + VkDescriptorSetLayoutBinding& b = samplerBindings.emplace_back(); + b.binding = smp.location; + b.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + b.descriptorCount = smp.count; + b.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; + b.pImmutableSamplers = nullptr; + + dslState.samplerDescriptorCount += smp.count; + } + + // Create DescriptorSetLayout for UBOs (set=0) + VkDescriptorSetLayoutCreateInfo dsl0{}; + dsl0.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + dsl0.bindingCount = static_cast(ubBindings.size()); + dsl0.pBindings = ubBindings.data(); + vkCreateDescriptorSetLayout(_device, &dsl0, nullptr, &dslState.descriptorSetLayouts[SET_INDEX_UBO]); + + dslState.descriptorSetLayoutCount = 1; + if (!samplerBindings.empty()) + { + // Create DescriptorSetLayout for samplers (set=1) + VkDescriptorSetLayoutCreateInfo dsl1{}; + dsl1.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + dsl1.bindingCount = static_cast(samplerBindings.size()); + dsl1.pBindings = samplerBindings.data(); + auto vr = + vkCreateDescriptorSetLayout(_device, &dsl1, nullptr, &dslState.descriptorSetLayouts[SET_INDEX_SAMPLER]); + assert(vr == VK_SUCCESS); + ++dslState.descriptorSetLayoutCount; + } + + _activeDSL = &_descriptorLayoutCache.emplace(progKey, dslState).first->second; +} + +void RenderPipelineImpl::updatePipelineLayout(ProgramImpl* program) +{ + uintptr_t progKey = (uintptr_t)program; + auto it = _pipelineLayoutCache.find(progKey); + if (it != _pipelineLayoutCache.end()) + { + _activePipelineLayout = it->second; + return; + } + + VkPipelineLayout pipelineLayout{VK_NULL_HANDLE}; + VkPipelineLayoutCreateInfo plc{}; + plc.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; + plc.setLayoutCount = _activeDSL->descriptorSetLayoutCount; + plc.pSetLayouts = _activeDSL->descriptorSetLayouts.data(); + plc.pushConstantRangeCount = 0; + plc.pPushConstantRanges = nullptr; + + VkResult result = vkCreatePipelineLayout(_device, &plc, nullptr, &pipelineLayout); + if (result == VK_SUCCESS) + { + _pipelineLayoutCache.emplace(progKey, pipelineLayout); + _activePipelineLayout = pipelineLayout; + } + else + { + AXLOGE("vkCreatePipelineLayout fail: {}", (int)result); + } +} + +void RenderPipelineImpl::updateGraphicsPipeline(const PipelineDesc& desc, VkRenderPass renderPass, ProgramImpl* program) +{ + const uintptr_t pipelineKey = + makePipelineKey(desc.blendDesc, _dsState, program, desc.vertexLayout->getHash(), renderPass); + auto it = _pipelineCache.find(pipelineKey); + if (it != _pipelineCache.end()) + { + _activePipeline = it->second; + return; + } + + // Shader stages + axstd::pod_vector stages; + if (auto vs = program->getVSModule()) + { + VkPipelineShaderStageCreateInfo& s = stages.emplace_back(); + s.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + s.stage = VK_SHADER_STAGE_VERTEX_BIT; + s.module = vs; + s.pName = "main"; + } + if (auto fs = program->getFSModule()) + { + VkPipelineShaderStageCreateInfo& s = stages.emplace_back(); + s.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + s.stage = VK_SHADER_STAGE_FRAGMENT_BIT; + s.module = fs; + s.pName = "main"; + } + + auto& viState = static_cast(desc.vertexLayout)->getVkCreateInfo(); + VkGraphicsPipelineCreateInfo gp{}; + gp.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; + gp.stageCount = static_cast(stages.size()); + gp.pStages = stages.data(); + gp.pVertexInputState = &viState; + gp.pInputAssemblyState = &_iaState; + gp.pViewportState = &_vpState; + gp.pRasterizationState = &_rasterState; + gp.pMultisampleState = &_msState; + gp.pDepthStencilState = &_dsState->getVkDepthStencilState(); + gp.pColorBlendState = &_activeBlendState; + gp.pDynamicState = &_dynState; + gp.layout = _activePipelineLayout; + gp.renderPass = renderPass; + gp.subpass = 0; + + VkPipeline pipeline = VK_NULL_HANDLE; + VkResult res = vkCreateGraphicsPipelines(_device, VK_NULL_HANDLE, 1, &gp, nullptr, &pipeline); + if (res == VK_SUCCESS) + { + _renderPassToPipelineMap.emplace(renderPass, pipelineKey); + _pipelineCache.emplace(pipelineKey, pipeline); + _activePipeline = pipeline; + } + else + { + _activePipeline = nullptr; + AXLOGE("vkCreateGraphicsPipelines fail: {}", (int)res); + } +} + +bool RenderPipelineImpl::acquireDescriptorState(DescriptorState& state, int frameIndex) +{ + AXASSERT(_activeDSL, "DescriptorSetState must be valid"); + auto* dss = _activeDSL; + + // 1) Try to reuse a recycled allocation from the cache + auto it = _descriptorCache.find(_activePipelineLayout); + if (it != _descriptorCache.end()) + { + auto& pool = it->second; + auto& freeList = pool[frameIndex]; + if (!freeList.empty()) + { + state = freeList.back(); + freeList.pop_back(); + + assert(state.frameIndex == -1); + state.frameIndex = frameIndex; + return true; + } + } + + auto& outSets = state.sets; + state.frameIndex = frameIndex; + state.ownerLayout = _activePipelineLayout; + + VkDescriptorSetAllocateInfo ai{}; + ai.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; + ai.descriptorPool = _descriptorPools.back(); + ai.descriptorSetCount = dss->descriptorSetLayoutCount; + ai.pSetLayouts = dss->descriptorSetLayouts.data(); + + VkResult vr = vkAllocateDescriptorSets(_device, &ai, outSets.data()); + if (vr == VK_SUCCESS) + return true; + + // 3) If the pool is exhausted or fragmented, create a new pool and retry + if (vr == VK_ERROR_OUT_OF_POOL_MEMORY || vr == VK_ERROR_FRAGMENTED_POOL) + { + ai.descriptorPool = allocateDescriptorPool(); + vr = vkAllocateDescriptorSets(_device, &ai, outSets.data()); + return vr == VK_SUCCESS; + } + + AXLOGE("vkAllocateDescriptorSets failed: {}", (int)vr); + return false; +} + +void RenderPipelineImpl::recycleDescriptorState(DescriptorState& state) +{ + // Find the cache entry for this layout state + auto it = _descriptorCache.find(state.ownerLayout); + if (it == _descriptorCache.end()) + { + AXLOGD("DescriptorSetCache miss: no pool found for pipelineLayout={}, creating new pool", + fmt::ptr(state.ownerLayout)); + it = _descriptorCache.emplace(state.ownerLayout, DescriptorPool{}).first; + } + + // Push the allocation back into the free list for the given frame index + auto& pool = it->second; + auto& freeList = pool[state.frameIndex]; + state.frameIndex = -1; // mark it's free to reuse + freeList.push_back(state); +} + +VkDescriptorPool RenderPipelineImpl::allocateDescriptorPool() +{ + constexpr VkDescriptorPoolSize poolSizes[] = { + {VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, RenderPipelineImpl::DEFAULT_DESCRIPTOR_POOL_UNIFORM_COUNT}, + {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, RenderPipelineImpl::DEFAULT_DESCRIPTOR_POOL_SAMPLER_COUNT}, + /*{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 32},*/ // SSBO, unused currently + }; + + VkDescriptorPoolCreateInfo pci{}; + pci.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; + pci.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT; + pci.maxSets = DEFAULT_DESCRIPTOR_POOL_MAX_SETS; + pci.poolSizeCount = static_cast(std::size(poolSizes)); + pci.pPoolSizes = poolSizes; + + VkDescriptorPool pool = VK_NULL_HANDLE; + VkResult vr = vkCreateDescriptorPool(_device, &pci, nullptr, &pool); + AXASSERT(vr == VK_SUCCESS, "Failed to create descriptor pool"); + + _descriptorPools.push_back(pool); + + return pool; +} + +void RenderPipelineImpl::removeCachedPipelines(VkRenderPass rp) +{ + auto range = _renderPassToPipelineMap.equal_range(rp); + + if (range.first != range.second) + { + for (auto it = range.first; it != range.second; ++it) + { + auto pipelineKey = it->second; + auto pipelineIt = _pipelineCache.find(pipelineKey); + if (pipelineIt != _pipelineCache.end()) + { + vkDestroyPipeline(_device, pipelineIt->second, nullptr); + _pipelineCache.erase(pipelineIt); + } + } + _renderPassToPipelineMap.erase(range.first, range.second); + } +} + +/** + * @brief Updates input assembly state for dynamic primitive type handling + * Axmol engine uses dynamic primitive types which provides flexibility for most rendering scenarios. + * Current limitation: LINE_LOOP primitive type is not supported in the dynamic implementation. + * This implementation covers the majority of use cases efficiently. If LINE_LOOP support is required + * in the future: + * Uncomment and implement this function + * Call it at appropriate locations in the rendering pipeline + * Include primitive type in pipeline key generation to ensure proper state management + * The dynamic approach balances performance and flexibility while maintaining compatibility + * with modern graphics APIs. + */ +// void RenderPipelineImpl::updateInputAssemblyState(PrimitiveType primType) +//{ +// switch (primType) +// { +// case PrimitiveType::POINT: +// _iaState.topology = VK_PRIMITIVE_TOPOLOGY_POINT_LIST; +// _iaState.primitiveRestartEnable = VK_FALSE; +// break; +// case PrimitiveType::LINE: +// _iaState.topology = VK_PRIMITIVE_TOPOLOGY_LINE_LIST; +// _iaState.primitiveRestartEnable = VK_FALSE; +// break; +// case PrimitiveType::LINE_LOOP: +// _iaState.topology = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP; +// _iaState.primitiveRestartEnable = VK_TRUE; // simulate restart index loop +// break; +// case PrimitiveType::LINE_STRIP: +// _iaState.topology = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP; +// _iaState.primitiveRestartEnable = VK_FALSE; +// break; +// case PrimitiveType::TRIANGLE: +// _iaState.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; +// _iaState.primitiveRestartEnable = VK_FALSE; +// break; +// case PrimitiveType::TRIANGLE_STRIP: +// _iaState.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; +// _iaState.primitiveRestartEnable = VK_FALSE; +// break; +// default: +// _iaState.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; +// _iaState.primitiveRestartEnable = VK_FALSE; +// break; +// } +// } + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/RenderPipelineVK.h b/axmol/rhi/vulkan/RenderPipelineVK.h new file mode 100644 index 000000000000..7c0b14678ba0 --- /dev/null +++ b/axmol/rhi/vulkan/RenderPipelineVK.h @@ -0,0 +1,151 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include "axmol/rhi/RenderPipeline.h" +#include "axmol/tlx/hlookup.hpp" +#include +#include + +namespace ax::rhi::vk +{ +class DepthStencilStateImpl; +class VertexLayoutImpl; +class ProgramImpl; + +/** + * @brief Vulkan-based RenderPipeline implementation + * + * This class manages pipeline creation and caching for Vulkan. + * It converts Axmol's PipelineDesc into Vulkan pipeline states, + * and caches intermediate objects (blend, depth-stencil, rasterizer, etc.) + * to avoid redundant Vulkan object creation. + */ + +class RenderPipelineImpl : public RenderPipeline +{ +public: + static constexpr int MAX_FRAMES_IN_FLIGHT = 2; + + static constexpr int MAX_DESCRIPTOR_SETS = 2; + static constexpr int SET_INDEX_UBO = 0; + static constexpr int SET_INDEX_SAMPLER = 1; + + static constexpr uint32_t DEFAULT_DESCRIPTOR_POOL_UNIFORM_COUNT = 64; + static constexpr uint32_t DEFAULT_DESCRIPTOR_POOL_SAMPLER_COUNT = 64; + static constexpr uint32_t DEFAULT_DESCRIPTOR_POOL_MAX_SETS = 128; + + using VkDescriptorSetArray = std::array; + using VkDescriptorSetLayoutArray = std::array; + struct DescriptorSetLayoutState + { + VkDescriptorSetLayoutArray descriptorSetLayouts{VK_NULL_HANDLE}; + uint32_t descriptorSetLayoutCount{0}; + uint32_t samplerDescriptorCount{0}; + uint32_t uniformDescriptorCount{0}; + }; + + struct DescriptorState + { + VkDescriptorSetArray sets; // Allocated VkDescriptorSets + VkPipelineLayout ownerLayout; // PipelineLayout + int frameIndex; // Frame index (for multi-frame in flight) + }; + + using DescriptorPool = std::array, MAX_FRAMES_IN_FLIGHT>; + + explicit RenderPipelineImpl(VkDevice device); + ~RenderPipelineImpl(); + + void prepareUpdate(DepthStencilStateImpl* ds) { _dsState = ds; } + + void update(const RenderTarget*, const PipelineDesc& desc) override; + + VkPipeline getVkPipeline() const { return _activePipeline; } + VkPipelineLayout getVkPipelineLayout() const { return _activePipelineLayout; } + DescriptorSetLayoutState* getDescriptorSetLayoutState() const { return _activeDSL; } + + bool acquireDescriptorState(DescriptorState& outState, int frameIndex); + void recycleDescriptorState(DescriptorState& state); + + /** + * @brief Updates input assembly state for dynamic primitive type handling + * Axmol engine uses dynamic primitive types which provides flexibility for most rendering scenarios. + * Current limitation: LINE_LOOP primitive type is not supported in the dynamic implementation. + * This implementation covers the majority of use cases efficiently. If LINE_LOOP support is required + * in the future: + * Uncomment and implement this function + * Call it at appropriate locations in the rendering pipeline + * Include primitive type in pipeline key generation to ensure proper state management + * The dynamic approach balances performance and flexibility while maintaining compatibility + * with modern graphics APIs. + */ + // void updateInputAssemblyState(PrimitiveType primitiveType); + + void removeCachedPipelines(VkRenderPass rp); + +private: + void initializePipelineDefaults(); + + void updateBlendState(const BlendDesc& blendDesc); + void updateDescriptorSetLayouts(ProgramImpl* program); + void updatePipelineLayout(ProgramImpl* program); + void updateGraphicsPipeline(const PipelineDesc& desc, VkRenderPass renderPass, ProgramImpl* program); + + VkDescriptorPool allocateDescriptorPool(); + +private: + VkDevice _device{VK_NULL_HANDLE}; + + const DepthStencilStateImpl* _dsState{nullptr}; + + VkPipelineInputAssemblyStateCreateInfo _iaState{}; + +#pragma region pipeline constant states + VkPipelineViewportStateCreateInfo _vpState{}; + VkPipelineRasterizationStateCreateInfo _rasterState{}; + VkPipelineMultisampleStateCreateInfo _msState{}; + VkPipelineDynamicStateCreateInfo _dynState{}; +#pragma endregion + + VkPipelineColorBlendAttachmentState _activeAttachment{}; + VkPipelineColorBlendStateCreateInfo _activeBlendState{}; + + VkPipelineLayout _activePipelineLayout{nullptr}; + DescriptorSetLayoutState* _activeDSL{nullptr}; + + VkPipeline _activePipeline{VK_NULL_HANDLE}; + + axstd::pod_vector _descriptorPools; + + axstd::hash_map _descriptorLayoutCache; + axstd::hash_map _pipelineLayoutCache; + axstd::hash_map _pipelineCache; // PSO cache + axstd::hash_map _descriptorCache; + + // TODO: + std::multimap _programToPipelineMap; + std::multimap _renderPassToPipelineMap; +}; +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/RenderTargetVK.cpp b/axmol/rhi/vulkan/RenderTargetVK.cpp new file mode 100644 index 000000000000..633b1fff12b7 --- /dev/null +++ b/axmol/rhi/vulkan/RenderTargetVK.cpp @@ -0,0 +1,515 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to deal in the Software without restriction, including the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#include "axmol/rhi/vulkan/RenderTargetVK.h" +#include "axmol/rhi/vulkan/DriverVK.h" +#include "axmol/rhi/vulkan/UtilsVK.h" +#include "axmol/base/Logging.h" +#include "axmol/tlx/hash.hpp" + +namespace ax::rhi::vk +{ + +// Build a robust framebuffer cache key including: +// - RenderPass handle (value) +// - Ordered image view handles (contiguous color attachments, optional depth) +// - Attachment count +// - Framebuffer width/height +static uintptr_t makeFramebufferKeyHash(VkRenderPass rp, + const axstd::pod_vector& views, + uint32_t width, + uint32_t height) +{ + // Pack a small POD blob to hash deterministically. + struct Header + { + uintptr_t rp; + uint32_t count; + uint32_t width; + uint32_t height; + } hdr{reinterpret_cast(rp), static_cast(views.size()), width, height}; + + // Hash header first, then hash the views array in order. + uintptr_t h = axstd::hash_bytes(&hdr, sizeof(hdr), 0); + if (!views.empty()) + h = axstd::hash_bytes(views.data(), views.size_bytes(), h); + return h; +} + +RenderTargetImpl::RenderTargetImpl(DriverImpl* driver, bool defaultRenderTarget) + : RenderTarget(defaultRenderTarget), _driver(driver) +{ + if (_defaultRenderTarget) + _dirtyFlags = TargetBufferFlags::ALL; + _attachmentTexPtrs.fill(nullptr); +} + +RenderTargetImpl::~RenderTargetImpl() +{ + _driver->waitDeviceIdle(); + + invalidate(); + // We do not destroy cached renderpasses/framebuffers here to allow reuse across RT instances +} + +void RenderTargetImpl::invalidate() +{ + // Conservative: wait idle before destroying caches to avoid "in use" errors. + for (auto& [_, pass] : _renderPassCache) + _driver->destroyRenderPass(pass); + for (auto& [_, fb] : _framebufferCache) + _driver->destroyFramebuffer(fb); + _renderPassCache.clear(); + _framebufferCache.clear(); + _renderPass = VK_NULL_HANDLE; + _framebuffer = VK_NULL_HANDLE; + + for (auto& v : _attachmentViews) + v = VK_NULL_HANDLE; + _attachmentTexPtrs.fill(nullptr); + _attachmentViews.fill(nullptr); + + _attachmentViewsHash = 0; + _attachmentsDirty = true; + + _dirtyFlags = TargetBufferFlags::ALL; +} + +void RenderTargetImpl::beginRenderPass(VkCommandBuffer cmd, + const RenderPassDesc& renderPassDesc, + uint32_t width, + uint32_t height) +{ + // 1) Collect attachment views and impl pointers + if (_defaultRenderTarget) + { + const auto colorTex = _driver->getSwapchainColorAttachment(); + const auto depthTex = _driver->getSwapchainDepthStencilAttachment(); + + _attachmentViews.fill(VK_NULL_HANDLE); + _attachmentTexPtrs.fill(nullptr); + + if (colorTex) + { + _attachmentViews[0] = colorTex->internalHandle().view; + _attachmentTexPtrs[0] = colorTex; + } + if (depthTex) + { + _attachmentViews[DepthViewIndex] = depthTex->internalHandle().view; + _attachmentTexPtrs[DepthViewIndex] = depthTex; + } + + _attachmentViewsHash = XXH64(&_attachmentViews[0], sizeof(_attachmentViews), 0); + _attachmentsDirty = true; + } + else + { + // Unconditionally collect attachments for contiguous MRT from index 0 + for (size_t i = 0; i < MAX_COLOR_ATTCHMENT; ++i) + { + if (_color[i].texture) + { + auto* texImpl = static_cast(_color[i].texture); + _attachmentViews[i] = texImpl->internalHandle().view; + _attachmentTexPtrs[i] = texImpl; + } + else + { + _attachmentViews[i] = VK_NULL_HANDLE; + _attachmentTexPtrs[i] = nullptr; + } + } + + if (_depthStencil.texture) + { + auto* texImpl = static_cast(_depthStencil.texture); + _attachmentViews[DepthViewIndex] = texImpl->internalHandle().view; + _attachmentTexPtrs[DepthViewIndex] = texImpl; + } + else + { + _attachmentViews[DepthViewIndex] = VK_NULL_HANDLE; + _attachmentTexPtrs[DepthViewIndex] = nullptr; + } + + _attachmentsDirty = true; + _dirtyFlags = TargetBufferFlags::NONE; + _attachmentViewsHash = XXH64(&_attachmentViews[0], sizeof(_attachmentViews), 0); + } + + // 2) Ensure render pass + updateRenderPass(renderPassDesc); + + // 3) Ensure framebuffer + updateFramebuffer(cmd); + + // 4) Clear values + _clearValues.clear(); + + for (size_t i = 0; i < MAX_COLOR_ATTCHMENT; ++i) + { + if (_attachmentViews[i] != VK_NULL_HANDLE) + { + VkClearValue cv{}; + if (bitmask::any(renderPassDesc.flags.clear, getMRTColorFlag(i))) + { + cv.color = {renderPassDesc.clearColorValue[0], renderPassDesc.clearColorValue[1], + renderPassDesc.clearColorValue[2], renderPassDesc.clearColorValue[3]}; + } + else + { + cv.color = {{0.f, 0.f, 0.f, 0.f}}; + } + _clearValues.push_back(cv); + } + else + { + break; // contiguous color attachments assumption + } + } + + if (_attachmentViews[DepthViewIndex] != VK_NULL_HANDLE) + { + VkClearValue dsv{}; + if (bitmask::any(renderPassDesc.flags.clear, TargetBufferFlags::DEPTH_AND_STENCIL)) + { + dsv.depthStencil.depth = renderPassDesc.clearDepthValue; + dsv.depthStencil.stencil = static_cast(renderPassDesc.clearStencilValue); + } + else + { + dsv.depthStencil.depth = 1.0f; + dsv.depthStencil.stencil = 0u; + } + +#if 0 + if (bitmask::any(renderPassDesc.flags.clear, TargetBufferFlags::DEPTH)) + dsv.depthStencil.depth = renderPassDesc.clearDepthValue; + else + dsv.depthStencil.depth = 1.0f; + + if (bitmask::any(renderPassDesc.flags.clear, TargetBufferFlags::STENCIL)) + dsv.depthStencil.stencil = static_cast(renderPassDesc.clearStencilValue); + else + dsv.depthStencil.stencil = 0u; +#endif + _clearValues.push_back(dsv); + } + + // 5) Transition to render layouts (non-default RT only) + if (!_defaultRenderTarget) + prepareAttachmentsForRendering(cmd); + + // 6) Begin render pass + VkRenderPassBeginInfo rpBegin{}; + rpBegin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; + rpBegin.renderPass = _renderPass; + rpBegin.framebuffer = _framebuffer; + rpBegin.renderArea.offset = {0, 0}; + rpBegin.renderArea.extent = {width, height}; + rpBegin.clearValueCount = static_cast(_clearValues.size()); + rpBegin.pClearValues = _clearValues.data(); + + vkCmdBeginRenderPass(cmd, &rpBegin, VK_SUBPASS_CONTENTS_INLINE); +} + +void RenderTargetImpl::endRenderPass(VkCommandBuffer cmd) +{ + vkCmdEndRenderPass(cmd); + + if (!_defaultRenderTarget) + { + for (size_t i = 0; i < MAX_COLOR_ATTCHMENT; ++i) + { + TextureImpl* texImpl = _attachmentTexPtrs[i]; + if (!texImpl) + break; + texImpl->setKnownLayout(VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + } + if (_attachmentViews[DepthViewIndex] != VK_NULL_HANDLE) + { + if (auto* texImpl = _attachmentTexPtrs[DepthViewIndex]) + texImpl->setKnownLayout(VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); + } + } +} + +void RenderTargetImpl::updateFramebuffer(VkCommandBuffer /*cmd*/) +{ + AXASSERT(_renderPass, "updateFramebuffer: RenderPass must set"); + + struct + { + uintptr_t attachmentsHash; + void* renderPassh; + } hashMe; + hashMe.attachmentsHash = _attachmentViewsHash; + hashMe.renderPassh = _renderPass; + + auto key = axstd::hash_bytes(&hashMe, sizeof(hashMe)); + if (auto it = _framebufferCache.find(key); it != _framebufferCache.end()) + { + _framebuffer = it->second; + } + else + { + // Build ordered views vector (contiguous colors + optional depth) + axstd::pod_vector views; + views.reserve(MAX_COLOR_ATTCHMENT + 1); + for (size_t i = 0; i < MAX_COLOR_ATTCHMENT; ++i) + { + if (_attachmentViews[i] != VK_NULL_HANDLE) + views.push_back(_attachmentViews[i]); + else + break; // contiguous color attachments assumption + } + if (_attachmentViews[DepthViewIndex] != VK_NULL_HANDLE) + views.push_back(_attachmentViews[DepthViewIndex]); + + // Derive framebuffer extent from color0 or depth if color0 absent (depth-only) + const auto color0 = getColorAttachment(0); + auto& colorDesc = color0->getDesc(); + uint32_t fbWidth = colorDesc.width; + uint32_t fbHeight = colorDesc.height; + if ((fbWidth == 0 || fbHeight == 0) && _attachmentViews[DepthViewIndex] != VK_NULL_HANDLE) + { + const auto& dsDesc = getDepthStencilAttachment()->getDesc(); + fbWidth = dsDesc.width; + fbHeight = dsDesc.height; + } + + VkFramebufferCreateInfo fbci{}; + fbci.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; + fbci.renderPass = _renderPass; + fbci.attachmentCount = static_cast(views.size()); + fbci.pAttachments = views.data(); + fbci.width = fbWidth; + fbci.height = fbHeight; + fbci.layers = 1; + + VkResult vr = vkCreateFramebuffer(_driver->getDevice(), &fbci, nullptr, &_framebuffer); + AXASSERT(vr == VK_SUCCESS, "Failed to create VkFramebuffer"); + + _framebufferCache.emplace(key, _framebuffer); + } + + _attachmentsDirty = false; +} + +void RenderTargetImpl::updateRenderPass(const RenderPassDesc& desc) +{ + const auto key = axstd::hash_bytes(&desc, sizeof(desc), _attachmentViewsHash); + + if (auto it = _renderPassCache.find(key); it != _renderPassCache.end()) + { + _renderPass = it->second; + } + else + { + // Build attachment descriptions deterministically (contiguous colors + optional depth) + axstd::pod_vector attachments; + axstd::pod_vector colorRefs; + VkAttachmentReference depthRef{}; + attachments.reserve(MAX_COLOR_ATTCHMENT + 1); + colorRefs.reserve(MAX_COLOR_ATTCHMENT); + + const bool isDefaultRT = _defaultRenderTarget; + + // Color attachments + for (size_t i = 0; i < MAX_COLOR_ATTCHMENT; ++i) + { + if (_attachmentViews[i] == VK_NULL_HANDLE) + break; + + auto attachment = getColorAttachment(static_cast(i)); + const auto& attDesc = attachment->getDesc(); + + const bool clearColor = bitmask::any(desc.flags.clear, getMRTColorFlag(i)); + const bool discardStart = bitmask::any(desc.flags.discardStart, getMRTColorFlag(i)); + const bool discardEnd = bitmask::any(desc.flags.discardEnd, getMRTColorFlag(i)); + + const VkAttachmentLoadOp loadOp = + clearColor ? VK_ATTACHMENT_LOAD_OP_CLEAR + : (discardStart ? VK_ATTACHMENT_LOAD_OP_DONT_CARE : VK_ATTACHMENT_LOAD_OP_LOAD); + const VkAttachmentStoreOp storeOp = + discardEnd ? VK_ATTACHMENT_STORE_OP_DONT_CARE : VK_ATTACHMENT_STORE_OP_STORE; + + VkAttachmentDescription ad{}; + ad.format = UtilsVK::toVKFormat(attDesc.pixelFormat); + ad.samples = VK_SAMPLE_COUNT_1_BIT; + ad.loadOp = loadOp; + ad.storeOp = storeOp; + ad.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; + ad.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; + + // Use UNDEFINED when not loading to minimize mismatch risk + ad.initialLayout = + (loadOp == VK_ATTACHMENT_LOAD_OP_LOAD) + ? (isDefaultRT ? VK_IMAGE_LAYOUT_PRESENT_SRC_KHR : VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) + : VK_IMAGE_LAYOUT_UNDEFINED; + + ad.finalLayout = isDefaultRT ? VK_IMAGE_LAYOUT_PRESENT_SRC_KHR : VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + + attachments.push_back(ad); + + VkAttachmentReference ref{}; + ref.attachment = static_cast(colorRefs.size()); + ref.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + colorRefs.push_back(ref); + } + + // Depth/stencil attachment + const bool hasDepth = (_attachmentViews[DepthViewIndex] != VK_NULL_HANDLE); + if (hasDepth) + { + auto attachment = getDepthStencilAttachment(); + const auto& dsDesc = attachment->getDesc(); + + const bool clearDepth = bitmask::any(desc.flags.clear, TargetBufferFlags::DEPTH); + const bool discardD0 = bitmask::any(desc.flags.discardStart, TargetBufferFlags::DEPTH); + const bool discardD1 = bitmask::any(desc.flags.discardEnd, TargetBufferFlags::DEPTH); + const bool clearStencil = bitmask::any(desc.flags.clear, TargetBufferFlags::STENCIL); + const bool discardS0 = bitmask::any(desc.flags.discardStart, TargetBufferFlags::STENCIL); + const bool discardS1 = bitmask::any(desc.flags.discardEnd, TargetBufferFlags::STENCIL); + + const VkAttachmentLoadOp depthLoad = + clearDepth ? VK_ATTACHMENT_LOAD_OP_CLEAR + : (discardD0 ? VK_ATTACHMENT_LOAD_OP_DONT_CARE : VK_ATTACHMENT_LOAD_OP_LOAD); + const VkAttachmentStoreOp depthStore = + discardD1 ? VK_ATTACHMENT_STORE_OP_DONT_CARE : VK_ATTACHMENT_STORE_OP_STORE; + + const VkAttachmentLoadOp stencilLoad = + clearStencil ? VK_ATTACHMENT_LOAD_OP_CLEAR + : (discardS0 ? VK_ATTACHMENT_LOAD_OP_DONT_CARE : VK_ATTACHMENT_LOAD_OP_LOAD); + const VkAttachmentStoreOp stencilStore = + discardS1 ? VK_ATTACHMENT_STORE_OP_DONT_CARE : VK_ATTACHMENT_STORE_OP_STORE; + + VkAttachmentDescription ad{}; + ad.format = UtilsVK::toVKFormat(dsDesc.pixelFormat); + ad.samples = VK_SAMPLE_COUNT_1_BIT; + ad.loadOp = depthLoad; + ad.storeOp = depthStore; + ad.stencilLoadOp = stencilLoad; + ad.stencilStoreOp = stencilStore; + + const bool needLoadInitial = + (depthLoad == VK_ATTACHMENT_LOAD_OP_LOAD) || (stencilLoad == VK_ATTACHMENT_LOAD_OP_LOAD); + + ad.initialLayout = + needLoadInitial ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_UNDEFINED; + + ad.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + + attachments.push_back(ad); + + depthRef.attachment = static_cast(attachments.size() - 1); + depthRef.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + } + + // Subpass + VkSubpassDescription subpass{}; + subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; + subpass.colorAttachmentCount = static_cast(colorRefs.size()); + subpass.pColorAttachments = colorRefs.data(); + subpass.pDepthStencilAttachment = hasDepth ? &depthRef : nullptr; + + // Dependencies + VkSubpassDependency deps[2]{}; + deps[0].srcSubpass = VK_SUBPASS_EXTERNAL; + deps[0].dstSubpass = 0; + deps[0].srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + deps[0].dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + deps[0].srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + deps[0].dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + + uint32_t depCount = 1; + if (hasDepth) + { + deps[1].srcSubpass = VK_SUBPASS_EXTERNAL; + deps[1].dstSubpass = 0; + deps[1].srcStageMask = VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; + deps[1].dstStageMask = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT; + deps[1].srcAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + deps[1].dstAccessMask = + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + depCount = 2; + } + + VkRenderPassCreateInfo rpci{}; + rpci.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO; + rpci.attachmentCount = static_cast(attachments.size()); + rpci.pAttachments = attachments.data(); + rpci.subpassCount = 1; + rpci.pSubpasses = &subpass; + rpci.dependencyCount = depCount; + rpci.pDependencies = deps; + + VkResult vr = vkCreateRenderPass(_driver->getDevice(), &rpci, nullptr, &_renderPass); + AXASSERT(vr == VK_SUCCESS, "Failed to create VkRenderPass"); + + // AXLOGI("vkCreateRenderPass: renderPass: {}, cache id:{}", fmt::ptr(_renderPass), key); + + _renderPassCache.emplace(key, _renderPass); + } +} + +void RenderTargetImpl::prepareAttachmentsForRendering(VkCommandBuffer cmd) +{ + if (_defaultRenderTarget) + return; + + // Color -> ATTACHMENT_OPTIMAL (contiguous indices starting at 0) + for (size_t i = 0; i < MAX_COLOR_ATTCHMENT; ++i) + { + TextureImpl* texImpl = _attachmentTexPtrs[i]; + if (!texImpl) + break; + texImpl->transitionLayout(cmd, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); + } + + // Depth -> ATTACHMENT_OPTIMAL + if (_attachmentViews[DepthViewIndex] != VK_NULL_HANDLE) + { + TextureImpl* texImpl = _attachmentTexPtrs[DepthViewIndex]; + if (texImpl) + texImpl->transitionLayout(cmd, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); + } +} + +RenderTargetImpl::Attachment RenderTargetImpl::getColorAttachment(int index) const +{ + return _defaultRenderTarget ? _driver->getSwapchainColorAttachment() + : static_cast(_color[index].texture); +} + +RenderTargetImpl::Attachment RenderTargetImpl::getDepthStencilAttachment() const +{ + return _defaultRenderTarget ? _driver->getSwapchainDepthStencilAttachment() + : static_cast(_depthStencil.texture); +} + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/RenderTargetVK.h b/axmol/rhi/vulkan/RenderTargetVK.h new file mode 100644 index 000000000000..1babb9dbe9ab --- /dev/null +++ b/axmol/rhi/vulkan/RenderTargetVK.h @@ -0,0 +1,87 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include "axmol/rhi/RenderTarget.h" +#include "TextureVK.h" +#include +#include + +namespace ax::rhi::vk +{ +class DriverImpl; +class RenderTargetImpl : public RenderTarget +{ +public: + enum + { + DepthViewIndex = MAX_COLOR_ATTCHMENT, + }; + + using Attachment = TextureImpl*; + + RenderTargetImpl(DriverImpl* driver, bool defaultRenderTarget); + ~RenderTargetImpl(); + + // Destroy the current live framebuffer and mark attachments dirty + void invalidate(); + + // Begin a render pass using this target + void beginRenderPass(VkCommandBuffer cmd, const RenderPassDesc& desc, uint32_t width, uint32_t height); + + void endRenderPass(VkCommandBuffer cmd); + + Attachment getColorAttachment(int index) const; + Attachment getDepthStencilAttachment() const; + + VkFramebuffer getFramebuffer() const { return _framebuffer; } + + VkRenderPass getVkRenderPass() const { return _renderPass; } + +private: + void updateRenderPass(const RenderPassDesc& desc); + void updateFramebuffer(VkCommandBuffer cmd); + + void prepareAttachmentsForRendering(VkCommandBuffer cmd); + + DriverImpl* _driver{nullptr}; + + // Current attachment views for building renderpass/framebuffer + std::array _attachmentViews{}; + std::array _attachmentTexPtrs; + uint64_t _attachmentViewsHash{0}; + + axstd::pod_vector _clearValues; + + VkRenderPass _renderPass{VK_NULL_HANDLE}; // active render pass + VkFramebuffer _framebuffer{VK_NULL_HANDLE}; // active framebuffer + + // Caches keyed by (desc hash, attachment views hash) + axstd::hash_map _renderPassCache; + axstd::hash_map _framebufferCache; + + bool _attachmentsDirty{true}; +}; + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/SemaphorePoolVK.cpp b/axmol/rhi/vulkan/SemaphorePoolVK.cpp new file mode 100644 index 000000000000..a222d2ad2c32 --- /dev/null +++ b/axmol/rhi/vulkan/SemaphorePoolVK.cpp @@ -0,0 +1,80 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ + +#include "axmol/rhi/vulkan/SemaphorePoolVK.h" + +namespace ax::rhi::vk +{ +namespace +{ +VkSemaphore createSemaphore(VkDevice device) +{ + VkSemaphore semaphore; + VkSemaphoreCreateInfo semaphoreInfo = { + .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, + }; + vkCreateSemaphore(device, &semaphoreInfo, nullptr, &semaphore); + return semaphore; +} + +} // namespace +SemaphorePool::SemaphorePool(VkDevice device) : _device(device) +{ + for (size_t i = 0; i < INITIAL_POOL_SIZE; ++i) + { + _pool.push_back(createSemaphore(_device)); + } +} + +SemaphorePool::~SemaphorePool() +{ + for (auto semaphore : _pool) + { + vkDestroySemaphore(_device, semaphore, nullptr); + } + _pool.clear(); +} + +VkSemaphore SemaphorePool::acquire() +{ + VkSemaphore semaphore; + if (!_pool.empty()) + { + semaphore = _pool.back(); + _pool.pop_back(); + } + else + { + semaphore = createSemaphore(_device); + } + + return semaphore; +} + +void SemaphorePool::recycle(VkSemaphore semaphore) +{ + _pool.push_back(semaphore); +} + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/SemaphorePoolVK.h b/axmol/rhi/vulkan/SemaphorePoolVK.h new file mode 100644 index 000000000000..27db14ac336d --- /dev/null +++ b/axmol/rhi/vulkan/SemaphorePoolVK.h @@ -0,0 +1,45 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include "glad/vulkan.h" +#include "axmol/tlx/pod_vector.hpp" + +namespace ax::rhi::vk +{ +class SemaphorePool +{ + static constexpr int INITIAL_POOL_SIZE = 45; + +public: + SemaphorePool(VkDevice device); + ~SemaphorePool(); + VkSemaphore acquire(); + void recycle(VkSemaphore semaphore); + +protected: + VkDevice _device{VK_NULL_HANDLE}; + axstd::pod_vector _pool; +}; +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/ShaderModuleVK.cpp b/axmol/rhi/vulkan/ShaderModuleVK.cpp new file mode 100644 index 000000000000..b19dcaf5df39 --- /dev/null +++ b/axmol/rhi/vulkan/ShaderModuleVK.cpp @@ -0,0 +1,374 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#include "axmol/rhi/vulkan/ShaderModuleVK.h" +#include "axmol/rhi/vulkan/DriverVK.h" +#include "axmol/base/Logging.h" +#include "yasio/ibstream.hpp" +#include "axmol/rhi/axslc-spec.h" +#include +#include + +namespace ax::rhi::vk +{ + +using namespace ::axslc; + +namespace +{ +static inline std::string_view _sc_read_name(yasio::fast_ibstream_view* ibs) +{ + // View bytes without copy + std::string_view name = ibs->read_bytes(sizeof(sc_refl_input::name)); + auto len = name.find_last_not_of('\0'); + assert(len != std::string::npos); // name must not be empty + name.remove_suffix(name.length() - len - 1); + return name; +} +} // namespace + +struct SLCReflectContext +{ + sc_chunk_refl* refl; + yasio::fast_ibstream_view* ibs; +}; + +ShaderModuleImpl::ShaderModuleImpl(VkDevice device, ShaderStage stage, std::string_view source) : ShaderModule(stage) +{ + compileShader(device, stage, source); +} + +ShaderModuleImpl::~ShaderModuleImpl() +{ + releaseShader(); +} + +void ShaderModuleImpl::releaseShader() +{ + if (_shader) + { + // Device should be accessible from a driver; here we assume destruction is handled externally. + // If needed, store VkDevice in this class like other implementations. + // Intentionally left minimal: the lifetime is managed by the owning renderer/driver. + auto device = static_cast(axdrv)->getDevice(); + vkDestroyShaderModule(device, _shader, nullptr); + } +} + +void ShaderModuleImpl::compileShader(VkDevice device, ShaderStage stage, std::string_view source) +{ + std::fill(std::begin(_builtinVertexInputs), std::end(_builtinVertexInputs), nullptr); + + _maxLocation = -1; + _uniformBufferSize = 0; + for (int i = 0; i < UNIFORM_COUNT; ++i) + _builtinUniforms[i] = {}; + + _samplerCount = 0; + _activeVertexInputs.clear(); + _activeUniformInfos.clear(); + _activeUniformBlockInfos.clear(); + _activeSamplerInfos.clear(); + + yasio::fast_ibstream_view ibs(source.data(), source.length()); + uint32_t fourccId = ibs.read(); + if (fourccId != SC_CHUNK) + { + AXLOGE("axmol: Shader chunk header mismatch (expected SC_CHUNK)."); + assert(false); + return; + } + + const auto sc_size = ibs.read(); // always 0 per spec, doesn't matter + sc_chunk chunk{}; + ibs.read_bytes(&chunk, static_cast(sizeof(chunk))); + + std::string_view shaderCodeBytes; + + do + { + fourccId = ibs.read(); + if (fourccId != SC_CHUNK_STAG) + { + AXLOGE("axmol: Shader stage chunk missing (expected SC_CHUNK_STAG)."); + assert(false); + return; + } + + const auto stage_size = ibs.read(); + const auto stage_id = ibs.read(); + + ShaderStage ref_stage = static_cast(-1); + if (stage_id == SC_STAGE_VERTEX) + ref_stage = ShaderStage::VERTEX; + else if (stage_id == SC_STAGE_FRAGMENT) + ref_stage = ShaderStage::FRAGMENT; + + assert(ref_stage == stage && "Shader stage mismatch in axslc chunk"); + + fourccId = ibs.read(); + if (fourccId == SC_CHUNK_CODE || fourccId == SC_CHUNK_DATA) + { + // Expecting SPIR-V binary blob from axslc, not text + const int codeLen = ibs.read(); + shaderCodeBytes = ibs.read_bytes(codeLen); + } + else + { + AXLOGE("axmol: No code/data chunk (SC_CHUNK_CODE/SC_CHUNK_DATA) found for shader stage."); + assert(false); + } + + if (!ibs.eof()) + { + // Try to read reflection info + fourccId = ibs.read(); + if (fourccId == SC_CHUNK_REFL) + { + const auto refl_size = ibs.read(); + const auto refl_data_offset = ibs.tell(); + + sc_chunk_refl refl{}; + ibs.advance(sizeof(refl.name)); // skip human-readable name + refl.num_inputs = ibs.read(); + refl.num_textures = ibs.read(); + refl.num_uniform_buffers = ibs.read(); + refl.num_storage_images = ibs.read(); + refl.num_storage_buffers = ibs.read(); + + // Skip fields we don't need beyond flatten_ubo start + ibs.advance(sizeof(sc_chunk_refl) - offsetof(sc_chunk_refl, flatten_ubo)); + + SLCReflectContext context{&refl, &ibs}; + + // refl_inputs + reflectVertexInputs(&context); + + // refl_uniformbuffers + reflectUniforms(&context); + + // refl_textures + reflectSamplers(&context); + + // refl_storage_images: ignore + ibs.advance(refl.num_storage_images * sizeof(sc_refl_texture)); + + // refl_storage_buffers: ignore + ibs.advance(refl.num_storage_buffers * sizeof(sc_refl_buffer)); + + assert(ibs.tell() - refl_data_offset == refl_size && "Reflection chunk size mismatch"); + } + else + { + AXLOGE("axmol: Missing reflection chunk (SC_CHUNK_REFL)."); + assert(false); + return; + } + } + + assert(ibs.eof()); + } while (false); + + // Create VkShaderModule from SPIR-V bytes + if (shaderCodeBytes.empty()) + { + AXLOGE("axmol: Shader code blob is empty."); + assert(false); + return; + } + + VkShaderModuleCreateInfo smci{}; + smci.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; + smci.codeSize = shaderCodeBytes.size(); + smci.pCode = reinterpret_cast(shaderCodeBytes.data()); + + VkResult vr = vkCreateShaderModule(device, &smci, nullptr, &_shader); + if (vr != VK_SUCCESS || _shader == VK_NULL_HANDLE) + { + AXLOGE("axmol: Failed to create VkShaderModule (VkResult={}).", (int)vr); + assert(false); + return; + } + + setBuiltinLocations(); +} + +const UniformInfo& ShaderModuleImpl::getUniformInfo(Uniform name) const +{ + return _builtinUniforms[name]; +} + +const UniformInfo& ShaderModuleImpl::getUniformInfo(std::string_view name) const +{ + static UniformInfo none; + auto iter = _activeUniformInfos.find(name); + if (iter != _activeUniformInfos.end()) + return iter->second; + return none; +} + +const VertexInputDesc* ShaderModuleImpl::getVertexInputDesc(VertexInputKind name) const +{ + return _builtinVertexInputs[name]; +} + +const VertexInputDesc* ShaderModuleImpl::getVertexInputDesc(std::string_view name) const +{ + auto it = _activeVertexInputs.find(name); + if (it != _activeVertexInputs.end()) + return &it->second; + else + return nullptr; +} + +void ShaderModuleImpl::reflectVertexInputs(SLCReflectContext* context) +{ + auto ibs = context->ibs; + + for (int i = 0; i < context->refl->num_inputs; ++i) + { + std::string_view name = _sc_read_name(ibs); + auto loc = ibs->read(); // location in shader + std::string_view semantic = _sc_read_name(ibs); // semantic (engine-level) + auto semantic_index = ibs->read(); // semantic index + auto format = ibs->read(); // engine-level vertex format enum + + VertexInputDesc desc; + desc.semantic = semantic; + desc.location = loc; // use explicit location + desc.format = format; + _activeVertexInputs.emplace(name, desc); + } +} + +void ShaderModuleImpl::reflectUniforms(SLCReflectContext* context) +{ + _uniformBufferSize = 0; + auto ibs = context->ibs; + + for (int i = 0; i < context->refl->num_uniform_buffers; ++i) + { + auto ub_name = ibs->read_bytes(sizeof(sc_refl_ub::name)); + auto ub_binding = ibs->read(); // descriptor set/binding index + auto ub_size_bytes = ibs->read(); + ibs->advance(sizeof(sc_refl_ub::array_size)); + auto ub_num_members = ibs->read(); + + _activeUniformBlockInfos.push_back(UniformBlockInfo{ + .binding = ub_binding, .sizeBytes = ub_size_bytes, .numMembers = ub_num_members, .name = ub_name.data()}); + + for (int k = 0; k < ub_num_members; ++k) + { + UniformInfo uniform; + auto name = _sc_read_name(ibs); + auto offset = ibs->read(); + auto format = ibs->read(); // uniform type + auto size_bytes = ibs->read(); + auto array_size = ibs->read(); + + uniform.count = array_size; + uniform.location = ub_binding; // binding index for Vulkan + uniform.size = size_bytes; + uniform.bufferOffset = offset; + uniform.type = format; + + _activeUniformInfos[name] = uniform; + + if (_maxLocation < i) + _maxLocation = (i + 1); + } + + _uniformBufferSize = ub_size_bytes; + + // Current: we support single uniform block per stage in the legacy path; break for parity. + break; + } +} + +void ShaderModuleImpl::reflectSamplers(SLCReflectContext* context) +{ + constexpr auto skip_fields_bytes = static_cast(sizeof(sc_refl_texture::image_dim) + sizeof(uint8_t)); + const auto samplerCount = context->refl->num_textures; + if (samplerCount <= 0) + return; + auto ibs = context->ibs; + _activeSamplerInfos.reserve(samplerCount); + for (int i = 0; i < samplerCount; ++i) + { + UniformInfo uniform{}; + + std::string_view name = _sc_read_name(ibs); + uniform.location = ibs->read(); // sampler binding index + ibs->advance(skip_fields_bytes); + uniform.count = (std::max)(1, static_cast(ibs->read())); + + auto ret = _activeUniformInfos.emplace(name, uniform); + assert(ret.second); + _activeSamplerInfos.push_back(uniform); + } +} + +void ShaderModuleImpl::setBuiltinLocations() +{ + /*--- Builtin Attributes ---*/ + + // a_position + _builtinVertexInputs[VertexInputKind::POSITION] = getVertexInputDesc(VERTEX_INPUT_NAME_POSITION); + + // a_color + _builtinVertexInputs[VertexInputKind::COLOR] = getVertexInputDesc(VERTEX_INPUT_NAME_COLOR); + + // a_texCoord + _builtinVertexInputs[VertexInputKind::TEXCOORD] = getVertexInputDesc(VERTEX_INPUT_NAME_TEXCOORD); + + // a_normal + _builtinVertexInputs[VertexInputKind::NORMAL] = getVertexInputDesc(VERTEX_INPUT_NAME_NORMAL); + + // a_instance + _builtinVertexInputs[VertexInputKind::INSTANCE] = getVertexInputDesc(VERTEX_INPUT_NAME_INSTANCE); + + /*--- Builtin Uniforms ---*/ + + // u_MVPMatrix + _builtinUniforms[Uniform::MVP_MATRIX] = getUniformInfo(UNIFORM_NAME_MVP_MATRIX); + + // u_tex0 + _builtinUniforms[Uniform::TEXTURE] = getUniformInfo(UNIFORM_NAME_TEXTURE); + + // u_tex1 + _builtinUniforms[Uniform::TEXTURE1] = getUniformInfo(UNIFORM_NAME_TEXTURE1); + + // u_textColor + _builtinUniforms[Uniform::TEXT_COLOR] = getUniformInfo(UNIFORM_NAME_TEXT_COLOR); + + // u_effectColor + _builtinUniforms[Uniform::EFFECT_COLOR] = getUniformInfo(UNIFORM_NAME_EFFECT_COLOR); + + // u_effectWidth + _builtinUniforms[Uniform::EFFECT_WIDTH] = getUniformInfo(UNIFORM_NAME_EFFECT_WIDTH); + + // u_labelPass + _builtinUniforms[Uniform::LABEL_PASS] = getUniformInfo(UNIFORM_NAME_LABEL_PASS); +} + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/ShaderModuleVK.h b/axmol/rhi/vulkan/ShaderModuleVK.h new file mode 100644 index 000000000000..66862f615b9f --- /dev/null +++ b/axmol/rhi/vulkan/ShaderModuleVK.h @@ -0,0 +1,142 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once +#include "axmol/rhi/ShaderModule.h" +#include +#include "axmol/tlx/hlookup.hpp" + +namespace ax::rhi::vk +{ +/** + * @addtogroup _vk + * @{ + */ + +struct UniformBlockInfo +{ + int binding; // Vulkan binding index + uint32_t sizeBytes; // total size of the UBO + uint16_t numMembers; // number of uniforms in this block + std::string name; // block name +}; + +struct SLCReflectContext; + +/** + * @brief A Vulkan-based ShaderModule implementation + * + */ +class ShaderModuleImpl : public ShaderModule +{ +public: + ShaderModuleImpl(VkDevice device, ShaderStage stage, std::string_view source); + ~ShaderModuleImpl(); + + VkShaderModule internalHandle() const { return _shader; } + + /** + * Get uniform info by engine built-in uniform enum name. + * @param name Specifies the engine built-in uniform enum name. + * @return The uniform location. + */ + const UniformInfo& getUniformInfo(Uniform name) const; + + /** + * Get uniform info by name. + * @param uniform Specifies the uniform name. + * @return The uniform location. + */ + const UniformInfo& getUniformInfo(std::string_view name) const; + + /** + * Get attribute location by engine built-in attribute enum name. + * @param name Specifies the engine built-in attribute enum name. + * @return The attribute location. + */ + const VertexInputDesc* getVertexInputDesc(VertexInputKind name) const; + + /** + * Get attribute location by attribute name. + * @param name Specifies the attribute name. + * @return The attribute location. + */ + const VertexInputDesc* getVertexInputDesc(std::string_view name) const; + + /** + * Get active attribute informations. + * @return Active attribute informations. key is attribute name and Value is corresponding attribute info. + */ + inline const axstd::string_map& getActiveVertexInputs() const { return _activeVertexInputs; } + + /** + * Get all uniformInfos. + * @return The uniformInfos. + */ + inline const axstd::string_map& getActiveUniformInfos() const { return _activeUniformInfos; } + + inline const std::vector& getActiveUniformBlockInfos() const { return _activeUniformBlockInfos; } + inline const std::vector& getActiveSamplerInfos() const { return _activeSamplerInfos; } + + /** + * Get maximum uniform location. + * @return Maximum uniform location. + */ + inline const int getMaxLocation() const { return _maxLocation; } + + /** + * Get uniform buffer size in bytes that holds all the uniforms. + * @return The uniform buffer size. + */ + inline std::size_t getUniformBufferSize() const { return _uniformBufferSize; } + +private: + void compileShader(VkDevice device, ShaderStage stage, std::string_view source); + void releaseShader(); + + void reflectVertexInputs(SLCReflectContext* context); + void reflectUniforms(SLCReflectContext* context); + void reflectSamplers(SLCReflectContext* context); + + void setBuiltinLocations(); + + VkShaderModule _shader = VK_NULL_HANDLE; + + axstd::string_map _activeVertexInputs; + axstd::string_map _activeUniformInfos; + + std::vector _activeUniformBlockInfos; + std::vector _activeSamplerInfos; + int _samplerCount{0}; + + const VertexInputDesc* _builtinVertexInputs[VIK_COUNT]; + + int _maxLocation = -1; + UniformInfo _builtinUniforms[UNIFORM_COUNT]; + + std::size_t _uniformBufferSize = 0; +}; + +/** @} */ + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/TextureVK.cpp b/axmol/rhi/vulkan/TextureVK.cpp new file mode 100644 index 000000000000..b395380b0bfb --- /dev/null +++ b/axmol/rhi/vulkan/TextureVK.cpp @@ -0,0 +1,672 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#include "TextureVK.h" +#include "UtilsVK.h" +#include "axmol/rhi/vulkan/DriverVK.h" +#include "axmol/rhi/SamplerCache.h" +#include "axmol/rhi/RHIUtils.h" +#include "axmol/base/Logging.h" +#include +#include +#include +#include +#include + +namespace ax::rhi::vk +{ + +static constexpr uint32_t LEVEL_INITIAL_CAPS = 16; +static constexpr uint32_t LAYER_INITIAL_CAPS = 8; + +// ------------------------------------------------------------ +// Helpers +// ------------------------------------------------------------ + +// Check if offset is block-aligned (required by spec for compressed subresource updates). +static inline bool isBlockAligned(uint32_t x, uint32_t y, uint32_t blockW, uint32_t blockH) +{ + return (x % blockW == 0) && (y % blockH == 0); +} + +// Map PixelFormat to VkFormat via UtilsVK table +static inline VkFormat getVkFormat(PixelFormat pf) +{ + const auto* info = toVKFormatInfo(pf); + return info ? info->format : VK_FORMAT_UNDEFINED; +} + +// Transition an image subresource range between layouts (auto src/dst inference) +static void transitionImageLayout(VkCommandBuffer cmd, + VkImage image, + VkImageLayout oldLayout, + VkImageLayout newLayout, + const VkImageSubresourceRange& range) +{ + VkImageMemoryBarrier barrier{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER}; + barrier.oldLayout = oldLayout; + barrier.newLayout = newLayout; + barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.image = image; + barrier.subresourceRange = range; + + VkPipelineStageFlags srcStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; + VkPipelineStageFlags dstStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; + + switch (oldLayout) + { + case VK_IMAGE_LAYOUT_UNDEFINED: + barrier.srcAccessMask = 0; + srcStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; + break; + case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: + barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + srcStage = VK_PIPELINE_STAGE_TRANSFER_BIT; + break; + case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: + barrier.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + srcStage = VK_PIPELINE_STAGE_TRANSFER_BIT; + break; + case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: + barrier.srcAccessMask = VK_ACCESS_SHADER_READ_BIT; + srcStage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; + break; + case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: + barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + srcStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + break; + case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: + barrier.srcAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + srcStage = VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; + break; + default: + barrier.srcAccessMask = 0; + srcStage = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; + break; + } + + switch (newLayout) + { + case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: + barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + dstStage = VK_PIPELINE_STAGE_TRANSFER_BIT; + break; + case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: + barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + dstStage = VK_PIPELINE_STAGE_TRANSFER_BIT; + break; + case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: + barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; + dstStage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; + break; + case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: + barrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + dstStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + break; + case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: + barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + dstStage = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; + break; + default: + barrier.dstAccessMask = 0; + dstStage = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; + break; + } + + vkCmdPipelineBarrier(cmd, srcStage, dstStage, 0, 0, nullptr, 0, nullptr, 1, &barrier); +} + +void TextureHandle::destroy(DriverImpl* driver) +{ + if (view != VK_NULL_HANDLE) + { + driver->queueDisposal(view); + view = VK_NULL_HANDLE; + } + if (image != VK_NULL_HANDLE) + { + driver->queueDisposal(image); + image = VK_NULL_HANDLE; + } + if (memory != VK_NULL_HANDLE) + { + driver->queueDisposal(memory); + memory = VK_NULL_HANDLE; + } +} + +// ------------------------------------------------------------ +// ctor / dtor +// ------------------------------------------------------------ +TextureImpl::TextureImpl(DriverImpl* driver, const TextureDesc& desc) + : _driver(driver), _ownResources(true), _layoutTracker(LEVEL_INITIAL_CAPS, LAYER_INITIAL_CAPS) +{ + updateTextureDesc(desc); +} + +TextureImpl::TextureImpl(DriverImpl* driver, VkImage existingImage, VkImageView existingImageView) + : _driver(driver), _ownResources(false), _layoutTracker(LEVEL_INITIAL_CAPS, LAYER_INITIAL_CAPS) +{ + _nativeTexture.image = existingImage; + _nativeTexture.view = existingImageView; + // Note: existingImage is owned externally (e.g., swapchain), we only wrap it. +} + +TextureImpl::~TextureImpl() +{ + if (_ownResources) + { + _sampler = VK_NULL_HANDLE; // SamplerCache handles sampler destruction + _nativeTexture.destroy(_driver); + } +} + +void TextureImpl::transitionLayout(VkCommandBuffer cmd, VkImageLayout newLayout) +{ + ensureNativeTexture(); + + const VkImageLayout oldLayout = _layoutTracker.getLayout(0, 0); + + VkImageSubresourceRange range{}; + range.aspectMask = (_desc.pixelFormat == PixelFormat::D24S8) + ? (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT) + : VK_IMAGE_ASPECT_COLOR_BIT; + range.baseMipLevel = 0; + range.levelCount = _desc.mipLevels ? _desc.mipLevels : 1; + range.baseArrayLayer = 0; + range.layerCount = _desc.arraySize ? _desc.arraySize : 1; + + transitionImageLayout(cmd, _nativeTexture.image, oldLayout, newLayout, range); + + _layoutTracker.setLayout(0, 0, newLayout); +} + +VkImageLayout TextureImpl::getCurrentLayout() const +{ + return _layoutTracker.getLayout(0, 0); +} + +void TextureImpl::setKnownLayout(VkImageLayout layout) +{ + _layoutTracker.setLayout(0, 0, layout); +} + +// ------------------------------------------------------------ +// updateSamplerDesc +// ------------------------------------------------------------ +void TextureImpl::updateSamplerDesc(const SamplerDesc& sampler) +{ + _desc.samplerDesc = sampler; + + _sampler = (VkSampler)SamplerCache::getInstance()->getSampler(sampler); + assert(_sampler && "Gets vkCreateSampler failed"); +} + +// ------------------------------------------------------------ +// updateTextureDesc +// ------------------------------------------------------------ +void TextureImpl::updateTextureDesc(const TextureDesc& desc) +{ + _desc = desc; + Texture::updateTextureDesc(desc); + updateSamplerDesc(desc.samplerDesc); +} + +// ------------------------------------------------------------ +// updateData +// ------------------------------------------------------------ +void TextureImpl::updateData(const void* data, int width, int height, int level, int layerIndex) +{ + updateSubData(0, 0, width, height, level, data, layerIndex); +} + +// ------------------------------------------------------------ +// updateSubData +// ------------------------------------------------------------ +void TextureImpl::updateSubData(int xoffset, + int yoffset, + int width, + int height, + int level, + const void* data, + int layerIndex) +{ + ensureNativeTexture(); + if (!data) + return; + + // Compute staging upload size via rowPitch/slicePitch + const uint32_t rowPitch = ax::rhi::RHIUtils::computeRowPitch(_desc.pixelFormat, width); + const uint32_t slicePitch = rowPitch * static_cast(height); + const VkDeviceSize uploadSize = slicePitch; + + // Create staging buffer + VkBuffer stagingBuffer{}; + VkDeviceMemory stagingMemory{}; + + VkBufferCreateInfo bufInfo{}; + bufInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; + bufInfo.size = uploadSize; + bufInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; + bufInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + + auto device = _driver->getDevice(); + VkResult res = vkCreateBuffer(device, &bufInfo, nullptr, &stagingBuffer); + assert(res == VK_SUCCESS && "vkCreateBuffer (staging) failed"); + + VkMemoryRequirements bufMemReq{}; + vkGetBufferMemoryRequirements(device, stagingBuffer, &bufMemReq); + + VkMemoryAllocateInfo bufAlloc{}; + bufAlloc.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + bufAlloc.allocationSize = bufMemReq.size; + bufAlloc.memoryTypeIndex = _driver->findMemoryType( + bufMemReq.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + + res = vkAllocateMemory(device, &bufAlloc, nullptr, &stagingMemory); + assert(res == VK_SUCCESS && "vkAllocateMemory (staging) failed"); + + vkBindBufferMemory(device, stagingBuffer, stagingMemory, 0); + + // Copy user data into staging buffer + void* mapped = nullptr; + res = vkMapMemory(device, stagingMemory, 0, uploadSize, 0, &mapped); + assert(res == VK_SUCCESS && "vkMapMemory failed"); + std::memcpy(mapped, data, static_cast(uploadSize)); + vkUnmapMemory(device, stagingMemory); + + // Record transfer commands + auto submission = _driver->startIsolateSubmission(); + + // Transition destination subresource to TRANSFER_DST + VkImageSubresourceRange range{}; + range.aspectMask = (_desc.pixelFormat == PixelFormat::D24S8) + ? (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT) + : VK_IMAGE_ASPECT_COLOR_BIT; + range.baseMipLevel = static_cast(level); + range.levelCount = 1; + range.baseArrayLayer = static_cast(layerIndex); + range.layerCount = 1; + + const auto oldLayout = _layoutTracker.getLayout(level, layerIndex); + + transitionImageLayout(submission, _nativeTexture.image, oldLayout, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, range); + + // Copy staging to image + VkBufferImageCopy region{}; + region.bufferOffset = 0; + // For tightly packed data we can leave bufferRowLength and bufferImageHeight as 0. + // For non-tight or special formats you may set bufferRowLength to the texel width of a row. + region.bufferRowLength = 0; + region.bufferImageHeight = 0; + region.imageSubresource.aspectMask = range.aspectMask; + region.imageSubresource.mipLevel = range.baseMipLevel; + region.imageSubresource.baseArrayLayer = range.baseArrayLayer; + region.imageSubresource.layerCount = range.layerCount; + region.imageOffset = {xoffset, yoffset, 0}; + region.imageExtent = {static_cast(width), static_cast(height), 1}; + + vkCmdCopyBufferToImage(submission, stagingBuffer, _nativeTexture.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, + ®ion); + + // Transition to SHADER_READ_ONLY for sampling + transitionImageLayout(submission, _nativeTexture.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, range); + + _layoutTracker.setLayout(level, layerIndex, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + + if (shouldGenMipmaps(_desc.textureType == TextureType::TEXTURE_2D ? level : 0)) + generateMipmaps(submission); + + _driver->finishIsolateSubmission(submission); + + vkDestroyBuffer(device, stagingBuffer, nullptr); + vkFreeMemory(device, stagingMemory, nullptr); +} + +// ------------------------------------------------------------ +// generateMipmaps +// ------------------------------------------------------------ +void TextureImpl::generateMipmaps(VkCommandBuffer cmd) +{ + if (TextureUsage::RENDER_TARGET == _desc.textureUsage) + return; // not for render target + + const uint32_t mipLevels = + (_desc.mipLevels != 0) ? _desc.mipLevels : ax::rhi::RHIUtils::computeMipLevels(_desc.width, _desc.height); + if (mipLevels <= 1) + return; + + int32_t mipWidth = _desc.width; + int32_t mipHeight = _desc.height; + const uint32_t layerCount = + (_desc.textureType == TextureType::TEXTURE_CUBE) ? 6u : static_cast(_desc.arraySize); + + for (uint32_t i = 1; i < mipLevels; ++i) + { + // Transition src level (i-1) to TRANSFER_SRC_OPTIMAL + VkImageSubresourceRange srcRange{}; + srcRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + srcRange.baseMipLevel = i - 1; + srcRange.levelCount = 1; + srcRange.baseArrayLayer = 0; + srcRange.layerCount = layerCount; + + transitionImageLayout(cmd, _nativeTexture.image, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, srcRange); + + // Transition dest level (i) to TRANSFER_DST_OPTIMAL + VkImageSubresourceRange dstRange{}; + dstRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + dstRange.baseMipLevel = i; + dstRange.levelCount = 1; + dstRange.baseArrayLayer = 0; + dstRange.layerCount = layerCount; + + transitionImageLayout(cmd, _nativeTexture.image, + VK_IMAGE_LAYOUT_UNDEFINED, // first time write + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, dstRange); + + // Setup blit region + VkImageBlit blit{}; + blit.srcOffsets[0] = {0, 0, 0}; + blit.srcOffsets[1] = {mipWidth, mipHeight, 1}; + blit.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + blit.srcSubresource.mipLevel = i - 1; + blit.srcSubresource.baseArrayLayer = 0; + blit.srcSubresource.layerCount = layerCount; + + blit.dstOffsets[0] = {0, 0, 0}; + blit.dstOffsets[1] = {std::max(1, mipWidth / 2), std::max(1, mipHeight / 2), 1}; + blit.dstSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + blit.dstSubresource.mipLevel = i; + blit.dstSubresource.baseArrayLayer = 0; + blit.dstSubresource.layerCount = layerCount; + + // Perform blit + vkCmdBlitImage(cmd, _nativeTexture.image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, _nativeTexture.image, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &blit, VK_FILTER_LINEAR); + + // Transition dest level to SHADER_READ_ONLY_OPTIMAL + transitionImageLayout(cmd, _nativeTexture.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, dstRange); + + // Transition src level back to SHADER_READ_ONLY_OPTIMAL + transitionImageLayout(cmd, _nativeTexture.image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, srcRange); + + // Update dimensions for next mip level + mipWidth = std::max(1, mipWidth / 2); + mipHeight = std::max(1, mipHeight / 2); + + _layoutTracker.setLayout(i, 0, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + } + + _overrideMipLevels = mipLevels; +} + +// ------------------------------------------------------------ +// updateCompressedData +// ------------------------------------------------------------ +void TextureImpl::updateCompressedData(const void* data, + int width, + int height, + std::size_t dataSize, + int level, + int layerIndex) +{ + ensureNativeTexture(); + if (!data || width <= 0 || height <= 0) + return; + + updateCompressedSubData(/*xoffset*/ 0, /*yoffset*/ 0, width, height, dataSize, level, data, layerIndex); +} + +// ------------------------------------------------------------ +// updateCompressedSubData +// ------------------------------------------------------------ +void TextureImpl::updateCompressedSubData(int xoffset, + int yoffset, + int width, + int height, + std::size_t dataSize, + int level, + const void* data, + int layerIndex) +{ + ensureNativeTexture(); + if (!data || width <= 0 || height <= 0) + return; + + // Query block geometry and bytes for the compressed format. + const auto& info = ax::rhi::RHIUtils::getFormatDesc(_desc.pixelFormat); + assert(info.blockSize > 0 && "Unsupported compressed format"); + + // Check block alignment + assert(xoffset % info.blockWidth == 0 && "xoffset must be block aligned"); + assert(yoffset % info.blockHeight == 0 && "yoffset must be block aligned"); + + // Compute expected size + uint32_t blocksX = (width + info.blockWidth - 1) / info.blockWidth; + uint32_t blocksY = (height + info.blockHeight - 1) / info.blockHeight; + uint32_t expectedSize = blocksX * blocksY * info.blockSize; + assert(expectedSize == dataSize && "Compressed data size mismatch"); + + // Vulkan requires offsets to be aligned to block dimensions for compressed updates. + // The width/height need not be multiples of the block-size; the last partial block is allowed. + assert(isBlockAligned(static_cast(xoffset), static_cast(yoffset), info.blockWidth, + info.blockHeight) && + "Compressed upload offsets must be block-aligned"); + + // Create staging buffer sized to the compressed region. + VkBuffer stagingBuffer = VK_NULL_HANDLE; + VkDeviceMemory stagingMemory = VK_NULL_HANDLE; + + VkBufferCreateInfo bufInfo{VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO}; + bufInfo.size = expectedSize; + bufInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; + bufInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + + VkDevice device = _driver->getDevice(); + VkResult res = vkCreateBuffer(device, &bufInfo, nullptr, &stagingBuffer); + assert(res == VK_SUCCESS && "vkCreateBuffer (staging) failed"); + + VkMemoryRequirements memReq{}; + vkGetBufferMemoryRequirements(device, stagingBuffer, &memReq); + + VkMemoryAllocateInfo allocInfo{VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO}; + allocInfo.allocationSize = memReq.size; + allocInfo.memoryTypeIndex = _driver->findMemoryType( + memReq.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + + res = vkAllocateMemory(device, &allocInfo, nullptr, &stagingMemory); + assert(res == VK_SUCCESS && "vkAllocateMemory (staging) failed"); + + vkBindBufferMemory(device, stagingBuffer, stagingMemory, 0); + + // Upload compressed bytes into staging memory as tightly packed. + void* mapped = nullptr; + res = vkMapMemory(device, stagingMemory, 0, expectedSize, 0, &mapped); + assert(res == VK_SUCCESS && "vkMapMemory failed"); + std::memcpy(mapped, data, static_cast(expectedSize)); + vkUnmapMemory(device, stagingMemory); + + // Record commands: transition destination subresource to TRANSFER_DST_OPTIMAL, copy, then to + // SHADER_READ_ONLY_OPTIMAL. + auto cmd = _driver->startIsolateSubmission(); + + VkImageSubresourceRange range{}; + range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + range.baseMipLevel = static_cast(level); + range.levelCount = 1; + range.baseArrayLayer = static_cast(layerIndex); + range.layerCount = 1; + + const auto oldLayout = _layoutTracker.getLayout(level, layerIndex); + + transitionImageLayout(cmd, _nativeTexture.image, oldLayout, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, range); + + // For compressed formats, bufferRowLength and bufferImageHeight are specified in texels (not bytes). + // Setting them to 0 means tightly packed rows according to format rules. + VkBufferImageCopy region{}; + region.bufferOffset = 0; + region.bufferRowLength = 0; // tight packing in texel units + region.bufferImageHeight = 0; // tight packing in texel units + region.imageSubresource.aspectMask = range.aspectMask; + region.imageSubresource.mipLevel = range.baseMipLevel; + region.imageSubresource.baseArrayLayer = range.baseArrayLayer; + region.imageSubresource.layerCount = range.layerCount; + region.imageOffset = {xoffset, yoffset, 0}; + region.imageExtent = {static_cast(width), static_cast(height), 1}; + + vkCmdCopyBufferToImage(cmd, stagingBuffer, _nativeTexture.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion); + + // !!!Vulkan requires baked mipmaps data + if (shouldGenMipmaps()) + { + AXLOGW( + "Warning: Compressed textures do not support runtime mipmap generation. " + "Please upload precomputed mip levels instead."); + } + + // If you will generate mipmaps next, do not transition to SHADER_READ_ONLY here. Let generateMipmaps() handle + // transitions. + transitionImageLayout(cmd, _nativeTexture.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, range); + + _layoutTracker.setLayout(level, layerIndex, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + + _driver->finishIsolateSubmission(cmd); + + vkDestroyBuffer(device, stagingBuffer, nullptr); + vkFreeMemory(device, stagingMemory, nullptr); +} + +// ------------------------------------------------------------ +// updateFaceData +// ------------------------------------------------------------ +void TextureImpl::updateFaceData(TextureCubeFace side, const void* data) +{ + assert(_desc.textureType == TextureType::TEXTURE_CUBE); + updateSubData(0, 0, _desc.width, _desc.height, 0, data, static_cast(side)); +} + +// ------------------------------------------------------------ +// ensureNativeTexture +// ------------------------------------------------------------ +void TextureImpl::ensureNativeTexture() +{ + if (_nativeTexture) + return; + + const VkFormat vkFmt = getVkFormat(_desc.pixelFormat); + if (vkFmt == VK_FORMAT_UNDEFINED) + { + AXLOGE("axmol: Vulkan does not support pixel format: {}", (int)_desc.pixelFormat); + return; + } + + const bool isCube = (_desc.textureType == TextureType::TEXTURE_CUBE); + const uint32_t mipLevels = + (_desc.mipLevels != 0) ? _desc.mipLevels : ax::rhi::RHIUtils::computeMipLevels(_desc.width, _desc.height); + const uint32_t arrayLayers = isCube ? 6u : static_cast(_desc.arraySize); + + VkImageCreateInfo imageInfo{}; + imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; + imageInfo.flags = isCube ? VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT : 0; + imageInfo.imageType = VK_IMAGE_TYPE_2D; + imageInfo.extent.width = _desc.width; + imageInfo.extent.height = _desc.height; + imageInfo.extent.depth = 1; + imageInfo.mipLevels = mipLevels; + imageInfo.arrayLayers = arrayLayers; + imageInfo.format = vkFmt; + imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL; + imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + imageInfo.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT; + if (_desc.textureUsage == TextureUsage::RENDER_TARGET) + { + // If used as render target, add color attachment usage for non-depth formats + if (_desc.pixelFormat != PixelFormat::D24S8) + imageInfo.usage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + else + imageInfo.usage |= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT; + + // Optional: if future plan to use as input attachment in subpasses + // imageInfo.usage |= VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT; + } + imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + imageInfo.samples = VK_SAMPLE_COUNT_1_BIT; + + auto device = _driver->getDevice(); + + VkResult res = vkCreateImage(device, &imageInfo, nullptr, &_nativeTexture.image); + assert(res == VK_SUCCESS && "vkCreateImage failed"); + + VkMemoryRequirements memReq{}; + vkGetImageMemoryRequirements(device, _nativeTexture.image, &memReq); + + VkMemoryAllocateInfo allocInfo{}; + allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + allocInfo.allocationSize = memReq.size; + allocInfo.memoryTypeIndex = _driver->findMemoryType(memReq.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + + res = vkAllocateMemory(device, &allocInfo, nullptr, &_nativeTexture.memory); + assert(res == VK_SUCCESS && "vkAllocateMemory failed"); + + vkBindImageMemory(device, _nativeTexture.image, _nativeTexture.memory, 0); + + // Create image view + VkImageViewCreateInfo viewInfo{}; + viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; + viewInfo.image = _nativeTexture.image; + + // For cube textures, arrayLayers must be multiple of 6 + if (isCube) + { + assert((arrayLayers % 6u) == 0u && "Cube array layers must be multiple of 6"); + // If exactly 6 layers -> single cube, else cube array + viewInfo.viewType = (arrayLayers == 6u) ? VK_IMAGE_VIEW_TYPE_CUBE : VK_IMAGE_VIEW_TYPE_CUBE_ARRAY; + } + else + { + viewInfo.viewType = (_desc.arraySize > 1 ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_2D); + } + + viewInfo.format = vkFmt; + viewInfo.components = {VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, + VK_COMPONENT_SWIZZLE_A}; + viewInfo.subresourceRange.aspectMask = (_desc.pixelFormat == PixelFormat::D24S8) + ? (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT) + : VK_IMAGE_ASPECT_COLOR_BIT; + viewInfo.subresourceRange.baseMipLevel = 0; + viewInfo.subresourceRange.levelCount = mipLevels; + viewInfo.subresourceRange.baseArrayLayer = 0; + viewInfo.subresourceRange.layerCount = arrayLayers; + + res = vkCreateImageView(device, &viewInfo, nullptr, &_nativeTexture.view); + assert(res == VK_SUCCESS && "vkCreateImageView failed"); +} + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/TextureVK.h b/axmol/rhi/vulkan/TextureVK.h new file mode 100644 index 000000000000..b54a8642f156 --- /dev/null +++ b/axmol/rhi/vulkan/TextureVK.h @@ -0,0 +1,171 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include "axmol/rhi/Texture.h" +#include "axmol/base/EventListenerCustom.h" +#include + +#include +#include "axmol/tlx/pod_vector.hpp" + +namespace ax::rhi::vk +{ +/** + * @addtogroup _vk + * @{ + */ + +class DriverImpl; +class TextureImpl; + +/** + * @brief A TextureHandle holds Vulkan VkImage & VkImageView + * + */ +struct TextureHandle +{ + friend class TextureImpl; + VkImage image{VK_NULL_HANDLE}; + VkImageView view{VK_NULL_HANDLE}; + VkDeviceMemory memory{VK_NULL_HANDLE}; + + explicit operator bool() const { return image != VK_NULL_HANDLE; } + +private: + void destroy(DriverImpl* driver); + + TextureHandle detach() + { + auto ret = *this; + image = VK_NULL_HANDLE; + view = VK_NULL_HANDLE; + memory = VK_NULL_HANDLE; + return ret; + } +}; + +class ImageLayoutTracker +{ +public: + ImageLayoutTracker(size_t levelCap, size_t layerCap) + { + _layouts.resize(levelCap); + for (auto& v : _layouts) + { + v.resize(layerCap, VK_IMAGE_LAYOUT_UNDEFINED); + } + } + + VkImageLayout getLayout(uint32_t level, uint32_t layer) const + { + if (level < _layouts.size() && layer < _layouts[level].size()) + return _layouts[level][layer]; + return VK_IMAGE_LAYOUT_UNDEFINED; // default if not yet set + } + + void setLayout(uint32_t level, uint32_t layer, VkImageLayout layout) + { + // Expand outer vector if needed + if (level >= _layouts.size()) + _layouts.resize(level + 1); + + // Expand inner vector if needed + if (layer >= _layouts[level].size()) + _layouts[level].resize(layer + 1, VK_IMAGE_LAYOUT_UNDEFINED); + + _layouts[level][layer] = layout; + } + +private: + std::vector> _layouts; +}; + +/** + * The texture implementation supports 2D, cubemap, and 2D array textures. + */ +class TextureImpl : public rhi::Texture +{ +public: + /** + * @param desc Specifies the texture description. + */ + TextureImpl(DriverImpl*, const TextureDesc& desc); + TextureImpl(DriverImpl*, VkImage existingImage, VkImageView existingImageView); + ~TextureImpl(); + + // only operate level=0, layer=0 + void transitionLayout(VkCommandBuffer cmd, VkImageLayout newLayout); + + // Gets layout of level=0, layer=0 + VkImageLayout getCurrentLayout() const; + + // internal use + void setKnownLayout(VkImageLayout layout); + + void updateData(const void* data, int width, int height, int level, int layerIndex = 0) override; + void updateCompressedData(const void* data, + int width, + int height, + std::size_t dataSize, + int level, + int layerIndex = 0) override; + + void updateSubData(int xoffset, int yoffset, int width, int height, int level, const void* data, int layerIndex = 0) + override; + + void updateCompressedSubData(int xoffset, + int yoffset, + int width, + int height, + std::size_t dataSize, + int level, + const void* data, + int layerIndex = 0) override; + + void updateFaceData(TextureCubeFace side, const void* data) override; + + void updateSamplerDesc(const SamplerDesc& sampler) override; + void updateTextureDesc(const TextureDesc& desc) override; + + const TextureHandle& internalHandle() const { return _nativeTexture; } + VkSampler getSampler() const { return _sampler; } + const TextureDesc& getDesc() const { return _desc; } + +private: + void ensureNativeTexture(); + void generateMipmaps(VkCommandBuffer cmd); + + DriverImpl* _driver{nullptr}; // weak pointer + ImageLayoutTracker _layoutTracker; + TextureHandle _nativeTexture{}; + VkSampler _sampler{VK_NULL_HANDLE}; + TextureDesc _desc{}; + + bool _ownResources{false}; +}; + +/** @} */ + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/UtilsVK.cpp b/axmol/rhi/vulkan/UtilsVK.cpp new file mode 100644 index 000000000000..c5dc736e2ec6 --- /dev/null +++ b/axmol/rhi/vulkan/UtilsVK.cpp @@ -0,0 +1,136 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#include "TextureVK.h" +#include "axmol/rhi/RHIUtils.h" +#include "axmol/rhi/vulkan/UtilsVK.h" +#include "axmol/rhi/vulkan/DriverVK.h" +#include "axmol/base/Logging.h" +#include +#include +#include + +namespace ax::rhi::vk +{ + +// ------------------------------------------------------------------------------------------------- +// PixelFormatInfo mapping table (array style, aligned with PixelFormat enum order) +// ------------------------------------------------------------------------------------------------- +static PixelFormatInfo s_pixelFormatInfos[] = { + /* ---- format ----------------------- fmtSrv ----------------------- fmtDsv --------------------- fmtSrgb + -------------------*/ + /* pvrtc v1 ------------------------------------------------------------ */ + {VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // PVRTC4 + {VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // PVRTC4A + {VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // PVRTC2 + {VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // PVRTC2A + + /* etc ----------------------------------------------------------------- */ + {VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // ETC1 + {VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // ETC2 + {VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // ETC2A + + /* s3tc / bc ----------------------------------------------------------- */ + {VK_FORMAT_BC1_RGBA_UNORM_BLOCK, VK_FORMAT_BC1_RGBA_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_BC1_RGBA_SRGB_BLOCK}, // S3TC_DXT1 + {VK_FORMAT_BC2_UNORM_BLOCK, VK_FORMAT_BC2_UNORM_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_BC2_SRGB_BLOCK}, // S3TC_DXT3 + {VK_FORMAT_BC3_UNORM_BLOCK, VK_FORMAT_BC3_UNORM_BLOCK, VK_FORMAT_UNDEFINED, VK_FORMAT_BC3_SRGB_BLOCK}, // S3TC_DXT5 + + /* atc ----------------------------------------------------------------- */ + {VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // ATC + {VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // ATCE + {VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // ATCI + + /* astc ---------------------------------------------------------------- */ + {VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_4x4_SRGB_BLOCK}, // ASTC4×4 + {VK_FORMAT_ASTC_5x4_UNORM_BLOCK, VK_FORMAT_ASTC_5x4_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_5x4_SRGB_BLOCK}, // ASTC5×4 + {VK_FORMAT_ASTC_5x5_UNORM_BLOCK, VK_FORMAT_ASTC_5x5_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_5x5_SRGB_BLOCK}, // ASTC5×5 + {VK_FORMAT_ASTC_6x5_UNORM_BLOCK, VK_FORMAT_ASTC_6x5_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_6x5_SRGB_BLOCK}, // ASTC6×5 + {VK_FORMAT_ASTC_6x6_UNORM_BLOCK, VK_FORMAT_ASTC_6x6_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_6x6_SRGB_BLOCK}, // ASTC6×6 + {VK_FORMAT_ASTC_8x5_UNORM_BLOCK, VK_FORMAT_ASTC_8x5_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_8x5_SRGB_BLOCK}, // ASTC8×5 + {VK_FORMAT_ASTC_8x6_UNORM_BLOCK, VK_FORMAT_ASTC_8x6_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_8x6_SRGB_BLOCK}, // ASTC8×6 + {VK_FORMAT_ASTC_8x8_UNORM_BLOCK, VK_FORMAT_ASTC_8x8_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_8x8_SRGB_BLOCK}, // ASTC8×8 + {VK_FORMAT_ASTC_10x5_UNORM_BLOCK, VK_FORMAT_ASTC_10x5_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_10x5_SRGB_BLOCK}, // ASTC10×5 + {VK_FORMAT_ASTC_10x6_UNORM_BLOCK, VK_FORMAT_ASTC_10x6_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_10x6_SRGB_BLOCK}, // ASTC10×6 + {VK_FORMAT_ASTC_10x8_UNORM_BLOCK, VK_FORMAT_ASTC_10x8_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_10x8_SRGB_BLOCK}, // ASTC10×8 + {VK_FORMAT_ASTC_10x10_UNORM_BLOCK, VK_FORMAT_ASTC_10x10_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_10x10_SRGB_BLOCK}, // ASTC10×10 + {VK_FORMAT_ASTC_12x10_UNORM_BLOCK, VK_FORMAT_ASTC_12x10_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_12x10_SRGB_BLOCK}, // ASTC12×10 + {VK_FORMAT_ASTC_12x12_UNORM_BLOCK, VK_FORMAT_ASTC_12x12_UNORM_BLOCK, VK_FORMAT_UNDEFINED, + VK_FORMAT_ASTC_12x12_SRGB_BLOCK}, // ASTC12×12 + + /* uncompressed -------------------------------------------------------- */ + {VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_R8G8B8A8_SRGB}, // RGBA8 + {VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_B8G8R8A8_SRGB}, // BGRA8 + {VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // RGB8 (NA) + {VK_FORMAT_R5G6B5_UNORM_PACK16, VK_FORMAT_R5G6B5_UNORM_PACK16, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // RGB565 + {VK_FORMAT_R4G4B4A4_UNORM_PACK16, VK_FORMAT_R4G4B4A4_UNORM_PACK16, VK_FORMAT_UNDEFINED, + VK_FORMAT_UNDEFINED}, // RGBA4 + {VK_FORMAT_R5G5B5A1_UNORM_PACK16, VK_FORMAT_R5G5B5A1_UNORM_PACK16, VK_FORMAT_UNDEFINED, + VK_FORMAT_UNDEFINED}, // RGB5A1 + + {VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_R8_SRGB}, // R8 + {VK_FORMAT_R8G8_UNORM, VK_FORMAT_R8G8_UNORM, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED}, // RG8 + {VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_UNDEFINED, + VK_FORMAT_UNDEFINED}, // RGBA32F + + /* depth-stencil ------------------------------------------------------- */ + {VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, + VK_FORMAT_UNDEFINED}, // D24S8 +}; + +static_assert(AX_ARRAYSIZE(s_pixelFormatInfos) == static_cast(PixelFormat::COUNT), + "The Vulkan GPU texture format info table is incomplete!"); + +inline namespace UtilsVK +{ +// ------------------------------------------------------------------------------------------------- +// Public API +// ------------------------------------------------------------------------------------------------- +VkFormat toVKFormat(PixelFormat pf) +{ + auto fmtInfo = toVKFormatInfo(pf); + return fmtInfo ? fmtInfo->format : VK_FORMAT_UNDEFINED; +} + +const PixelFormatInfo* toVKFormatInfo(PixelFormat pf) +{ + if (pf < PixelFormat::COUNT) [[likely]] + return &s_pixelFormatInfos[(int)pf]; + return nullptr; +} + +} // namespace UtilsVK +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/UtilsVK.h b/axmol/rhi/vulkan/UtilsVK.h new file mode 100644 index 000000000000..fafe4ee2c624 --- /dev/null +++ b/axmol/rhi/vulkan/UtilsVK.h @@ -0,0 +1,57 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include "axmol/rhi/RHITypes.h" +#include "axmol/rhi/PixelBufferDesc.h" +#include "axmol/rhi/vulkan/TextureVK.h" +#include + +namespace ax::rhi::vk +{ +class DriverImpl; + +/** + * @addtogroup _d3d + * @{ + */ + +struct PixelFormatInfo +{ + VkFormat format; + VkFormat fmtSrv; // View format for SRV/UAV + VkFormat fmtDsv; // View format for DSV + VkFormat fmtSrgb; // fmtSrgb +}; + +inline namespace UtilsVK +{ +VkFormat toVKFormat(PixelFormat pf); + +const PixelFormatInfo* toVKFormatInfo(PixelFormat pf); +}; // namespace UtilsVK + +/** @} */ + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/VertexLayoutVK.cpp b/axmol/rhi/vulkan/VertexLayoutVK.cpp new file mode 100644 index 000000000000..41578890a8cf --- /dev/null +++ b/axmol/rhi/vulkan/VertexLayoutVK.cpp @@ -0,0 +1,123 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#include "axmol/rhi/vulkan/VertexLayoutVK.h" +#include "axmol/rhi/vulkan/RenderContextVK.h" +#include "axmol/base/Logging.h" + +namespace ax::rhi::vk +{ + +// Map VertexFormat to VkFormat +static VkFormat toVkFormat(VertexFormat format, bool unorm) +{ + switch (format) + { + case VertexFormat::FLOAT4: + return VK_FORMAT_R32G32B32A32_SFLOAT; + case VertexFormat::FLOAT3: + return VK_FORMAT_R32G32B32_SFLOAT; + case VertexFormat::FLOAT2: + return VK_FORMAT_R32G32_SFLOAT; + case VertexFormat::FLOAT: + return VK_FORMAT_R32_SFLOAT; + + case VertexFormat::INT4: + return VK_FORMAT_R32G32B32A32_SINT; + case VertexFormat::INT3: + return VK_FORMAT_R32G32B32_SINT; + case VertexFormat::INT2: + return VK_FORMAT_R32G32_SINT; + case VertexFormat::INT: + return VK_FORMAT_R32_SINT; + + case VertexFormat::USHORT4: + return unorm ? VK_FORMAT_R16G16B16A16_UNORM : VK_FORMAT_R16G16B16A16_UINT; + case VertexFormat::USHORT2: + return unorm ? VK_FORMAT_R16G16_UNORM : VK_FORMAT_R16G16_UINT; + + case VertexFormat::UBYTE4: + return unorm ? VK_FORMAT_R8G8B8A8_UNORM : VK_FORMAT_R8G8B8A8_UINT; + + case VertexFormat::MAT4: + return VK_FORMAT_R32G32B32A32_SFLOAT; + + default: + return VK_FORMAT_UNDEFINED; + } +} + +VertexLayoutImpl::VertexLayoutImpl(VertexLayoutDesc&& desc) : VertexLayout(std::move(desc)) +{ + auto& bindingsDesc = getBindings(); + _bindings.clear(); + _attributes.clear(); + + for (auto& inputDesc : bindingsDesc) + { + VkVertexInputBindingDescription binding{}; + binding.binding = inputDesc.instanceStepRate ? RenderContextImpl::VI_INSTANCING_BINDING_INDEX + : RenderContextImpl::VI_BINDING_INDEX; + binding.stride = inputDesc.instanceStepRate ? static_cast(getInstanceStride()) + : static_cast(getStride()); + binding.inputRate = inputDesc.instanceStepRate ? VK_VERTEX_INPUT_RATE_INSTANCE : VK_VERTEX_INPUT_RATE_VERTEX; + + auto it = std::find_if(_bindings.begin(), _bindings.end(), + [&](const VkVertexInputBindingDescription& b) { return b.binding == binding.binding; }); + if (it == _bindings.end()) + _bindings.push_back(binding); + + // Attribute descriptions + if (inputDesc.format != VertexFormat::MAT4) + { + VkVertexInputAttributeDescription attr{}; + attr.location = inputDesc.index; + attr.binding = binding.binding; + attr.format = toVkFormat(inputDesc.format, inputDesc.needToBeNormallized); + attr.offset = inputDesc.offset; + _attributes.push_back(attr); + } + else + { + // MAT4 expands into 4 vec4 attributes + for (uint32_t i = 0; i < 4; ++i) + { + VkVertexInputAttributeDescription attr{}; + attr.location = inputDesc.index + i; + attr.binding = binding.binding; + attr.format = VK_FORMAT_R32G32B32A32_SFLOAT; + attr.offset = inputDesc.offset + sizeof(float) * 4 * i; + _attributes.push_back(attr); + } + } + } + + _vkCreateInfo = {}; + _vkCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; + _vkCreateInfo.vertexBindingDescriptionCount = static_cast(_bindings.size()); + _vkCreateInfo.pVertexBindingDescriptions = _bindings.data(); + _vkCreateInfo.vertexAttributeDescriptionCount = static_cast(_attributes.size()); + _vkCreateInfo.pVertexAttributeDescriptions = _attributes.data(); +} + +} // namespace ax::rhi::vk diff --git a/axmol/rhi/vulkan/VertexLayoutVK.h b/axmol/rhi/vulkan/VertexLayoutVK.h new file mode 100644 index 000000000000..a7811d9ae2ff --- /dev/null +++ b/axmol/rhi/vulkan/VertexLayoutVK.h @@ -0,0 +1,53 @@ +/**************************************************************************** + Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). + + https://axmol.dev/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include "axmol/rhi/VertexLayout.h" +#include "axmol/rhi/RHITypes.h" +#include +#include + +namespace ax::rhi::vk +{ +/** + * @brief A Vulkan-based VertexLayout implementation + */ +class VertexLayoutImpl : public VertexLayout +{ +public: + explicit VertexLayoutImpl(VertexLayoutDesc&&); + ~VertexLayoutImpl() override = default; + + /** + * @brief Get Vulkan vertex input state create info + */ + const VkPipelineVertexInputStateCreateInfo& getVkCreateInfo() const { return _vkCreateInfo; } + +private: + std::vector _bindings; + std::vector _attributes; + VkPipelineVertexInputStateCreateInfo _vkCreateInfo{}; +}; + +} // namespace ax::rhi::vk diff --git a/axmol/tlx/bitmask.hpp b/axmol/tlx/bitmask.hpp index 44ddf81d2c3d..766e59bf588a 100644 --- a/axmol/tlx/bitmask.hpp +++ b/axmol/tlx/bitmask.hpp @@ -112,4 +112,16 @@ constexpr bool only(_BITMASK _Left, _BITMASK _Elements) noexcept { return (_Left & _Elements) == _Elements; } + +template +inline void set(_BITMASK& _Left, _BITMASK _Elements) noexcept +{ + _Left |= _Elements; +} + +template +inline void clear(_BITMASK& _Left, _BITMASK _Elements) noexcept +{ + _Left &= ~_Elements; +} } // namespace bitmask diff --git a/axmol/tlx/hash.hpp b/axmol/tlx/hash.hpp new file mode 100644 index 000000000000..b3d40488f00f --- /dev/null +++ b/axmol/tlx/hash.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include "xxhash/xxhash.h" +#include + +namespace axstd +{ +inline uintptr_t hash_bytes(const void* data, size_t length, uintptr_t seed = 0) +{ + if constexpr (sizeof(uintptr_t) == 64) + return XXH64(data, length, seed); + else + return XXH32(data, length, seed); +} +} // namespace axstd diff --git a/axmol/ui/UIEditBox/UIEditBoxImpl-android.cpp b/axmol/ui/UIEditBox/UIEditBoxImpl-android.cpp index 27d316786e04..4584f3429156 100644 --- a/axmol/ui/UIEditBox/UIEditBoxImpl-android.cpp +++ b/axmol/ui/UIEditBox/UIEditBoxImpl-android.cpp @@ -53,28 +53,6 @@ namespace ui static void editBoxEditingDidBegin(int index); static void editBoxEditingDidChanged(int index, std::string_view text); static void editBoxEditingDidEnd(int index, std::string_view text, int action); -extern "C" { -JNIEXPORT void JNICALL Java_dev_axmol_lib_EditBoxHelper_editBoxEditingDidBegin(JNIEnv*, jclass, jint index) -{ - editBoxEditingDidBegin(index); -} - -JNIEXPORT void JNICALL Java_dev_axmol_lib_EditBoxHelper_editBoxEditingChanged(JNIEnv* env, - jclass, - jint index, - jstring text) -{ - std::string textString = text_utils::getStringUTFCharsJNI(env, text); - editBoxEditingDidChanged(index, textString); -} - -JNIEXPORT void JNICALL -Java_dev_axmol_lib_EditBoxHelper_editBoxEditingDidEnd(JNIEnv* env, jclass, jint index, jstring text, jint action) -{ - std::string textString = text_utils::getStringUTFCharsJNI(env, text); - editBoxEditingDidEnd(index, textString, action); -} -} static std::unordered_map s_allEditBoxes; @@ -247,6 +225,29 @@ const char* EditBoxImplAndroid::getNativeDefaultFontName() } // namespace ax +extern "C" { +JNIEXPORT void JNICALL Java_dev_axmol_lib_EditBoxHelper_nativeEditBoxEditingDidBegin(JNIEnv*, jclass, jint index) +{ + ax::ui::editBoxEditingDidBegin(index); +} + +JNIEXPORT void JNICALL Java_dev_axmol_lib_EditBoxHelper_nativeEditBoxEditingChanged(JNIEnv* env, + jclass, + jint index, + jstring text) +{ + std::string textString = ax::text_utils::getStringUTFCharsJNI(env, text); + ax::ui::editBoxEditingDidChanged(index, textString); +} + +JNIEXPORT void JNICALL +Java_dev_axmol_lib_EditBoxHelper_nativeEditBoxEditingDidEnd(JNIEnv* env, jclass, jint index, jstring text, jint action) +{ + std::string textString = ax::text_utils::getStringUTFCharsJNI(env, text); + ax::ui::editBoxEditingDidEnd(index, textString, action); +} +} + # undef LOGD #endif /* #if (AX_TARGET_PLATFORM == AX_PLATFORM_ANDROID) */ diff --git a/cmake/Modules/AXConfigDefine.cmake b/cmake/Modules/AXConfigDefine.cmake index 2eb046e98dee..05c27b92d3e3 100644 --- a/cmake/Modules/AXConfigDefine.cmake +++ b/cmake/Modules/AXConfigDefine.cmake @@ -144,6 +144,8 @@ function(use_ax_compile_define target) target_compile_definitions(${target} PUBLIC AX_RENDER_API=2) elseif(AX_RENDER_API STREQUAL "d3d") target_compile_definitions(${target} PUBLIC AX_RENDER_API=3) + elseif(AX_RENDER_API STREQUAL "vk") + target_compile_definitions(${target} PUBLIC AX_RENDER_API=4) endif() endfunction() diff --git a/cmake/Modules/AXConfigDepend.cmake b/cmake/Modules/AXConfigDepend.cmake index b26a66c0e693..a961bd5a245e 100644 --- a/cmake/Modules/AXConfigDepend.cmake +++ b/cmake/Modules/AXConfigDepend.cmake @@ -27,7 +27,13 @@ macro(ax_depend) find_package(Threads REQUIRED) set(THREADS_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) elseif(ANDROID) - list(APPEND PLATFORM_SPECIFIC_LIBS GLESv2 EGL log android OpenSLES) + if(AX_RENDER_API STREQUAL "gl") + # GLES backend + list(APPEND PLATFORM_SPECIFIC_LIBS GLESv2 EGL log android OpenSLES) + elseif(AX_RENDER_API STREQUAL "vk") + # Vulkan backend + list(APPEND PLATFORM_SPECIFIC_LIBS log android OpenSLES) + endif() elseif(APPLE) include_directories(/System/Library/Frameworks) find_library(AUDIOTOOLBOX_LIBRARY AudioToolbox) diff --git a/cmake/Modules/AXSLCC.cmake b/cmake/Modules/AXSLCC.cmake index 5d425011b28a..09a82519493c 100644 --- a/cmake/Modules/AXSLCC.cmake +++ b/cmake/Modules/AXSLCC.cmake @@ -156,6 +156,13 @@ function(ax_add_shader_target target_name) set(OUT_LANG "MSL") set(SC_DEFINES "AXSLC_TARGET_MSL") list(APPEND SC_FLAGS "--lang=msl") + elseif(AX_RENDER_API STREQUAL "vk") + set(OUT_LANG "SPIRV") + set(SC_DEFINES "AXSLC_TARGET_SPIRV") + set(SC_PROFILE "130") + list(APPEND SC_FLAGS "--lang=spirv" "--profile=${SC_PROFILE}") + else() + message(FATAL_ERROR "Unsupported AX_RENDER_API=${AX_RENDER_API}") endif() # no-suffix since 1.18.1 released by axmolengine @@ -194,7 +201,7 @@ function(ax_add_shader_target target_name) endif() # sgs, because Apple Metal lack of shader uniform reflect and d3d reflect only support semantic name, so use --sgs --refelect - if(AX_RENDER_API STREQUAL "mtl" OR AX_RENDER_API STREQUAL "d3d") + if(AX_RENDER_API STREQUAL "mtl" OR AX_RENDER_API STREQUAL "d3d" OR AX_RENDER_API STREQUAL "vk") list(APPEND SC_FLAGS "--sgs" "--reflect") endif() diff --git a/extensions/ImGui/shaders/imgui_sprite.vert b/extensions/ImGui/shaders/imgui_sprite.vert index 335b8cfb671a..ea4e101154b6 100644 --- a/extensions/ImGui/shaders/imgui_sprite.vert +++ b/extensions/ImGui/shaders/imgui_sprite.vert @@ -7,7 +7,7 @@ layout(location = COLOR0) in vec4 a_color; layout(location = COLOR0) out vec4 v_color; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/extensions/ImGui/src/ImGui/backends/imgui_impl_glfw.cpp b/extensions/ImGui/src/ImGui/backends/imgui_impl_glfw.cpp index e51007a15a0f..72fde3124048 100644 --- a/extensions/ImGui/src/ImGui/backends/imgui_impl_glfw.cpp +++ b/extensions/ImGui/src/ImGui/backends/imgui_impl_glfw.cpp @@ -1657,6 +1657,8 @@ IMGUI_IMPL_API bool ImGui_ImplGlfw_InitForAxmol(GLFWwindow* window, bool install return ImGui_ImplGlfw_Init(window, install_callbacks, GlfwClientApi_Metal); #elif AX_RENDER_API == AX_RENDER_API_D3D return ImGui_ImplGlfw_Init(window, install_callbacks, GlfwClientApi_D3D); +#elif AX_RENDER_API == AX_RENDER_API_VK + return ImGui_ImplGlfw_Init(window, install_callbacks, GlfwClientApi_Vulkan); #else #error "imgui glfw backend not support current render API" return false; diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d.frag index 93a59b68436c..86d85419b455 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d.frag @@ -9,9 +9,9 @@ layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_baseColor; }; diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d.vert b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d.vert index aed97ac0e8e1..6b0ad705467b 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d.vert +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d.vert @@ -5,7 +5,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_matrix; }; diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask.frag index b0cef2a3ea74..cd8242ab5c86 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask.frag @@ -10,10 +10,10 @@ layout(location = TEXCOORD1) in vec4 v_clipPos; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; -layout(binding = 1) uniform sampler2D u_tex1; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 1) uniform sampler2D u_tex1; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_channelFlag; vec4 u_baseColor; }; diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_inverted.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_inverted.frag index 58fb8985658d..9f8cde7e5ff0 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_inverted.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_inverted.frag @@ -10,10 +10,10 @@ layout(location = TEXCOORD1) in vec4 v_clipPos; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; -layout(binding = 1) uniform sampler2D u_tex1; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 1) uniform sampler2D u_tex1; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_channelFlag; vec4 u_baseColor; }; diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_inverted_premultiplied_alpha.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_inverted_premultiplied_alpha.frag index 4820cf14c161..454d8fdb63b7 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_inverted_premultiplied_alpha.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_inverted_premultiplied_alpha.frag @@ -10,10 +10,10 @@ layout(location = TEXCOORD1) in vec4 v_clipPos; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; -layout(binding = 1) uniform sampler2D u_tex1; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 1) uniform sampler2D u_tex1; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_channelFlag; vec4 u_baseColor; }; diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_premultiplied_alpha.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_premultiplied_alpha.frag index 0c71708a227e..acfddde96181 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_premultiplied_alpha.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_mask_premultiplied_alpha.frag @@ -10,10 +10,10 @@ layout(location = TEXCOORD1) in vec4 v_clipPos; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; -layout(binding = 1) uniform sampler2D u_tex1; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 1) uniform sampler2D u_tex1; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_channelFlag; vec4 u_baseColor; }; diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_masked.vert b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_masked.vert index fb170ee1ee77..dbfddb45e267 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_masked.vert +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_masked.vert @@ -6,7 +6,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; layout(location = TEXCOORD1) out vec4 v_clipPos; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_matrix; mat4 u_clipMatrix; }; diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_premultiplied_alpha.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_premultiplied_alpha.frag index fb8de61dcbdf..99cf0560c883 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_premultiplied_alpha.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_premultiplied_alpha.frag @@ -9,9 +9,9 @@ layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_baseColor; }; diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_setup_mask.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_setup_mask.frag index 593b3d5442dc..b4ace084b6f9 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_setup_mask.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_setup_mask.frag @@ -11,9 +11,9 @@ layout(location = TEXCOORD1) in vec4 v_myPos; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_channelFlag; vec4 u_baseColor; }; diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_setup_mask.vert b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_setup_mask.vert index aa3b045e7bfb..de8ec57a9f9f 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_setup_mask.vert +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders/live2d_setup_mask.vert @@ -6,7 +6,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; layout(location = TEXCOORD1) out vec4 v_myPos; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_clipMatrix; }; @@ -17,4 +17,4 @@ void main() v_myPos = u_clipMatrix * pos; v_texCoord = a_texCoord; v_texCoord.y = 1.0 - v_texCoord.y; -} \ No newline at end of file +} diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_inverted_premultiplied_alpha_tegra.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_inverted_premultiplied_alpha_tegra.frag index 0a132b8b53b9..ede1aa31d66c 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_inverted_premultiplied_alpha_tegra.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_inverted_premultiplied_alpha_tegra.frag @@ -7,10 +7,10 @@ layout(location = TEXCOORD1) in vec4 v_clipPos; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; -layout(binding = 1) uniform sampler2D u_tex1; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 1) uniform sampler2D u_tex1; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_channelFlag; vec4 u_baseColor; }; diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_inverted_tegra.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_inverted_tegra.frag index 629b4e961dc4..86fb7ae4ff5a 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_inverted_tegra.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_inverted_tegra.frag @@ -7,10 +7,10 @@ layout(location = TEXCOORD1) in vec4 v_clipPos; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; -layout(binding = 1) uniform sampler2D u_tex1; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 1) uniform sampler2D u_tex1; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_channelFlag; vec4 u_baseColor; }; @@ -23,4 +23,4 @@ void main() float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a; col_formask = col_formask * (1.0 - maskVal); FragColor = col_formask; -} \ No newline at end of file +} diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_premultiplied_alpha_tegra.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_premultiplied_alpha_tegra.frag index 8fac9362cf81..951e71d98bb1 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_premultiplied_alpha_tegra.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_premultiplied_alpha_tegra.frag @@ -7,10 +7,10 @@ layout(location = TEXCOORD1) in vec4 v_clipPos; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; -layout(binding = 1) uniform sampler2D u_tex1; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 1) uniform sampler2D u_tex1; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_channelFlag; vec4 u_baseColor; }; @@ -22,4 +22,4 @@ void main() float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a; col_formask = col_formask * maskVal; FragColor = col_formask; -} \ No newline at end of file +} diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_tegra.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_tegra.frag index 6dbf8c765ead..4241d8a64b44 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_tegra.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_mask_tegra.frag @@ -7,10 +7,10 @@ layout(location = TEXCOORD1) in vec4 v_clipPos; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; -layout(binding = 1) uniform sampler2D u_tex1; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 1) uniform sampler2D u_tex1; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_channelFlag; vec4 u_baseColor; }; @@ -23,4 +23,4 @@ void main() float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a; col_formask = col_formask * maskVal; FragColor = col_formask; -} \ No newline at end of file +} diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_premultiplied_alpha_tegra.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_premultiplied_alpha_tegra.frag index 6195b599dd7d..0e44ed793d7d 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_premultiplied_alpha_tegra.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_premultiplied_alpha_tegra.frag @@ -6,13 +6,13 @@ layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_baseColor; }; void main() { FragColor = texture(u_tex0 , v_texCoord) * u_baseColor; -} \ No newline at end of file +} diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_setup_mask_tegra.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_setup_mask_tegra.frag index 07cd660483a1..8517b1c6cad3 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_setup_mask_tegra.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_setup_mask_tegra.frag @@ -8,9 +8,9 @@ layout(location = TEXCOORD1) in vec4 v_myPos; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_channelFlag; vec4 u_baseColor; }; @@ -24,4 +24,4 @@ void main() * step(v_myPos.y/v_myPos.w, u_baseColor.w); FragColor = u_channelFlag * texture(u_tex0 , v_texCoord).a * isInside; -} \ No newline at end of file +} diff --git a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_tegra.frag b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_tegra.frag index 8fd370782231..89c37851cd61 100644 --- a/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_tegra.frag +++ b/extensions/Live2D/Framework/src/Rendering/axmol/shaders_tegra/live2d_tegra.frag @@ -6,9 +6,9 @@ layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = SV_Target0) out vec4 FragColor; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_baseColor; }; @@ -16,4 +16,4 @@ void main() { vec4 color = texture(u_tex0 , v_texCoord) * u_baseColor; FragColor = vec4(color.rgb * color.a, color.a); -} \ No newline at end of file +} diff --git a/extensions/scripting/lua-bindings/auto/axlua_base_auto.cpp b/extensions/scripting/lua-bindings/auto/axlua_base_auto.cpp index 463411e317b3..fc625803ac66 100644 --- a/extensions/scripting/lua-bindings/auto/axlua_base_auto.cpp +++ b/extensions/scripting/lua-bindings/auto/axlua_base_auto.cpp @@ -27495,57 +27495,6 @@ int lua_ax_base_Director_getClearColor(lua_State* tolua_S) return 0; } -int lua_ax_base_Director_mainLoop(lua_State* tolua_S) -{ - int argc = 0; - ax::Director* obj = nullptr; - bool ok = true; -#if _AX_DEBUG >= 1 - tolua_Error tolua_err; -#endif - -#if _AX_DEBUG >= 1 - if (!tolua_isusertype(tolua_S,1,"ax.Director",0,&tolua_err)) goto tolua_lerror; -#endif - obj = (ax::Director*)tolua_tousertype(tolua_S,1,0); -#if _AX_DEBUG >= 1 - if (!obj) - { - tolua_error(tolua_S,"invalid 'obj' in function 'lua_ax_base_Director_mainLoop'", nullptr); - return 0; - } -#endif - argc = lua_gettop(tolua_S)-1; - do { - if (argc == 1) { - double arg0; - ok &= luaval_to_number(tolua_S, 2, &arg0, "ax.Director:mainLoop"); - - if (!ok) { break; } - obj->mainLoop(arg0); - lua_settop(tolua_S, 1); - return 1; - } - }while(0); - ok = true; - do { - if (argc == 0) { - obj->mainLoop(); - lua_settop(tolua_S, 1); - return 1; - } - }while(0); - ok = true; - luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "ax.Director:mainLoop",argc, 0); - return 0; - -#if _AX_DEBUG >= 1 - tolua_lerror: - tolua_error(tolua_S,"#ferror in function 'lua_ax_base_Director_mainLoop'.",&tolua_err); -#endif - - return 0; -} int lua_ax_base_Director_setContentScaleFactor(lua_State* tolua_S) { int argc = 0; @@ -28747,7 +28696,6 @@ int lua_register_ax_base_Director(lua_State* tolua_S) tolua_function(tolua_S,"setRenderDefaults",lua_ax_base_Director_setRenderDefaults); tolua_function(tolua_S,"setClearColor",lua_ax_base_Director_setClearColor); tolua_function(tolua_S,"getClearColor",lua_ax_base_Director_getClearColor); - tolua_function(tolua_S,"mainLoop",lua_ax_base_Director_mainLoop); tolua_function(tolua_S,"setContentScaleFactor",lua_ax_base_Director_setContentScaleFactor); tolua_function(tolua_S,"getContentScaleFactor",lua_ax_base_Director_getContentScaleFactor); tolua_function(tolua_S,"getScheduler",lua_ax_base_Director_getScheduler); diff --git a/extensions/spine/shaders/spineTwoColorTint.frag b/extensions/spine/shaders/spineTwoColorTint.frag index ebf0f9c681df..e2c42a7697ee 100644 --- a/extensions/spine/shaders/spineTwoColorTint.frag +++ b/extensions/spine/shaders/spineTwoColorTint.frag @@ -2,7 +2,7 @@ precision highp float; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; layout(location = COLOR0) in vec4 v_light; layout(location = COLOR1) in vec4 v_dark; diff --git a/extensions/spine/shaders/spineTwoColorTint.vert b/extensions/spine/shaders/spineTwoColorTint.vert index f07c9e151ea2..5307c2024e4c 100644 --- a/extensions/spine/shaders/spineTwoColorTint.vert +++ b/extensions/spine/shaders/spineTwoColorTint.vert @@ -9,7 +9,7 @@ layout(location = COLOR0) out vec4 v_light; layout(location = COLOR1) out vec4 v_dark; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_PMatrix; }; diff --git a/templates/cpp/Source/AppDelegate.h b/templates/cpp/Source/AppDelegate.h index c8e97873b4ab..2fa8feb221ca 100644 --- a/templates/cpp/Source/AppDelegate.h +++ b/templates/cpp/Source/AppDelegate.h @@ -58,8 +58,8 @@ class AppDelegate : private ax::Application void applicationWillEnterForeground() override; /** - @brief Called when application will quit + @brief Called when application will quit @since axmol-2.10.0 - */ + */ void applicationWillQuit() override; }; diff --git a/tests/cpp-tests/Source/AppDelegate.cpp b/tests/cpp-tests/Source/AppDelegate.cpp index 60320b5e3c05..23a263ff3d7d 100644 --- a/tests/cpp-tests/Source/AppDelegate.cpp +++ b/tests/cpp-tests/Source/AppDelegate.cpp @@ -54,7 +54,7 @@ void AppDelegate::initContextAttrs() { // set app context attributes: red,green,blue,alpha,depth,stencil,multisamplesCount // powerPreference only affect when RHI backend is D3D - ContextAttrs contextAttrs = {.powerPreference = PowerPreference::HighPerformance}; + ContextAttrs contextAttrs = {.debugLayerEnabled = true, .powerPreference = PowerPreference::HighPerformance}; // V-Sync is enabled by default since axmol 2.2. // Uncomment to disable V-Sync and unlock FPS. @@ -90,11 +90,14 @@ bool AppDelegate::applicationDidFinishLaunching() { std::string title = "Cpp Tests"; #ifndef NDEBUG - title += " *Debug*", + title += " *Debug*"; +#endif +#if AX_RENDER_API != AX_RENDER_API_GL + title += fmt::format("({}@{})", axdrv->getVersion(), axdrv->getRenderer()); #endif #ifdef AX_PLATFORM_PC - renderView = RenderViewImpl::createWithRect(title, Rect(0, 0, g_resourceSize.width, g_resourceSize.height), - 1.0F, true); + renderView = + RenderViewImpl::createWithRect(title, Rect(0, 0, g_resourceSize.width, g_resourceSize.height), 1.0F, true); #else renderView = RenderViewImpl::createWithRect(title, Rect(0, 0, g_resourceSize.width, g_resourceSize.height)); #endif @@ -106,7 +109,7 @@ bool AppDelegate::applicationDidFinishLaunching() director->setAnimationInterval(1.0f / Device::getDisplayRefreshRate()); - auto screenSize = renderView->getWindowSize(); + auto screenSize = renderView->getRenderSize(); AXLOGI("AppDelegate::applicationDidFinishLaunching - Screen size: {} x {}", screenSize.width, screenSize.height); diff --git a/tests/cpp-tests/Source/BaseTest.cpp b/tests/cpp-tests/Source/BaseTest.cpp index d5bd053cb72a..29e6b4c771d2 100644 --- a/tests/cpp-tests/Source/BaseTest.cpp +++ b/tests/cpp-tests/Source/BaseTest.cpp @@ -518,7 +518,7 @@ void TestCase::onExit() #if AX_ENABLE_EXT_IMGUI # if defined(AX_PLATFORM_PC) || (AX_TARGET_PLATFORM == AX_PLATFORM_ANDROID) || defined(__EMSCRIPTEN__) if (_enableInspector) - extension::Inspector::getInstance()->close(); + extension::Inspector::destroyInstance(); # endif #endif Scene::onExit(); diff --git a/tests/cpp-tests/Source/UITest/CocoStudioGUITest/UIWebViewTest/UIWebViewTest.cpp b/tests/cpp-tests/Source/UITest/CocoStudioGUITest/UIWebViewTest/UIWebViewTest.cpp index 22bac175e61e..069c69be589d 100644 --- a/tests/cpp-tests/Source/UITest/CocoStudioGUITest/UIWebViewTest/UIWebViewTest.cpp +++ b/tests/cpp-tests/Source/UITest/CocoStudioGUITest/UIWebViewTest/UIWebViewTest.cpp @@ -42,7 +42,7 @@ bool WebViewTest::init() _webView = ax::ui::WebView::create(); _webView->setPosition(canvasSize / 2); _webView->setContentSize(canvasSize * 0.5); - _webView->loadURL("https://www.baidu.com"); + _webView->loadURL("https://axmol.dev"); _webView->setScalesPageToFit(true); _webView->setOnShouldStartLoading(AX_CALLBACK_2(WebViewTest::onWebViewShouldStartLoading, this)); @@ -74,7 +74,8 @@ bool WebViewTest::init() resetBtn->addClickEventListener([this, urlTextField](Object*) { if (urlTextField->getString().size() != 0) { - _webView->loadURL(std::string("https://").append(urlTextField->getString())); + auto newUrl = fmt::format("https://{}", urlTextField->getString()); + _webView->loadURL(newUrl); } }); this->addChild(resetBtn); diff --git a/tests/cpp-tests/Source/controller.cpp b/tests/cpp-tests/Source/controller.cpp index 1fe2a026659f..31c0558bfc4a 100644 --- a/tests/cpp-tests/Source/controller.cpp +++ b/tests/cpp-tests/Source/controller.cpp @@ -28,6 +28,9 @@ #include #include "BaseTest.h" #include "tests.h" +#if AX_ENABLE_EXT_IMGUI +# include "ImGuiPresenter.h" +#endif using namespace ax; @@ -425,6 +428,9 @@ TestController* TestController::getInstance() void TestController::destroyInstance() { +#if AX_ENABLE_EXT_IMGUI + extension::ImGuiPresenter::destroyInstance(); +#endif if (s_testController) { s_testController->stopAutoTest(); diff --git a/tests/cpp-tests/Source/shaders/Normal.frag b/tests/cpp-tests/Source/shaders/Normal.frag index 0143b7782380..5de1e0352700 100644 --- a/tests/cpp-tests/Source/shaders/Normal.frag +++ b/tests/cpp-tests/Source/shaders/Normal.frag @@ -4,11 +4,11 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_normalMap; +layout(set = 1, binding = 0) uniform sampler2D u_normalMap; -layout(binding = 1) uniform sampler2D u_tex0; +layout(set = 1, binding = 1) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { float u_kBump; vec4 u_lightPosInLocalSpace; vec2 u_contentSize; @@ -36,4 +36,4 @@ void main(void) vec4 diffuse=vec4(normDotPosToLight*u_diffuseL,1.0); vec4 ambient=vec4(0.5,0.5,0.5,1); FragColor=texColor*vec4(vec3(diffuse+ambient),diffuse.a); -} \ No newline at end of file +} diff --git a/tests/cpp-tests/Source/shaders/OutLine.frag b/tests/cpp-tests/Source/shaders/OutLine.frag index d671bd2064b1..b16eee365703 100644 --- a/tests/cpp-tests/Source/shaders/OutLine.frag +++ b/tests/cpp-tests/Source/shaders/OutLine.frag @@ -2,7 +2,7 @@ precision highp float; precision highp int; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec3 OutLineColor; vec4 u_color; }; diff --git a/tests/cpp-tests/Source/shaders/OutLine.vert b/tests/cpp-tests/Source/shaders/OutLine.vert index f41bbf2c8da2..ec3c771b5289 100644 --- a/tests/cpp-tests/Source/shaders/OutLine.vert +++ b/tests/cpp-tests/Source/shaders/OutLine.vert @@ -5,7 +5,7 @@ layout(location = POSITION) in vec4 a_position; layout(location = NORMAL) in vec3 a_normal; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { float OutlineWidth; mat4 u_MVPMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/SkinnedOutline.vert b/tests/cpp-tests/Source/shaders/SkinnedOutline.vert index 579b8603acb5..1a352f2a1eec 100644 --- a/tests/cpp-tests/Source/shaders/SkinnedOutline.vert +++ b/tests/cpp-tests/Source/shaders/SkinnedOutline.vert @@ -14,7 +14,7 @@ const int SKINNING_JOINT_COUNT = 60; // Varyings layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { float OutlineWidth; vec4 u_matrixPalette[SKINNING_JOINT_COUNT * 3]; mat4 u_MVPMatrix; diff --git a/tests/cpp-tests/Source/shaders/VertexColor.vert b/tests/cpp-tests/Source/shaders/VertexColor.vert index 677b98c58fa6..ae078eeebf2d 100644 --- a/tests/cpp-tests/Source/shaders/VertexColor.vert +++ b/tests/cpp-tests/Source/shaders/VertexColor.vert @@ -5,7 +5,7 @@ layout(location = 1) in vec4 a_color; layout(location = COLOR0) out vec4 v_color; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; @@ -13,4 +13,4 @@ void main() { gl_Position = u_MVPMatrix * a_position; v_color = a_color; -} \ No newline at end of file +} diff --git a/tests/cpp-tests/Source/shaders/circle.vs b/tests/cpp-tests/Source/shaders/circle.vs index 218ff88287be..fe89e0585334 100644 --- a/tests/cpp-tests/Source/shaders/circle.vs +++ b/tests/cpp-tests/Source/shaders/circle.vs @@ -12,7 +12,7 @@ layout(location = 0) out vec2 v_position; layout(location = 1) out vec4 v_color; layout(location = 2) out float v_thickness; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { float u_pixelScale; mat4 u_MVPMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/color_normal_tex.frag b/tests/cpp-tests/Source/shaders/color_normal_tex.frag index 4638ae1926e4..c1930b8d2ffd 100644 --- a/tests/cpp-tests/Source/shaders/color_normal_tex.frag +++ b/tests/cpp-tests/Source/shaders/color_normal_tex.frag @@ -30,9 +30,9 @@ layout(location = NORMAL) in vec3 v_normal; #endif -layout(binding = 0) uniform sampler2D u_sampler0; +layout(set = 1, binding = 0) uniform sampler2D u_sampler0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { #if (MAX_DIRECTIONAL_LIGHT_NUM > 0) vvec3_def(u_DirLightSourceColor, MAX_DIRECTIONAL_LIGHT_NUM); vvec3_def(u_DirLightSourceDirection, MAX_DIRECTIONAL_LIGHT_NUM); diff --git a/tests/cpp-tests/Source/shaders/color_tex.frag b/tests/cpp-tests/Source/shaders/color_tex.frag index 879fcc02d636..e9be531fcb34 100644 --- a/tests/cpp-tests/Source/shaders/color_tex.frag +++ b/tests/cpp-tests/Source/shaders/color_tex.frag @@ -2,9 +2,9 @@ precision highp float; precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_sampler0; +layout(set = 1, binding = 0) uniform sampler2D u_sampler0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; }; diff --git a/tests/cpp-tests/Source/shaders/cube_map.frag b/tests/cpp-tests/Source/shaders/cube_map.frag index 9b003647985d..d429adc30df3 100644 --- a/tests/cpp-tests/Source/shaders/cube_map.frag +++ b/tests/cpp-tests/Source/shaders/cube_map.frag @@ -3,9 +3,9 @@ precision highp float; precision highp int; layout(location = TEXCOORD0) in vec3 v_reflect; -layout(binding = 0) uniform samplerCube u_cubeTex; +layout(set = 1, binding = 0) uniform samplerCube u_cubeTex; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; }; diff --git a/tests/cpp-tests/Source/shaders/cube_map.vert b/tests/cpp-tests/Source/shaders/cube_map.vert index 9636c6a9805d..f1257531b0f1 100644 --- a/tests/cpp-tests/Source/shaders/cube_map.vert +++ b/tests/cpp-tests/Source/shaders/cube_map.vert @@ -5,7 +5,7 @@ layout(location = NORMAL) in vec3 a_normal; layout(location = TEXCOORD0) out vec3 v_reflect; //uniforms -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; mat4 u_MVMatrix; mat3 u_NormalMatrix; diff --git a/tests/cpp-tests/Source/shaders/cylinder.frag b/tests/cpp-tests/Source/shaders/cylinder.frag index ffcd43507971..ce9d27886af9 100644 --- a/tests/cpp-tests/Source/shaders/cylinder.frag +++ b/tests/cpp-tests/Source/shaders/cylinder.frag @@ -3,9 +3,9 @@ precision highp float; precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_sampler0; -layout(binding = 1) uniform sampler2D u_sampler1; -layout(std140) uniform fs_ub { +layout(set = 1, binding = 0) uniform sampler2D u_sampler0; +layout(set = 1, binding = 1) uniform sampler2D u_sampler1; +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; float offset; float duration; diff --git a/tests/cpp-tests/Source/shaders/cylinder.vert b/tests/cpp-tests/Source/shaders/cylinder.vert index 543f2dea76c7..2f707b7ce8fc 100644 --- a/tests/cpp-tests/Source/shaders/cylinder.vert +++ b/tests/cpp-tests/Source/shaders/cylinder.vert @@ -3,7 +3,7 @@ layout(location = POSITION) in vec4 a_position; layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/example_3D_PositionTex.fsh b/tests/cpp-tests/Source/shaders/example_3D_PositionTex.fsh index 0c98e3560ef0..85143e8e3bae 100644 --- a/tests/cpp-tests/Source/shaders/example_3D_PositionTex.fsh +++ b/tests/cpp-tests/Source/shaders/example_3D_PositionTex.fsh @@ -3,9 +3,9 @@ precision highp float; precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; }; diff --git a/tests/cpp-tests/Source/shaders/example_3D_PositionTex.vsh b/tests/cpp-tests/Source/shaders/example_3D_PositionTex.vsh index c03ca3c07a93..66311779ad02 100644 --- a/tests/cpp-tests/Source/shaders/example_3D_PositionTex.vsh +++ b/tests/cpp-tests/Source/shaders/example_3D_PositionTex.vsh @@ -5,7 +5,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/example_Bloom.fsh b/tests/cpp-tests/Source/shaders/example_Bloom.fsh index b9e1a652b854..f6b71c110e5b 100644 --- a/tests/cpp-tests/Source/shaders/example_Bloom.fsh +++ b/tests/cpp-tests/Source/shaders/example_Bloom.fsh @@ -5,11 +5,11 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; const float blurSize = 1.0/512.0; const float intensity = 0.35; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 resolution; }; @@ -56,4 +56,4 @@ void main() else FragColor = sum * -sin(iGlobalTime)+ texture(iChannel0, texcoord); */ -} \ No newline at end of file +} diff --git a/tests/cpp-tests/Source/shaders/example_Blur.fsh b/tests/cpp-tests/Source/shaders/example_Blur.fsh index fb73402d055e..0e5d6157d3a5 100644 --- a/tests/cpp-tests/Source/shaders/example_Blur.fsh +++ b/tests/cpp-tests/Source/shaders/example_Blur.fsh @@ -6,9 +6,9 @@ layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 resolution; float blurRadius; float sampleNum; diff --git a/tests/cpp-tests/Source/shaders/example_Blur_winrt.fsh b/tests/cpp-tests/Source/shaders/example_Blur_winrt.fsh index 9d8665595a88..071e5e1dbf55 100644 --- a/tests/cpp-tests/Source/shaders/example_Blur_winrt.fsh +++ b/tests/cpp-tests/Source/shaders/example_Blur_winrt.fsh @@ -6,9 +6,9 @@ layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 resolution; }; diff --git a/tests/cpp-tests/Source/shaders/example_CelShading.fsh b/tests/cpp-tests/Source/shaders/example_CelShading.fsh index 6f439944e645..c2e6d0112f28 100644 --- a/tests/cpp-tests/Source/shaders/example_CelShading.fsh +++ b/tests/cpp-tests/Source/shaders/example_CelShading.fsh @@ -6,14 +6,14 @@ layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; #define FILTER_SIZE 3 #define COLOR_LEVELS 7.0 #define EDGE_FILTER_SIZE 3 #define EDGE_THRESHOLD 0.05 -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 resolution; }; diff --git a/tests/cpp-tests/Source/shaders/example_ColorBars.fsh b/tests/cpp-tests/Source/shaders/example_ColorBars.fsh index 4e4032fc40d6..ff2525e518c1 100644 --- a/tests/cpp-tests/Source/shaders/example_ColorBars.fsh +++ b/tests/cpp-tests/Source/shaders/example_ColorBars.fsh @@ -5,7 +5,7 @@ precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; vec4 getColorByCoord(int y){ if(y < 5){ diff --git a/tests/cpp-tests/Source/shaders/example_ColorBars.vsh b/tests/cpp-tests/Source/shaders/example_ColorBars.vsh index 5de4c39abc13..ca4143b3d9f3 100644 --- a/tests/cpp-tests/Source/shaders/example_ColorBars.vsh +++ b/tests/cpp-tests/Source/shaders/example_ColorBars.vsh @@ -7,7 +7,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_PMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/example_EdgeDetection.fsh b/tests/cpp-tests/Source/shaders/example_EdgeDetection.fsh index 587ceba8490e..fc1059aa899b 100644 --- a/tests/cpp-tests/Source/shaders/example_EdgeDetection.fsh +++ b/tests/cpp-tests/Source/shaders/example_EdgeDetection.fsh @@ -5,9 +5,9 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 resolution; }; @@ -44,4 +44,4 @@ void main(void) FragColor.xyz = vec3(1.-g); FragColor.w = 1.; -} \ No newline at end of file +} diff --git a/tests/cpp-tests/Source/shaders/example_Flower.fsh b/tests/cpp-tests/Source/shaders/example_Flower.fsh index 33968b5b6659..15b2cb014581 100644 --- a/tests/cpp-tests/Source/shaders/example_Flower.fsh +++ b/tests/cpp-tests/Source/shaders/example_Flower.fsh @@ -5,7 +5,7 @@ precision highp int; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 center; vec2 resolution; vec2 u_screenSize; diff --git a/tests/cpp-tests/Source/shaders/example_GreyScale.fsh b/tests/cpp-tests/Source/shaders/example_GreyScale.fsh index 53f7ec708edf..8a4fd9878bd1 100644 --- a/tests/cpp-tests/Source/shaders/example_GreyScale.fsh +++ b/tests/cpp-tests/Source/shaders/example_GreyScale.fsh @@ -5,7 +5,7 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; layout(location = SV_Target0) out vec4 FragColor; @@ -14,4 +14,4 @@ void main(void) vec4 c = texture(u_tex0, v_texCoord); FragColor.xyz = vec3(0.2126*c.r + 0.7152*c.g + 0.0722*c.b); FragColor.w = c.w; -} \ No newline at end of file +} diff --git a/tests/cpp-tests/Source/shaders/example_Heart.fsh b/tests/cpp-tests/Source/shaders/example_Heart.fsh index 1088d8733601..71ee8e0b940f 100644 --- a/tests/cpp-tests/Source/shaders/example_Heart.fsh +++ b/tests/cpp-tests/Source/shaders/example_Heart.fsh @@ -5,7 +5,7 @@ precision highp int; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 center; vec2 resolution; vec2 u_screenSize; @@ -17,7 +17,7 @@ layout(location = SV_Target0) out vec4 FragColor; void main(void) { float time = u_Time[1]; -#ifdef AXSLC_TARGET_MSL +#if !defined(AXSLC_TARGET_GLSL) vec2 fragCoord = vec2(gl_FragCoord.x, u_screenSize.y - gl_FragCoord.y); #else vec2 fragCoord = gl_FragCoord.xy; diff --git a/tests/cpp-tests/Source/shaders/example_HorizontalColor.fsh b/tests/cpp-tests/Source/shaders/example_HorizontalColor.fsh index 68be5d7d4b87..85e02571c467 100644 --- a/tests/cpp-tests/Source/shaders/example_HorizontalColor.fsh +++ b/tests/cpp-tests/Source/shaders/example_HorizontalColor.fsh @@ -6,9 +6,9 @@ precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 u_screenSize; }; diff --git a/tests/cpp-tests/Source/shaders/example_Julia.fsh b/tests/cpp-tests/Source/shaders/example_Julia.fsh index df96440e1a4e..4c946bbaabbb 100644 --- a/tests/cpp-tests/Source/shaders/example_Julia.fsh +++ b/tests/cpp-tests/Source/shaders/example_Julia.fsh @@ -5,7 +5,7 @@ precision highp int; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 center; vec2 resolution; vec2 u_screenSize; diff --git a/tests/cpp-tests/Source/shaders/example_LensFlare.fsh b/tests/cpp-tests/Source/shaders/example_LensFlare.fsh index c97b8108b40d..f98d1b62dacf 100644 --- a/tests/cpp-tests/Source/shaders/example_LensFlare.fsh +++ b/tests/cpp-tests/Source/shaders/example_LensFlare.fsh @@ -5,7 +5,7 @@ precision highp int; // layout(location = COLOR0) in vec4 v_color; // layout(location = TEXCOORD0) in vec2 v_texCoord; -// layout(binding = 0) uniform sampler2D u_tex0; +// layout(set = 1, binding = 0) uniform sampler2D u_tex0; /*by musk License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. @@ -16,7 +16,7 @@ precision highp int; muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusk!*/ -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 resolution; // vec2 textureResolution; vec4 u_Time; diff --git a/tests/cpp-tests/Source/shaders/example_Mandelbrot.fsh b/tests/cpp-tests/Source/shaders/example_Mandelbrot.fsh index 98958bef7b98..c4fca1243b01 100644 --- a/tests/cpp-tests/Source/shaders/example_Mandelbrot.fsh +++ b/tests/cpp-tests/Source/shaders/example_Mandelbrot.fsh @@ -5,7 +5,7 @@ precision highp int; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 center; vec2 resolution; vec2 u_screenSize; diff --git a/tests/cpp-tests/Source/shaders/example_Monjori.fsh b/tests/cpp-tests/Source/shaders/example_Monjori.fsh index 89b6d1a83c1c..43f561b1c8ca 100644 --- a/tests/cpp-tests/Source/shaders/example_Monjori.fsh +++ b/tests/cpp-tests/Source/shaders/example_Monjori.fsh @@ -5,7 +5,7 @@ precision highp int; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 center; vec2 resolution; vec4 u_Time; diff --git a/tests/cpp-tests/Source/shaders/example_MultiTexture.fsh b/tests/cpp-tests/Source/shaders/example_MultiTexture.fsh index 47e5380545ae..8b90a219016e 100644 --- a/tests/cpp-tests/Source/shaders/example_MultiTexture.fsh +++ b/tests/cpp-tests/Source/shaders/example_MultiTexture.fsh @@ -6,11 +6,11 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; -layout(binding = 1) uniform sampler2D u_tex1; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 1) uniform sampler2D u_tex1; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { float u_interpolate; }; diff --git a/tests/cpp-tests/Source/shaders/example_MultiTexture.vsh b/tests/cpp-tests/Source/shaders/example_MultiTexture.vsh index b085eb57eea1..8b8c47c38827 100644 --- a/tests/cpp-tests/Source/shaders/example_MultiTexture.vsh +++ b/tests/cpp-tests/Source/shaders/example_MultiTexture.vsh @@ -8,7 +8,7 @@ layout(location = COLOR0) out vec4 v_color; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/example_Noisy.fsh b/tests/cpp-tests/Source/shaders/example_Noisy.fsh index 98543ec61fc4..371565e50b16 100644 --- a/tests/cpp-tests/Source/shaders/example_Noisy.fsh +++ b/tests/cpp-tests/Source/shaders/example_Noisy.fsh @@ -7,10 +7,10 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; const float intensity = 0.05; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 resolution; vec4 u_Time; vec2 u_screenSize; diff --git a/tests/cpp-tests/Source/shaders/example_Normal.fsh b/tests/cpp-tests/Source/shaders/example_Normal.fsh index 65a0fc555d81..70139940ef9f 100644 --- a/tests/cpp-tests/Source/shaders/example_Normal.fsh +++ b/tests/cpp-tests/Source/shaders/example_Normal.fsh @@ -5,11 +5,11 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; layout(location = SV_Target0) out vec4 FragColor; void main(void) { FragColor = texture(u_tex0, v_texCoord); -} \ No newline at end of file +} diff --git a/tests/cpp-tests/Source/shaders/example_Outline.fsh b/tests/cpp-tests/Source/shaders/example_Outline.fsh index 4f6464cfd2f1..d6f52c7df7d1 100644 --- a/tests/cpp-tests/Source/shaders/example_Outline.fsh +++ b/tests/cpp-tests/Source/shaders/example_Outline.fsh @@ -10,9 +10,9 @@ layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = COLOR0) in vec4 v_color; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec3 u_outlineColor; float u_threshold; float u_radius; diff --git a/tests/cpp-tests/Source/shaders/example_Plasma.fsh b/tests/cpp-tests/Source/shaders/example_Plasma.fsh index b1428bbea8cc..3c944a66db43 100644 --- a/tests/cpp-tests/Source/shaders/example_Plasma.fsh +++ b/tests/cpp-tests/Source/shaders/example_Plasma.fsh @@ -5,7 +5,7 @@ precision highp int; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 center; vec2 resolution; vec2 u_screenSize; diff --git a/tests/cpp-tests/Source/shaders/example_Sepia.fsh b/tests/cpp-tests/Source/shaders/example_Sepia.fsh index f42039c3ee39..911b10619c9c 100644 --- a/tests/cpp-tests/Source/shaders/example_Sepia.fsh +++ b/tests/cpp-tests/Source/shaders/example_Sepia.fsh @@ -5,7 +5,7 @@ precision highp int; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; layout(location = SV_Target0) out vec4 FragColor; @@ -18,4 +18,4 @@ void main(void) final.b = (c.r * 0.272) + (c.g * 0.534) + (c.b * 0.131); FragColor = final; -} \ No newline at end of file +} diff --git a/tests/cpp-tests/Source/shaders/example_Simple.vsh b/tests/cpp-tests/Source/shaders/example_Simple.vsh index 346688a062b3..f438876ae688 100644 --- a/tests/cpp-tests/Source/shaders/example_Simple.vsh +++ b/tests/cpp-tests/Source/shaders/example_Simple.vsh @@ -7,7 +7,7 @@ layout(location = COLOR0) out vec4 v_color; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/example_Twist.fsh b/tests/cpp-tests/Source/shaders/example_Twist.fsh index b4c440965b53..8a979d5790e3 100644 --- a/tests/cpp-tests/Source/shaders/example_Twist.fsh +++ b/tests/cpp-tests/Source/shaders/example_Twist.fsh @@ -4,10 +4,10 @@ precision highp int; // Shader from here: http://www.iquilezles.org/ -layout(binding = 0) uniform sampler2D tex0; -layout(binding = 1) uniform sampler2D tex1; +layout(set = 1, binding = 0) uniform sampler2D tex0; +layout(set = 1, binding = 1) uniform sampler2D tex1; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 resolution; vec2 u_screenSize; vec4 u_Time; diff --git a/tests/cpp-tests/Source/shaders/fog.frag b/tests/cpp-tests/Source/shaders/fog.frag index 99b85eead725..d6ecc555a437 100644 --- a/tests/cpp-tests/Source/shaders/fog.frag +++ b/tests/cpp-tests/Source/shaders/fog.frag @@ -5,9 +5,9 @@ layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = TEXCOORD1) in float v_fogFactor; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_fogColor; }; diff --git a/tests/cpp-tests/Source/shaders/fog.vert b/tests/cpp-tests/Source/shaders/fog.vert index 9c605e9201d8..4dc1f0d0b724 100644 --- a/tests/cpp-tests/Source/shaders/fog.vert +++ b/tests/cpp-tests/Source/shaders/fog.vert @@ -4,7 +4,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; layout(location = TEXCOORD1) out float v_fogFactor; //weight for fog TEXCOORD1~TEXCOORD7 safe to use when this shader prog not use thems -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { float u_fogDensity;// For exp and exp2 equation float u_fogStart; // This is only for linear fog float u_fogEnd; // This is only for linear fog diff --git a/tests/cpp-tests/Source/shaders/position_normal_tex.vert b/tests/cpp-tests/Source/shaders/position_normal_tex.vert index 12ddb5a9bee7..cf0d927a31a2 100644 --- a/tests/cpp-tests/Source/shaders/position_normal_tex.vert +++ b/tests/cpp-tests/Source/shaders/position_normal_tex.vert @@ -26,7 +26,7 @@ layout(location = SPOTLIGHT) out vec3 v_vertexToSpotLightDirection[MAX_SPOT_LIGH layout(location = NORMAL) out vec3 v_normal; #endif -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { #if (MAX_POINT_LIGHT_NUM > 0) vvec3_def(u_PointLightSourcePosition, MAX_POINT_LIGHT_NUM); #endif diff --git a/tests/cpp-tests/Source/shaders/position_skin_tex.vert b/tests/cpp-tests/Source/shaders/position_skin_tex.vert index 77e58738bd8a..7ca932f5e7ea 100644 --- a/tests/cpp-tests/Source/shaders/position_skin_tex.vert +++ b/tests/cpp-tests/Source/shaders/position_skin_tex.vert @@ -15,7 +15,7 @@ const int SKINNING_JOINT_COUNT = 60; // Varyings layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { vec4 u_matrixPalette[SKINNING_JOINT_COUNT * 3]; mat4 u_MVPMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/position_tex.vert b/tests/cpp-tests/Source/shaders/position_tex.vert index 931c0d8eb729..5bae73d3f1d8 100644 --- a/tests/cpp-tests/Source/shaders/position_tex.vert +++ b/tests/cpp-tests/Source/shaders/position_tex.vert @@ -6,7 +6,7 @@ layout(location = TEXCOORD0) in vec2 a_texCoord; layout(location = TEXCOORD0) out vec2 v_texCoord; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/shadertoy_FireBall.fsh b/tests/cpp-tests/Source/shaders/shadertoy_FireBall.fsh index a4a20244e015..a33ed56ada1d 100644 --- a/tests/cpp-tests/Source/shaders/shadertoy_FireBall.fsh +++ b/tests/cpp-tests/Source/shaders/shadertoy_FireBall.fsh @@ -10,7 +10,7 @@ precision highp int; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 center; vec2 resolution; vec2 u_screenSize; diff --git a/tests/cpp-tests/Source/shaders/shadertoy_Glow.fsh b/tests/cpp-tests/Source/shaders/shadertoy_Glow.fsh index 98125e59cd4c..1722d62b9684 100644 --- a/tests/cpp-tests/Source/shaders/shadertoy_Glow.fsh +++ b/tests/cpp-tests/Source/shaders/shadertoy_Glow.fsh @@ -6,11 +6,11 @@ precision highp int; //uniform float iChannelTime[4]; // channel playback time (in seconds) //uniform vec3 iChannelResolution[4]; // channel resolution (in pixels) //vec4 iMouse = vec4(0,0,0,0); // mouse pixel coords. xy: current (if MLB down), zw: click -//layout(binding = 0) uniform sampler2D iChannel0; // input channel. XX = 2D/Cube +//layout(set = 1, binding = 0) uniform sampler2D iChannel0; // input channel. XX = 2D/Cube -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 center; vec2 resolution; vec2 u_screenSize; diff --git a/tests/cpp-tests/Source/shaders/shadertoy_LensFlare.fsh b/tests/cpp-tests/Source/shaders/shadertoy_LensFlare.fsh index 29cc988c2e33..1e11dc4e5941 100644 --- a/tests/cpp-tests/Source/shaders/shadertoy_LensFlare.fsh +++ b/tests/cpp-tests/Source/shaders/shadertoy_LensFlare.fsh @@ -5,7 +5,7 @@ precision highp int; //uniform float iChannelTime[4]; // channel playback time (in seconds) //uniform vec3 iChannelResolution[4]; // channel resolution (in pixels) //vec4 iMouse = vec4(0,0,0,0); // mouse pixel coords. xy: current (if MLB down), zw: click -//layout(binding = 0) uniform sampler2D iChannel0; // input channel. XX = 2D/Cube +//layout(set = 1, binding = 0) uniform sampler2D iChannel0; // input channel. XX = 2D/Cube /*by musk License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. @@ -17,7 +17,7 @@ precision highp int; muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusk!*/ -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec2 center; vec2 resolution; vec2 u_screenSize; diff --git a/tests/cpp-tests/Source/shaders/simple_shadow.frag b/tests/cpp-tests/Source/shaders/simple_shadow.frag index 44de75ff81aa..e38d3d302118 100644 --- a/tests/cpp-tests/Source/shaders/simple_shadow.frag +++ b/tests/cpp-tests/Source/shaders/simple_shadow.frag @@ -3,9 +3,9 @@ precision highp float; precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = POSITION) in vec4 v_position; -layout(binding = 0) uniform sampler2D u_sampler0; -layout(binding = 1) uniform sampler2D u_sampler1; -layout(std140) uniform fs_ub { +layout(set = 1, binding = 0) uniform sampler2D u_sampler0; +layout(set = 1, binding = 1) uniform sampler2D u_sampler1; +layout(std140, set = 0, binding = 1) uniform fs_ub { vec3 u_target_pos; vec4 u_color; }; diff --git a/tests/cpp-tests/Source/shaders/simple_shadow.vert b/tests/cpp-tests/Source/shaders/simple_shadow.vert index 3ae7f11cf8fa..ea5f9b3d36b1 100644 --- a/tests/cpp-tests/Source/shaders/simple_shadow.vert +++ b/tests/cpp-tests/Source/shaders/simple_shadow.vert @@ -5,7 +5,7 @@ layout(location = TEXCOORD0) out vec2 v_texCoord; layout(location = POSITION) out vec4 v_position; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_model_matrix; mat4 u_MVPMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/solid_capsule.vs b/tests/cpp-tests/Source/shaders/solid_capsule.vs index 5d669b777c95..08f45d854953 100644 --- a/tests/cpp-tests/Source/shaders/solid_capsule.vs +++ b/tests/cpp-tests/Source/shaders/solid_capsule.vs @@ -14,7 +14,7 @@ layout(location=1) out vec4 v_color; layout(location=2) out float v_length; layout(location=3) out float v_thickness; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { float u_pixelScale; mat4 u_MVPMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/solid_circle.vs b/tests/cpp-tests/Source/shaders/solid_circle.vs index 0eeb22a43b55..bfbd395df743 100644 --- a/tests/cpp-tests/Source/shaders/solid_circle.vs +++ b/tests/cpp-tests/Source/shaders/solid_circle.vs @@ -13,7 +13,7 @@ layout(location = 0) out vec2 v_position; layout(location = 1) out vec4 v_color; layout(location = 2) out float v_thickness; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { float u_pixelScale; mat4 u_MVPMatrix; }; diff --git a/tests/cpp-tests/Source/shaders/toon.frag b/tests/cpp-tests/Source/shaders/toon.frag index 3988389710d2..f0a462027935 100644 --- a/tests/cpp-tests/Source/shaders/toon.frag +++ b/tests/cpp-tests/Source/shaders/toon.frag @@ -5,8 +5,8 @@ precision highp int; layout(location = TEXCOORD0) in vec2 v_texCoord; layout(location = NORMAL) in vec3 v_normal; -layout(binding = 0) uniform sampler2D u_sampler0; -layout(std140) uniform fs_ub { +layout(set = 1, binding = 0) uniform sampler2D u_sampler0; +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 u_color; }; diff --git a/tests/cpp-tests/Source/shaders/toon.vert b/tests/cpp-tests/Source/shaders/toon.vert index cd51a6548f1d..10d4d58d9d5c 100644 --- a/tests/cpp-tests/Source/shaders/toon.vert +++ b/tests/cpp-tests/Source/shaders/toon.vert @@ -6,7 +6,7 @@ layout(location = TEXCOORD0) out vec2 v_texCoord; layout(location = NORMAL) out vec3 v_normal; -layout(std140) uniform vs_ub { +layout(std140, set = 0, binding = 0) uniform vs_ub { mat4 u_MVPMatrix; mat3 u_NormalMatrix; }; diff --git a/tests/live2d-tests/Source/shaders/live2d_test.frag b/tests/live2d-tests/Source/shaders/live2d_test.frag index 3aabe346a03e..eb3cab123381 100644 --- a/tests/live2d-tests/Source/shaders/live2d_test.frag +++ b/tests/live2d-tests/Source/shaders/live2d_test.frag @@ -8,9 +8,9 @@ precision highp float; layout(location = COLOR0) in vec4 v_color; layout(location = TEXCOORD0) in vec2 v_texCoord; -layout(binding = 0) uniform sampler2D u_tex0; +layout(set = 1, binding = 0) uniform sampler2D u_tex0; -layout(std140) uniform fs_ub { +layout(std140, set = 0, binding = 1) uniform fs_ub { vec4 baseColor; }; diff --git a/tools/cmdline/shaderu.ps1 b/tools/cmdline/shaderu.ps1 new file mode 100644 index 000000000000..f325572ef331 --- /dev/null +++ b/tools/cmdline/shaderu.ps1 @@ -0,0 +1,121 @@ +param( + $ScanDirs, + [switch]$Fix +) + +$ErrorActionPreference = 'Stop' + +# ----- CONFIGURATION ----- +$AX_ROOT = Resolve-Path $env:AX_ROOT +if (!$ScanDirs) { + $ScanDirs = @("axmol", "extensions", "tests") # relative to repo root +} + +# Rule definitions: +# Vertex UBO -> set=0, binding=0 +# Fragment UBO -> set=0, binding=1 +# Sampler -> set=1, binding=keep source binding or default 0 + +# Supported file extensions for shader stage detection +$vertexExts = @(".vert", ".vs", ".vsh") +$fragmentExts = @(".frag", ".fs", ".fsh") + +$samplerRegex = 'uniform\s+(sampler2D|sampler2DArray|samplerCube)\s+' +$uniformRegex = '"uniform\s+\w+\s*\{"' + +# Scan target directory +foreach ($scanDir in $ScanDirs) { + $TargetDir = (Resolve-Path $scanDir -ErrorAction SilentlyContinue) + if ($TargetDir) { + $TargetDir = $TargetDir.Path + } + else { + $TargetDir = Join-Path $AX_ROOT $scanDir + $TargetDir = (Resolve-Path $TargetDir).Path + } + if (-not (Test-Path $TargetDir)) { continue } + $files = Get-ChildItem -Path $TargetDir -Recurse -Include *.vert, *.vs, *.vsh, *.frag, *.fs, *.fsh + + foreach ($file in $files) { + echo "Scaning $file ..." + $stage = "" + if ($vertexExts -contains $file.Extension.ToLower()) { + $stage = "vertex" + } + elseif ($fragmentExts -contains $file.Extension.ToLower()) { + $stage = "fragment" + } + else { + continue + } + + $lines = Get-Content $file.FullName + $newLines = @() + $changed = $false + + foreach ($line in $lines) { + $newLine = $line + + # Handle sampler2D, sampler2DArray, samplerCube + if ($line -match $samplerRegex) { + if ($line -match "layout\s*\(") { + if($line -notmatch "set\s*=") { + if ($line -match "binding\s*=") { + $newLine = $line -replace "layout\s*\(([^)]*)\)", "layout(set = 1, `$1)" + $changed = $true + } + else { + throw "(1)Invalid shader: $file" + } + } + } + else { + throw "(2)Invalid shader: $file" + } + } + elseif ($line -match $uniformRegex) { + if ($stage -eq "vertex" -and $line -notmatch "set\s*=") { + if ($line -match "layout\s*\(") { + # Merge into existing layout(...) + $newLine = $line -replace "layout\s*\(([^)]*)\)", "layout(`$1, set = 0, binding = 0)" + } + else { + # Add new layout(...) + $newLine = "layout(std140, set = 0, binding = 0) " + $line.Trim() + } + $changed = $true + } + elseif ($stage -eq "fragment" -and $line -notmatch "set\s*=") { + if ($line -match "layout\s*\(") { + $newLine = $line -replace "layout\s*\(([^)]*)\)", "layout(std140, set = 0, binding = 1)" + } + else { + $newLine = "layout(std140, set = 0, binding = 1) " + $line.Trim() + } + $changed = $true + } + } + + $newLines += $newLine + } + + if ($changed) { + if ($Fix) { + $newLines | Set-Content $file.FullName + Write-Host "[$stage] Fixed: $($file.FullName)" + } + else { + Write-Host "[$stage] Would fix: $($file.FullName)" + # Print modification details + for ($i = 0; $i -lt $lines.Count; $i++) { + if ($lines[$i] -ne $newLines[$i]) { + Write-Host " Line $($i+1):" + Write-Host " Old: $($lines[$i])" + Write-Host " New: $($newLines[$i])" + } + } + } + } + } + +}