vulkan-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (350) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.simplecov +6 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +51 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +93 -0
  9. data/Rakefile +14 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +9 -0
  12. data/bin/setup.bat +2 -0
  13. data/examples/models/viking_room.obj +16053 -0
  14. data/examples/screenshots/vt10-viking_room.png +0 -0
  15. data/examples/shaders/depth_buffering.vert +25 -0
  16. data/examples/shaders/depth_buffering.vert.spv +0 -0
  17. data/examples/shaders/model_loading.frag +13 -0
  18. data/examples/shaders/model_loading.frag.spv +0 -0
  19. data/examples/shaders/model_loading.vert +25 -0
  20. data/examples/shaders/model_loading.vert.spv +0 -0
  21. data/examples/shaders/textures.frag +13 -0
  22. data/examples/shaders/textures.frag.spv +0 -0
  23. data/examples/shaders/textures.vert +25 -0
  24. data/examples/shaders/textures.vert.spv +0 -0
  25. data/examples/shaders/triangle.frag +10 -0
  26. data/examples/shaders/triangle.frag.spv +0 -0
  27. data/examples/shaders/triangle.vert +25 -0
  28. data/examples/shaders/triangle.vert.spv +0 -0
  29. data/examples/shaders/uniform_buffer.vert +22 -0
  30. data/examples/shaders/uniform_buffer.vert.spv +0 -0
  31. data/examples/shaders/vertex_buffer.vert +16 -0
  32. data/examples/shaders/vertex_buffer.vert.spv +0 -0
  33. data/examples/textures/texture.png +0 -0
  34. data/examples/textures/viking_room.png +0 -0
  35. data/examples/vt00_dump_info.rb +24 -0
  36. data/examples/vt01_triangle.rb +140 -0
  37. data/examples/vt02_vertex_buffer_triangle_host_visible.rb +164 -0
  38. data/examples/vt03_vertex_buffer_triangle_device_local.rb +174 -0
  39. data/examples/vt04_index_buffer_device_local.rb +193 -0
  40. data/examples/vt05_uniform_buffers.rb +237 -0
  41. data/examples/vt06_textures.rb +275 -0
  42. data/examples/vt07_depth_buffering.rb +315 -0
  43. data/examples/vt08_model_loading.rb +321 -0
  44. data/examples/vt09_mipmaps.rb +329 -0
  45. data/examples/vt10_multisampling.rb +344 -0
  46. data/lib/fiddle_ext.rb +15 -0
  47. data/lib/vulkan/buffer.rb +66 -0
  48. data/lib/vulkan/buffer_memory.rb +13 -0
  49. data/lib/vulkan/checks.rb +12 -0
  50. data/lib/vulkan/command_buffer.rb +380 -0
  51. data/lib/vulkan/command_pool.rb +28 -0
  52. data/lib/vulkan/conversions.rb +511 -0
  53. data/lib/vulkan/descriptor_pool.rb +45 -0
  54. data/lib/vulkan/descriptor_set.rb +86 -0
  55. data/lib/vulkan/descriptor_set_layout.rb +39 -0
  56. data/lib/vulkan/dispatch_table.rb +78 -0
  57. data/lib/vulkan/error.rb +43 -0
  58. data/lib/vulkan/fence.rb +32 -0
  59. data/lib/vulkan/finalizer.rb +43 -0
  60. data/lib/vulkan/framebuffer.rb +37 -0
  61. data/lib/vulkan/generated/commands.rb +298 -0
  62. data/lib/vulkan/generated/enums.rb +1049 -0
  63. data/lib/vulkan/generated/extensions/reserved_do_not_use_146.rb +8 -0
  64. data/lib/vulkan/generated/extensions/reserved_do_not_use_94.rb +8 -0
  65. data/lib/vulkan/generated/extensions/vk_amd_buffer_marker.rb +10 -0
  66. data/lib/vulkan/generated/extensions/vk_amd_draw_indirect_count.rb +10 -0
  67. data/lib/vulkan/generated/extensions/vk_amd_extension_134.rb +10 -0
  68. data/lib/vulkan/generated/extensions/vk_amd_extension_135.rb +10 -0
  69. data/lib/vulkan/generated/extensions/vk_amd_extension_136.rb +10 -0
  70. data/lib/vulkan/generated/extensions/vk_amd_extension_140.rb +10 -0
  71. data/lib/vulkan/generated/extensions/vk_amd_extension_142.rb +10 -0
  72. data/lib/vulkan/generated/extensions/vk_amd_extension_143.rb +10 -0
  73. data/lib/vulkan/generated/extensions/vk_amd_extension_17.rb +10 -0
  74. data/lib/vulkan/generated/extensions/vk_amd_extension_18.rb +10 -0
  75. data/lib/vulkan/generated/extensions/vk_amd_extension_182.rb +10 -0
  76. data/lib/vulkan/generated/extensions/vk_amd_extension_183.rb +10 -0
  77. data/lib/vulkan/generated/extensions/vk_amd_extension_184.rb +10 -0
  78. data/lib/vulkan/generated/extensions/vk_amd_extension_187.rb +10 -0
  79. data/lib/vulkan/generated/extensions/vk_amd_extension_188.rb +10 -0
  80. data/lib/vulkan/generated/extensions/vk_amd_extension_189.rb +10 -0
  81. data/lib/vulkan/generated/extensions/vk_amd_extension_20.rb +10 -0
  82. data/lib/vulkan/generated/extensions/vk_amd_extension_214.rb +10 -0
  83. data/lib/vulkan/generated/extensions/vk_amd_extension_226.rb +10 -0
  84. data/lib/vulkan/generated/extensions/vk_amd_extension_227.rb +10 -0
  85. data/lib/vulkan/generated/extensions/vk_amd_extension_228.rb +10 -0
  86. data/lib/vulkan/generated/extensions/vk_amd_extension_229.rb +10 -0
  87. data/lib/vulkan/generated/extensions/vk_amd_extension_230.rb +10 -0
  88. data/lib/vulkan/generated/extensions/vk_amd_extension_231.rb +10 -0
  89. data/lib/vulkan/generated/extensions/vk_amd_extension_232.rb +10 -0
  90. data/lib/vulkan/generated/extensions/vk_amd_extension_233.rb +10 -0
  91. data/lib/vulkan/generated/extensions/vk_amd_extension_234.rb +10 -0
  92. data/lib/vulkan/generated/extensions/vk_amd_extension_235.rb +10 -0
  93. data/lib/vulkan/generated/extensions/vk_amd_extension_236.rb +10 -0
  94. data/lib/vulkan/generated/extensions/vk_amd_extension_24.rb +10 -0
  95. data/lib/vulkan/generated/extensions/vk_amd_extension_25.rb +10 -0
  96. data/lib/vulkan/generated/extensions/vk_amd_extension_32.rb +10 -0
  97. data/lib/vulkan/generated/extensions/vk_amd_extension_33.rb +10 -0
  98. data/lib/vulkan/generated/extensions/vk_amd_extension_35.rb +10 -0
  99. data/lib/vulkan/generated/extensions/vk_amd_extension_39.rb +10 -0
  100. data/lib/vulkan/generated/extensions/vk_amd_extension_40.rb +10 -0
  101. data/lib/vulkan/generated/extensions/vk_amd_extension_41.rb +10 -0
  102. data/lib/vulkan/generated/extensions/vk_amd_extension_44.rb +10 -0
  103. data/lib/vulkan/generated/extensions/vk_amd_extension_45.rb +10 -0
  104. data/lib/vulkan/generated/extensions/vk_amd_extension_46.rb +10 -0
  105. data/lib/vulkan/generated/extensions/vk_amd_gcn_shader.rb +10 -0
  106. data/lib/vulkan/generated/extensions/vk_amd_gpu_shader_half_float.rb +10 -0
  107. data/lib/vulkan/generated/extensions/vk_amd_gpu_shader_int16.rb +10 -0
  108. data/lib/vulkan/generated/extensions/vk_amd_memory_overallocation_behavior.rb +11 -0
  109. data/lib/vulkan/generated/extensions/vk_amd_mixed_attachment_samples.rb +10 -0
  110. data/lib/vulkan/generated/extensions/vk_amd_negative_viewport_height.rb +10 -0
  111. data/lib/vulkan/generated/extensions/vk_amd_rasterization_order.rb +11 -0
  112. data/lib/vulkan/generated/extensions/vk_amd_shader_ballot.rb +10 -0
  113. data/lib/vulkan/generated/extensions/vk_amd_shader_core_properties.rb +11 -0
  114. data/lib/vulkan/generated/extensions/vk_amd_shader_explicit_vertex_parameter.rb +10 -0
  115. data/lib/vulkan/generated/extensions/vk_amd_shader_fragment_mask.rb +10 -0
  116. data/lib/vulkan/generated/extensions/vk_amd_shader_image_load_store_lod.rb +10 -0
  117. data/lib/vulkan/generated/extensions/vk_amd_shader_info.rb +10 -0
  118. data/lib/vulkan/generated/extensions/vk_amd_shader_trinary_minmax.rb +10 -0
  119. data/lib/vulkan/generated/extensions/vk_amd_texture_gather_bias_lod.rb +11 -0
  120. data/lib/vulkan/generated/extensions/vk_android_external_memory_android_hardware_buffer.rb +17 -0
  121. data/lib/vulkan/generated/extensions/vk_android_native_buffer.rb +12 -0
  122. data/lib/vulkan/generated/extensions/vk_arm_extension_01.rb +10 -0
  123. data/lib/vulkan/generated/extensions/vk_arm_extension_198.rb +10 -0
  124. data/lib/vulkan/generated/extensions/vk_ext_acquire_xlib_display.rb +10 -0
  125. data/lib/vulkan/generated/extensions/vk_ext_astc_decode_mode.rb +12 -0
  126. data/lib/vulkan/generated/extensions/vk_ext_blend_operation_advanced.rb +60 -0
  127. data/lib/vulkan/generated/extensions/vk_ext_calibrated_timestamps.rb +11 -0
  128. data/lib/vulkan/generated/extensions/vk_ext_conditional_rendering.rb +16 -0
  129. data/lib/vulkan/generated/extensions/vk_ext_conservative_rasterization.rb +12 -0
  130. data/lib/vulkan/generated/extensions/vk_ext_debug_marker.rb +13 -0
  131. data/lib/vulkan/generated/extensions/vk_ext_debug_report.rb +16 -0
  132. data/lib/vulkan/generated/extensions/vk_ext_debug_utils.rb +16 -0
  133. data/lib/vulkan/generated/extensions/vk_ext_depth_range_unrestricted.rb +10 -0
  134. data/lib/vulkan/generated/extensions/vk_ext_descriptor_indexing.rb +18 -0
  135. data/lib/vulkan/generated/extensions/vk_ext_direct_mode_display.rb +10 -0
  136. data/lib/vulkan/generated/extensions/vk_ext_discard_rectangles.rb +13 -0
  137. data/lib/vulkan/generated/extensions/vk_ext_display_control.rb +14 -0
  138. data/lib/vulkan/generated/extensions/vk_ext_display_surface_counter.rb +12 -0
  139. data/lib/vulkan/generated/extensions/vk_ext_extension_160.rb +10 -0
  140. data/lib/vulkan/generated/extensions/vk_ext_extension_176.rb +10 -0
  141. data/lib/vulkan/generated/extensions/vk_ext_extension_177.rb +10 -0
  142. data/lib/vulkan/generated/extensions/vk_ext_extension_219.rb +15 -0
  143. data/lib/vulkan/generated/extensions/vk_ext_extension_220.rb +10 -0
  144. data/lib/vulkan/generated/extensions/vk_ext_extension_222.rb +10 -0
  145. data/lib/vulkan/generated/extensions/vk_ext_extension_223.rb +10 -0
  146. data/lib/vulkan/generated/extensions/vk_ext_extension_28.rb +10 -0
  147. data/lib/vulkan/generated/extensions/vk_ext_external_memory_dma_buf.rb +11 -0
  148. data/lib/vulkan/generated/extensions/vk_ext_external_memory_host.rb +15 -0
  149. data/lib/vulkan/generated/extensions/vk_ext_global_priority.rb +12 -0
  150. data/lib/vulkan/generated/extensions/vk_ext_hdr_metadata.rb +11 -0
  151. data/lib/vulkan/generated/extensions/vk_ext_image_drm_format_modifier.rb +24 -0
  152. data/lib/vulkan/generated/extensions/vk_ext_inline_uniform_block.rb +15 -0
  153. data/lib/vulkan/generated/extensions/vk_ext_macos_ios_window.rb +10 -0
  154. data/lib/vulkan/generated/extensions/vk_ext_pci_bus_info.rb +11 -0
  155. data/lib/vulkan/generated/extensions/vk_ext_post_depth_coverage.rb +10 -0
  156. data/lib/vulkan/generated/extensions/vk_ext_queue_family_foreign.rb +11 -0
  157. data/lib/vulkan/generated/extensions/vk_ext_sample_locations.rb +17 -0
  158. data/lib/vulkan/generated/extensions/vk_ext_sampler_filter_minmax.rb +13 -0
  159. data/lib/vulkan/generated/extensions/vk_ext_shader_stencil_export.rb +10 -0
  160. data/lib/vulkan/generated/extensions/vk_ext_shader_subgroup_ballot.rb +10 -0
  161. data/lib/vulkan/generated/extensions/vk_ext_shader_subgroup_vote.rb +10 -0
  162. data/lib/vulkan/generated/extensions/vk_ext_shader_viewport_index_layer.rb +10 -0
  163. data/lib/vulkan/generated/extensions/vk_ext_swapchain_colorspace.rb +24 -0
  164. data/lib/vulkan/generated/extensions/vk_ext_transform_feedback.rb +20 -0
  165. data/lib/vulkan/generated/extensions/vk_ext_validation_cache.rb +13 -0
  166. data/lib/vulkan/generated/extensions/vk_ext_validation_flags.rb +11 -0
  167. data/lib/vulkan/generated/extensions/vk_ext_vertex_attribute_divisor.rb +13 -0
  168. data/lib/vulkan/generated/extensions/vk_fuchsia_imagepipe_surface.rb +11 -0
  169. data/lib/vulkan/generated/extensions/vk_google_decorate_string.rb +10 -0
  170. data/lib/vulkan/generated/extensions/vk_google_display_timing.rb +11 -0
  171. data/lib/vulkan/generated/extensions/vk_google_extension_192.rb +10 -0
  172. data/lib/vulkan/generated/extensions/vk_google_extension_193.rb +10 -0
  173. data/lib/vulkan/generated/extensions/vk_google_extension_194.rb +10 -0
  174. data/lib/vulkan/generated/extensions/vk_google_extension_195.rb +10 -0
  175. data/lib/vulkan/generated/extensions/vk_google_extension_196.rb +10 -0
  176. data/lib/vulkan/generated/extensions/vk_google_extension_216.rb +10 -0
  177. data/lib/vulkan/generated/extensions/vk_google_extension_217.rb +10 -0
  178. data/lib/vulkan/generated/extensions/vk_google_extension_49.rb +10 -0
  179. data/lib/vulkan/generated/extensions/vk_google_extension_50.rb +10 -0
  180. data/lib/vulkan/generated/extensions/vk_google_hlsl_functionality1.rb +10 -0
  181. data/lib/vulkan/generated/extensions/vk_img_extension_107.rb +10 -0
  182. data/lib/vulkan/generated/extensions/vk_img_extension_108.rb +10 -0
  183. data/lib/vulkan/generated/extensions/vk_img_extension_109.rb +10 -0
  184. data/lib/vulkan/generated/extensions/vk_img_extension_111.rb +10 -0
  185. data/lib/vulkan/generated/extensions/vk_img_extension_69.rb +10 -0
  186. data/lib/vulkan/generated/extensions/vk_img_filter_cubic.rb +12 -0
  187. data/lib/vulkan/generated/extensions/vk_img_format_pvrtc.rb +18 -0
  188. data/lib/vulkan/generated/extensions/vk_intel_extension_210.rb +10 -0
  189. data/lib/vulkan/generated/extensions/vk_intel_extension_211.rb +10 -0
  190. data/lib/vulkan/generated/extensions/vk_intel_extension_243.rb +10 -0
  191. data/lib/vulkan/generated/extensions/vk_khr_16bit_storage.rb +11 -0
  192. data/lib/vulkan/generated/extensions/vk_khr_8bit_storage.rb +11 -0
  193. data/lib/vulkan/generated/extensions/vk_khr_android_surface.rb +11 -0
  194. data/lib/vulkan/generated/extensions/vk_khr_bind_memory2.rb +13 -0
  195. data/lib/vulkan/generated/extensions/vk_khr_create_renderpass2.rb +17 -0
  196. data/lib/vulkan/generated/extensions/vk_khr_dedicated_allocation.rb +12 -0
  197. data/lib/vulkan/generated/extensions/vk_khr_descriptor_update_template.rb +15 -0
  198. data/lib/vulkan/generated/extensions/vk_khr_device_group.rb +33 -0
  199. data/lib/vulkan/generated/extensions/vk_khr_device_group_creation.rb +14 -0
  200. data/lib/vulkan/generated/extensions/vk_khr_display.rb +14 -0
  201. data/lib/vulkan/generated/extensions/vk_khr_display_swapchain.rb +12 -0
  202. data/lib/vulkan/generated/extensions/vk_khr_draw_indirect_count.rb +10 -0
  203. data/lib/vulkan/generated/extensions/vk_khr_driver_properties.rb +13 -0
  204. data/lib/vulkan/generated/extensions/vk_khr_extension_117.rb +10 -0
  205. data/lib/vulkan/generated/extensions/vk_khr_extension_119.rb +10 -0
  206. data/lib/vulkan/generated/extensions/vk_khr_extension_200.rb +10 -0
  207. data/lib/vulkan/generated/extensions/vk_khr_extension_201.rb +10 -0
  208. data/lib/vulkan/generated/extensions/vk_khr_extension_208.rb +10 -0
  209. data/lib/vulkan/generated/extensions/vk_khr_extension_209.rb +10 -0
  210. data/lib/vulkan/generated/extensions/vk_khr_extension_221.rb +11 -0
  211. data/lib/vulkan/generated/extensions/vk_khr_extension_237.rb +10 -0
  212. data/lib/vulkan/generated/extensions/vk_khr_extension_238.rb +10 -0
  213. data/lib/vulkan/generated/extensions/vk_khr_extension_239.rb +10 -0
  214. data/lib/vulkan/generated/extensions/vk_khr_extension_240.rb +10 -0
  215. data/lib/vulkan/generated/extensions/vk_khr_extension_83.rb +10 -0
  216. data/lib/vulkan/generated/extensions/vk_khr_external_fence.rb +12 -0
  217. data/lib/vulkan/generated/extensions/vk_khr_external_fence_capabilities.rb +19 -0
  218. data/lib/vulkan/generated/extensions/vk_khr_external_fence_fd.rb +12 -0
  219. data/lib/vulkan/generated/extensions/vk_khr_external_fence_win32.rb +13 -0
  220. data/lib/vulkan/generated/extensions/vk_khr_external_memory.rb +15 -0
  221. data/lib/vulkan/generated/extensions/vk_khr_external_memory_capabilities.rb +26 -0
  222. data/lib/vulkan/generated/extensions/vk_khr_external_memory_fd.rb +13 -0
  223. data/lib/vulkan/generated/extensions/vk_khr_external_memory_win32.rb +14 -0
  224. data/lib/vulkan/generated/extensions/vk_khr_external_semaphore.rb +12 -0
  225. data/lib/vulkan/generated/extensions/vk_khr_external_semaphore_capabilities.rb +20 -0
  226. data/lib/vulkan/generated/extensions/vk_khr_external_semaphore_fd.rb +12 -0
  227. data/lib/vulkan/generated/extensions/vk_khr_external_semaphore_win32.rb +14 -0
  228. data/lib/vulkan/generated/extensions/vk_khr_get_display_properties2.rb +15 -0
  229. data/lib/vulkan/generated/extensions/vk_khr_get_memory_requirements2.rb +15 -0
  230. data/lib/vulkan/generated/extensions/vk_khr_get_physical_device_properties2.rb +19 -0
  231. data/lib/vulkan/generated/extensions/vk_khr_get_surface_capabilities2.rb +13 -0
  232. data/lib/vulkan/generated/extensions/vk_khr_image_format_list.rb +11 -0
  233. data/lib/vulkan/generated/extensions/vk_khr_incremental_present.rb +11 -0
  234. data/lib/vulkan/generated/extensions/vk_khr_maintenance1.rb +14 -0
  235. data/lib/vulkan/generated/extensions/vk_khr_maintenance2.rb +22 -0
  236. data/lib/vulkan/generated/extensions/vk_khr_maintenance3.rb +12 -0
  237. data/lib/vulkan/generated/extensions/vk_khr_mir_surface.rb +10 -0
  238. data/lib/vulkan/generated/extensions/vk_khr_multiview.rb +14 -0
  239. data/lib/vulkan/generated/extensions/vk_khr_push_descriptor.rb +13 -0
  240. data/lib/vulkan/generated/extensions/vk_khr_relaxed_block_layout.rb +10 -0
  241. data/lib/vulkan/generated/extensions/vk_khr_sampler_mirror_clamp_to_edge.rb +11 -0
  242. data/lib/vulkan/generated/extensions/vk_khr_sampler_ycbcr_conversion.rb +73 -0
  243. data/lib/vulkan/generated/extensions/vk_khr_shader_atomic_int64.rb +11 -0
  244. data/lib/vulkan/generated/extensions/vk_khr_shader_draw_parameters.rb +10 -0
  245. data/lib/vulkan/generated/extensions/vk_khr_shared_presentable_image.rb +14 -0
  246. data/lib/vulkan/generated/extensions/vk_khr_storage_buffer_storage_class.rb +10 -0
  247. data/lib/vulkan/generated/extensions/vk_khr_surface.rb +13 -0
  248. data/lib/vulkan/generated/extensions/vk_khr_swapchain.rb +24 -0
  249. data/lib/vulkan/generated/extensions/vk_khr_variable_pointers.rb +11 -0
  250. data/lib/vulkan/generated/extensions/vk_khr_vulkan_memory_model.rb +11 -0
  251. data/lib/vulkan/generated/extensions/vk_khr_wayland_surface.rb +11 -0
  252. data/lib/vulkan/generated/extensions/vk_khr_win32_keyed_mutex.rb +11 -0
  253. data/lib/vulkan/generated/extensions/vk_khr_win32_surface.rb +11 -0
  254. data/lib/vulkan/generated/extensions/vk_khr_xcb_surface.rb +11 -0
  255. data/lib/vulkan/generated/extensions/vk_khr_xlib_surface.rb +11 -0
  256. data/lib/vulkan/generated/extensions/vk_mesa_extension_244.rb +10 -0
  257. data/lib/vulkan/generated/extensions/vk_mvk_ios_surface.rb +11 -0
  258. data/lib/vulkan/generated/extensions/vk_mvk_macos_surface.rb +11 -0
  259. data/lib/vulkan/generated/extensions/vk_mvk_moltenvk.rb +10 -0
  260. data/lib/vulkan/generated/extensions/vk_nn_vi_surface.rb +11 -0
  261. data/lib/vulkan/generated/extensions/vk_nv_clip_space_w_scaling.rb +12 -0
  262. data/lib/vulkan/generated/extensions/vk_nv_compute_shader_derivatives.rb +11 -0
  263. data/lib/vulkan/generated/extensions/vk_nv_corner_sampled_image.rb +12 -0
  264. data/lib/vulkan/generated/extensions/vk_nv_dedicated_allocation.rb +13 -0
  265. data/lib/vulkan/generated/extensions/vk_nv_device_diagnostic_checkpoints.rb +12 -0
  266. data/lib/vulkan/generated/extensions/vk_nv_extension_101.rb +10 -0
  267. data/lib/vulkan/generated/extensions/vk_nv_extension_103.rb +10 -0
  268. data/lib/vulkan/generated/extensions/vk_nv_extension_104.rb +10 -0
  269. data/lib/vulkan/generated/extensions/vk_nv_extension_151.rb +10 -0
  270. data/lib/vulkan/generated/extensions/vk_nv_extension_152.rb +10 -0
  271. data/lib/vulkan/generated/extensions/vk_nv_extension_155.rb +10 -0
  272. data/lib/vulkan/generated/extensions/vk_nv_extension_164.rb +10 -0
  273. data/lib/vulkan/generated/extensions/vk_nv_extension_168.rb +10 -0
  274. data/lib/vulkan/generated/extensions/vk_nv_extension_241.rb +10 -0
  275. data/lib/vulkan/generated/extensions/vk_nv_extension_242.rb +10 -0
  276. data/lib/vulkan/generated/extensions/vk_nv_extension_245.rb +10 -0
  277. data/lib/vulkan/generated/extensions/vk_nv_extension_53.rb +10 -0
  278. data/lib/vulkan/generated/extensions/vk_nv_external_memory.rb +12 -0
  279. data/lib/vulkan/generated/extensions/vk_nv_external_memory_capabilities.rb +10 -0
  280. data/lib/vulkan/generated/extensions/vk_nv_external_memory_win32.rb +12 -0
  281. data/lib/vulkan/generated/extensions/vk_nv_fill_rectangle.rb +11 -0
  282. data/lib/vulkan/generated/extensions/vk_nv_fragment_coverage_to_color.rb +11 -0
  283. data/lib/vulkan/generated/extensions/vk_nv_fragment_shader_barycentric.rb +11 -0
  284. data/lib/vulkan/generated/extensions/vk_nv_framebuffer_mixed_samples.rb +11 -0
  285. data/lib/vulkan/generated/extensions/vk_nv_geometry_shader_passthrough.rb +10 -0
  286. data/lib/vulkan/generated/extensions/vk_nv_glsl_shader.rb +11 -0
  287. data/lib/vulkan/generated/extensions/vk_nv_mesh_shader.rb +16 -0
  288. data/lib/vulkan/generated/extensions/vk_nv_ray_tracing.rb +40 -0
  289. data/lib/vulkan/generated/extensions/vk_nv_representative_fragment_test.rb +12 -0
  290. data/lib/vulkan/generated/extensions/vk_nv_sample_mask_override_coverage.rb +10 -0
  291. data/lib/vulkan/generated/extensions/vk_nv_scissor_exclusive.rb +13 -0
  292. data/lib/vulkan/generated/extensions/vk_nv_shader_image_footprint.rb +11 -0
  293. data/lib/vulkan/generated/extensions/vk_nv_shader_subgroup_partitioned.rb +11 -0
  294. data/lib/vulkan/generated/extensions/vk_nv_shading_rate_image.rb +20 -0
  295. data/lib/vulkan/generated/extensions/vk_nv_viewport_array2.rb +10 -0
  296. data/lib/vulkan/generated/extensions/vk_nv_viewport_swizzle.rb +11 -0
  297. data/lib/vulkan/generated/extensions/vk_nv_win32_keyed_mutex.rb +11 -0
  298. data/lib/vulkan/generated/extensions/vk_nvx_device_generated_commands.rb +21 -0
  299. data/lib/vulkan/generated/extensions/vk_nvx_extension_30.rb +10 -0
  300. data/lib/vulkan/generated/extensions/vk_nvx_extension_31.rb +10 -0
  301. data/lib/vulkan/generated/extensions/vk_nvx_extension_48.rb +10 -0
  302. data/lib/vulkan/generated/extensions/vk_nvx_extension_52.rb +10 -0
  303. data/lib/vulkan/generated/extensions/vk_nvx_multiview_per_view_attributes.rb +13 -0
  304. data/lib/vulkan/generated/extensions/vk_qcom_extension_171.rb +10 -0
  305. data/lib/vulkan/generated/extensions/vk_qcom_extension_172.rb +10 -0
  306. data/lib/vulkan/generated/extensions/vk_qcom_extension_173.rb +10 -0
  307. data/lib/vulkan/generated/extensions/vk_qcom_extension_174.rb +10 -0
  308. data/lib/vulkan/generated/extensions.rb +251 -0
  309. data/lib/vulkan/generated/structs.rb +2600 -0
  310. data/lib/vulkan/generated/types.rb +348 -0
  311. data/lib/vulkan/generated/vk.xml +10127 -0
  312. data/lib/vulkan/generated.rb +77 -0
  313. data/lib/vulkan/image.rb +263 -0
  314. data/lib/vulkan/image_memory.rb +13 -0
  315. data/lib/vulkan/image_view.rb +46 -0
  316. data/lib/vulkan/instance.rb +183 -0
  317. data/lib/vulkan/logical_device.rb +165 -0
  318. data/lib/vulkan/memory.rb +171 -0
  319. data/lib/vulkan/mock/swapchain_surface_info.rb +42 -0
  320. data/lib/vulkan/mock.rb +5 -0
  321. data/lib/vulkan/physical_device.rb +162 -0
  322. data/lib/vulkan/pipeline.rb +294 -0
  323. data/lib/vulkan/platform.rb +34 -0
  324. data/lib/vulkan/queue.rb +94 -0
  325. data/lib/vulkan/queue_family.rb +27 -0
  326. data/lib/vulkan/render_pass/subpass.rb +80 -0
  327. data/lib/vulkan/render_pass.rb +71 -0
  328. data/lib/vulkan/sampler.rb +48 -0
  329. data/lib/vulkan/semaphore.rb +16 -0
  330. data/lib/vulkan/shader_stage.rb +33 -0
  331. data/lib/vulkan/surface.rb +10 -0
  332. data/lib/vulkan/swapchain.rb +87 -0
  333. data/lib/vulkan/swapchain_builder.rb +111 -0
  334. data/lib/vulkan/swapchain_surface_info.rb +54 -0
  335. data/lib/vulkan/version.rb +3 -0
  336. data/lib/vulkan/window_surface.rb +13 -0
  337. data/lib/vulkan-ruby.rb +1 -0
  338. data/lib/vulkan.rb +91 -0
  339. data/tasks/examples.rake +29 -0
  340. data/tasks/fetch.rake +9 -0
  341. data/tasks/generate/commands.rake +51 -0
  342. data/tasks/generate/enums.rake +43 -0
  343. data/tasks/generate/extensions.rake +35 -0
  344. data/tasks/generate/structs.rake +117 -0
  345. data/tasks/generate/types.rake +91 -0
  346. data/tasks/generate.rake +2 -0
  347. data/tasks/helpers.rb +59 -0
  348. data/tasks/shaders.rake +8 -0
  349. data/vulkan-ruby.gemspec +45 -0
  350. 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