vulkan-ruby 0.1.0 → 1.3.207.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +6 -4
- data/README.md +9 -0
- data/lib/vulkan/conversions.rb +13 -2
- data/lib/vulkan/generated/commands.rb +469 -291
- data/lib/vulkan/generated/enums.rb +3442 -250
- data/lib/vulkan/generated/structs.rb +2860 -297
- data/lib/vulkan/generated/types.rb +601 -341
- data/lib/vulkan/generated/version.rb +16 -0
- data/lib/vulkan/generated/vk.xml +13685 -3301
- data/lib/vulkan/generated.rb +3 -33
- data/lib/vulkan/manual_types.rb +44 -0
- data/lib/vulkan/version.rb +8 -1
- data/tasks/fetch.rake +2 -1
- data/tasks/generate/enums.rake +94 -25
- data/tasks/generate/extensions.rake +26 -27
- data/tasks/generate/types.rake +97 -75
- data/tasks/generate/version.rake +32 -0
- data/tasks/generate.rake +7 -1
- data/vulkan-ruby.gemspec +5 -5
- metadata +14 -257
- data/lib/vulkan/generated/extensions/reserved_do_not_use_146.rb +0 -8
- data/lib/vulkan/generated/extensions/reserved_do_not_use_94.rb +0 -8
- data/lib/vulkan/generated/extensions/vk_amd_buffer_marker.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_draw_indirect_count.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_134.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_135.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_136.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_140.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_142.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_143.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_17.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_18.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_182.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_183.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_184.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_187.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_188.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_189.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_20.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_214.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_226.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_227.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_228.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_229.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_230.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_231.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_232.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_233.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_234.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_235.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_236.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_24.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_25.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_32.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_33.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_35.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_39.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_40.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_41.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_44.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_45.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_extension_46.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_gcn_shader.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_gpu_shader_half_float.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_gpu_shader_int16.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_memory_overallocation_behavior.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_amd_mixed_attachment_samples.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_negative_viewport_height.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_rasterization_order.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_amd_shader_ballot.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_shader_core_properties.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_amd_shader_explicit_vertex_parameter.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_shader_fragment_mask.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_shader_image_load_store_lod.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_shader_info.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_shader_trinary_minmax.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_amd_texture_gather_bias_lod.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_android_external_memory_android_hardware_buffer.rb +0 -17
- data/lib/vulkan/generated/extensions/vk_android_native_buffer.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_arm_extension_01.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_arm_extension_198.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_acquire_xlib_display.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_astc_decode_mode.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_ext_blend_operation_advanced.rb +0 -60
- data/lib/vulkan/generated/extensions/vk_ext_calibrated_timestamps.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_ext_conditional_rendering.rb +0 -16
- data/lib/vulkan/generated/extensions/vk_ext_conservative_rasterization.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_ext_debug_marker.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_ext_debug_report.rb +0 -16
- data/lib/vulkan/generated/extensions/vk_ext_debug_utils.rb +0 -16
- data/lib/vulkan/generated/extensions/vk_ext_depth_range_unrestricted.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_descriptor_indexing.rb +0 -18
- data/lib/vulkan/generated/extensions/vk_ext_direct_mode_display.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_discard_rectangles.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_ext_display_control.rb +0 -14
- data/lib/vulkan/generated/extensions/vk_ext_display_surface_counter.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_ext_extension_160.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_extension_176.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_extension_177.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_extension_219.rb +0 -15
- data/lib/vulkan/generated/extensions/vk_ext_extension_220.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_extension_222.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_extension_223.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_extension_28.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_external_memory_dma_buf.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_ext_external_memory_host.rb +0 -15
- data/lib/vulkan/generated/extensions/vk_ext_global_priority.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_ext_hdr_metadata.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_ext_image_drm_format_modifier.rb +0 -24
- data/lib/vulkan/generated/extensions/vk_ext_inline_uniform_block.rb +0 -15
- data/lib/vulkan/generated/extensions/vk_ext_macos_ios_window.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_pci_bus_info.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_ext_post_depth_coverage.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_queue_family_foreign.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_ext_sample_locations.rb +0 -17
- data/lib/vulkan/generated/extensions/vk_ext_sampler_filter_minmax.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_ext_shader_stencil_export.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_shader_subgroup_ballot.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_shader_subgroup_vote.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_shader_viewport_index_layer.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_ext_swapchain_colorspace.rb +0 -24
- data/lib/vulkan/generated/extensions/vk_ext_transform_feedback.rb +0 -20
- data/lib/vulkan/generated/extensions/vk_ext_validation_cache.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_ext_validation_flags.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_ext_vertex_attribute_divisor.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_fuchsia_imagepipe_surface.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_google_decorate_string.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_google_display_timing.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_google_extension_192.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_google_extension_193.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_google_extension_194.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_google_extension_195.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_google_extension_196.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_google_extension_216.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_google_extension_217.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_google_extension_49.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_google_extension_50.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_google_hlsl_functionality1.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_img_extension_107.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_img_extension_108.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_img_extension_109.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_img_extension_111.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_img_extension_69.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_img_filter_cubic.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_img_format_pvrtc.rb +0 -18
- data/lib/vulkan/generated/extensions/vk_intel_extension_210.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_intel_extension_211.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_intel_extension_243.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_16bit_storage.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_8bit_storage.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_android_surface.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_bind_memory2.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_khr_create_renderpass2.rb +0 -17
- data/lib/vulkan/generated/extensions/vk_khr_dedicated_allocation.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_khr_descriptor_update_template.rb +0 -15
- data/lib/vulkan/generated/extensions/vk_khr_device_group.rb +0 -33
- data/lib/vulkan/generated/extensions/vk_khr_device_group_creation.rb +0 -14
- data/lib/vulkan/generated/extensions/vk_khr_display.rb +0 -14
- data/lib/vulkan/generated/extensions/vk_khr_display_swapchain.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_khr_draw_indirect_count.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_driver_properties.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_khr_extension_117.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_extension_119.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_extension_200.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_extension_201.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_extension_208.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_extension_209.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_extension_221.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_extension_237.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_extension_238.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_extension_239.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_extension_240.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_extension_83.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_external_fence.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_khr_external_fence_capabilities.rb +0 -19
- data/lib/vulkan/generated/extensions/vk_khr_external_fence_fd.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_khr_external_fence_win32.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_khr_external_memory.rb +0 -15
- data/lib/vulkan/generated/extensions/vk_khr_external_memory_capabilities.rb +0 -26
- data/lib/vulkan/generated/extensions/vk_khr_external_memory_fd.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_khr_external_memory_win32.rb +0 -14
- data/lib/vulkan/generated/extensions/vk_khr_external_semaphore.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_khr_external_semaphore_capabilities.rb +0 -20
- data/lib/vulkan/generated/extensions/vk_khr_external_semaphore_fd.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_khr_external_semaphore_win32.rb +0 -14
- data/lib/vulkan/generated/extensions/vk_khr_get_display_properties2.rb +0 -15
- data/lib/vulkan/generated/extensions/vk_khr_get_memory_requirements2.rb +0 -15
- data/lib/vulkan/generated/extensions/vk_khr_get_physical_device_properties2.rb +0 -19
- data/lib/vulkan/generated/extensions/vk_khr_get_surface_capabilities2.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_khr_image_format_list.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_incremental_present.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_maintenance1.rb +0 -14
- data/lib/vulkan/generated/extensions/vk_khr_maintenance2.rb +0 -22
- data/lib/vulkan/generated/extensions/vk_khr_maintenance3.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_khr_mir_surface.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_multiview.rb +0 -14
- data/lib/vulkan/generated/extensions/vk_khr_push_descriptor.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_khr_relaxed_block_layout.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_sampler_mirror_clamp_to_edge.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_sampler_ycbcr_conversion.rb +0 -73
- data/lib/vulkan/generated/extensions/vk_khr_shader_atomic_int64.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_shader_draw_parameters.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_shared_presentable_image.rb +0 -14
- data/lib/vulkan/generated/extensions/vk_khr_storage_buffer_storage_class.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_khr_surface.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_khr_swapchain.rb +0 -24
- data/lib/vulkan/generated/extensions/vk_khr_variable_pointers.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_vulkan_memory_model.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_wayland_surface.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_win32_keyed_mutex.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_win32_surface.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_xcb_surface.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_khr_xlib_surface.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_mesa_extension_244.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_mvk_ios_surface.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_mvk_macos_surface.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_mvk_moltenvk.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nn_vi_surface.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_nv_clip_space_w_scaling.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_nv_compute_shader_derivatives.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_nv_corner_sampled_image.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_nv_dedicated_allocation.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_nv_device_diagnostic_checkpoints.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_nv_extension_101.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_extension_103.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_extension_104.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_extension_151.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_extension_152.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_extension_155.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_extension_164.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_extension_168.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_extension_241.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_extension_242.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_extension_245.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_extension_53.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_external_memory.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_nv_external_memory_capabilities.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_external_memory_win32.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_nv_fill_rectangle.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_nv_fragment_coverage_to_color.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_nv_fragment_shader_barycentric.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_nv_framebuffer_mixed_samples.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_nv_geometry_shader_passthrough.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_glsl_shader.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_nv_mesh_shader.rb +0 -16
- data/lib/vulkan/generated/extensions/vk_nv_ray_tracing.rb +0 -40
- data/lib/vulkan/generated/extensions/vk_nv_representative_fragment_test.rb +0 -12
- data/lib/vulkan/generated/extensions/vk_nv_sample_mask_override_coverage.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_scissor_exclusive.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_nv_shader_image_footprint.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_nv_shader_subgroup_partitioned.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_nv_shading_rate_image.rb +0 -20
- data/lib/vulkan/generated/extensions/vk_nv_viewport_array2.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nv_viewport_swizzle.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_nv_win32_keyed_mutex.rb +0 -11
- data/lib/vulkan/generated/extensions/vk_nvx_device_generated_commands.rb +0 -21
- data/lib/vulkan/generated/extensions/vk_nvx_extension_30.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nvx_extension_31.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nvx_extension_48.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nvx_extension_52.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_nvx_multiview_per_view_attributes.rb +0 -13
- data/lib/vulkan/generated/extensions/vk_qcom_extension_171.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_qcom_extension_172.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_qcom_extension_173.rb +0 -10
- data/lib/vulkan/generated/extensions/vk_qcom_extension_174.rb +0 -10
- data/lib/vulkan/generated/extensions.rb +0 -251
data/lib/vulkan/generated.rb
CHANGED
|
@@ -1,38 +1,8 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'vulkan/manual_types'
|
|
2
2
|
|
|
3
3
|
module Vulkan
|
|
4
4
|
load_vulkan_library
|
|
5
|
-
|
|
6
|
-
typealias 'int8_t', 'char'
|
|
7
|
-
typealias 'int16_t', 'short'
|
|
8
|
-
typealias 'int32_t', 'int'
|
|
9
|
-
typealias 'int64_t', 'long'
|
|
10
|
-
typealias 'uint8_t', 'unsigned char'
|
|
11
|
-
typealias 'uint16_t', 'unsigned short'
|
|
12
|
-
typealias 'uint32_t', 'unsigned int'
|
|
13
|
-
typealias 'uint64_t', 'unsigned long'
|
|
14
|
-
|
|
15
|
-
# platform-specific definitions, but we need them even on alternatives,
|
|
16
|
-
# or else things get complicated when parsing vk.xml
|
|
17
|
-
# X11
|
|
18
|
-
typealias 'Display', 'void' # HACK: since only pointers to this type are used, its size need not be known
|
|
19
|
-
typealias 'VisualID', 'unsigned long'
|
|
20
|
-
typealias 'XID', 'unsigned long'
|
|
21
|
-
typealias 'Window', 'XID'
|
|
22
|
-
typealias 'RROutput', 'XID'
|
|
23
|
-
# Wayland
|
|
24
|
-
typealias 'wl_display', 'void' # HACK: since only pointers to this type are used, its size need not be known
|
|
25
|
-
typealias 'wl_surface', 'void' # HACK: since only pointers to this type are used, its size need not be known
|
|
26
|
-
# Windows
|
|
27
|
-
include Fiddle::Win32Types
|
|
28
|
-
typealias 'WCHAR', 'unsigned short'
|
|
29
|
-
typealias 'LPCWSTR', 'WCHAR *'
|
|
30
|
-
# XCB
|
|
31
|
-
typealias 'xcb_connection_t', 'void' # HACK: since only pointers to this type are used, its size need not be known
|
|
32
|
-
typealias 'xcb_visualid_t', 'uint32_t'
|
|
33
|
-
typealias 'xcb_window_t', 'uint32_t'
|
|
34
|
-
# Zircon
|
|
35
|
-
typealias 'zx_handle_t', 'uint32_t'
|
|
5
|
+
include Vulkan::ManualTypes
|
|
36
6
|
|
|
37
7
|
class << self
|
|
38
8
|
@@lookup_map = {}
|
|
@@ -73,5 +43,5 @@ module Vulkan
|
|
|
73
43
|
|
|
74
44
|
extern "PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance instance, const char* pName)", :stdcall
|
|
75
45
|
require_relative 'generated/commands'
|
|
76
|
-
require_relative 'generated/extensions'
|
|
46
|
+
# require_relative 'generated/extensions'
|
|
77
47
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'fiddle/import'
|
|
2
|
+
require 'fiddle/types'
|
|
3
|
+
|
|
4
|
+
module Vulkan
|
|
5
|
+
# Defines types manually that could not be auto generated from vk.xml.
|
|
6
|
+
# A type defined here will be skipped if encountered while processing
|
|
7
|
+
# vk.xml.
|
|
8
|
+
module ManualTypes
|
|
9
|
+
def self.included(base)
|
|
10
|
+
base.module_eval do
|
|
11
|
+
typealias 'int8_t', 'char'
|
|
12
|
+
typealias 'int16_t', 'short'
|
|
13
|
+
typealias 'int32_t', 'int'
|
|
14
|
+
typealias 'int64_t', 'long'
|
|
15
|
+
typealias 'uint8_t', 'unsigned char'
|
|
16
|
+
typealias 'uint16_t', 'unsigned short'
|
|
17
|
+
typealias 'uint32_t', 'unsigned int'
|
|
18
|
+
typealias 'uint64_t', 'unsigned long'
|
|
19
|
+
|
|
20
|
+
# platform-specific definitions, but we need them even on alternatives,
|
|
21
|
+
# or else things get complicated when parsing vk.xml
|
|
22
|
+
# X11
|
|
23
|
+
typealias 'Display', 'void' # HACK: since only pointers to this type are used, its size need not be known
|
|
24
|
+
typealias 'VisualID', 'unsigned long'
|
|
25
|
+
typealias 'XID', 'unsigned long'
|
|
26
|
+
typealias 'Window', 'XID'
|
|
27
|
+
typealias 'RROutput', 'XID'
|
|
28
|
+
# Wayland
|
|
29
|
+
typealias 'wl_display', 'void' # HACK: since only pointers to this type are used, its size need not be known
|
|
30
|
+
typealias 'wl_surface', 'void' # HACK: since only pointers to this type are used, its size need not be known
|
|
31
|
+
# Windows
|
|
32
|
+
include Fiddle::Win32Types
|
|
33
|
+
typealias 'WCHAR', 'unsigned short'
|
|
34
|
+
typealias 'LPCWSTR', 'WCHAR *'
|
|
35
|
+
# XCB
|
|
36
|
+
typealias 'xcb_connection_t', 'void' # HACK: since only pointers to this type are used, its size need not be known
|
|
37
|
+
typealias 'xcb_visualid_t', 'uint32_t'
|
|
38
|
+
typealias 'xcb_window_t', 'uint32_t'
|
|
39
|
+
# Zircon
|
|
40
|
+
typealias 'zx_handle_t', 'uint32_t'
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
data/lib/vulkan/version.rb
CHANGED
data/tasks/fetch.rake
CHANGED
|
@@ -4,6 +4,7 @@ task :fetch do
|
|
|
4
4
|
require 'openssl'
|
|
5
5
|
require 'vulkan/version'
|
|
6
6
|
open(vk_xml_path, 'wb') do |file|
|
|
7
|
-
file << open("https://raw.githubusercontent.com/KhronosGroup/Vulkan-
|
|
7
|
+
file << URI.open("https://raw.githubusercontent.com/KhronosGroup/Vulkan-Docs/main/xml/vk.xml",
|
|
8
|
+
:ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE).read
|
|
8
9
|
end
|
|
9
10
|
end
|
data/tasks/generate/enums.rake
CHANGED
|
@@ -1,40 +1,109 @@
|
|
|
1
|
+
ALL_ENUMS = {}
|
|
2
|
+
|
|
3
|
+
def enum_offset(extnum, offset, dir = 1)
|
|
4
|
+
base_value = 1000000000
|
|
5
|
+
range_size = 1000
|
|
6
|
+
(base_value + (extnum - 1) * range_size + offset) * dir
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def find_enum_value(name)
|
|
10
|
+
ALL_ENUMS.each do |category, enums|
|
|
11
|
+
return enums[name] if enums.keys.include?(name)
|
|
12
|
+
end
|
|
13
|
+
nil
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def resolve_enum_alias(name)
|
|
17
|
+
val = find_enum_value(name)
|
|
18
|
+
if val.kind_of?(Hash) && val[:alias]
|
|
19
|
+
return resolve_enum_alias(val[:alias])
|
|
20
|
+
else
|
|
21
|
+
return val
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def process_literal_value(value)
|
|
26
|
+
value.sub(/(\d+)[fFuUlL]+/, '\1')
|
|
27
|
+
end
|
|
28
|
+
|
|
1
29
|
namespace :generate do
|
|
2
30
|
desc 'generate enums'
|
|
3
31
|
task :enums do
|
|
32
|
+
vk_xml.xpath('/registry/enums').each do |enums|
|
|
33
|
+
raise "duplicate enums? #{enums}" if ALL_ENUMS[enums['name']]
|
|
34
|
+
_enums = ALL_ENUMS[enums['name']] = {}
|
|
35
|
+
enums.xpath('enum').each do |enum|
|
|
36
|
+
raise "duplicate enum? #{enum}" if _enums[enum['name']]
|
|
37
|
+
value = nil
|
|
38
|
+
if enum['value'] then value = process_literal_value(enum['value'])
|
|
39
|
+
elsif enum['alias'] then value = { alias: enum['alias'] }
|
|
40
|
+
elsif enum['bitpos'] then value = 1 << enum['bitpos'].to_i
|
|
41
|
+
end
|
|
42
|
+
raise "could not compute enum value: #{enum}" unless value
|
|
43
|
+
_enums[enum['name']] = value
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
process_enum = proc do |enum, extnum = nil|
|
|
48
|
+
extnumber = enum['extnumber'] || extnum
|
|
49
|
+
if enum['extends'] && enum['offset']
|
|
50
|
+
category = ALL_ENUMS[enum['extends']] || raise("Enum category not found for #{enum}")
|
|
51
|
+
raise "No extnumber" unless extnumber
|
|
52
|
+
value = enum_offset(extnumber.to_i, enum['offset'].to_i, enum['dir'] == '-' ? -1 : 1)
|
|
53
|
+
raise "Could not compute offset for #{enum}" unless value
|
|
54
|
+
elsif enum['extends'] && enum['bitpos']
|
|
55
|
+
category = ALL_ENUMS[enum['extends']] || raise("Enum category not found for #{enum}")
|
|
56
|
+
value = 1 << enum['bitpos'].to_i
|
|
57
|
+
elsif enum['alias']
|
|
58
|
+
category = ALL_ENUMS[enum['extends']] || ALL_ENUMS[nil] ||= {}
|
|
59
|
+
value = { alias: enum['alias'] }
|
|
60
|
+
elsif enum['extends'] && enum['value']
|
|
61
|
+
category = ALL_ENUMS[enum['extends']] || raise("Enum category not found for #{enum}")
|
|
62
|
+
value = process_literal_value(enum['value'])
|
|
63
|
+
elsif enum['value']
|
|
64
|
+
category = ALL_ENUMS[nil] ||= {}
|
|
65
|
+
value = process_literal_value(enum['value'])
|
|
66
|
+
else
|
|
67
|
+
if find_enum_value(enum['name'])
|
|
68
|
+
next # we already have a value for this so carry on
|
|
69
|
+
else
|
|
70
|
+
raise "Unhandled enum: #{enum}"
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
raise "no category for #{enum}" unless category
|
|
75
|
+
raise "no value for #{enum}" unless value
|
|
76
|
+
existing_value = category[enum['name']]
|
|
77
|
+
raise "duplicate enum? #{enum} (current: #{existing_value})" if existing_value && existing_value != value
|
|
78
|
+
category[enum['name']] = value
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
vk_xml.xpath('/registry/feature/require/enum').each do |enum|
|
|
82
|
+
process_enum.call(enum)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
vk_xml.xpath('/registry/extensions/extension').each do |extension|
|
|
86
|
+
extension.xpath('require/enum').each do |enum|
|
|
87
|
+
process_enum.call(enum, extension['number'])
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
4
91
|
open(generate_dir.join('enums.rb'), 'w') do |f|
|
|
5
92
|
f.puts header_comment
|
|
6
93
|
f.puts
|
|
7
94
|
f.puts 'module Vulkan'
|
|
8
|
-
vk_xml.xpath('//types/type').each do |type|
|
|
9
|
-
if type.attributes['category']&.value == 'enum'
|
|
10
|
-
name = type.attributes['name']&.value
|
|
11
|
-
raise "enum has no name: #{type.to_s.inspect}" unless name
|
|
12
|
-
f.puts " typealias #{name.inspect}, 'int'"
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
95
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
raise "enum has no name: #{enum.to_s.inspect}" unless name
|
|
23
|
-
if alias_name
|
|
24
|
-
raise "enum alias has not been processed yet: #{enum.to_s.inspect}" unless processed_enums[alias_name]
|
|
25
|
-
f.puts " #{name} = #{processed_enums[alias_name]}"
|
|
26
|
-
processed_enums[name] = processed_enums[alias_name]
|
|
96
|
+
ALL_ENUMS.each do |category, enums|
|
|
97
|
+
f.puts " # #{category}" unless category.nil?
|
|
98
|
+
|
|
99
|
+
enums.each do |name, value|
|
|
100
|
+
if value.kind_of?(Hash) && value[:alias]
|
|
101
|
+
f.puts " #{name} = #{resolve_enum_alias(value[:alias])} # Alias of #{value[:alias]}"
|
|
27
102
|
else
|
|
28
|
-
if bitpos
|
|
29
|
-
value = (1 << bitpos.to_i)
|
|
30
|
-
else
|
|
31
|
-
value = value.sub(/(\d+)[fUL]+/, '\1') # '1.0f' => '1.0', '100U' => '100'
|
|
32
|
-
end
|
|
33
|
-
raise "enum has no value: #{enum.to_s.inspect}" unless value
|
|
34
103
|
f.puts " #{name} = #{value}"
|
|
35
|
-
processed_enums[name] = value
|
|
36
104
|
end
|
|
37
105
|
end
|
|
106
|
+
f.puts
|
|
38
107
|
end
|
|
39
108
|
|
|
40
109
|
f.puts 'end'
|
|
@@ -1,35 +1,34 @@
|
|
|
1
|
-
def enum_offset(extnum, offset, dir = 1)
|
|
2
|
-
base_value = 1000000000
|
|
3
|
-
range_size = 1000
|
|
4
|
-
(base_value + (extnum - 1) * range_size + offset) * dir
|
|
5
|
-
end
|
|
6
|
-
|
|
7
1
|
namespace :generate do
|
|
8
2
|
desc 'generate extension enums, types, etc'
|
|
9
3
|
task :extensions do
|
|
10
|
-
rm_rf generate_dir.join('extensions')
|
|
11
|
-
mkdir_p generate_dir.join('extensions')
|
|
12
|
-
File.open(generate_dir.join('extensions.rb'), 'w') do |extout|
|
|
13
|
-
|
|
14
|
-
|
|
4
|
+
# rm_rf generate_dir.join('extensions')
|
|
5
|
+
# mkdir_p generate_dir.join('extensions')
|
|
6
|
+
# File.open(generate_dir.join('extensions.rb'), 'w') do |extout|
|
|
7
|
+
# extout.puts header_comment
|
|
8
|
+
# extout.puts
|
|
15
9
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
10
|
+
# vk_xml.css('extension').each do |extension|
|
|
11
|
+
# extout.puts "require 'vulkan/generated/extensions/#{extension['name'].downcase}'"
|
|
12
|
+
# extnum = extension['number'].to_i
|
|
13
|
+
# File.open(generate_dir.join('extensions/%s.rb' % extension['name'].downcase), 'w') do |f|
|
|
14
|
+
# f.puts header_comment
|
|
15
|
+
# f.puts
|
|
16
|
+
# f.puts 'module Vulkan'
|
|
23
17
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
18
|
+
# extension.css('enum').each do |enum|
|
|
19
|
+
# dir = enum['dir'] == '-' ? -1 : enum['dir']
|
|
20
|
+
# alias_name = enum['alias']
|
|
21
|
+
# value = enum['value'] || enum_offset(enum['extnumber'] || extnum, enum['offset'].to_i, (dir || 1).to_i)
|
|
22
|
+
# if alias_name
|
|
23
|
+
# f.puts " #{enum['name']} = #{alias_name} unless defined?(#{enum['name']})"
|
|
24
|
+
# else
|
|
25
|
+
# f.puts " #{enum['name']} = #{value} unless defined?(#{enum['name']})"
|
|
26
|
+
# end
|
|
27
|
+
# end
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
end
|
|
29
|
+
# f.puts 'end'
|
|
30
|
+
# end
|
|
31
|
+
# end
|
|
32
|
+
# end
|
|
34
33
|
end
|
|
35
34
|
end
|
data/tasks/generate/types.rake
CHANGED
|
@@ -1,80 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
# Include the manually specified types here, and then we will skip them while
|
|
2
|
+
# processing vk.xml if they are encountered. This way, all special cases need
|
|
3
|
+
# only be added to that file to be properly dealt with everywhere.
|
|
4
|
+
require 'vulkan/manual_types'
|
|
5
|
+
::ManualTypes = Class.new do
|
|
6
|
+
extend Fiddle::Importer
|
|
7
|
+
# HACK, fiddle only initializes this if we call dlload which we don't need here
|
|
8
|
+
@type_alias = {}
|
|
9
|
+
include Vulkan::ManualTypes
|
|
10
|
+
end.new
|
|
2
11
|
|
|
3
|
-
|
|
4
|
-
name.ljust(NAME_PADDING)
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
def base_types
|
|
8
|
-
@base_types ||= {}.tap do |base_types|
|
|
9
|
-
vk_xml.xpath('//types/type').each do |type|
|
|
10
|
-
if type.attribute('category')&.value == 'basetype'
|
|
11
|
-
name = type.xpath('name').first&.text
|
|
12
|
-
ctype = type.xpath('type').first&.text
|
|
13
|
-
raise "type has no name: #{type.to_s.inspect}" unless name
|
|
14
|
-
raise "type has no ctype: #{type.to_s.inspect}" unless ctype
|
|
15
|
-
raise "unknown platform type: #{type.to_s.inspect} (#{ctype.to_s.inspect})" unless platform_type_map[ctype]
|
|
16
|
-
base_types[name] = ctype # platform_type_map[ctype]
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def platform_types
|
|
23
|
-
@platform_types ||= {}.tap do |platform_types|
|
|
24
|
-
vk_xml.xpath('//types/type').each do |type|
|
|
25
|
-
if type.attribute('requires')&.value == 'vk_platform'
|
|
26
|
-
name = type.attribute('name').value
|
|
27
|
-
raise "type has no name: #{type.to_s.inspect}" unless name
|
|
28
|
-
raise "unknown platform type: #{type.to_s.inspect} (#{name.inspect})" unless platform_type_map[name]
|
|
29
|
-
platform_types[name] = platform_type_map[name]
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
12
|
+
TYPE_ALIASES = {}
|
|
34
13
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
raise "type has no name: #{type.to_s.inspect}" unless name
|
|
46
|
-
if alias_name
|
|
47
|
-
raise "type alias not yet processed: #{type.to_s.inspect}" unless processed_types[alias_name]
|
|
48
|
-
btype = processed_types[alias_name]
|
|
49
|
-
else
|
|
50
|
-
btype = type.xpath('type').first&.text
|
|
51
|
-
raise "type has no base type: #{type.to_s.inspect}" unless btype
|
|
52
|
-
raise "unknown base type: #{type.to_s.inspect} (#{btype.to_s.inspect})" unless base_types[btype]
|
|
53
|
-
# btype = base_types[btype]
|
|
54
|
-
end
|
|
55
|
-
out.puts " typealias #{pad_name name.inspect}, #{base_types[btype].inspect}"
|
|
56
|
-
processed_types[name] = btype
|
|
57
|
-
elsif type.attributes['category']&.value == 'handle'
|
|
58
|
-
name = (type.xpath('name').first&.text) || (type.attributes['name']&.value)
|
|
59
|
-
raise "type has no name: #{type.to_s.inspect}" unless name
|
|
60
|
-
out.puts " typealias #{pad_name name.inspect}, 'void *'"
|
|
61
|
-
processed_types[name] = 'void *'
|
|
62
|
-
elsif type.attributes['category']&.value == 'funcpointer'
|
|
63
|
-
# we'll just treat function pointers as void pointers, shouldn't matter
|
|
64
|
-
# as long as the signatures are correct, which we'll call a programmer
|
|
65
|
-
# responsibility.
|
|
66
|
-
name = (type.xpath('name').first&.text) || (type.attributes['name']&.value)
|
|
67
|
-
raise "type has no name: #{type.to_s.inspect}" unless name
|
|
68
|
-
out.puts " typealias #{pad_name name.inspect}, 'void *'"
|
|
69
|
-
processed_types[name] = 'void *'
|
|
70
|
-
end
|
|
71
|
-
end
|
|
14
|
+
# Returns an array whose entries are 2-element arrays containing first the
|
|
15
|
+
# name of the type to be created, and second the name of the type that it is
|
|
16
|
+
# an alias of. The return value is sorted such that types that depend on
|
|
17
|
+
# other types appear later.
|
|
18
|
+
def resolve_type_aliases(aliases = TYPE_ALIASES.dup)
|
|
19
|
+
result = []
|
|
20
|
+
aliases.dup.each do |name, alias_of|
|
|
21
|
+
next if aliases[alias_of] # we want only leaf nodes
|
|
22
|
+
aliases.delete name
|
|
23
|
+
result << [name, alias_of]
|
|
72
24
|
end
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# out.puts ' }'
|
|
25
|
+
result.concat resolve_type_aliases(aliases) unless aliases.empty?
|
|
26
|
+
result
|
|
78
27
|
end
|
|
79
28
|
|
|
80
29
|
namespace :generate do
|
|
@@ -84,7 +33,80 @@ namespace :generate do
|
|
|
84
33
|
f.puts header_comment
|
|
85
34
|
f.puts
|
|
86
35
|
f.puts 'module Vulkan'
|
|
87
|
-
|
|
36
|
+
|
|
37
|
+
vk_xml.xpath('/registry/types/type').each do |type|
|
|
38
|
+
raise "duplicate type? #{type}" if TYPE_ALIASES[type['name']]
|
|
39
|
+
value = nil
|
|
40
|
+
# skip types we can't make use of
|
|
41
|
+
next if type['category'] == 'include'
|
|
42
|
+
|
|
43
|
+
name = type['name'] || type.xpath('name')&.text.to_s
|
|
44
|
+
name = nil if name.size == 0
|
|
45
|
+
if name
|
|
46
|
+
# skip C types defined by Fiddle (see lib/fiddle/cparser.rb #parse_ctype)
|
|
47
|
+
next if %w( char void int double float size_t ssize_t short ).include?(name)
|
|
48
|
+
# skip types we manually defined
|
|
49
|
+
next if ::ManualTypes.class.send(:type_alias).key?(name)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# types that depend on an external dependency, which we don't have access
|
|
53
|
+
# to. Try to define a default for them, which may or may not be correct.
|
|
54
|
+
# Note they won't be defined if they are already typealias'ed everywhere.
|
|
55
|
+
# We do this for a few known types in lib/vulkan/generated.rb.
|
|
56
|
+
# FIXME is there a better solution? Do nothing? Always manually define them?
|
|
57
|
+
if type['requires'] && type['requires'][/\.h/]
|
|
58
|
+
raise "No type name for #{type}" unless name
|
|
59
|
+
f.puts " typealias '#{name}', 'void *' unless send(:type_alias).key?('#{name}') # defined in #{type['requires']}"
|
|
60
|
+
elsif type['category'] == 'define'
|
|
61
|
+
raise "No type name for #{type}" unless name
|
|
62
|
+
next if name['VERSION']
|
|
63
|
+
f.puts " #{name} = 0 # dummy value, its real value could not be converted"
|
|
64
|
+
elsif type['category'] == 'basetype'
|
|
65
|
+
_type = type.xpath('type')&.text
|
|
66
|
+
raise "No type name for #{type}" unless name
|
|
67
|
+
if _type.size == 0
|
|
68
|
+
# we are about to choose type 'void' in hopes that it will only ever
|
|
69
|
+
# be used as a pointer (void *). In case we are wrong, check whether
|
|
70
|
+
# it was manually specified in lib/vulkan/generated.rb first. Then
|
|
71
|
+
# we can address these on a case by case basis.
|
|
72
|
+
f.puts " typealias '#{name}', 'void' unless send(:type_alias).key?('#{name}')"
|
|
73
|
+
else
|
|
74
|
+
f.puts " typealias '#{name}', '#{_type}'"
|
|
75
|
+
end
|
|
76
|
+
elsif type['category'] == 'bitmask'
|
|
77
|
+
_type = type.xpath('type')&.text
|
|
78
|
+
_type = nil if _type&.size == 0
|
|
79
|
+
raise "No type name for #{type}" unless name.size > 0
|
|
80
|
+
if _type
|
|
81
|
+
f.puts " typealias '#{name}', '#{_type}'"
|
|
82
|
+
elsif type['alias']
|
|
83
|
+
TYPE_ALIASES[name] = type['alias']
|
|
84
|
+
end
|
|
85
|
+
elsif type['category'] == 'handle'
|
|
86
|
+
# all handles are pointers
|
|
87
|
+
raise "No type name for #{type}" unless name.size > 0
|
|
88
|
+
f.puts " typealias '#{name}', 'void *' # handle"
|
|
89
|
+
elsif type['category'] == 'enum'
|
|
90
|
+
# FIXME we shouldn't assume an enum is an int, it could be smaller
|
|
91
|
+
# depending on the compiler.
|
|
92
|
+
raise "No type name for #{type}" unless name.size > 0
|
|
93
|
+
f.puts " typealias '#{name}', 'int' # enum"
|
|
94
|
+
elsif type['category'] == 'funcpointer'
|
|
95
|
+
# function pointers are pointers.
|
|
96
|
+
# TODO do something with the arguments? Not sure fiddle knows/cares.
|
|
97
|
+
raise "No type name for #{type}" unless name.size > 0
|
|
98
|
+
f.puts " typealias '#{name}', 'void *' # function pointer"
|
|
99
|
+
elsif type['category'] == 'struct' || type['category'] == 'union'
|
|
100
|
+
# structs and unions are handled by the generate:structs task.
|
|
101
|
+
else
|
|
102
|
+
raise "Unhandled type: #{type.to_s}"
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
resolve_type_aliases.each do |type_alias|
|
|
107
|
+
f.puts " typealias '#{type_alias[0]}', '#{type_alias[1]}'"
|
|
108
|
+
end
|
|
109
|
+
|
|
88
110
|
f.puts 'end'
|
|
89
111
|
end
|
|
90
112
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
namespace :generate do
|
|
2
|
+
desc "Regenerate Vulkan API version info"
|
|
3
|
+
task :version do
|
|
4
|
+
header_version = nil
|
|
5
|
+
vk_xml.xpath("/registry/types/type[@category='define']").each do |type|
|
|
6
|
+
name = type.xpath('name')&.text.to_s
|
|
7
|
+
# we are relying on VK_HEADER_VERSION to appear before VK_HEADER_VERSION_COMPLETE
|
|
8
|
+
if name == 'VK_HEADER_VERSION'
|
|
9
|
+
raise "could not parse header version: #{type.text}" unless type.text =~ /\s+(\d+)$/
|
|
10
|
+
header_version = $1.to_i
|
|
11
|
+
elsif name == 'VK_HEADER_VERSION_COMPLETE'
|
|
12
|
+
raise "no header version" unless header_version
|
|
13
|
+
raise "can't parse version" unless type.text =~ /\((\d+), (\d+), (\d+), VK_HEADER_VERSION/m
|
|
14
|
+
full_version = [$1.to_i, $2.to_i, $3.to_i, header_version]
|
|
15
|
+
open(generate_dir.join('version.rb'), 'w') do |f|
|
|
16
|
+
f.puts header_comment
|
|
17
|
+
f.puts
|
|
18
|
+
f.puts 'module Vulkan'
|
|
19
|
+
f.puts " VK_API_VERSION_VARIANT = #{full_version[0].inspect}"
|
|
20
|
+
f.puts " VK_API_VERSION_MAJOR = #{full_version[1].inspect}"
|
|
21
|
+
f.puts " VK_API_VERSION_MINOR = #{full_version[2].inspect}"
|
|
22
|
+
f.puts " VK_API_VERSION_PATCH = #{header_version.inspect}"
|
|
23
|
+
f.puts ' VK_HEADER_VERSION_COMPLETE = [VK_API_VERSION_VARIANT,'
|
|
24
|
+
f.puts ' VK_API_VERSION_MAJOR,'
|
|
25
|
+
f.puts ' VK_API_VERSION_MINOR,'
|
|
26
|
+
f.puts ' VK_API_VERSION_PATCH]'
|
|
27
|
+
f.puts 'end'
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/tasks/generate.rake
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
desc 'regenerate everything'
|
|
2
|
-
task :generate =>
|
|
2
|
+
task :generate => %w( generate:types
|
|
3
|
+
generate:enums
|
|
4
|
+
generate:structs
|
|
5
|
+
generate:extensions
|
|
6
|
+
generate:commands
|
|
7
|
+
generate:version
|
|
8
|
+
)
|
data/vulkan-ruby.gemspec
CHANGED
|
@@ -34,12 +34,12 @@ Gem::Specification.new do |spec|
|
|
|
34
34
|
spec.add_development_dependency "bundler", "~> 2.1"
|
|
35
35
|
spec.add_development_dependency "rake", "~> 13.0"
|
|
36
36
|
spec.add_development_dependency "minitest", "~> 5.15"
|
|
37
|
+
spec.add_development_dependency 'simplecov', '~> 0.16'
|
|
37
38
|
spec.add_development_dependency "nokogiri", '~> 1.8' # used to process vk.xml
|
|
38
39
|
spec.add_development_dependency 'sdl2_vulkan', '~> 0.1' # used by the examples
|
|
39
|
-
spec.add_development_dependency 'cglm', '~> 0.1'
|
|
40
|
-
spec.add_development_dependency '
|
|
41
|
-
spec.add_development_dependency '
|
|
42
|
-
spec.add_development_dependency '
|
|
43
|
-
spec.add_development_dependency 'tiny_obj', '~> 0.2'
|
|
40
|
+
spec.add_development_dependency 'cglm', '~> 0.1' # used by the examples
|
|
41
|
+
spec.add_development_dependency 'chunky_png', '~> 1.3' # used by the examples
|
|
42
|
+
spec.add_development_dependency 'oily_png', '~> 1.2' # used by the examples
|
|
43
|
+
spec.add_development_dependency 'tiny_obj', '~> 0.2' # used by the examples
|
|
44
44
|
spec.add_dependency 'sorted_set'
|
|
45
45
|
end
|