Mesa (master): zink: handle null ssbo attachments without crashing
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jan 28 14:41:40 UTC 2021
Module: Mesa
Branch: master
Commit: 39665fc8c059d0b615b160bc152689546b4bf9ac
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=39665fc8c059d0b615b160bc152689546b4bf9ac
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Fri Aug 7 19:12:20 2020 -0400
zink: handle null ssbo attachments without crashing
basically the same as any other null buffer descriptor attachment
Reviewed-by: Adam Jackson <ajax at redhat.com>
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8628>
---
src/gallium/drivers/zink/zink_draw.c | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c
index dd30f09da8d..262ed5bf0cd 100644
--- a/src/gallium/drivers/zink/zink_draw.c
+++ b/src/gallium/drivers/zink/zink_draw.c
@@ -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 {
More information about the mesa-commit
mailing list