tu: Don't preload variable-count descriptors

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: d9fcf5de55 ("turnip: Enable nonuniform descriptor indexing")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17960>
This commit is contained in:
Connor Abbott
2022-07-26 12:20:16 +02:00
committed by Marge Bot
parent 05266333a0
commit 15f3274ea6
+9
View File
@@ -150,6 +150,15 @@ tu6_emit_load_state(struct tu_pipeline *pipeline,
*/
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) {