• Home
  • Raw
  • Download

Lines Matching refs:instance

74 vn_instance_init_renderer_versions(struct vn_instance *instance)  in vn_instance_init_renderer_versions()  argument
78 vn_call_vkEnumerateInstanceVersion(instance, &instance_version); in vn_instance_init_renderer_versions()
81 vn_log(instance, "failed to enumerate renderer instance version"); in vn_instance_init_renderer_versions()
87 vn_log(instance, "unsupported renderer instance version %d.%d", in vn_instance_init_renderer_versions()
95 vn_log(instance, "renderer instance version %d.%d.%d", in vn_instance_init_renderer_versions()
102 instance->renderer_api_version = in vn_instance_init_renderer_versions()
103 MAX2(instance->base.base.app_info.api_version, VN_MIN_RENDERER_VERSION); in vn_instance_init_renderer_versions()
106 instance_version = MIN3(instance_version, instance->renderer_api_version, in vn_instance_init_renderer_versions()
107 instance->renderer_info.vk_xml_version); in vn_instance_init_renderer_versions()
110 instance->renderer_version = instance_version; in vn_instance_init_renderer_versions()
116 vn_instance_init_ring(struct vn_instance *instance) in vn_instance_init_ring() argument
118 const size_t buf_size = instance->experimental.largeRing in vn_instance_init_ring()
126 instance->ring.shmem = in vn_instance_init_ring()
127 vn_renderer_shmem_create(instance->renderer, layout.shmem_size); in vn_instance_init_ring()
128 if (!instance->ring.shmem) { in vn_instance_init_ring()
130 vn_log(instance, "failed to allocate/map ring shmem"); in vn_instance_init_ring()
134 mtx_init(&instance->ring.mutex, mtx_plain); in vn_instance_init_ring()
136 struct vn_ring *ring = &instance->ring.ring; in vn_instance_init_ring()
137 vn_ring_init(ring, instance->renderer, &layout, in vn_instance_init_ring()
138 instance->ring.shmem->mmap_ptr); in vn_instance_init_ring()
140 instance->ring.id = (uintptr_t)ring; in vn_instance_init_ring()
144 .resourceId = instance->ring.shmem->res_id, in vn_instance_init_ring()
159 vn_encode_vkCreateRingMESA(&local_enc, 0, instance->ring.id, &info); in vn_instance_init_ring()
160 vn_renderer_submit_simple(instance->renderer, create_ring_data, in vn_instance_init_ring()
163 vn_cs_encoder_init_indirect(&instance->ring.upload, instance, in vn_instance_init_ring()
166 mtx_init(&instance->ring.roundtrip_mutex, mtx_plain); in vn_instance_init_ring()
167 instance->ring.roundtrip_next = 1; in vn_instance_init_ring()
173 vn_instance_get_reply_shmem_locked(struct vn_instance *instance,
178 vn_instance_init_experimental_features(struct vn_instance *instance) in vn_instance_init_experimental_features() argument
180 if (instance->renderer_info.vk_mesa_venus_protocol_spec_version != in vn_instance_init_experimental_features()
183 vn_log(instance, "renderer supports no experimental features"); in vn_instance_init_experimental_features()
187 size_t struct_size = sizeof(instance->experimental); in vn_instance_init_experimental_features()
192 &struct_size, &instance->experimental); in vn_instance_init_experimental_features()
195 vn_instance_get_reply_shmem_locked(instance, reply_size, &reply_ptr); in vn_instance_init_experimental_features()
205 &instance->experimental); in vn_instance_init_experimental_features()
208 instance->renderer, local_data, vn_cs_encoder_get_len(&local_enc)); in vn_instance_init_experimental_features()
210 vn_renderer_shmem_unref(instance->renderer, reply_shmem); in vn_instance_init_experimental_features()
217 &reply_dec, &struct_size, &instance->experimental); in vn_instance_init_experimental_features()
218 vn_renderer_shmem_unref(instance->renderer, reply_shmem); in vn_instance_init_experimental_features()
221 vn_log(instance, in vn_instance_init_experimental_features()
226 instance->experimental.memoryResourceAllocationSize, in vn_instance_init_experimental_features()
227 instance->experimental.globalFencing, in vn_instance_init_experimental_features()
228 instance->experimental.largeRing); in vn_instance_init_experimental_features()
235 vn_instance_init_renderer(struct vn_instance *instance) in vn_instance_init_renderer() argument
237 const VkAllocationCallbacks *alloc = &instance->base.base.alloc; in vn_instance_init_renderer()
239 VkResult result = vn_renderer_create(instance, alloc, &instance->renderer); in vn_instance_init_renderer()
243 vn_renderer_get_info(instance->renderer, &instance->renderer_info); in vn_instance_init_renderer()
246 if (instance->renderer_info.wire_format_version != version) { in vn_instance_init_renderer()
248 vn_log(instance, "wire format version %d != %d", in vn_instance_init_renderer()
249 instance->renderer_info.wire_format_version, version); in vn_instance_init_renderer()
255 if (instance->renderer_info.vk_xml_version > version) in vn_instance_init_renderer()
256 instance->renderer_info.vk_xml_version = version; in vn_instance_init_renderer()
257 if (instance->renderer_info.vk_xml_version < VN_MIN_RENDERER_VERSION) { in vn_instance_init_renderer()
259 vn_log(instance, "vk xml version %d.%d.%d < %d.%d.%d", in vn_instance_init_renderer()
260 VK_VERSION_MAJOR(instance->renderer_info.vk_xml_version), in vn_instance_init_renderer()
261 VK_VERSION_MINOR(instance->renderer_info.vk_xml_version), in vn_instance_init_renderer()
262 VK_VERSION_PATCH(instance->renderer_info.vk_xml_version), in vn_instance_init_renderer()
271 if (instance->renderer_info.vk_ext_command_serialization_spec_version > in vn_instance_init_renderer()
273 instance->renderer_info.vk_ext_command_serialization_spec_version = in vn_instance_init_renderer()
278 if (instance->renderer_info.vk_mesa_venus_protocol_spec_version > in vn_instance_init_renderer()
280 instance->renderer_info.vk_mesa_venus_protocol_spec_version = version; in vn_instance_init_renderer()
284 vn_log(instance, "connected to renderer"); in vn_instance_init_renderer()
285 vn_log(instance, "wire format version %d", in vn_instance_init_renderer()
286 instance->renderer_info.wire_format_version); in vn_instance_init_renderer()
287 vn_log(instance, "vk xml version %d.%d.%d", in vn_instance_init_renderer()
288 VK_VERSION_MAJOR(instance->renderer_info.vk_xml_version), in vn_instance_init_renderer()
289 VK_VERSION_MINOR(instance->renderer_info.vk_xml_version), in vn_instance_init_renderer()
290 VK_VERSION_PATCH(instance->renderer_info.vk_xml_version)); in vn_instance_init_renderer()
292 instance, "VK_EXT_command_serialization spec version %d", in vn_instance_init_renderer()
293 instance->renderer_info.vk_ext_command_serialization_spec_version); in vn_instance_init_renderer()
294 vn_log(instance, "VK_MESA_venus_protocol spec version %d", in vn_instance_init_renderer()
295 instance->renderer_info.vk_mesa_venus_protocol_spec_version); in vn_instance_init_renderer()
302 vn_instance_submit_roundtrip(struct vn_instance *instance, in vn_instance_submit_roundtrip() argument
310 mtx_lock(&instance->ring.roundtrip_mutex); in vn_instance_submit_roundtrip()
311 const uint32_t seqno = instance->ring.roundtrip_next++; in vn_instance_submit_roundtrip()
312 vn_encode_vkWriteRingExtraMESA(&local_enc, 0, instance->ring.id, 0, seqno); in vn_instance_submit_roundtrip()
314 vn_renderer_submit_simple(instance->renderer, write_ring_extra_data, in vn_instance_submit_roundtrip()
316 mtx_unlock(&instance->ring.roundtrip_mutex); in vn_instance_submit_roundtrip()
323 vn_instance_wait_roundtrip(struct vn_instance *instance, in vn_instance_wait_roundtrip() argument
326 const struct vn_ring *ring = &instance->ring.ring; in vn_instance_wait_roundtrip()
459 vn_instance_submission_can_direct(const struct vn_instance *instance, in vn_instance_submission_can_direct() argument
462 const size_t threshold = instance->experimental.largeRing in vn_instance_submission_can_direct()
469 vn_instance_ring_cs_upload_locked(struct vn_instance *instance, in vn_instance_ring_cs_upload_locked() argument
477 struct vn_cs_encoder *upload = &instance->ring.upload; in vn_instance_ring_cs_upload_locked()
485 vn_instance_wait_roundtrip(instance, upload->current_buffer_roundtrip); in vn_instance_ring_cs_upload_locked()
491 vn_instance_ring_submit_locked(struct vn_instance *instance, in vn_instance_ring_submit_locked() argument
496 struct vn_ring *ring = &instance->ring.ring; in vn_instance_ring_submit_locked()
498 const bool direct = vn_instance_submission_can_direct(instance, cs); in vn_instance_ring_submit_locked()
500 cs = vn_instance_ring_cs_upload_locked(instance, cs); in vn_instance_ring_submit_locked()
518 vn_encode_vkNotifyRingMESA(&local_enc, 0, instance->ring.id, seqno, 0); in vn_instance_ring_submit_locked()
519 vn_renderer_submit_simple(instance->renderer, notify_ring_data, in vn_instance_ring_submit_locked()
532 vn_instance_ring_submit(struct vn_instance *instance, in vn_instance_ring_submit() argument
535 mtx_lock(&instance->ring.mutex); in vn_instance_ring_submit()
536 VkResult result = vn_instance_ring_submit_locked(instance, cs, NULL, NULL); in vn_instance_ring_submit()
537 mtx_unlock(&instance->ring.mutex); in vn_instance_ring_submit()
543 vn_instance_grow_reply_shmem_locked(struct vn_instance *instance, size_t size) in vn_instance_grow_reply_shmem_locked() argument
548 instance->reply.size ? instance->reply.size : min_shmem_size; in vn_instance_grow_reply_shmem_locked()
556 vn_renderer_shmem_create(instance->renderer, shmem_size); in vn_instance_grow_reply_shmem_locked()
560 if (instance->reply.shmem) in vn_instance_grow_reply_shmem_locked()
561 vn_renderer_shmem_unref(instance->renderer, instance->reply.shmem); in vn_instance_grow_reply_shmem_locked()
562 instance->reply.shmem = shmem; in vn_instance_grow_reply_shmem_locked()
563 instance->reply.size = shmem_size; in vn_instance_grow_reply_shmem_locked()
564 instance->reply.used = 0; in vn_instance_grow_reply_shmem_locked()
565 instance->reply.ptr = shmem->mmap_ptr; in vn_instance_grow_reply_shmem_locked()
571 vn_instance_get_reply_shmem_locked(struct vn_instance *instance, in vn_instance_get_reply_shmem_locked() argument
575 if (unlikely(instance->reply.used + size > instance->reply.size)) { in vn_instance_get_reply_shmem_locked()
576 if (!vn_instance_grow_reply_shmem_locked(instance, size)) in vn_instance_get_reply_shmem_locked()
584 .resourceId = instance->reply.shmem->res_id, in vn_instance_get_reply_shmem_locked()
585 .size = instance->reply.size, in vn_instance_get_reply_shmem_locked()
590 if (likely(instance->ring.id)) { in vn_instance_get_reply_shmem_locked()
591 vn_instance_roundtrip(instance); in vn_instance_get_reply_shmem_locked()
592 vn_instance_ring_submit_locked(instance, &local_enc, NULL, NULL); in vn_instance_get_reply_shmem_locked()
594 vn_renderer_submit_simple(instance->renderer, in vn_instance_get_reply_shmem_locked()
604 const size_t offset = instance->reply.used; in vn_instance_get_reply_shmem_locked()
608 if (likely(instance->ring.id)) { in vn_instance_get_reply_shmem_locked()
609 vn_instance_ring_submit_locked(instance, &local_enc, NULL, NULL); in vn_instance_get_reply_shmem_locked()
611 vn_renderer_submit_simple(instance->renderer, in vn_instance_get_reply_shmem_locked()
616 *ptr = instance->reply.ptr + offset; in vn_instance_get_reply_shmem_locked()
617 instance->reply.used += size; in vn_instance_get_reply_shmem_locked()
619 return vn_renderer_shmem_ref(instance->renderer, instance->reply.shmem); in vn_instance_get_reply_shmem_locked()
623 vn_instance_submit_command(struct vn_instance *instance, in vn_instance_submit_command() argument
629 mtx_lock(&instance->ring.mutex); in vn_instance_submit_command()
637 instance, submit->reply_size, &reply_ptr); in vn_instance_submit_command()
644 instance, &submit->command, submit->reply_shmem, &ring_seqno); in vn_instance_submit_command()
646 mtx_unlock(&instance->ring.mutex); in vn_instance_submit_command()
651 vn_ring_wait(&instance->ring.ring, ring_seqno); in vn_instance_submit_command()
656 instance->ring.command_dropped++; in vn_instance_submit_command()
657 mtx_unlock(&instance->ring.mutex); in vn_instance_submit_command()
696 struct vn_instance *instance; in vn_CreateInstance() local
702 instance = vk_zalloc(alloc, sizeof(*instance), VN_DEFAULT_ALIGN, in vn_CreateInstance()
704 if (!instance) in vn_CreateInstance()
712 result = vn_instance_base_init(&instance->base, in vn_CreateInstance()
716 vk_free(alloc, instance); in vn_CreateInstance()
720 mtx_init(&instance->physical_device.mutex, mtx_plain); in vn_CreateInstance()
723 instance->base.base.app_info.api_version)) { in vn_CreateInstance()
733 result = vn_instance_init_renderer(instance); in vn_CreateInstance()
737 result = vn_instance_init_experimental_features(instance); in vn_CreateInstance()
741 result = vn_instance_init_ring(instance); in vn_CreateInstance()
745 result = vn_instance_init_renderer_versions(instance); in vn_CreateInstance()
755 if (instance->base.base.app_info.api_version < in vn_CreateInstance()
756 instance->renderer_api_version) { in vn_CreateInstance()
759 local_app_info.apiVersion = instance->renderer_api_version; in vn_CreateInstance()
763 .apiVersion = instance->renderer_api_version, in vn_CreateInstance()
769 VkInstance instance_handle = vn_instance_to_handle(instance); in vn_CreateInstance()
771 vn_call_vkCreateInstance(instance, pCreateInfo, NULL, &instance_handle); in vn_CreateInstance()
775 driParseOptionInfo(&instance->available_dri_options, vn_dri_options, in vn_CreateInstance()
777 driParseConfigFiles(&instance->dri_options, in vn_CreateInstance()
778 &instance->available_dri_options, 0, "venus", NULL, NULL, in vn_CreateInstance()
779 instance->base.base.app_info.app_name, in vn_CreateInstance()
780 instance->base.base.app_info.app_version, in vn_CreateInstance()
781 instance->base.base.app_info.engine_name, in vn_CreateInstance()
782 instance->base.base.app_info.engine_version); in vn_CreateInstance()
789 if (instance->reply.shmem) in vn_CreateInstance()
790 vn_renderer_shmem_unref(instance->renderer, instance->reply.shmem); in vn_CreateInstance()
792 if (instance->ring.shmem) { in vn_CreateInstance()
796 vn_encode_vkDestroyRingMESA(&local_enc, 0, instance->ring.id); in vn_CreateInstance()
797 vn_renderer_submit_simple(instance->renderer, destroy_ring_data, in vn_CreateInstance()
800 mtx_destroy(&instance->ring.roundtrip_mutex); in vn_CreateInstance()
801 vn_cs_encoder_fini(&instance->ring.upload); in vn_CreateInstance()
802 vn_renderer_shmem_unref(instance->renderer, instance->ring.shmem); in vn_CreateInstance()
803 vn_ring_fini(&instance->ring.ring); in vn_CreateInstance()
804 mtx_destroy(&instance->ring.mutex); in vn_CreateInstance()
807 if (instance->renderer) in vn_CreateInstance()
808 vn_renderer_destroy(instance->renderer, alloc); in vn_CreateInstance()
810 mtx_destroy(&instance->physical_device.mutex); in vn_CreateInstance()
812 vn_instance_base_fini(&instance->base); in vn_CreateInstance()
813 vk_free(alloc, instance); in vn_CreateInstance()
822 struct vn_instance *instance = vn_instance_from_handle(_instance); in vn_DestroyInstance() local
824 pAllocator ? pAllocator : &instance->base.base.alloc; in vn_DestroyInstance()
826 if (!instance) in vn_DestroyInstance()
829 if (instance->physical_device.initialized) { in vn_DestroyInstance()
830 for (uint32_t i = 0; i < instance->physical_device.device_count; i++) in vn_DestroyInstance()
831 vn_physical_device_fini(&instance->physical_device.devices[i]); in vn_DestroyInstance()
832 vk_free(alloc, instance->physical_device.devices); in vn_DestroyInstance()
833 vk_free(alloc, instance->physical_device.groups); in vn_DestroyInstance()
835 mtx_destroy(&instance->physical_device.mutex); in vn_DestroyInstance()
837 vn_call_vkDestroyInstance(instance, _instance, NULL); in vn_DestroyInstance()
839 vn_renderer_shmem_unref(instance->renderer, instance->reply.shmem); in vn_DestroyInstance()
844 vn_encode_vkDestroyRingMESA(&local_enc, 0, instance->ring.id); in vn_DestroyInstance()
845 vn_renderer_submit_simple(instance->renderer, destroy_ring_data, in vn_DestroyInstance()
848 mtx_destroy(&instance->ring.roundtrip_mutex); in vn_DestroyInstance()
849 vn_cs_encoder_fini(&instance->ring.upload); in vn_DestroyInstance()
850 vn_ring_fini(&instance->ring.ring); in vn_DestroyInstance()
851 mtx_destroy(&instance->ring.mutex); in vn_DestroyInstance()
852 vn_renderer_shmem_unref(instance->renderer, instance->ring.shmem); in vn_DestroyInstance()
854 vn_renderer_destroy(instance->renderer, alloc); in vn_DestroyInstance()
856 driDestroyOptionCache(&instance->dri_options); in vn_DestroyInstance()
857 driDestroyOptionInfo(&instance->available_dri_options); in vn_DestroyInstance()
859 vn_instance_base_fini(&instance->base); in vn_DestroyInstance()
860 vk_free(alloc, instance); in vn_DestroyInstance()
866 struct vn_instance *instance = vn_instance_from_handle(_instance); in vn_GetInstanceProcAddr() local
867 return vk_instance_get_proc_addr(&instance->base.base, in vn_GetInstanceProcAddr()