Trouble with device generated commands in driver 383.12

Hello,

so, again, i found an issue with DGC. After testing a bunch it boils down to this: Iff a pipeline is created WITHOUT dynamic sample locations from VK_EXT_sample_locations, then adding that pipeline to a DGC table with vkRegisterObjectsNVX causes a VK_ERROR_OUT_OF_DEVICE_MEMORY. So both not using custom locations (by setting sampleLocationsEnable to false or not supplying VkPipelineSampleLocationsStateCreateInfoEXT at all) or using fixed locations causes an error.
On the other hand, with dynamic locations, DGC works just fine, at least in my immediate mode case.

Interestingly, all of this also applies to pipelines that do not use multisampling at all. This suggests dynamic sample locations are the default, and the static or default (if the extension is not used) locations are now baked into the pipeline, but the DGC code missed the update.

Not a game breaker, since simply supplying every pipeline with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT and setting the locations once a frame is a workaround, but finding this was a bit tricky. Still hope you can find and fix it though ;)

As an afterthought, i have not used any of the other extensions that directly extend the pipeline create code, but if they do something similar to now not using dynamic sample locations, they may cause something similar.

Regards

Thanks for your bug report. Sorry you’re having this issue.

Could you give us some more information to easily reproduce this locally? You don’t need to provide the whole app, perhaps just a few lines of Vulkan that shows the issue. I can kinda reconstruct it from your description, but I want to be sure.

Thanks!

Hello,

yes no problem. Like in my other reports, my system is a Win7 Professional SP1 x64 with a GTX 970. You should be able to reproduce it like this:

  1. Init vulkan with the VK_NVX_device_generated_commands extension, using VK_EXT_sample_locations is NOT required
  2. Create a graphics pipeline without VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
  3. Create a VkObjectTableNVX which has space for this pipeline, including maxPipelineLayouts
  4. Add the pipeline to the object table via vkRegisterObjectsNVX
  5. The call to vkRegisterObjectsNVX fails with VK_ERROR_OUT_OF_DEVICE_MEMORY

This is basically how i can reliably reproduce the bug in my app, but there is a lot of multithreading and other things going on, so if you cannot reproduce it with those steps i can probably write a crude repro app.

Regards

Thanks for the additional details. We have identified the bug and will put the fix in an up coming driver.

Regards

This issue should be resolved with our latest Vulkan developer driver:

Let us know if you’re still seeing an issue.

Thanks!

I can confirm that the problem is fixed in driver 383.18. Thank you for solving it this fast!

Regards

Awesome, thanks for letting us know.

Piers