175
vn_instance_init_experimental_features(struct vn_instance *instance)
177
if (instance->renderer->info.vk_mesa_venus_protocol_spec_version !=
180
vn_log(instance, "renderer supports no experimental features");
184
size_t struct_size = sizeof(instance->experimental);
185
vn_call_vkGetVenusExperimentalFeatureData100000MESA(
186
instance, &struct_size, &instance->experimental);
188
VkVenusExperimentalFeatures100000MESA *exp_feats = &instance->experimental;
190
/* if renderer supports multiple_timelines, the driver will use it and
191
* globalFencing support can be assumed.
193
if (instance->renderer->info.supports_multiple_timelines)
194
exp_feats->globalFencing = VK_TRUE;
196
if (!exp_feats->memoryResourceAllocationSize ||
197
!exp_feats->globalFencing || !exp_feats->largeRing ||
198
!exp_feats->syncFdFencing || !exp_feats->asyncRoundtrip ||
199
!exp_feats->ringMonitoring)
200
return VK_ERROR_INITIALIZATION_FAILED;
202
if (VN_DEBUG(INIT)) {
204
"VkVenusExperimentalFeatures100000MESA is as below:"
205
"\n\tmemoryResourceAllocationSize = %u"
206
"\n\tglobalFencing = %u"
208
"\n\tsyncFdFencing = %u"
209
"\n\tasyncRoundtrip = %u"
210
"\n\tringMonitoring = %u",
211
instance->experimental.memoryResourceAllocationSize,
212
instance->experimental.globalFencing,
213
instance->experimental.largeRing,
214
instance->experimental.syncFdFencing,
215
instance->experimental.asyncRoundtrip,
216
instance->experimental.ringMonitoring);
223
176
vn_instance_init_renderer(struct vn_instance *instance)
225
178
const VkAllocationCallbacks *alloc = &instance->base.base.alloc;
299
252
mtx_lock(&instance->ring.roundtrip_mutex);
300
253
const uint64_t seqno = instance->ring.roundtrip_next++;
301
vn_encode_vkSubmitVirtqueueSeqno100000MESA(&local_enc, 0,
302
instance->ring.id, seqno);
254
vn_encode_vkSubmitVirtqueueSeqnoMESA(&local_enc, 0, instance->ring.id,
303
256
VkResult result = vn_renderer_submit_simple(
304
257
instance->renderer, local_data, vn_cs_encoder_get_len(&local_enc));
305
258
mtx_unlock(&instance->ring.roundtrip_mutex);
312
265
vn_instance_wait_roundtrip(struct vn_instance *instance,
313
266
uint64_t roundtrip_seqno)
315
vn_async_vkWaitVirtqueueSeqno100000MESA(instance, roundtrip_seqno);
268
vn_async_vkWaitVirtqueueSeqnoMESA(instance, roundtrip_seqno);
318
271
struct vn_instance_submission {
696
649
if (result != VK_SUCCESS)
699
result = vn_instance_init_experimental_features(instance);
700
if (result != VK_SUCCESS)
703
652
result = vn_instance_init_renderer_versions(instance);
704
653
if (result != VK_SUCCESS)