We don't know how many descriptors will actually be valid, which could
lead to preloading descriptors out-of-bounds of the descriptor size.
This was leading to GPU hangs on some tests once we enabled inline
uniforms.
Fixes:
d9fcf5de55a ("turnip: Enable nonuniform descriptor indexing")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17960>
*/
VkShaderStageFlags stages = pipeline->active_stages & binding->shader_stages;
unsigned count = binding->array_size;
+
+ /* If this is a variable-count descriptor, then the array_size is an
+ * upper bound on the size, but we don't know how many descriptors
+ * will actually be used. Therefore we can't pre-load them here.
+ */
+ if (j == set_layout->binding_count - 1 &&
+ set_layout->has_variable_descriptors)
+ continue;
+
if (count == 0 || stages == 0)
continue;
switch (binding->type) {