vulkan-ruby 0.1.0
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 +7 -0
- data/.gitignore +10 -0
- data/.simplecov +6 -0
- data/.travis.yml +5 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +51 -0
- data/LICENSE.txt +21 -0
- data/README.md +93 -0
- data/Rakefile +14 -0
- data/bin/console +14 -0
- data/bin/setup +9 -0
- data/bin/setup.bat +2 -0
- data/examples/models/viking_room.obj +16053 -0
- data/examples/screenshots/vt10-viking_room.png +0 -0
- data/examples/shaders/depth_buffering.vert +25 -0
- data/examples/shaders/depth_buffering.vert.spv +0 -0
- data/examples/shaders/model_loading.frag +13 -0
- data/examples/shaders/model_loading.frag.spv +0 -0
- data/examples/shaders/model_loading.vert +25 -0
- data/examples/shaders/model_loading.vert.spv +0 -0
- data/examples/shaders/textures.frag +13 -0
- data/examples/shaders/textures.frag.spv +0 -0
- data/examples/shaders/textures.vert +25 -0
- data/examples/shaders/textures.vert.spv +0 -0
- data/examples/shaders/triangle.frag +10 -0
- data/examples/shaders/triangle.frag.spv +0 -0
- data/examples/shaders/triangle.vert +25 -0
- data/examples/shaders/triangle.vert.spv +0 -0
- data/examples/shaders/uniform_buffer.vert +22 -0
- data/examples/shaders/uniform_buffer.vert.spv +0 -0
- data/examples/shaders/vertex_buffer.vert +16 -0
- data/examples/shaders/vertex_buffer.vert.spv +0 -0
- data/examples/textures/texture.png +0 -0
- data/examples/textures/viking_room.png +0 -0
- data/examples/vt00_dump_info.rb +24 -0
- data/examples/vt01_triangle.rb +140 -0
- data/examples/vt02_vertex_buffer_triangle_host_visible.rb +164 -0
- data/examples/vt03_vertex_buffer_triangle_device_local.rb +174 -0
- data/examples/vt04_index_buffer_device_local.rb +193 -0
- data/examples/vt05_uniform_buffers.rb +237 -0
- data/examples/vt06_textures.rb +275 -0
- data/examples/vt07_depth_buffering.rb +315 -0
- data/examples/vt08_model_loading.rb +321 -0
- data/examples/vt09_mipmaps.rb +329 -0
- data/examples/vt10_multisampling.rb +344 -0
- data/lib/fiddle_ext.rb +15 -0
- data/lib/vulkan/buffer.rb +66 -0
- data/lib/vulkan/buffer_memory.rb +13 -0
- data/lib/vulkan/checks.rb +12 -0
- data/lib/vulkan/command_buffer.rb +380 -0
- data/lib/vulkan/command_pool.rb +28 -0
- data/lib/vulkan/conversions.rb +511 -0
- data/lib/vulkan/descriptor_pool.rb +45 -0
- data/lib/vulkan/descriptor_set.rb +86 -0
- data/lib/vulkan/descriptor_set_layout.rb +39 -0
- data/lib/vulkan/dispatch_table.rb +78 -0
- data/lib/vulkan/error.rb +43 -0
- data/lib/vulkan/fence.rb +32 -0
- data/lib/vulkan/finalizer.rb +43 -0
- data/lib/vulkan/framebuffer.rb +37 -0
- data/lib/vulkan/generated/commands.rb +298 -0
- data/lib/vulkan/generated/enums.rb +1049 -0
- data/lib/vulkan/generated/extensions/reserved_do_not_use_146.rb +8 -0
- data/lib/vulkan/generated/extensions/reserved_do_not_use_94.rb +8 -0
- data/lib/vulkan/generated/extensions/vk_amd_buffer_marker.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_draw_indirect_count.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_134.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_135.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_136.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_140.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_142.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_143.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_17.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_18.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_182.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_183.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_184.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_187.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_188.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_189.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_20.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_214.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_226.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_227.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_228.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_229.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_230.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_231.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_232.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_233.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_234.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_235.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_236.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_24.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_25.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_32.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_33.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_35.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_39.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_40.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_41.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_44.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_45.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_extension_46.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_gcn_shader.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_gpu_shader_half_float.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_gpu_shader_int16.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_memory_overallocation_behavior.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_amd_mixed_attachment_samples.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_negative_viewport_height.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_rasterization_order.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_amd_shader_ballot.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_shader_core_properties.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_amd_shader_explicit_vertex_parameter.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_shader_fragment_mask.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_shader_image_load_store_lod.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_shader_info.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_shader_trinary_minmax.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_amd_texture_gather_bias_lod.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_android_external_memory_android_hardware_buffer.rb +17 -0
- data/lib/vulkan/generated/extensions/vk_android_native_buffer.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_arm_extension_01.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_arm_extension_198.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_acquire_xlib_display.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_astc_decode_mode.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_ext_blend_operation_advanced.rb +60 -0
- data/lib/vulkan/generated/extensions/vk_ext_calibrated_timestamps.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_ext_conditional_rendering.rb +16 -0
- data/lib/vulkan/generated/extensions/vk_ext_conservative_rasterization.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_ext_debug_marker.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_ext_debug_report.rb +16 -0
- data/lib/vulkan/generated/extensions/vk_ext_debug_utils.rb +16 -0
- data/lib/vulkan/generated/extensions/vk_ext_depth_range_unrestricted.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_descriptor_indexing.rb +18 -0
- data/lib/vulkan/generated/extensions/vk_ext_direct_mode_display.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_discard_rectangles.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_ext_display_control.rb +14 -0
- data/lib/vulkan/generated/extensions/vk_ext_display_surface_counter.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_ext_extension_160.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_extension_176.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_extension_177.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_extension_219.rb +15 -0
- data/lib/vulkan/generated/extensions/vk_ext_extension_220.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_extension_222.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_extension_223.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_extension_28.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_external_memory_dma_buf.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_ext_external_memory_host.rb +15 -0
- data/lib/vulkan/generated/extensions/vk_ext_global_priority.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_ext_hdr_metadata.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_ext_image_drm_format_modifier.rb +24 -0
- data/lib/vulkan/generated/extensions/vk_ext_inline_uniform_block.rb +15 -0
- data/lib/vulkan/generated/extensions/vk_ext_macos_ios_window.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_pci_bus_info.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_ext_post_depth_coverage.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_queue_family_foreign.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_ext_sample_locations.rb +17 -0
- data/lib/vulkan/generated/extensions/vk_ext_sampler_filter_minmax.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_ext_shader_stencil_export.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_shader_subgroup_ballot.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_shader_subgroup_vote.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_shader_viewport_index_layer.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_ext_swapchain_colorspace.rb +24 -0
- data/lib/vulkan/generated/extensions/vk_ext_transform_feedback.rb +20 -0
- data/lib/vulkan/generated/extensions/vk_ext_validation_cache.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_ext_validation_flags.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_ext_vertex_attribute_divisor.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_fuchsia_imagepipe_surface.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_google_decorate_string.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_google_display_timing.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_google_extension_192.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_google_extension_193.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_google_extension_194.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_google_extension_195.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_google_extension_196.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_google_extension_216.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_google_extension_217.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_google_extension_49.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_google_extension_50.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_google_hlsl_functionality1.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_img_extension_107.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_img_extension_108.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_img_extension_109.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_img_extension_111.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_img_extension_69.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_img_filter_cubic.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_img_format_pvrtc.rb +18 -0
- data/lib/vulkan/generated/extensions/vk_intel_extension_210.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_intel_extension_211.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_intel_extension_243.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_16bit_storage.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_8bit_storage.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_android_surface.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_bind_memory2.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_khr_create_renderpass2.rb +17 -0
- data/lib/vulkan/generated/extensions/vk_khr_dedicated_allocation.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_khr_descriptor_update_template.rb +15 -0
- data/lib/vulkan/generated/extensions/vk_khr_device_group.rb +33 -0
- data/lib/vulkan/generated/extensions/vk_khr_device_group_creation.rb +14 -0
- data/lib/vulkan/generated/extensions/vk_khr_display.rb +14 -0
- data/lib/vulkan/generated/extensions/vk_khr_display_swapchain.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_khr_draw_indirect_count.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_driver_properties.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_117.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_119.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_200.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_201.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_208.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_209.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_221.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_237.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_238.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_239.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_240.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_extension_83.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_fence.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_fence_capabilities.rb +19 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_fence_fd.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_fence_win32.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_memory.rb +15 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_memory_capabilities.rb +26 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_memory_fd.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_memory_win32.rb +14 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_semaphore.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_semaphore_capabilities.rb +20 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_semaphore_fd.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_khr_external_semaphore_win32.rb +14 -0
- data/lib/vulkan/generated/extensions/vk_khr_get_display_properties2.rb +15 -0
- data/lib/vulkan/generated/extensions/vk_khr_get_memory_requirements2.rb +15 -0
- data/lib/vulkan/generated/extensions/vk_khr_get_physical_device_properties2.rb +19 -0
- data/lib/vulkan/generated/extensions/vk_khr_get_surface_capabilities2.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_khr_image_format_list.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_incremental_present.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_maintenance1.rb +14 -0
- data/lib/vulkan/generated/extensions/vk_khr_maintenance2.rb +22 -0
- data/lib/vulkan/generated/extensions/vk_khr_maintenance3.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_khr_mir_surface.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_multiview.rb +14 -0
- data/lib/vulkan/generated/extensions/vk_khr_push_descriptor.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_khr_relaxed_block_layout.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_sampler_mirror_clamp_to_edge.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_sampler_ycbcr_conversion.rb +73 -0
- data/lib/vulkan/generated/extensions/vk_khr_shader_atomic_int64.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_shader_draw_parameters.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_shared_presentable_image.rb +14 -0
- data/lib/vulkan/generated/extensions/vk_khr_storage_buffer_storage_class.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_khr_surface.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_khr_swapchain.rb +24 -0
- data/lib/vulkan/generated/extensions/vk_khr_variable_pointers.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_vulkan_memory_model.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_wayland_surface.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_win32_keyed_mutex.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_win32_surface.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_xcb_surface.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_khr_xlib_surface.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_mesa_extension_244.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_mvk_ios_surface.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_mvk_macos_surface.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_mvk_moltenvk.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nn_vi_surface.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_nv_clip_space_w_scaling.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_nv_compute_shader_derivatives.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_nv_corner_sampled_image.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_nv_dedicated_allocation.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_nv_device_diagnostic_checkpoints.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_101.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_103.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_104.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_151.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_152.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_155.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_164.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_168.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_241.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_242.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_245.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_extension_53.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_external_memory.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_nv_external_memory_capabilities.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_external_memory_win32.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_nv_fill_rectangle.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_nv_fragment_coverage_to_color.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_nv_fragment_shader_barycentric.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_nv_framebuffer_mixed_samples.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_nv_geometry_shader_passthrough.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_glsl_shader.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_nv_mesh_shader.rb +16 -0
- data/lib/vulkan/generated/extensions/vk_nv_ray_tracing.rb +40 -0
- data/lib/vulkan/generated/extensions/vk_nv_representative_fragment_test.rb +12 -0
- data/lib/vulkan/generated/extensions/vk_nv_sample_mask_override_coverage.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_scissor_exclusive.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_nv_shader_image_footprint.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_nv_shader_subgroup_partitioned.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_nv_shading_rate_image.rb +20 -0
- data/lib/vulkan/generated/extensions/vk_nv_viewport_array2.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nv_viewport_swizzle.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_nv_win32_keyed_mutex.rb +11 -0
- data/lib/vulkan/generated/extensions/vk_nvx_device_generated_commands.rb +21 -0
- data/lib/vulkan/generated/extensions/vk_nvx_extension_30.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nvx_extension_31.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nvx_extension_48.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nvx_extension_52.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_nvx_multiview_per_view_attributes.rb +13 -0
- data/lib/vulkan/generated/extensions/vk_qcom_extension_171.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_qcom_extension_172.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_qcom_extension_173.rb +10 -0
- data/lib/vulkan/generated/extensions/vk_qcom_extension_174.rb +10 -0
- data/lib/vulkan/generated/extensions.rb +251 -0
- data/lib/vulkan/generated/structs.rb +2600 -0
- data/lib/vulkan/generated/types.rb +348 -0
- data/lib/vulkan/generated/vk.xml +10127 -0
- data/lib/vulkan/generated.rb +77 -0
- data/lib/vulkan/image.rb +263 -0
- data/lib/vulkan/image_memory.rb +13 -0
- data/lib/vulkan/image_view.rb +46 -0
- data/lib/vulkan/instance.rb +183 -0
- data/lib/vulkan/logical_device.rb +165 -0
- data/lib/vulkan/memory.rb +171 -0
- data/lib/vulkan/mock/swapchain_surface_info.rb +42 -0
- data/lib/vulkan/mock.rb +5 -0
- data/lib/vulkan/physical_device.rb +162 -0
- data/lib/vulkan/pipeline.rb +294 -0
- data/lib/vulkan/platform.rb +34 -0
- data/lib/vulkan/queue.rb +94 -0
- data/lib/vulkan/queue_family.rb +27 -0
- data/lib/vulkan/render_pass/subpass.rb +80 -0
- data/lib/vulkan/render_pass.rb +71 -0
- data/lib/vulkan/sampler.rb +48 -0
- data/lib/vulkan/semaphore.rb +16 -0
- data/lib/vulkan/shader_stage.rb +33 -0
- data/lib/vulkan/surface.rb +10 -0
- data/lib/vulkan/swapchain.rb +87 -0
- data/lib/vulkan/swapchain_builder.rb +111 -0
- data/lib/vulkan/swapchain_surface_info.rb +54 -0
- data/lib/vulkan/version.rb +3 -0
- data/lib/vulkan/window_surface.rb +13 -0
- data/lib/vulkan-ruby.rb +1 -0
- data/lib/vulkan.rb +91 -0
- data/tasks/examples.rake +29 -0
- data/tasks/fetch.rake +9 -0
- data/tasks/generate/commands.rake +51 -0
- data/tasks/generate/enums.rake +43 -0
- data/tasks/generate/extensions.rake +35 -0
- data/tasks/generate/structs.rake +117 -0
- data/tasks/generate/types.rake +91 -0
- data/tasks/generate.rake +2 -0
- data/tasks/helpers.rb +59 -0
- data/tasks/shaders.rake +8 -0
- data/vulkan-ruby.gemspec +45 -0
- metadata +546 -0
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
module Vulkan
|
|
2
|
+
module Conversions
|
|
3
|
+
IMAGE_FORMATS = {}
|
|
4
|
+
IMAGE_TILING = {}
|
|
5
|
+
DESCRIPTOR_TYPES = {}
|
|
6
|
+
BUFFER_USAGE_BITS = {}
|
|
7
|
+
IMAGE_USAGE_BITS = {}
|
|
8
|
+
IMAGE_TYPES = {}
|
|
9
|
+
SHADER_STAGE_BITS = {}
|
|
10
|
+
SHARING_MODES = {}
|
|
11
|
+
IMAGE_CREATE_BITS = {}
|
|
12
|
+
PIPELINE_STAGE_BITS = {}
|
|
13
|
+
DEPENDENCY_FLAG_BITS = {}
|
|
14
|
+
IMAGE_ASPECT_BITS = {}
|
|
15
|
+
ACCESS_MASK_BITS = {}
|
|
16
|
+
FILTERS = {}
|
|
17
|
+
SAMPLER_ADDRESS_MODES = {}
|
|
18
|
+
SAMPLER_MIPMAP_MODES = {}
|
|
19
|
+
COMPARE_OPS = {}
|
|
20
|
+
BORDER_COLORS = {}
|
|
21
|
+
MEMORY_PROPERTIES = {}
|
|
22
|
+
FORMAT_FEATURE_BITS = {}
|
|
23
|
+
VERTEX_INPUT_RATES = {}
|
|
24
|
+
PRESENT_MODES = {}
|
|
25
|
+
SURFACE_TRANSFORMS = {}
|
|
26
|
+
DYNAMIC_STATES = {}
|
|
27
|
+
|
|
28
|
+
Vulkan.constants.each do |name|
|
|
29
|
+
output = case name.to_s
|
|
30
|
+
when /^VK_FORMAT_FEATURE_(.*?)_BIT/ then FORMAT_FEATURE_BITS
|
|
31
|
+
when /^VK_FORMAT_(.*?)$/ then IMAGE_FORMATS
|
|
32
|
+
when /^VK_IMAGE_TILING_(.*?)$/ then IMAGE_TILING
|
|
33
|
+
when /^VK_DESCRIPTOR_TYPE_(.*?)$/ then DESCRIPTOR_TYPES
|
|
34
|
+
when /^VK_BUFFER_USAGE_(.*?)_BIT/ then BUFFER_USAGE_BITS
|
|
35
|
+
when /^VK_IMAGE_USAGE_(.*?)_BIT/ then IMAGE_USAGE_BITS
|
|
36
|
+
when /^VK_IMAGE_TYPE_(.*?)$/ then IMAGE_TYPES
|
|
37
|
+
when /^VK_IMAGE_ASPECT_(.*?)_BIT/ then IMAGE_ASPECT_BITS
|
|
38
|
+
when /^VK_SHADER_STAGE_(.*?)(?:_BIT|$)/ then SHADER_STAGE_BITS
|
|
39
|
+
when /^VK_SHARING_MODE_(.*?)$/ then SHARING_MODES
|
|
40
|
+
when /^VK_IMAGE_CREATE_(.*?)_BIT/ then IMAGE_CREATE_BITS
|
|
41
|
+
when /^VK_PIPELINE_STAGE_(.*?)_BIT/ then PIPELINE_STAGE_BITS
|
|
42
|
+
when /^VK_DEPENDENCY_(.*?)_BIT/ then DEPENDENCY_FLAG_BITS
|
|
43
|
+
when /^VK_ACCESS_(.*?)_BIT/ then ACCESS_MASK_BITS
|
|
44
|
+
when /^VK_FILTER_(.*?)$/ then FILTERS
|
|
45
|
+
when /^VK_SAMPLER_ADDRESS_MODE_(.*?)$/ then SAMPLER_ADDRESS_MODES
|
|
46
|
+
when /^VK_COMPARE_OP_(.*?)$/ then COMPARE_OPS
|
|
47
|
+
when /^VK_BORDER_COLOR_(.*?)$/ then BORDER_COLORS
|
|
48
|
+
when /^VK_SAMPLER_MIPMAP_MODE_(.*?)$/ then SAMPLER_MIPMAP_MODES
|
|
49
|
+
when /^VK_MEMORY_PROPERTY_(.*?)_BIT/ then MEMORY_PROPERTIES
|
|
50
|
+
when /^VK_VERTEX_INPUT_RATE_(.*?)$/ then VERTEX_INPUT_RATES
|
|
51
|
+
when /^VK_PRESENT_MODE_(.*?)(?:_KHR)?$/ then PRESENT_MODES
|
|
52
|
+
when /^VK_SURFACE_TRANSFORM_(.*?)_BIT/ then SURFACE_TRANSFORMS
|
|
53
|
+
when /^VK_DYNAMIC_STATE_(.*)/ then DYNAMIC_STATES
|
|
54
|
+
else next
|
|
55
|
+
end
|
|
56
|
+
key = $1.downcase
|
|
57
|
+
raise 'BUG: two identical constant names? %s => %s' % [name, key] if output.include?(key)
|
|
58
|
+
output[key.to_sym] = output[key] = Vulkan.const_get(name)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def sym_to_present_mode(sym)
|
|
62
|
+
PRESENT_MODES[sym]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def present_mode_to_sym(mode)
|
|
66
|
+
PRESENT_MODES.key(mode)&.to_sym
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def sym_to_samples(sym)
|
|
70
|
+
# 4 => 4 because VK_SAMPLE_COUNT_4_BIT == 4.
|
|
71
|
+
# But we'll keep this method here in case that changes or is not always
|
|
72
|
+
# true.
|
|
73
|
+
sym
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def sym_to_dynamic_state(sym)
|
|
77
|
+
DYNAMIC_STATES[sym]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def syms_to_surface_transforms(sym)
|
|
81
|
+
syms_to_flags sym, SURFACE_TRANSFORMS
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def sym_to_val(sym, vals)
|
|
85
|
+
vals[sym] || sym
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def syms_to_flags(syms, bits)
|
|
89
|
+
[syms].flatten.reduce(0) { |bit, sym| bit | sym_to_val(sym, bits) }
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def flags_to_syms(flags, bits)
|
|
93
|
+
return flags if flags.kind_of?(Array)
|
|
94
|
+
return [flags] if flags.kind_of?(Symbol)
|
|
95
|
+
bits.reduce([]) do |syms, (name, bit)|
|
|
96
|
+
syms << name if flags & bit != 0
|
|
97
|
+
syms
|
|
98
|
+
end
|
|
99
|
+
syms
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def sym_to_vertex_input_rate(sym)
|
|
103
|
+
sym_to_val(sym, VERTEX_INPUT_RATES)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def sym_to_compare_op(sym)
|
|
107
|
+
sym_to_val(sym, COMPARE_OPS)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def syms_to_buffer_usage_flags(syms)
|
|
111
|
+
syms_to_flags(syms, BUFFER_USAGE_BITS)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def buffer_usage_flags_to_syms(bits)
|
|
115
|
+
flags_to_syms(bits, BUFFER_USAGE_BITS)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def syms_to_format_feature_flags(syms)
|
|
119
|
+
syms_to_flags(syms, FORMAT_FEATURE_BITS)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def syms_to_access_mask(syms)
|
|
123
|
+
syms_to_flags(syms, ACCESS_MASK_BITS)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def syms_to_memory_properties(syms)
|
|
127
|
+
syms_to_flags(syms, MEMORY_PROPERTIES)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def sym_to_border_color(sym)
|
|
131
|
+
sym_to_val(sym, BORDER_COLORS)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def bool_to_vk(bool)
|
|
135
|
+
bool ? VK_TRUE : VK_FALSE
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def syms_to_pipeline_stage_flags(syms)
|
|
139
|
+
syms_to_flags(syms, PIPELINE_STAGE_BITS)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def syms_to_image_aspect_flags(syms)
|
|
143
|
+
syms_to_flags(syms, IMAGE_ASPECT_BITS)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def syms_to_dependency_flags(syms)
|
|
147
|
+
syms_to_flags(syms, DEPENDENCY_FLAG_BITS)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def syms_to_image_create_flags(syms)
|
|
151
|
+
syms_to_flags(syms, IMAGE_CREATE_BITS)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def sym_to_filter(sym)
|
|
155
|
+
sym_to_val sym, FILTERS
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def sym_to_sampler_address_mode(sym)
|
|
159
|
+
sym_to_val sym, SAMPLER_ADDRESS_MODES
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def sym_to_sampler_mipmap_mode(sym)
|
|
163
|
+
sym_to_val sym, SAMPLER_MIPMAP_MODES
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def sym_to_image_tiling(sym)
|
|
167
|
+
sym_to_val sym, IMAGE_TILING
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def syms_to_image_usage_flags(syms)
|
|
171
|
+
syms_to_flags(syms, IMAGE_USAGE_BITS)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def sym_to_image_format(sym)
|
|
175
|
+
sym_to_val sym, IMAGE_FORMATS
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
alias sym_to_format sym_to_image_format
|
|
179
|
+
|
|
180
|
+
def sym_to_image_type(sym)
|
|
181
|
+
# can't let it be a number because if it is numeric then it might
|
|
182
|
+
# need to be passed-through without transformation.
|
|
183
|
+
sym_to_val sym, IMAGE_TYPES
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def sym_to_sharing_mode(sym)
|
|
187
|
+
sym_to_val sym, SHARING_MODES
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def syms_to_descriptor_set_layout_type_flags(syms)
|
|
191
|
+
flags = 0
|
|
192
|
+
syms.each do |sym|
|
|
193
|
+
flags |= case sym
|
|
194
|
+
when :push then VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
|
|
195
|
+
when :update_after_bind_pool then VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
|
|
196
|
+
else sym
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
flags
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def sym_to_descriptor_type(sym)
|
|
203
|
+
DESCRIPTOR_TYPES[sym] || sym
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def syms_to_shader_stage_flags(syms)
|
|
207
|
+
syms_to_flags syms, SHADER_STAGE_BITS
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def sym_to_subpass_contents(sym)
|
|
211
|
+
case sym
|
|
212
|
+
when :inline then VK_SUBPASS_CONTENTS_INLINE
|
|
213
|
+
when :secondary, :secondary_command_buffers then VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
|
|
214
|
+
else sym
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def sym_to_command_buffer_level(sym)
|
|
219
|
+
case sym
|
|
220
|
+
when :primary then VK_COMMAND_BUFFER_LEVEL_PRIMARY
|
|
221
|
+
when :secondary then VK_COMMAND_BUFFER_LEVEL_SECONDARY
|
|
222
|
+
else sym
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def sym_to_command_buffer_usage(sym)
|
|
227
|
+
case sym
|
|
228
|
+
when :simultaneous then VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
|
|
229
|
+
when :one_time_submit then VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
|
|
230
|
+
when :render_pass_continue then VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
|
|
231
|
+
else sym
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def sym_to_index_type(sym)
|
|
236
|
+
case sym
|
|
237
|
+
when :uint16 then VK_INDEX_TYPE_UINT16
|
|
238
|
+
when :uint32 then VK_INDEX_TYPE_UINT32
|
|
239
|
+
else sym
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
def queue_family_to_index(family)
|
|
244
|
+
case family
|
|
245
|
+
when nil, :ignored then VK_QUEUE_FAMILY_IGNORED
|
|
246
|
+
when Numeric then family
|
|
247
|
+
when Hash then queue_family_to_index(family[:index])
|
|
248
|
+
else raise ArgumentError, 'queue family must be :ignored, a number, or a hash containing :index'
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def sym_to_blend_factor(sym)
|
|
253
|
+
case sym
|
|
254
|
+
when 0, :zero then VK_BLEND_FACTOR_ZERO
|
|
255
|
+
when 1, :one then VK_BLEND_FACTOR_ONE
|
|
256
|
+
when :src_color then VK_BLEND_FACTOR_SRC_COLOR
|
|
257
|
+
when :one_minus_src_color then VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR
|
|
258
|
+
when :dst_color then VK_BLEND_FACTOR_DST_COLOR
|
|
259
|
+
when :one_minus_dst_color then VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR
|
|
260
|
+
when :src_alpha then VK_BLEND_FACTOR_SRC_ALPHA
|
|
261
|
+
when :one_minus_src_alpha then VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
|
|
262
|
+
when :dst_alpha then VK_BLEND_FACTOR_DST_ALPHA
|
|
263
|
+
when :one_minus_dst_alpha then VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA
|
|
264
|
+
when :constant_color then VK_BLEND_FACTOR_CONSTANT_COLOR
|
|
265
|
+
when :one_minus_constant_color then VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR
|
|
266
|
+
when :constant_alpha then VK_BLEND_FACTOR_CONSTANT_ALPHA
|
|
267
|
+
when :one_minus_constant_alpha then VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
|
|
268
|
+
when :src_alpha_saturate then VK_BLEND_FACTOR_SRC_ALPHA_SATURATE
|
|
269
|
+
when :src1_color then VK_BLEND_FACTOR_SRC1_COLOR
|
|
270
|
+
when :one_minus_src1_color then VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR
|
|
271
|
+
when :src1_alpha then VK_BLEND_FACTOR_SRC1_ALPHA
|
|
272
|
+
when :one_minus_src1_alpha then VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
|
|
273
|
+
else sym
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def sym_to_blend_op(sym)
|
|
278
|
+
case sym
|
|
279
|
+
when :add then VK_BLEND_OP_ADD
|
|
280
|
+
when :subtract then VK_BLEND_OP_SUBTRACT
|
|
281
|
+
when :reverse_subtract then VK_BLEND_OP_REVERSE_SUBTRACT
|
|
282
|
+
when :min then VK_BLEND_OP_MIN
|
|
283
|
+
when :max then VK_BLEND_OP_MAX
|
|
284
|
+
else sym
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def sym_to_topology(sym)
|
|
289
|
+
case sym
|
|
290
|
+
when :triangle, :triangles, :triangle_list then VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST
|
|
291
|
+
when :point, :points, :point_list then VK_PRIMITIVE_TOPOLOGY_POINT_LIST
|
|
292
|
+
when :line, :lines, :line_list then VK_PRIMITIVE_TOPOLOGY_LINE_LIST
|
|
293
|
+
when :line_strip then VK_PRIMITIVE_TOPOLOGY_LINE_STRIP
|
|
294
|
+
when :triangle_strip then VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP
|
|
295
|
+
else sym
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
def sym_to_polygon_mode(sym)
|
|
300
|
+
case sym
|
|
301
|
+
when :fill then VK_POLYGON_MODE_FILL
|
|
302
|
+
when :line then VK_POLYGON_MODE_LINE
|
|
303
|
+
when :point then VK_POLYGON_MODE_POINT
|
|
304
|
+
else sym
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
def sym_to_cull_mode(sym)
|
|
309
|
+
case sym
|
|
310
|
+
when :back then VK_CULL_MODE_BACK_BIT
|
|
311
|
+
when :front then VK_CULL_MODE_FRONT_BIT
|
|
312
|
+
when :front_and_back then VK_CULL_MODE_FRONT_AND_BACK
|
|
313
|
+
when :none, nil then VK_CULL_MODE_NONE
|
|
314
|
+
else sym
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
def sym_to_front_face(sym)
|
|
319
|
+
case sym
|
|
320
|
+
when :clockwise then VK_FRONT_FACE_CLOCKWISE
|
|
321
|
+
when :counter_clockwise then VK_FRONT_FACE_COUNTER_CLOCKWISE
|
|
322
|
+
else sym
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
def sym_to_color_component_bit(sym)
|
|
327
|
+
case sym
|
|
328
|
+
when :r, :red then VK_COLOR_COMPONENT_R_BIT
|
|
329
|
+
when :g, :green then VK_COLOR_COMPONENT_G_BIT
|
|
330
|
+
when :b, :blue then VK_COLOR_COMPONENT_B_BIT
|
|
331
|
+
when :a, :alpha then VK_COLOR_COMPONENT_A_BIT
|
|
332
|
+
else sym
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
def sym_to_load_op(sym)
|
|
337
|
+
case sym
|
|
338
|
+
when :load then VK_ATTACHMENT_LOAD_OP_LOAD
|
|
339
|
+
when :clear then VK_ATTACHMENT_LOAD_OP_CLEAR
|
|
340
|
+
when :dont_care, nil then VK_ATTACHMENT_LOAD_OP_DONT_CARE
|
|
341
|
+
else sym
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
def sym_to_store_op(sym)
|
|
346
|
+
case sym
|
|
347
|
+
when :store then VK_ATTACHMENT_STORE_OP_STORE
|
|
348
|
+
when :dont_care, nil then VK_ATTACHMENT_STORE_OP_DONT_CARE
|
|
349
|
+
else sym
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
def sym_to_image_layout(sym)
|
|
354
|
+
case sym
|
|
355
|
+
when :undefined, nil, :any
|
|
356
|
+
VK_IMAGE_LAYOUT_UNDEFINED
|
|
357
|
+
when :general
|
|
358
|
+
VK_IMAGE_LAYOUT_GENERAL
|
|
359
|
+
when :color_optimal, :color, :color_attachment_optimal
|
|
360
|
+
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
|
|
361
|
+
when :stencil_optimal, :depth_optimal, :depth_stencil_optimal, :depth_stencil_attachment_optimal,
|
|
362
|
+
:stencil, :depth, :depth_stencil, :depth_stencil_attachment
|
|
363
|
+
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
|
|
364
|
+
when :stencil_read_only_optimal, :stencil_ro_optimal, :stencil_read_only, :stencil_ro,
|
|
365
|
+
:depth_read_only_optimal, :depth_ro_optimal, :depth_read_only, :depth_ro,
|
|
366
|
+
:depth_stencil_ro_optimal, :depth_stencil_read_only, :depth_stencil_ro
|
|
367
|
+
VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
|
|
368
|
+
when :shader_read_only_optimal, :shader_ro_optimal, :shader_read_only, :shader_ro
|
|
369
|
+
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
|
370
|
+
when :transfer_src_optimal, :transfer_src, :src_optimal
|
|
371
|
+
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
|
|
372
|
+
when :transfer_dst_optimal, :transfer_dst, :dst_optimal
|
|
373
|
+
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
|
|
374
|
+
when :preinitialized
|
|
375
|
+
VK_IMAGE_LAYOUT_PREINITIALIZED
|
|
376
|
+
when :present_src, :presentation_src, :presentment_src
|
|
377
|
+
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
|
|
378
|
+
else sym
|
|
379
|
+
end
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def sym_to_pipeline_bind_point(sym)
|
|
383
|
+
case sym
|
|
384
|
+
when :graphics then VK_PIPELINE_BIND_POINT_GRAPHICS
|
|
385
|
+
when :compute then VK_PIPELINE_BIND_POINT_COMPUTE
|
|
386
|
+
else sym
|
|
387
|
+
end
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
def num_to_samples(i)
|
|
391
|
+
case i
|
|
392
|
+
when 1 then VK_SAMPLE_COUNT_1_BIT
|
|
393
|
+
when 2 then VK_SAMPLE_COUNT_2_BIT
|
|
394
|
+
when 4 then VK_SAMPLE_COUNT_4_BIT
|
|
395
|
+
when 8 then VK_SAMPLE_COUNT_8_BIT
|
|
396
|
+
when 16 then VK_SAMPLE_COUNT_16_BIT
|
|
397
|
+
when 32 then VK_SAMPLE_COUNT_32_BIT
|
|
398
|
+
when 64 then VK_SAMPLE_COUNT_64_BIT
|
|
399
|
+
else i
|
|
400
|
+
end
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
def array_of_uint32s(ary)
|
|
404
|
+
return nil if ary.nil? || ary.empty?
|
|
405
|
+
size = ary.size * 4
|
|
406
|
+
ints = Fiddle::Pointer.malloc(size)
|
|
407
|
+
ints[0, size] = ary.pack("L")
|
|
408
|
+
ints
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
def array_of_structures(ary)
|
|
412
|
+
return nil if ary.nil? || ary.empty?
|
|
413
|
+
size = ary.map { |struct| struct.to_ptr.size }.sum
|
|
414
|
+
pointers = Fiddle::Pointer.malloc(size)
|
|
415
|
+
raise ArgumentError, "size is 0?, #{ary}" if size == 0
|
|
416
|
+
offset = 0
|
|
417
|
+
ary.each_with_index do |addr, i|
|
|
418
|
+
(pointers + offset).copy_from(addr.to_ptr)
|
|
419
|
+
offset += addr.to_ptr.size
|
|
420
|
+
end
|
|
421
|
+
pointers
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
def array_of_pointers(ary, pointers = nil)
|
|
425
|
+
return nil if ary.nil? || ary.empty?
|
|
426
|
+
pointers ||= Fiddle::Pointer.malloc(ary.size * Fiddle::SIZEOF_VOIDP)
|
|
427
|
+
ary.each_with_index do |ptr, i|
|
|
428
|
+
mem = [ptr.to_ptr.to_i].pack(Fiddle::PackInfo::PACK_MAP[Fiddle::TYPE_VOIDP])
|
|
429
|
+
pointers[i * Fiddle::SIZEOF_VOIDP, Fiddle::SIZEOF_VOIDP] = mem
|
|
430
|
+
end
|
|
431
|
+
pointers
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
# Converts a byte array (array of numbers) representing a null-terminated
|
|
435
|
+
# C-string into a Ruby string.
|
|
436
|
+
def cstr_to_rbstr(byte_array_or_ptr)
|
|
437
|
+
case byte_array_or_ptr
|
|
438
|
+
when Fiddle::Pointer then byte_array_or_ptr.to_s
|
|
439
|
+
else byte_array_or_ptr.pack('C*').sub(/\x00*\z/, '')
|
|
440
|
+
end
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
# Takes a version string and constructs a Vulkan packed version number
|
|
444
|
+
# from it.
|
|
445
|
+
def vk_make_version(version)
|
|
446
|
+
version = Gem::Version.new(version)
|
|
447
|
+
major, minor, patch = *version.segments
|
|
448
|
+
(((major) << 22) | ((minor || 0) << 12) | (patch || 0))
|
|
449
|
+
end
|
|
450
|
+
|
|
451
|
+
# returns a Gem::Version from the specified numeric Vulkan packed version
|
|
452
|
+
# number.
|
|
453
|
+
def vk_parse_version(version)
|
|
454
|
+
major = (version >> 22) & 0x3ff
|
|
455
|
+
minor = (version >> 12) & 0x3ff
|
|
456
|
+
patch = (version ) & 0xfff
|
|
457
|
+
Gem::Version.new([major, minor, patch].join('.'))
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
# Using the specified regular expression, scans the list of Vulkan
|
|
461
|
+
# constants, looking for the first constant whose name matches the regular
|
|
462
|
+
# expression AND whose value matches the given value. The return value is
|
|
463
|
+
# the first regex group (`$1`) from the match, converted to a symbol.
|
|
464
|
+
def const_to_symbol(val, rx)
|
|
465
|
+
Vulkan.constants.each do |konst|
|
|
466
|
+
if konst.to_s[rx]
|
|
467
|
+
return $1.downcase.to_sym if val == Vulkan.const_get(konst)
|
|
468
|
+
end
|
|
469
|
+
end
|
|
470
|
+
val
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
# Performs similarly to #const_to_symbol, but returns an array of symbols
|
|
474
|
+
# for a set of matching flag names, rather than for a single value.
|
|
475
|
+
def flags_to_symbols(val, rx)
|
|
476
|
+
[].tap do |ary|
|
|
477
|
+
Vulkan.constants.each do |konst|
|
|
478
|
+
if konst.to_s[rx]
|
|
479
|
+
flag_value = Vulkan.const_get(konst)
|
|
480
|
+
ary << $1.downcase.to_sym if val & flag_value > 0
|
|
481
|
+
end
|
|
482
|
+
end
|
|
483
|
+
end
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
# Converts a Fiddle/FFI memory struct into a simple Ruby hash, mostly for
|
|
487
|
+
# happier debugging.
|
|
488
|
+
def struct_to_hash(struct, initial = {})
|
|
489
|
+
struct.class.members.each_with_index.inject(initial) do |hash, (member, index)|
|
|
490
|
+
member = member[0] if member.kind_of?(Array)
|
|
491
|
+
member_name = member.gsub(/[0-9A-Z]+/) { |x| "_#{x.downcase}" }.to_sym
|
|
492
|
+
type = struct.class.types[index]
|
|
493
|
+
hash.tap do |h|
|
|
494
|
+
val = struct.send(member)
|
|
495
|
+
val = struct_to_hash(val) if val.respond_to?(:to_ptr) && !val.kind_of?(Array)
|
|
496
|
+
if val.kind_of?(Array)
|
|
497
|
+
val = val.map do |v|
|
|
498
|
+
if v.respond_to?(:to_ptr) && v.to_ptr.kind_of?(Fiddle::CStructEntity)
|
|
499
|
+
struct_to_hash(v)
|
|
500
|
+
else
|
|
501
|
+
v
|
|
502
|
+
end
|
|
503
|
+
end
|
|
504
|
+
end
|
|
505
|
+
h[member_name] = val
|
|
506
|
+
h[member_name] = cstr_to_rbstr(h[member_name]) if type.kind_of?(Array) && type[0] == Fiddle::TYPE_CHAR
|
|
507
|
+
end
|
|
508
|
+
end
|
|
509
|
+
end
|
|
510
|
+
end
|
|
511
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Vulkan
|
|
2
|
+
class DescriptorPool
|
|
3
|
+
include Vulkan::Checks
|
|
4
|
+
include Vulkan::Conversions
|
|
5
|
+
include Vulkan::Finalizer
|
|
6
|
+
|
|
7
|
+
def initialize(vk, flags: VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, max_sets:, pool_sizes:)
|
|
8
|
+
@vk = vk
|
|
9
|
+
@flags = flags
|
|
10
|
+
pool_info = VkDescriptorPoolCreateInfo.malloc
|
|
11
|
+
pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
|
|
12
|
+
pool_info.poolSizeCount = pool_sizes.size
|
|
13
|
+
pool_info.pPoolSizes = array_of_structures(pool_sizes.map { |info| build_pool_size(**info) })
|
|
14
|
+
pool_info.flags = @flags
|
|
15
|
+
pool_info.maxSets = max_sets
|
|
16
|
+
handle_p = Vulkan.create_value('VkDescriptorPool')
|
|
17
|
+
check_result @vk.vkCreateDescriptorPool(@vk.device, pool_info, nil, handle_p)
|
|
18
|
+
@handle = handle_p.value
|
|
19
|
+
finalize_with @vk, :vkDestroyDescriptorPool, @vk.device, @handle, nil
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def descriptor_sets_freeable?
|
|
23
|
+
@flags & VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT == VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def alloc(layouts:)
|
|
27
|
+
count = layouts.size
|
|
28
|
+
alloc_info = VkDescriptorSetAllocateInfo.malloc
|
|
29
|
+
alloc_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO
|
|
30
|
+
alloc_info.descriptorPool = to_ptr
|
|
31
|
+
alloc_info.descriptorSetCount = count
|
|
32
|
+
alloc_info.pSetLayouts = array_of_structures(layouts.map { |layout| Vulkan.create_value('void *', layout.to_ptr.to_i) })
|
|
33
|
+
sets_p = Vulkan.struct(['VkDescriptorSet sets[%d]' % count]).malloc
|
|
34
|
+
check_result @vk.vkAllocateDescriptorSets(@vk.device, alloc_info, sets_p)
|
|
35
|
+
count.times.map { |i| Vulkan::DescriptorSet.new(@vk, self, layouts[i], sets_p.sets[i], descriptor_sets_freeable?) }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def build_pool_size(type:, count:)
|
|
39
|
+
VkDescriptorPoolSize.malloc.tap do |pool_size|
|
|
40
|
+
pool_size.type = sym_to_descriptor_type(type)
|
|
41
|
+
pool_size.descriptorCount = count
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
module Vulkan
|
|
2
|
+
class DescriptorSet
|
|
3
|
+
include Vulkan::Conversions
|
|
4
|
+
include Vulkan::Finalizer
|
|
5
|
+
|
|
6
|
+
class DescriptorWrite
|
|
7
|
+
include Vulkan::Conversions
|
|
8
|
+
|
|
9
|
+
def initialize(owner, layout)
|
|
10
|
+
@changed = false
|
|
11
|
+
@writer = VkWriteDescriptorSet.malloc
|
|
12
|
+
@writer.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
|
|
13
|
+
@writer.dstSet = owner.to_ptr
|
|
14
|
+
@writer.dstBinding = layout.binding
|
|
15
|
+
@writer.dstArrayElement = 0
|
|
16
|
+
@writer.descriptorType = layout.descriptorType
|
|
17
|
+
@writer.descriptorCount = layout.descriptorCount
|
|
18
|
+
@writer.pBufferInfo = nil
|
|
19
|
+
@writer.pImageInfo = nil
|
|
20
|
+
@writer.pTexelBufferView = nil
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def set_buffer(buffer, offset: 0, range: buffer.size, array_element: 0)
|
|
24
|
+
@changed = true
|
|
25
|
+
@info = VkDescriptorBufferInfo.malloc
|
|
26
|
+
@info.buffer = buffer.to_ptr
|
|
27
|
+
@info.offset = offset
|
|
28
|
+
@info.range = range
|
|
29
|
+
@writer.pImageInfo = @writer.pTexelBufferView = nil
|
|
30
|
+
@writer.pBufferInfo = @info
|
|
31
|
+
@writer.dstArrayElement = array_element
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def set_image_view_and_sampler(image_view, sampler, layout: :shader_read_only_optimal, array_element: 0)
|
|
35
|
+
@changed = true
|
|
36
|
+
@info = VkDescriptorImageInfo.malloc
|
|
37
|
+
@info.imageLayout = sym_to_image_layout(layout)
|
|
38
|
+
@info.imageView = image_view.to_ptr
|
|
39
|
+
@info.sampler = sampler.to_ptr
|
|
40
|
+
@writer.pBufferInfo = @writer.pTexelBufferView = nil
|
|
41
|
+
@writer.pImageInfo = @info
|
|
42
|
+
@writer.dstArrayElement = array_element
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def to_ptr
|
|
46
|
+
@writer.to_ptr
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def changed?
|
|
50
|
+
@changed
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def initialize(vk, pool, layout, handle, freeable)
|
|
55
|
+
@vk = vk
|
|
56
|
+
@handle = handle
|
|
57
|
+
if freeable
|
|
58
|
+
handle_p = Vulkan.create_value('void *', handle)
|
|
59
|
+
finalize_with vk, :vkFreeDescriptorSets, vk.device, pool, 1, handle_p
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
@descriptor_writes = layout.descriptors.each_with_index.map do |desc_layout, i|
|
|
63
|
+
DescriptorWrite.new(self, desc_layout)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def [](index)
|
|
68
|
+
@descriptor_writes[index]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def commit
|
|
72
|
+
writes = @descriptor_writes.select { |write| write.changed? }
|
|
73
|
+
return unless writes.any?
|
|
74
|
+
writes_p = array_of_structures(writes)
|
|
75
|
+
@vk.vkUpdateDescriptorSets(@vk.device, writes.size, writes_p, 0, nil)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def update_texel_view(*, **)
|
|
79
|
+
raise NotImplemented
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def update_image(image)
|
|
83
|
+
raise NotImplemented
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Vulkan
|
|
2
|
+
class DescriptorSetLayout
|
|
3
|
+
include Vulkan::Checks
|
|
4
|
+
include Vulkan::Conversions
|
|
5
|
+
include Vulkan::Finalizer
|
|
6
|
+
|
|
7
|
+
attr_reader :descriptors
|
|
8
|
+
attr_reader :types
|
|
9
|
+
|
|
10
|
+
def initialize(vk, *types, descriptors:)
|
|
11
|
+
@vk = vk
|
|
12
|
+
@types = types
|
|
13
|
+
@descriptors = descriptors.map { |d| build_descriptor(**d) }
|
|
14
|
+
value_p = Vulkan.create_value('VkDescriptorSetLayout', nil)
|
|
15
|
+
check_result @vk.vkCreateDescriptorSetLayout(@vk.device, build_layout_info, nil, value_p)
|
|
16
|
+
@handle = value_p.value
|
|
17
|
+
finalize_with @vk, :vkDestroyDescriptorSetLayout, @vk.device, value_p.value, nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def build_layout_info
|
|
21
|
+
VkDescriptorSetLayoutCreateInfo.malloc.tap do |layout|
|
|
22
|
+
layout.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
|
|
23
|
+
layout.flags = syms_to_descriptor_set_layout_type_flags(@types)
|
|
24
|
+
layout.bindingCount = descriptors.size
|
|
25
|
+
layout.pBindings = array_of_structures(@descriptors)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def build_descriptor(binding:, type:, count: 1, stages:, samplers: [])
|
|
30
|
+
VkDescriptorSetLayoutBinding.malloc.tap do |descr|
|
|
31
|
+
descr.binding = binding
|
|
32
|
+
descr.descriptorType = sym_to_descriptor_type(type)
|
|
33
|
+
descr.descriptorCount = count
|
|
34
|
+
descr.stageFlags = syms_to_shader_stage_flags(stages)
|
|
35
|
+
descr.pImmutableSamplers = array_of_pointers(samplers)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|