zink: handle null ssbo attachments without crashing

basically the same as any other null buffer descriptor attachment

Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8628>
This commit is contained in:
Mike Blumenkrantz 2020-08-07 19:12:20 -04:00 committed by Marge Bot
parent bceb47d57b
commit 39665fc8c0
1 changed files with 16 additions and 10 deletions

View File

@ -366,17 +366,23 @@ zink_draw_vbo(struct pipe_context *pctx,
wds[num_wds].pBufferInfo = buffer_infos + num_buffer_info;
++num_buffer_info;
} else if (shader->bindings[j].type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) {
assert(ctx->ssbos[i][index].buffer_size > 0);
assert(ctx->ssbos[i][index].buffer_size <= screen->info.props.limits.maxStorageBufferRange);
assert(ctx->ssbos[i][index].buffer);
struct zink_resource *res = zink_resource(ctx->ssbos[i][index].buffer);
if (ctx->writable_ssbos[i] & (1 << index))
write_desc_resources[num_wds] = res;
else
read_desc_resources[num_wds] = res;
buffer_infos[num_buffer_info].buffer = res->buffer;
buffer_infos[num_buffer_info].offset = ctx->ssbos[i][index].buffer_offset;
buffer_infos[num_buffer_info].range = ctx->ssbos[i][index].buffer_size;
if (res) {
assert(ctx->ssbos[i][index].buffer_size > 0);
assert(ctx->ssbos[i][index].buffer_size <= screen->info.props.limits.maxStorageBufferRange);
if (ctx->writable_ssbos[i] & (1 << index))
write_desc_resources[num_wds] = res;
else
read_desc_resources[num_wds] = res;
buffer_infos[num_buffer_info].buffer = res->buffer;
buffer_infos[num_buffer_info].offset = ctx->ssbos[i][index].buffer_offset;
buffer_infos[num_buffer_info].range = ctx->ssbos[i][index].buffer_size;
} else {
assert(screen->info.rb2_feats.nullDescriptor);
buffer_infos[num_buffer_info].buffer = VK_NULL_HANDLE;
buffer_infos[num_buffer_info].offset = 0;
buffer_infos[num_buffer_info].range = VK_WHOLE_SIZE;
}
wds[num_wds].pBufferInfo = buffer_infos + num_buffer_info;
++num_buffer_info;
} else {