mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 02:20:11 +01:00
zink: replace unset buffer with a dummy-buffer
This fixes a crash in spec@!opengl 1.1@ppgtt_memory_alignment Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3673> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3673>
This commit is contained in:
parent
18657c0c0a
commit
8736ffae2e
3 changed files with 18 additions and 5 deletions
|
|
@ -1172,6 +1172,12 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
|
||||||
!ctx->framebuffer_cache)
|
!ctx->framebuffer_cache)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
const uint8_t data[] = { 0 };
|
||||||
|
ctx->dummy_buffer = pipe_buffer_create_with_data(&ctx->base,
|
||||||
|
PIPE_BIND_VERTEX_BUFFER, PIPE_USAGE_IMMUTABLE, sizeof(data), data);
|
||||||
|
if (!ctx->dummy_buffer)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
ctx->dirty_program = true;
|
ctx->dirty_program = true;
|
||||||
|
|
||||||
/* start the first batch */
|
/* start the first batch */
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,8 @@ struct zink_context {
|
||||||
|
|
||||||
struct list_head active_queries;
|
struct list_head active_queries;
|
||||||
bool queries_disabled;
|
bool queries_disabled;
|
||||||
|
|
||||||
|
struct pipe_resource *dummy_buffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct zink_context *
|
static inline struct zink_context *
|
||||||
|
|
|
||||||
|
|
@ -44,11 +44,16 @@ zink_bind_vertex_buffers(struct zink_batch *batch, struct zink_context *ctx)
|
||||||
const struct zink_vertex_elements_state *elems = ctx->element_state;
|
const struct zink_vertex_elements_state *elems = ctx->element_state;
|
||||||
for (unsigned i = 0; i < elems->hw_state.num_bindings; i++) {
|
for (unsigned i = 0; i < elems->hw_state.num_bindings; i++) {
|
||||||
struct pipe_vertex_buffer *vb = ctx->buffers + ctx->element_state->binding_map[i];
|
struct pipe_vertex_buffer *vb = ctx->buffers + ctx->element_state->binding_map[i];
|
||||||
assert(vb && vb->buffer.resource);
|
assert(vb);
|
||||||
struct zink_resource *res = zink_resource(vb->buffer.resource);
|
if (vb->buffer.resource) {
|
||||||
buffers[i] = res->buffer;
|
struct zink_resource *res = zink_resource(vb->buffer.resource);
|
||||||
buffer_offsets[i] = vb->buffer_offset;
|
buffers[i] = res->buffer;
|
||||||
zink_batch_reference_resoure(batch, res);
|
buffer_offsets[i] = vb->buffer_offset;
|
||||||
|
zink_batch_reference_resoure(batch, res);
|
||||||
|
} else {
|
||||||
|
buffers[i] = zink_resource(ctx->dummy_buffer)->buffer;
|
||||||
|
buffer_offsets[i] = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (elems->hw_state.num_bindings > 0)
|
if (elems->hw_state.num_bindings > 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue