summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>2020-10-15 11:20:20 -0400
committerMarge Bot <eric+marge@anholt.net>2020-12-29 00:42:35 +0000
commit009e2aa5460b4be30a783cee1e8f1df5369ffb29 (patch)
treeb1250703d3d90454cc36f316267168c882e33631
parentb0e8fb53ba9272529e4c9de392d2e85dd8fb8172 (diff)
zink: handle null ubos
for drivers that don't support robustness features (nullDescriptor) we can just jam in the dummy buffer here and yolo Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8226>
-rw-r--r--src/gallium/drivers/zink/zink_draw.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c
index 8f97bb508ea..64e216c716a 100644
--- a/src/gallium/drivers/zink/zink_draw.c
+++ b/src/gallium/drivers/zink/zink_draw.c
@@ -314,14 +314,17 @@ zink_draw_vbo(struct pipe_context *pctx,
for (int j = 0; j < shader->num_bindings; j++) {
int index = shader->bindings[j].index;
if (shader->bindings[j].type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) {
- assert(ctx->ubos[i][index].buffer_size > 0);
assert(ctx->ubos[i][index].buffer_size <= screen->info.props.limits.maxUniformBufferRange);
- assert(ctx->ubos[i][index].buffer);
struct zink_resource *res = zink_resource(ctx->ubos[i][index].buffer);
+ assert(!res || ctx->ubos[i][index].buffer_size > 0);
+ assert(!res || ctx->ubos[i][index].buffer);
write_desc_resources[num_wds] = res;
- buffer_infos[num_buffer_info].buffer = res->buffer;
- buffer_infos[num_buffer_info].offset = ctx->ubos[i][index].buffer_offset;
- buffer_infos[num_buffer_info].range = ctx->ubos[i][index].buffer_size;
+ buffer_infos[num_buffer_info].buffer = res ? res->buffer :
+ (screen->info.rb2_feats.nullDescriptor ?
+ VK_NULL_HANDLE :
+ zink_resource(ctx->dummy_buffer)->buffer);
+ buffer_infos[num_buffer_info].offset = res ? ctx->ubos[i][index].buffer_offset : 0;
+ buffer_infos[num_buffer_info].range = res ? ctx->ubos[i][index].buffer_size : VK_WHOLE_SIZE;
wds[num_wds].pBufferInfo = buffer_infos + num_buffer_info;
++num_buffer_info;
} else {