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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user