mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 13:28:06 +02:00
radv: fix GPU hangs with 32-bit indirect descriptors
LLVM 6 isn't affected. Fixes GPU hangs with new CTS: dEQP-VK.binding_model.descriptorset_random.* CC: 18.2 <mesa-stable@lists.freedesktop.org> Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
aa30205929
commit
063264db5b
1 changed files with 5 additions and 3 deletions
|
|
@ -1657,7 +1657,8 @@ radv_flush_indirect_descriptor_sets(struct radv_cmd_buffer *cmd_buffer,
|
|||
{
|
||||
struct radv_descriptor_state *descriptors_state =
|
||||
radv_get_descriptors_state(cmd_buffer, bind_point);
|
||||
uint32_t size = MAX_SETS * 2 * 4;
|
||||
uint8_t ptr_size = HAVE_32BIT_POINTERS ? 1 : 2;
|
||||
uint32_t size = MAX_SETS * 4 * ptr_size;
|
||||
uint32_t offset;
|
||||
void *ptr;
|
||||
|
||||
|
|
@ -1666,13 +1667,14 @@ radv_flush_indirect_descriptor_sets(struct radv_cmd_buffer *cmd_buffer,
|
|||
return;
|
||||
|
||||
for (unsigned i = 0; i < MAX_SETS; i++) {
|
||||
uint32_t *uptr = ((uint32_t *)ptr) + i * 2;
|
||||
uint32_t *uptr = ((uint32_t *)ptr) + i * ptr_size;
|
||||
uint64_t set_va = 0;
|
||||
struct radv_descriptor_set *set = descriptors_state->sets[i];
|
||||
if (descriptors_state->valid & (1u << i))
|
||||
set_va = set->va;
|
||||
uptr[0] = set_va & 0xffffffff;
|
||||
uptr[1] = set_va >> 32;
|
||||
if (ptr_size == 2)
|
||||
uptr[1] = set_va >> 32;
|
||||
}
|
||||
|
||||
uint64_t va = radv_buffer_get_va(cmd_buffer->upload.upload_bo);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue