r600: fix refcnt imbalance related to r600_set_vertex_buffers()

For instance, this issue is triggered with: "piglit/bin/useprogram-flushverts-2 -auto -fbo" or
"piglit/bin/primitive-restart-draw-mode line_loop -auto"
while setting GALLIUM_REFCNT_LOG=refcnt.log.

Fixes: 27dcb46629 ("gallium: add take_ownership param into set_vertex_buffers to eliminate atomics")

Signed-off-by: Patrick Lerda <patrick9876@free.fr>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22395>
This commit is contained in:
Patrick Lerda 2023-04-02 18:30:20 +02:00 committed by Marge Bot
parent cd861b7f38
commit 28cb33fada

View file

@ -586,10 +586,10 @@ static void r600_set_vertex_buffers(struct pipe_context *ctx,
/* Set vertex buffers. */
if (input) {
for (i = 0; i < count; i++) {
if ((input[i].buffer.resource != vb[i].buffer.resource) ||
(vb[i].stride != input[i].stride) ||
(vb[i].buffer_offset != input[i].buffer_offset) ||
(vb[i].is_user_buffer != input[i].is_user_buffer)) {
if (likely((input[i].buffer.resource != vb[i].buffer.resource) ||
(vb[i].stride != input[i].stride) ||
(vb[i].buffer_offset != input[i].buffer_offset) ||
(vb[i].is_user_buffer != input[i].is_user_buffer))) {
if (input[i].buffer.resource) {
vb[i].stride = input[i].stride;
vb[i].buffer_offset = input[i].buffer_offset;
@ -606,6 +606,14 @@ static void r600_set_vertex_buffers(struct pipe_context *ctx,
pipe_resource_reference(&vb[i].buffer.resource, NULL);
disable_mask |= 1 << i;
}
} else if (input[i].buffer.resource) {
if (take_ownership) {
pipe_resource_reference(&vb[i].buffer.resource, NULL);
vb[i].buffer.resource = input[i].buffer.resource;
} else {
pipe_resource_reference(&vb[i].buffer.resource,
input[i].buffer.resource);
}
}
}
} else {