~mmach/netext73/mesa-ryzen

« back to all changes in this revision

Viewing changes to src/virtio/vulkan/vn_instance.c

  • Committer: mmach
  • Date: 2023-11-02 21:31:35 UTC
  • Revision ID: netbit73@gmail.com-20231102213135-18d4tzh7tj0uz752
2023-11-02 22:11:57

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
#include "vn_physical_device.h"
20
20
#include "vn_renderer.h"
21
21
 
22
 
#define VN_INSTANCE_RING_SIZE (64 * 1024)
 
22
#define VN_INSTANCE_RING_SIZE (128 * 1024)
23
23
#define VN_INSTANCE_RING_DIRECT_THRESHOLD (VN_INSTANCE_RING_SIZE / 16)
24
24
 
25
25
/*
63
63
   DRI_CONF_SECTION_END
64
64
   DRI_CONF_SECTION_DEBUG
65
65
      DRI_CONF_VK_WSI_FORCE_BGRA8_UNORM_FIRST(false)
 
66
      DRI_CONF_VK_WSI_FORCE_SWAPCHAIN_TO_CURRENT_EXTENT(false)
66
67
   DRI_CONF_SECTION_END
67
68
   /* clang-format on */
68
69
};
172
173
}
173
174
 
174
175
static VkResult
175
 
vn_instance_init_experimental_features(struct vn_instance *instance)
176
 
{
177
 
   if (instance->renderer->info.vk_mesa_venus_protocol_spec_version !=
178
 
       100000) {
179
 
      if (VN_DEBUG(INIT))
180
 
         vn_log(instance, "renderer supports no experimental features");
181
 
      return VK_SUCCESS;
182
 
   }
183
 
 
184
 
   size_t struct_size = sizeof(instance->experimental);
185
 
   vn_call_vkGetVenusExperimentalFeatureData100000MESA(
186
 
      instance, &struct_size, &instance->experimental);
187
 
 
188
 
   VkVenusExperimentalFeatures100000MESA *exp_feats = &instance->experimental;
189
 
 
190
 
   /* if renderer supports multiple_timelines, the driver will use it and
191
 
    * globalFencing support can be assumed.
192
 
    */
193
 
   if (instance->renderer->info.supports_multiple_timelines)
194
 
      exp_feats->globalFencing = VK_TRUE;
195
 
 
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;
201
 
 
202
 
   if (VN_DEBUG(INIT)) {
203
 
      vn_log(instance,
204
 
             "VkVenusExperimentalFeatures100000MESA is as below:"
205
 
             "\n\tmemoryResourceAllocationSize = %u"
206
 
             "\n\tglobalFencing = %u"
207
 
             "\n\tlargeRing = %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);
217
 
   }
218
 
 
219
 
   return VK_SUCCESS;
220
 
}
221
 
 
222
 
static VkResult
223
176
vn_instance_init_renderer(struct vn_instance *instance)
224
177
{
225
178
   const VkAllocationCallbacks *alloc = &instance->base.base.alloc;
298
251
 
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,
 
255
                                        seqno);
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)
314
267
{
315
 
   vn_async_vkWaitVirtqueueSeqno100000MESA(instance, roundtrip_seqno);
 
268
   vn_async_vkWaitVirtqueueSeqnoMESA(instance, roundtrip_seqno);
316
269
}
317
270
 
318
271
struct vn_instance_submission {
696
649
   if (result != VK_SUCCESS)
697
650
      goto fail;
698
651
 
699
 
   result = vn_instance_init_experimental_features(instance);
700
 
   if (result != VK_SUCCESS)
701
 
      goto fail;
702
 
 
703
652
   result = vn_instance_init_renderer_versions(instance);
704
653
   if (result != VK_SUCCESS)
705
654
      goto fail;