mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
radv: fix null descriptor for dynamic buffers
Fixes: c1ef225d18 "radv: handle NULL descriptors"
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6772>
This commit is contained in:
parent
090fc593b4
commit
ec13622ff4
2 changed files with 22 additions and 15 deletions
|
|
@ -3946,22 +3946,27 @@ void radv_CmdBindDescriptorSets(
|
|||
assert(dyn_idx < dynamicOffsetCount);
|
||||
|
||||
struct radv_descriptor_range *range = set->dynamic_descriptors + j;
|
||||
uint64_t va = range->va + pDynamicOffsets[dyn_idx];
|
||||
dst[0] = va;
|
||||
dst[1] = S_008F04_BASE_ADDRESS_HI(va >> 32);
|
||||
dst[2] = no_dynamic_bounds ? 0xffffffffu : range->size;
|
||||
dst[3] = S_008F0C_DST_SEL_X(V_008F0C_SQ_SEL_X) |
|
||||
S_008F0C_DST_SEL_Y(V_008F0C_SQ_SEL_Y) |
|
||||
S_008F0C_DST_SEL_Z(V_008F0C_SQ_SEL_Z) |
|
||||
S_008F0C_DST_SEL_W(V_008F0C_SQ_SEL_W);
|
||||
|
||||
if (cmd_buffer->device->physical_device->rad_info.chip_class >= GFX10) {
|
||||
dst[3] |= S_008F0C_FORMAT(V_008F0C_IMG_FORMAT_32_FLOAT) |
|
||||
S_008F0C_OOB_SELECT(V_008F0C_OOB_SELECT_RAW) |
|
||||
S_008F0C_RESOURCE_LEVEL(1);
|
||||
if (!range->va) {
|
||||
memset(dst, 0, 4 * 4);
|
||||
} else {
|
||||
dst[3] |= S_008F0C_NUM_FORMAT(V_008F0C_BUF_NUM_FORMAT_FLOAT) |
|
||||
S_008F0C_DATA_FORMAT(V_008F0C_BUF_DATA_FORMAT_32);
|
||||
uint64_t va = range->va + pDynamicOffsets[dyn_idx];
|
||||
dst[0] = va;
|
||||
dst[1] = S_008F04_BASE_ADDRESS_HI(va >> 32);
|
||||
dst[2] = no_dynamic_bounds ? 0xffffffffu : range->size;
|
||||
dst[3] = S_008F0C_DST_SEL_X(V_008F0C_SQ_SEL_X) |
|
||||
S_008F0C_DST_SEL_Y(V_008F0C_SQ_SEL_Y) |
|
||||
S_008F0C_DST_SEL_Z(V_008F0C_SQ_SEL_Z) |
|
||||
S_008F0C_DST_SEL_W(V_008F0C_SQ_SEL_W);
|
||||
|
||||
if (cmd_buffer->device->physical_device->rad_info.chip_class >= GFX10) {
|
||||
dst[3] |= S_008F0C_FORMAT(V_008F0C_IMG_FORMAT_32_FLOAT) |
|
||||
S_008F0C_OOB_SELECT(V_008F0C_OOB_SELECT_RAW) |
|
||||
S_008F0C_RESOURCE_LEVEL(1);
|
||||
} else {
|
||||
dst[3] |= S_008F0C_NUM_FORMAT(V_008F0C_BUF_NUM_FORMAT_FLOAT) |
|
||||
S_008F0C_DATA_FORMAT(V_008F0C_BUF_DATA_FORMAT_32);
|
||||
}
|
||||
}
|
||||
|
||||
cmd_buffer->push_constant_stages |=
|
||||
|
|
|
|||
|
|
@ -948,8 +948,10 @@ static void write_dynamic_buffer_descriptor(struct radv_device *device,
|
|||
uint64_t va;
|
||||
unsigned size;
|
||||
|
||||
if (!buffer)
|
||||
if (!buffer) {
|
||||
range->va = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
va = radv_buffer_get_va(buffer->bo);
|
||||
size = buffer_info->range;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue