Class: Vulkan::Queue
- Inherits:
-
Object
- Object
- Vulkan::Queue
- Includes:
- Checks, Conversions
- Defined in:
- lib/vulkan/queue.rb
Constant Summary
Constants included from Conversions
Conversions::ACCESS_MASK_BITS, Conversions::BORDER_COLORS, Conversions::BUFFER_USAGE_BITS, Conversions::COMPARE_OPS, Conversions::DEPENDENCY_FLAG_BITS, Conversions::DESCRIPTOR_TYPES, Conversions::DYNAMIC_STATES, Conversions::FILTERS, Conversions::FORMAT_FEATURE_BITS, Conversions::IMAGE_ASPECT_BITS, Conversions::IMAGE_CREATE_BITS, Conversions::IMAGE_FORMATS, Conversions::IMAGE_TILING, Conversions::IMAGE_TYPES, Conversions::IMAGE_USAGE_BITS, Conversions::MEMORY_PROPERTIES, Conversions::PIPELINE_STAGE_BITS, Conversions::PRESENT_MODES, Conversions::SAMPLER_ADDRESS_MODES, Conversions::SAMPLER_MIPMAP_MODES, Conversions::SHADER_STAGE_BITS, Conversions::SHARING_MODES, Conversions::SURFACE_TRANSFORMS, Conversions::VERTEX_INPUT_RATES
Instance Attribute Summary collapse
-
#index ⇒ Object
readonly
Returns the value of attribute index.
-
#priority ⇒ Object
readonly
Returns the value of attribute priority.
Instance Method Summary collapse
-
#initialize(vk, handle, priority:, index:) ⇒ Queue
constructor
A new instance of Queue.
- #present(swapchains:, image_indices:, wait_semaphores: []) ⇒ Object
- #submit(command_buffers, wait_semaphores: [], wait_stages: [], signal_semaphores: [], fence: nil) ⇒ Object
- #submit_infos(submit_infos, fence = nil) ⇒ Object
- #to_ptr ⇒ Object
- #wait_until_idle ⇒ Object
Methods included from Conversions
#array_of_pointers, #array_of_structures, #array_of_uint32s, #bool_to_vk, #buffer_usage_flags_to_syms, #const_to_symbol, #cstr_to_rbstr, #flags_to_symbols, #flags_to_syms, #num_to_samples, #present_mode_to_sym, #queue_family_to_index, #struct_to_hash, #sym_to_blend_factor, #sym_to_blend_op, #sym_to_border_color, #sym_to_color_component_bit, #sym_to_command_buffer_level, #sym_to_command_buffer_usage, #sym_to_compare_op, #sym_to_cull_mode, #sym_to_descriptor_type, #sym_to_dynamic_state, #sym_to_filter, #sym_to_front_face, #sym_to_image_format, #sym_to_image_layout, #sym_to_image_tiling, #sym_to_image_type, #sym_to_index_type, #sym_to_load_op, #sym_to_pipeline_bind_point, #sym_to_polygon_mode, #sym_to_present_mode, #sym_to_sampler_address_mode, #sym_to_sampler_mipmap_mode, #sym_to_samples, #sym_to_sharing_mode, #sym_to_store_op, #sym_to_subpass_contents, #sym_to_topology, #sym_to_val, #sym_to_vertex_input_rate, #syms_to_access_mask, #syms_to_buffer_usage_flags, #syms_to_dependency_flags, #syms_to_descriptor_set_layout_type_flags, #syms_to_flags, #syms_to_format_feature_flags, #syms_to_image_aspect_flags, #syms_to_image_create_flags, #syms_to_image_usage_flags, #syms_to_memory_properties, #syms_to_pipeline_stage_flags, #syms_to_shader_stage_flags, #syms_to_surface_transforms, #vk_make_version, #vk_parse_version
Methods included from Checks
Constructor Details
#initialize(vk, handle, priority:, index:) ⇒ Queue
Returns a new instance of Queue.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/vulkan/queue.rb', line 9 def initialize(vk, handle, priority:, index:) @vk = vk @handle = handle @priority = priority @index = index # pointers used and reused during queue submit and presentment, to avoid # unnecessary GC @wait_semaphores_buffers = { 0 => nil } @wait_stages_buffers = { 0 => nil } @signal_semaphores_buffers = { 0 => nil } @command_buffers_buffers = { 0 => nil } @submit_infos = { 0 => nil, 1 => Vulkan.struct("infos[1]" => VkSubmitInfo).malloc } @submit_infos[1].infos[0].sType = VK_STRUCTURE_TYPE_SUBMIT_INFO @image_indices_buffers = { 0 => nil } @swapchains_buffers = { 0 => nil } @present_info = VkPresentInfoKHR.malloc @present_info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR end |
Instance Attribute Details
#index ⇒ Object (readonly)
Returns the value of attribute index.
7 8 9 |
# File 'lib/vulkan/queue.rb', line 7 def index @index end |
#priority ⇒ Object (readonly)
Returns the value of attribute priority.
6 7 8 |
# File 'lib/vulkan/queue.rb', line 6 def priority @priority end |
Instance Method Details
#present(swapchains:, image_indices:, wait_semaphores: []) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/vulkan/queue.rb', line 68 def present(swapchains:, image_indices:, wait_semaphores: []) raise ArgumentError, "swapchains and image_indices must have same sizes" unless swapchains.size == image_indices.size wait_semaphores_p = @wait_semaphores_buffers[wait_semaphores.size] ||= Fiddle::Pointer.malloc(wait_semaphores.size * Fiddle::SIZEOF_VOIDP) array_of_pointers(wait_semaphores, wait_semaphores_p) image_indices_p = @image_indices_buffers[image_indices.size] ||= Vulkan.struct(["uint32_t indices[#{image_indices.size}]"]).malloc data = image_indices.pack("I*") image_indices_p[0, data.size] = data swapchains_p = @swapchains_buffers[swapchains.size] ||= Fiddle::Pointer.malloc(swapchains.size * Fiddle::SIZEOF_VOIDP) array_of_pointers(swapchains, swapchains_p) @present_info.waitSemaphoreCount = wait_semaphores.size @present_info.pWaitSemaphores = wait_semaphores_p @present_info.swapchainCount = swapchains.size @present_info.pSwapchains = swapchains_p @present_info.pImageIndices = image_indices_p @present_info.pResults = nil check_result @vk.vkQueuePresentKHR(to_ptr, @present_info) end |
#submit(command_buffers, wait_semaphores: [], wait_stages: [], signal_semaphores: [], fence: nil) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/vulkan/queue.rb', line 43 def submit(command_buffers, wait_semaphores: [], wait_stages: [], signal_semaphores: [], fence: nil) wait_stages_p = @wait_stages_buffers[wait_stages.size] ||= Vulkan.struct(["VkPipelineStageFlags stages[#{wait_stages.size}]"]).malloc wait_stages.each_with_index { |stage, index| wait_stages_p.stages[index] = stage } wait_semaphores_p = @wait_semaphores_buffers[wait_semaphores.size] ||= Fiddle::Pointer.malloc(wait_semaphores.size * Fiddle::SIZEOF_VOIDP) array_of_pointers(wait_semaphores, wait_semaphores_p) signal_semaphores_p = @signal_semaphores_buffers[signal_semaphores.size] ||= Fiddle::Pointer.malloc(signal_semaphores.size * Fiddle::SIZEOF_VOIDP) array_of_pointers(signal_semaphores, signal_semaphores_p) command_buffers_p = @command_buffers_buffers[command_buffers.size] ||= Fiddle::Pointer.malloc(command_buffers.size * Fiddle::SIZEOF_VOIDP) array_of_pointers(command_buffers, command_buffers_p) submit_info = @submit_infos[1].infos[0] submit_info.waitSemaphoreCount = wait_semaphores.size submit_info.pWaitSemaphores = wait_semaphores_p submit_info.pWaitDstStageMask = wait_stages_p submit_info.commandBufferCount = command_buffers.size submit_info.pCommandBuffers = command_buffers_p submit_info.signalSemaphoreCount = signal_semaphores.size submit_info.pSignalSemaphores = signal_semaphores_p submit_infos(@submit_infos[1].infos, fence) end |
#submit_infos(submit_infos, fence = nil) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/vulkan/queue.rb', line 29 def submit_infos(submit_infos, fence = nil) submit_infos_p = @submit_infos[submit_infos.size] ||= Vulkan.struct("infos[#{submit_infos.size}]" => VkSubmitInfo).malloc submit_infos.each_with_index do |info, i| next if submit_infos_p.infos[i] == info submit_infos_p.infos[i].copy_from(info) end check_result @vk.vkQueueSubmit(to_ptr, submit_infos.size, submit_infos_p, fence) end |
#to_ptr ⇒ Object
90 91 92 |
# File 'lib/vulkan/queue.rb', line 90 def to_ptr @handle end |
#wait_until_idle ⇒ Object
39 40 41 |
# File 'lib/vulkan/queue.rb', line 39 def wait_until_idle @vk.vkQueueWaitIdle(to_ptr) end |