vulkan-ruby 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|