mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 22:10:10 +01:00
radv: handle NULL descriptors
All fields must be zero, otherwise the HW hangs. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4775>
This commit is contained in:
parent
60cc065c7d
commit
c1ef225d18
1 changed files with 24 additions and 2 deletions
|
|
@ -830,6 +830,11 @@ static void write_texel_buffer_descriptor(struct radv_device *device,
|
||||||
{
|
{
|
||||||
RADV_FROM_HANDLE(radv_buffer_view, buffer_view, _buffer_view);
|
RADV_FROM_HANDLE(radv_buffer_view, buffer_view, _buffer_view);
|
||||||
|
|
||||||
|
if (!buffer_view) {
|
||||||
|
memset(dst, 0, 4 * 4);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(dst, buffer_view->state, 4 * 4);
|
memcpy(dst, buffer_view->state, 4 * 4);
|
||||||
|
|
||||||
if (cmd_buffer)
|
if (cmd_buffer)
|
||||||
|
|
@ -845,6 +850,12 @@ static void write_buffer_descriptor(struct radv_device *device,
|
||||||
const VkDescriptorBufferInfo *buffer_info)
|
const VkDescriptorBufferInfo *buffer_info)
|
||||||
{
|
{
|
||||||
RADV_FROM_HANDLE(radv_buffer, buffer, buffer_info->buffer);
|
RADV_FROM_HANDLE(radv_buffer, buffer, buffer_info->buffer);
|
||||||
|
|
||||||
|
if (!buffer) {
|
||||||
|
memset(dst, 0, 4 * 4);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t va = radv_buffer_get_va(buffer->bo);
|
uint64_t va = radv_buffer_get_va(buffer->bo);
|
||||||
uint32_t range = buffer_info->range;
|
uint32_t range = buffer_info->range;
|
||||||
|
|
||||||
|
|
@ -898,8 +909,14 @@ static void write_dynamic_buffer_descriptor(struct radv_device *device,
|
||||||
const VkDescriptorBufferInfo *buffer_info)
|
const VkDescriptorBufferInfo *buffer_info)
|
||||||
{
|
{
|
||||||
RADV_FROM_HANDLE(radv_buffer, buffer, buffer_info->buffer);
|
RADV_FROM_HANDLE(radv_buffer, buffer, buffer_info->buffer);
|
||||||
uint64_t va = radv_buffer_get_va(buffer->bo);
|
uint64_t va;
|
||||||
unsigned size = buffer_info->range;
|
unsigned size;
|
||||||
|
|
||||||
|
if (!buffer)
|
||||||
|
return;
|
||||||
|
|
||||||
|
va = radv_buffer_get_va(buffer->bo);
|
||||||
|
size = buffer_info->range;
|
||||||
|
|
||||||
if (buffer_info->range == VK_WHOLE_SIZE)
|
if (buffer_info->range == VK_WHOLE_SIZE)
|
||||||
size = buffer->size - buffer_info->offset;
|
size = buffer->size - buffer_info->offset;
|
||||||
|
|
@ -928,6 +945,11 @@ write_image_descriptor(struct radv_device *device,
|
||||||
RADV_FROM_HANDLE(radv_image_view, iview, image_info->imageView);
|
RADV_FROM_HANDLE(radv_image_view, iview, image_info->imageView);
|
||||||
union radv_descriptor *descriptor;
|
union radv_descriptor *descriptor;
|
||||||
|
|
||||||
|
if (!iview) {
|
||||||
|
memset(dst, 0, size);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (descriptor_type == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) {
|
if (descriptor_type == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) {
|
||||||
descriptor = &iview->storage_descriptor;
|
descriptor = &iview->storage_descriptor;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue