Lines Matching refs:inst
44 void loader_init_dispatch_dev_ext_entry(struct loader_instance *inst, struct loader_device *dev, uint32_t idx, const char *funcName)
52 for (struct loader_icd_term *icd_term = inst->icd_terms; icd_term != NULL; icd_term = icd_term->next) {
65 void loader_init_dispatch_dev_ext(struct loader_instance *inst, struct loader_device *dev) {
67 if (inst->dev_ext_disp_functions[i] != NULL)
68 loader_init_dispatch_dev_ext_entry(inst, dev, i, inst->dev_ext_disp_functions[i]);
72 bool loader_check_icds_for_dev_ext_address(struct loader_instance *inst, const char *funcName) {
74 icd_term = inst->icd_terms;
87 bool loader_check_layer_list_for_dev_ext_address(struct loader_instance *inst, const char *funcName) {
89 for (uint32_t layer = 0; layer < inst->expanded_activated_layer_list.count; ++layer) {
92 &(inst->expanded_activated_layer_list.list[layer]->device_extension_list);
105 if (inst->expanded_activated_layer_list.count > 0) {
106 const struct loader_layer_functions *const functions = &(inst->expanded_activated_layer_list.list[0]->functions);
108 return NULL != functions->get_instance_proc_addr((VkInstance)inst->instance, funcName);
115 void loader_free_dev_ext_table(struct loader_instance *inst) {
116 for (uint32_t i = 0; i < inst->dev_ext_disp_function_count; i++) {
117 loader_instance_heap_free(inst, inst->dev_ext_disp_functions[i]);
119 memset(inst->dev_ext_disp_functions, 0, sizeof(inst->dev_ext_disp_functions));
139 void *loader_dev_ext_gpa_impl(struct loader_instance *inst, const char *funcName, bool is_tramp) {
142 for (uint32_t i = 0; i < inst->dev_ext_disp_function_count; i++) {
143 if (inst->dev_ext_disp_functions[i] && !strcmp(inst->dev_ext_disp_functions[i], funcName))
148 if (!loader_check_icds_for_dev_ext_address(inst, funcName)) {
149 if (!is_tramp || !loader_check_layer_list_for_dev_ext_address(inst, funcName)) {
154 if (inst->dev_ext_disp_function_count >= MAX_NUM_UNKNOWN_EXTS) {
155 loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_dev_ext_gpa: Exhausted the unknown device function array!");
161 inst->dev_ext_disp_functions[inst->dev_ext_disp_function_count] =
162 (char *)loader_instance_heap_alloc(inst, funcName_len, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
163 if (NULL == inst->dev_ext_disp_functions[inst->dev_ext_disp_function_count]) {
167 loader_strncpy(inst->dev_ext_disp_functions[inst->dev_ext_disp_function_count], funcName_len, funcName, funcName_len);
169 loader_init_dispatch_dev_ext_entry(inst, NULL, inst->dev_ext_disp_function_count, funcName);
170 void *out_function = loader_get_dev_ext_trampoline(inst->dev_ext_disp_function_count);
171 inst->dev_ext_disp_function_count++;
175 void *loader_dev_ext_gpa_tramp(struct loader_instance *inst, const char *funcName) {
176 return loader_dev_ext_gpa_impl(inst, funcName, true);
179 void *loader_dev_ext_gpa_term(struct loader_instance *inst, const char *funcName) {
180 return loader_dev_ext_gpa_impl(inst, funcName, false);
185 bool loader_check_icds_for_phys_dev_ext_address(struct loader_instance *inst, const char *funcName) {
187 icd_term = inst->icd_terms;
200 bool loader_check_layer_list_for_phys_dev_ext_address(struct loader_instance *inst, const char *funcName) {
201 for (uint32_t layer = 0; layer < inst->expanded_activated_layer_list.count; layer++) {
202 struct loader_layer_properties *layer_prop_list = inst->expanded_activated_layer_list.list[layer];
209 return NULL != functions->get_physical_device_proc_addr((VkInstance)inst->instance, funcName);
216 void loader_free_phys_dev_ext_table(struct loader_instance *inst) {
218 loader_instance_heap_free(inst, inst->phys_dev_ext_disp_functions[i]);
220 memset(inst->phys_dev_ext_disp_functions, 0, sizeof(inst->phys_dev_ext_disp_functions));
235 void *loader_phys_dev_ext_gpa_impl(struct loader_instance *inst, const char *funcName, bool is_tramp) {
236 assert(NULL != inst);
239 if (!loader_check_icds_for_phys_dev_ext_address(inst, funcName)) {
242 if (!is_tramp || !loader_check_layer_list_for_phys_dev_ext_address(inst, funcName)) {
251 for (uint32_t i = 0; i < inst->phys_dev_ext_disp_function_count; i++) {
252 if (inst->phys_dev_ext_disp_functions[i] && !strcmp(inst->phys_dev_ext_disp_functions[i], funcName)) {
261 if (inst->phys_dev_ext_disp_function_count >= MAX_NUM_UNKNOWN_EXTS) {
262 loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0,
267 loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0,
269 inst->phys_dev_ext_disp_function_count);
273 inst->phys_dev_ext_disp_functions[inst->phys_dev_ext_disp_function_count] =
274 (char *)loader_instance_heap_alloc(inst, funcName_len, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
275 if (NULL == inst->phys_dev_ext_disp_functions[inst->phys_dev_ext_disp_function_count]) {
279 loader_strncpy(inst->phys_dev_ext_disp_functions[inst->phys_dev_ext_disp_function_count], funcName_len, funcName,
282 new_function_index = inst->phys_dev_ext_disp_function_count;
284 inst->phys_dev_ext_disp_function_count++;
288 struct loader_icd_term *icd_term = inst->icd_terms;
297 inst->disp->phys_dev_ext[new_function_index] = loader_get_phys_dev_ext_termin(new_function_index);
299 loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "loader_phys_dev_ext_gpa: Driver %s returned ptr %p for %s",
300 icd_term->scanned_icd->lib_name, inst->disp->phys_dev_ext[new_function_index], funcName);
312 for (uint32_t i = 0; i < inst->expanded_activated_layer_list.count; i++) {
313 struct loader_layer_properties *layer_prop = inst->expanded_activated_layer_list.list[i];
316 (PFN_PhysDevExt)layer_prop->functions.get_physical_device_proc_addr(inst->instance, funcName);
318 inst->disp->phys_dev_ext[new_function_index] = layer_ret_function;
319 loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "loader_phys_dev_ext_gpa: Layer %s returned ptr %p for %s",
320 layer_prop->info.layerName, inst->disp->phys_dev_ext[new_function_index], funcName);
334 void *loader_phys_dev_ext_gpa_tramp(struct loader_instance *inst, const char *funcName) {
335 return loader_phys_dev_ext_gpa_impl(inst, funcName, true);
337 void *loader_phys_dev_ext_gpa_term(struct loader_instance *inst, const char *funcName) {
338 return loader_phys_dev_ext_gpa_impl(inst, funcName, false);