00:47 dwlsalmeida[d]: gfxstrand[d]: it seems like we've hardcoded a single queue in NVK?
00:47 dwlsalmeida[d]: you told me about the list_head containing the list of queues, which is implemented in common code, but still, we only ever create one queue
00:49 dwlsalmeida[d]: again, I am rebasing on top of main, what do you want to do here? should we keep the separate queues...or?
00:50 gfxstrand[d]: We should probably just make it support arbitrarily queues.
00:51 dwlsalmeida[d]: btw, isn't the current setup a bit detrimental to multithreading? IIUC you have to have a mutex around vkQueueSubmit?
00:51 gfxstrand[d]: Why?
00:51 dwlsalmeida[d]: so if you only have one queue, you can't record and submit commands from multiple threads?
00:51 dwlsalmeida[d]: or is that unrelated
00:51 dwlsalmeida[d]: or not the case lol
00:51 gfxstrand[d]: You can record on as many threads as you want
00:52 dwlsalmeida[d]: understood
00:53 gfxstrand[d]: Submitting isn't usually the bottleneck.
00:54 gfxstrand[d]: gfxstrand[d]: This mostly means dynamically allocating them and then destroying them all in `DestroyDevice()`
01:03 gfxstrand[d]: It really shouldn't be a big patch. I may have even written it at one point.
01:13 dwlsalmeida[d]: I assume this became nvkmd_nouveau_exec_ctx?
01:13 dwlsalmeida[d]: struct push_builder {
01:13 dwlsalmeida[d]: struct nvk_device *dev;
01:13 dwlsalmeida[d]: uint32_t max_push;
01:13 dwlsalmeida[d]: struct drm_nouveau_sync req_wait[NVK_PUSH_MAX_SYNCS];
01:13 dwlsalmeida[d]: struct drm_nouveau_sync req_sig[NVK_PUSH_MAX_SYNCS];
01:13 dwlsalmeida[d]: struct drm_nouveau_exec_push req_push[NVK_PUSH_MAX_PUSH];
01:13 dwlsalmeida[d]: struct drm_nouveau_exec req;
01:13 dwlsalmeida[d]: struct drm_nouveau_vm_bind vmbind;
01:13 dwlsalmeida[d]: struct drm_nouveau_vm_bind_op bind_ops[NVK_PUSH_MAX_BINDS];
01:13 dwlsalmeida[d]: bool is_vmbind;
01:13 dwlsalmeida[d]: };
01:19 dwlsalmeida[d]: yeah `nvk_queue_drm_nouveau.c` is just gone, so I assume it was all incorporated into the `kmd` stuff
01:19 dwlsalmeida[d]: good news is that the rebase is almost done lol
01:25 dwlsalmeida[d]: ctx->req_sig[ctx->req.sig_count++] = (struct drm_nouveau_sync) {
01:25 dwlsalmeida[d]: .flags = DRM_NOUVEAU_SYNC_SYNCOBJ,
01:25 dwlsalmeida[d]: .handle = ctx->syncobj,
01:25 dwlsalmeida[d]: };
01:25 dwlsalmeida[d]: result = nvkmd_nouveau_exec_ctx_flush(&ctx->base, log_obj);
01:25 dwlsalmeida[d]: if (result != VK_SUCCESS)
01:25 dwlsalmeida[d]: return result;
01:26 dwlsalmeida[d]: I assume this just means "signal `ctx->syncobj` once the job we are submitting is done"?
01:26 dwlsalmeida[d]: because vid_queue has its own `syncobj` too in that old commit
11:14 karolherbst[d]: gfxstrand[d]: I guess you aren't able to merge stuff anymore? And I guess the android MR is ready to go?
14:36 gfxstrand[d]: karolherbst[d]: Done. I mostly pinged you because Mauro isn't always the quickest to respond (he hacks on Mesa as one of many free-time projects) and I didn't know how long it would drag out.
14:39 karolherbst[d]: cool