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,380 @@
|
|
1
|
+
module Vulkan
|
2
|
+
class CommandBuffer
|
3
|
+
extend Vulkan::Checks
|
4
|
+
extend Vulkan::Conversions
|
5
|
+
include Vulkan::Checks
|
6
|
+
include Vulkan::Conversions
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def create(vk, command_pool, count: 1, level: :primary, usage: :simultaneous, &block)
|
10
|
+
@usage = usage
|
11
|
+
|
12
|
+
alloc_info = VkCommandBufferAllocateInfo.malloc
|
13
|
+
alloc_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO
|
14
|
+
alloc_info.commandPool = command_pool.to_ptr
|
15
|
+
alloc_info.level = sym_to_command_buffer_level(level)
|
16
|
+
alloc_info.commandBufferCount = count
|
17
|
+
|
18
|
+
buffers = Vulkan.struct(["void *value[#{count}]"]).malloc
|
19
|
+
check_result vk.vkAllocateCommandBuffers(vk.device, alloc_info, buffers)
|
20
|
+
count.times.map { |i| new(vk, buffers.value[i], i, &block) }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(vk, handle, index = 0, &block)
|
25
|
+
@vk = vk
|
26
|
+
@handle = handle
|
27
|
+
@recording = false
|
28
|
+
@scissors_p = {}
|
29
|
+
record(index, &block) if block_given?
|
30
|
+
end
|
31
|
+
|
32
|
+
def record(user_arg = nil)
|
33
|
+
start_recording
|
34
|
+
yield self, user_arg
|
35
|
+
ensure
|
36
|
+
stop_recording
|
37
|
+
end
|
38
|
+
|
39
|
+
def start_recording
|
40
|
+
@begin_info = VkCommandBufferBeginInfo.malloc
|
41
|
+
@begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
|
42
|
+
@begin_info.flags = sym_to_command_buffer_usage(@usage)
|
43
|
+
@begin_info.pInheritanceInfo = nil
|
44
|
+
check_result @vk.vkBeginCommandBuffer(to_ptr, @begin_info)
|
45
|
+
@recording = true
|
46
|
+
|
47
|
+
# references we don't want to let go of, in case of garbage collection
|
48
|
+
@refs = []
|
49
|
+
end
|
50
|
+
|
51
|
+
def recording?
|
52
|
+
@recording
|
53
|
+
end
|
54
|
+
|
55
|
+
def stop_recording
|
56
|
+
if recording?
|
57
|
+
check_result @vk.vkEndCommandBuffer(to_ptr)
|
58
|
+
@recording = false
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def render_pass(render_pass, **args)
|
63
|
+
begin_render_pass(render_pass, **args)
|
64
|
+
yield self if block_given?
|
65
|
+
ensure
|
66
|
+
end_render_pass
|
67
|
+
end
|
68
|
+
|
69
|
+
def copy_buffer(src, dst, regions: [{size: src.size}])
|
70
|
+
copy_regions_p = Vulkan.struct("regions[#{regions.size}]" => VkBufferCopy).malloc
|
71
|
+
@refs << copy_regions_p
|
72
|
+
regions.each_with_index do |region, i|
|
73
|
+
copy_regions_p.regions[i].srcOffset = region[:src_offset] if region[:src_offset]
|
74
|
+
copy_regions_p.regions[i].dstOffset = region[:dst_offset] if region[:dst_offset]
|
75
|
+
copy_regions_p.regions[i].size = region[:size] || raise(ArgumentError, 'region[:size] is required')
|
76
|
+
end
|
77
|
+
@vk.vkCmdCopyBuffer(to_ptr, src, dst, regions.size, copy_regions_p)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Blit from the image at `:src` into the image at `:dst`.
|
81
|
+
# `:regions` contains an array of hashes, which must correspond to
|
82
|
+
# this layout (values given are defaults used if the field is omitted):
|
83
|
+
#
|
84
|
+
# {
|
85
|
+
# src: { # corresponds to struct VkImageSubresourceLayers
|
86
|
+
# aspect_mask: VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM, # (everything)
|
87
|
+
# mip_level: (required),
|
88
|
+
# base_array_layer: 0,
|
89
|
+
# layer_count: 1,
|
90
|
+
# tl: { # corresponds to srcOffests[0], a struct VkOffset3D
|
91
|
+
# x: 0,
|
92
|
+
# y: 0,
|
93
|
+
# z: 0
|
94
|
+
# },
|
95
|
+
# br: { # corresponds to srcOffests[1], a struct VkOffset3D
|
96
|
+
# x: (required)
|
97
|
+
# y: (required)
|
98
|
+
# z: (required)
|
99
|
+
# }
|
100
|
+
# },
|
101
|
+
# dst: { # corresponds to struct VkImageSubresourceLayers
|
102
|
+
# aspect_mask: VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM, # (everything)
|
103
|
+
# mip_level: (required),
|
104
|
+
# base_array_layer: 0,
|
105
|
+
# layer_count: 1,
|
106
|
+
# tl: { # corresponds to dstOffests[0], a struct VkOffset3D
|
107
|
+
# x: 0,
|
108
|
+
# y: 0,
|
109
|
+
# z: 0
|
110
|
+
# },
|
111
|
+
# br: { # corresponds to dstOffests[1], a struct VkOffset3D
|
112
|
+
# x: (required)
|
113
|
+
# y: (required)
|
114
|
+
# z: (required)
|
115
|
+
# }
|
116
|
+
# },
|
117
|
+
# }
|
118
|
+
def blit_image(src:,
|
119
|
+
src_layout: :transfer_src_optimal,
|
120
|
+
dst:,
|
121
|
+
dst_layout: :transfer_dst_optimal,
|
122
|
+
regions:,
|
123
|
+
filter: :nearest)
|
124
|
+
blit_regions_p = Vulkan.struct("regions[#{regions.size}]" => VkImageBlit).malloc
|
125
|
+
@refs << blit_regions_p
|
126
|
+
regions.each_with_index do |region, i|
|
127
|
+
blit_region = blit_regions_p.regions[i]
|
128
|
+
blit_region.srcSubresource.aspectMask = syms_to_image_aspect_flags(region[:src][:aspect_mask] || VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM)
|
129
|
+
blit_region.srcSubresource.mipLevel = region[:src][:mip_level]
|
130
|
+
blit_region.srcSubresource.baseArrayLayer = region[:src][:base_array_layer] || 0
|
131
|
+
blit_region.srcSubresource.layerCount = region[:src][:layer_count] || 1
|
132
|
+
blit_region.dstSubresource.aspectMask = syms_to_image_aspect_flags(region[:dst][:aspect_mask] || VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM)
|
133
|
+
blit_region.dstSubresource.mipLevel = region[:dst][:mip_level]
|
134
|
+
blit_region.dstSubresource.baseArrayLayer = region[:dst][:base_array_layer] || 0
|
135
|
+
blit_region.dstSubresource.layerCount = region[:dst][:layer_count] || 1
|
136
|
+
tl = region[:src][:tl] || {}
|
137
|
+
blit_region.srcOffsets[0].x = tl[:x] || 0
|
138
|
+
blit_region.srcOffsets[0].y = tl[:y] || 0
|
139
|
+
blit_region.srcOffsets[0].z = tl[:z] || 0
|
140
|
+
blit_region.srcOffsets[1].x = region[:src][:br][:x] || raise(ArgumentError, "Need src :br offsets (x)")
|
141
|
+
blit_region.srcOffsets[1].y = region[:src][:br][:y] || raise(ArgumentError, "Need src :br offsets (y)")
|
142
|
+
blit_region.srcOffsets[1].z = region[:src][:br][:z] || raise(ArgumentError, "Need src :br offsets (z)")
|
143
|
+
tl = region[:dst][:tl] || {}
|
144
|
+
blit_region.dstOffsets[0].x = tl[:x] || 0
|
145
|
+
blit_region.dstOffsets[0].y = tl[:y] || 0
|
146
|
+
blit_region.dstOffsets[0].z = tl[:z] || 0
|
147
|
+
blit_region.dstOffsets[1].x = region[:dst][:br][:x] || raise(ArgumentError, "Need dst :br offsets (x)")
|
148
|
+
blit_region.dstOffsets[1].y = region[:dst][:br][:y] || raise(ArgumentError, "Need dst :br offsets (y)")
|
149
|
+
blit_region.dstOffsets[1].z = region[:dst][:br][:z] || raise(ArgumentError, "Need dst :br offsets (z)")
|
150
|
+
end
|
151
|
+
|
152
|
+
@vk.vkCmdBlitImage(to_ptr,
|
153
|
+
src,
|
154
|
+
sym_to_image_layout(src_layout),
|
155
|
+
dst,
|
156
|
+
sym_to_image_layout(dst_layout),
|
157
|
+
regions.size,
|
158
|
+
blit_regions_p,
|
159
|
+
sym_to_filter(filter))
|
160
|
+
end
|
161
|
+
|
162
|
+
def pipeline_image_barrier(from_layout:,
|
163
|
+
to_layout:,
|
164
|
+
src_queue_family: :ignored,
|
165
|
+
dst_queue_family: :ignored,
|
166
|
+
image:,
|
167
|
+
aspects:,
|
168
|
+
base_mip_level:,
|
169
|
+
level_count:,
|
170
|
+
base_array_layer:,
|
171
|
+
layer_count:,
|
172
|
+
src_access:,
|
173
|
+
dst_access:,
|
174
|
+
**barrier_args)
|
175
|
+
barrier = VkImageMemoryBarrier.malloc
|
176
|
+
barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
|
177
|
+
barrier.oldLayout = sym_to_image_layout(from_layout)
|
178
|
+
barrier.newLayout = sym_to_image_layout(to_layout)
|
179
|
+
barrier.srcQueueFamilyIndex = queue_family_to_index(src_queue_family)
|
180
|
+
barrier.dstQueueFamilyIndex = queue_family_to_index(dst_queue_family)
|
181
|
+
barrier.image = image.to_ptr
|
182
|
+
barrier.subresourceRange.aspectMask = syms_to_image_aspect_flags(aspects)
|
183
|
+
barrier.subresourceRange.baseMipLevel = base_mip_level
|
184
|
+
barrier.subresourceRange.levelCount = level_count
|
185
|
+
barrier.subresourceRange.baseArrayLayer = base_array_layer
|
186
|
+
barrier.subresourceRange.layerCount = layer_count
|
187
|
+
barrier.srcAccessMask = syms_to_access_mask(src_access)
|
188
|
+
barrier.dstAccessMask = syms_to_access_mask(dst_access)
|
189
|
+
pipeline_barriers(image_barriers: [barrier], **barrier_args)
|
190
|
+
end
|
191
|
+
|
192
|
+
def pipeline_barriers(memory_barriers: nil,
|
193
|
+
buffer_barriers: nil,
|
194
|
+
image_barriers: nil,
|
195
|
+
src_stages: ,
|
196
|
+
dst_stages: ,
|
197
|
+
dependencies: 0)
|
198
|
+
memory_barriers_p = array_of_structures(memory_barriers)
|
199
|
+
buffer_barriers_p = array_of_structures(buffer_barriers)
|
200
|
+
image_barriers_p = array_of_structures(image_barriers)
|
201
|
+
@vk.vkCmdPipelineBarrier to_ptr,
|
202
|
+
syms_to_pipeline_stage_flags(src_stages),
|
203
|
+
syms_to_pipeline_stage_flags(dst_stages),
|
204
|
+
syms_to_dependency_flags(dependencies),
|
205
|
+
memory_barriers&.size || 0,
|
206
|
+
memory_barriers_p,
|
207
|
+
buffer_barriers&.size || 0,
|
208
|
+
buffer_barriers_p,
|
209
|
+
image_barriers&.size || 0,
|
210
|
+
image_barriers_p
|
211
|
+
end
|
212
|
+
|
213
|
+
def set_scissor(scissors, first: 0)
|
214
|
+
scissors_p = @scissors_p[scissors.size] ||=
|
215
|
+
Vulkan.struct("scissors[#{scissors.size}]" => VkRect2D).malloc
|
216
|
+
scissors.each_with_index do |scissor, i|
|
217
|
+
scissors_p.scissors[i].offset.x = scissor[:left]
|
218
|
+
scissors_p.scissors[i].offset.y = scissor[:top]
|
219
|
+
scissors_p.scissors[i].extent.width = scissor[:width]
|
220
|
+
scissors_p.scissors[i].extent.height = scissor[:height]
|
221
|
+
end
|
222
|
+
@vk.vkCmdSetScissor(to_ptr, first, scissors.size, scissors_p)
|
223
|
+
end
|
224
|
+
|
225
|
+
def begin_render_pass(render_pass, framebuffer:,
|
226
|
+
left: 0,
|
227
|
+
top: 0,
|
228
|
+
width: framebuffer.width,
|
229
|
+
height: framebuffer.height,
|
230
|
+
clear: nil,
|
231
|
+
subpass_contents: :inline)
|
232
|
+
attachments = render_pass.attachments
|
233
|
+
@refs << render_pass
|
234
|
+
@refs << framebuffer
|
235
|
+
@clear_values = attachments.size.times.map { VkClearValue.malloc }
|
236
|
+
attachments.each_with_index do |attachment, i|
|
237
|
+
clear_i = clear && clear[i]
|
238
|
+
if attachments[i].finalLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL ||
|
239
|
+
attachments[i].finalLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
|
240
|
+
clear_i ||= [1, 0]
|
241
|
+
@clear_values[i].depthStencil.depth = clear_i[0]
|
242
|
+
@clear_values[i].depthStencil.stencil = clear_i[1]
|
243
|
+
else
|
244
|
+
clear_i ||= [0, 0, 0, 1]
|
245
|
+
# FIXME use attachment.format (one of VK_FORMAT_*) to determine which
|
246
|
+
# accessor to use here
|
247
|
+
@clear_values[i].color.float32 = clear_i
|
248
|
+
end
|
249
|
+
end
|
250
|
+
@clear_values_p = array_of_structures(@clear_values)
|
251
|
+
@render_pass_info = VkRenderPassBeginInfo.malloc
|
252
|
+
@render_pass_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
|
253
|
+
@render_pass_info.renderPass = render_pass.to_ptr
|
254
|
+
@render_pass_info.framebuffer = framebuffer.to_ptr
|
255
|
+
@render_pass_info.renderArea.offset.x = left
|
256
|
+
@render_pass_info.renderArea.offset.y = top
|
257
|
+
@render_pass_info.renderArea.extent.width = width
|
258
|
+
@render_pass_info.renderArea.extent.height = height
|
259
|
+
@render_pass_info.clearValueCount = attachments.size
|
260
|
+
@render_pass_info.pClearValues = @clear_values_p
|
261
|
+
@vk.vkCmdBeginRenderPass(to_ptr, @render_pass_info, sym_to_subpass_contents(subpass_contents))
|
262
|
+
end
|
263
|
+
|
264
|
+
def end_render_pass
|
265
|
+
@vk.vkCmdEndRenderPass(to_ptr)
|
266
|
+
end
|
267
|
+
|
268
|
+
def bind_pipeline(binding_point, pipeline)
|
269
|
+
@refs << pipeline
|
270
|
+
@vk.vkCmdBindPipeline(to_ptr, sym_to_pipeline_bind_point(binding_point), pipeline)
|
271
|
+
end
|
272
|
+
|
273
|
+
def copy_buffer_to_image(buffer, image, regions, layout: :dst_optimal)
|
274
|
+
regions = [regions].flatten
|
275
|
+
regions_p = regions.map { |region| build_buffer_image_copy_region(**region) }
|
276
|
+
@vk.vkCmdCopyBufferToImage to_ptr,
|
277
|
+
buffer.respond_to?(:to_ptr) ? buffer.to_ptr : buffer,
|
278
|
+
image.respond_to?(:to_ptr) ? image.to_ptr : image,
|
279
|
+
sym_to_image_layout(layout),
|
280
|
+
regions.size,
|
281
|
+
array_of_structures(regions_p)
|
282
|
+
end
|
283
|
+
|
284
|
+
def build_buffer_image_copy_region(buffer_offset:,
|
285
|
+
buffer_row_length:,
|
286
|
+
buffer_image_height:,
|
287
|
+
x:,
|
288
|
+
y:,
|
289
|
+
z:,
|
290
|
+
width:,
|
291
|
+
height:,
|
292
|
+
depth:,
|
293
|
+
aspects:,
|
294
|
+
mip_level:,
|
295
|
+
base_array_layer:,
|
296
|
+
layer_count:)
|
297
|
+
VkBufferImageCopy.malloc.tap do |region|
|
298
|
+
region.bufferOffset = buffer_offset
|
299
|
+
region.bufferRowLength = buffer_row_length
|
300
|
+
region.bufferImageHeight = buffer_image_height
|
301
|
+
region.imageSubresource.aspectMask = syms_to_image_aspect_flags(aspects)
|
302
|
+
region.imageSubresource.mipLevel = mip_level
|
303
|
+
region.imageSubresource.baseArrayLayer = base_array_layer
|
304
|
+
region.imageSubresource.layerCount = layer_count
|
305
|
+
region.imageOffset.x = x
|
306
|
+
region.imageOffset.y = y
|
307
|
+
region.imageOffset.z = z
|
308
|
+
region.imageExtent.width = width
|
309
|
+
region.imageExtent.height = height
|
310
|
+
region.imageExtent.depth = depth
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
def bind_vertex_buffer(vertex_buffer, binding_index: 0, offset: 0)
|
315
|
+
bind_vertex_buffers vertex_buffers: [vertex_buffer],
|
316
|
+
first_binding: binding_index,
|
317
|
+
offsets: [offset]
|
318
|
+
end
|
319
|
+
|
320
|
+
def bind_vertex_buffers(vertex_buffers:,
|
321
|
+
offsets: nil,
|
322
|
+
first_binding: 0,
|
323
|
+
binding_count: vertex_buffers.size)
|
324
|
+
offsets ||= vertex_buffers.map { 0 }
|
325
|
+
@refs.concat vertex_buffers
|
326
|
+
buffers_p = array_of_pointers(vertex_buffers)
|
327
|
+
offsets_p = Vulkan.struct("VkDeviceSize offsets[#{offsets.size}]").malloc
|
328
|
+
offsets.each_with_index { |o, i| offsets_p.offsets[i] = o }
|
329
|
+
@vk.vkCmdBindVertexBuffers(to_ptr, first_binding, binding_count, buffers_p, offsets_p)
|
330
|
+
end
|
331
|
+
|
332
|
+
def bind_index_buffer(index_buffer, offset: 0, type:)
|
333
|
+
@refs << index_buffer
|
334
|
+
@vk.vkCmdBindIndexBuffer(to_ptr, index_buffer, offset, sym_to_index_type(type))
|
335
|
+
end
|
336
|
+
|
337
|
+
def bind_descriptor_sets(bind_point, sets, pipeline_layout:,
|
338
|
+
set_count: sets.size,
|
339
|
+
first_set: 0,
|
340
|
+
dynamic_offsets: nil,
|
341
|
+
dynamic_offset_count: dynamic_offsets ? dynamic_offsets.size : 0)
|
342
|
+
@refs << sets
|
343
|
+
@vk.vkCmdBindDescriptorSets(to_ptr,
|
344
|
+
sym_to_pipeline_bind_point(bind_point),
|
345
|
+
pipeline_layout,
|
346
|
+
first_set,
|
347
|
+
set_count,
|
348
|
+
array_of_pointers(sets),
|
349
|
+
dynamic_offset_count,
|
350
|
+
dynamic_offsets);
|
351
|
+
end
|
352
|
+
|
353
|
+
def bind_descriptor_set(bind_point, set, pipeline_layout:)
|
354
|
+
bind_descriptor_sets(bind_point, [set], pipeline_layout: pipeline_layout)
|
355
|
+
end
|
356
|
+
|
357
|
+
def draw(vertex_count, instance_count, first_vertex_index, first_instance_index)
|
358
|
+
@vk.vkCmdDraw(to_ptr, vertex_count, instance_count, first_vertex_index, first_instance_index)
|
359
|
+
end
|
360
|
+
|
361
|
+
def draw_indexed(index_count, instance_count, first_index, vertex_offset, first_instance)
|
362
|
+
@vk.vkCmdDrawIndexed(to_ptr, index_count, instance_count, first_index, vertex_offset, first_instance)
|
363
|
+
end
|
364
|
+
|
365
|
+
def viewport(x, y, width, height, min_depth = 0, max_depth = 1)
|
366
|
+
vp = VkViewport.malloc
|
367
|
+
vp.x = x
|
368
|
+
vp.y = y
|
369
|
+
vp.width = width
|
370
|
+
vp.height = height
|
371
|
+
vp.minDepth = min_depth
|
372
|
+
vp.maxDepth = max_depth
|
373
|
+
@vk.vkCmdSetViewport(to_ptr, 0, 1, vp)
|
374
|
+
end
|
375
|
+
|
376
|
+
def to_ptr
|
377
|
+
@handle
|
378
|
+
end
|
379
|
+
end
|
380
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Vulkan
|
2
|
+
class CommandPool
|
3
|
+
include Vulkan::Checks
|
4
|
+
include Vulkan::Conversions
|
5
|
+
include Vulkan::Finalizer
|
6
|
+
|
7
|
+
def initialize(vk, queue_family:, transient: false, allow_reset: false)
|
8
|
+
@vk = vk
|
9
|
+
pool_info = VkCommandPoolCreateInfo.malloc
|
10
|
+
pool_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
|
11
|
+
pool_info.queueFamilyIndex = queue_family_to_index(queue_family)
|
12
|
+
pool_info.flags = (transient ? VK_COMMAND_POOL_CREATE_TRANSIENT_BIT : 0) |
|
13
|
+
(allow_reset ? VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT : 0)
|
14
|
+
command_pool_p = Vulkan.create_value('void *', nil)
|
15
|
+
check_result @vk.vkCreateCommandPool(vk.device, pool_info, nil, command_pool_p)
|
16
|
+
@handle = command_pool_p.value
|
17
|
+
finalize_with vk, :vkDestroyCommandPool, vk.device, @handle, nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_command_buffer(**args, &block)
|
21
|
+
create_command_buffers(1, **args, &block)[0]
|
22
|
+
end
|
23
|
+
|
24
|
+
def create_command_buffers(count, **args, &block)
|
25
|
+
Vulkan::CommandBuffer.create(@vk, self, count: count, **args, &block)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|