mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 06:58:05 +02:00
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> (cherry picked from commit28cb33fada)
This commit is contained in:
parent
bf6c8ee864
commit
7809a85f14
2 changed files with 13 additions and 5 deletions
|
|
@ -481,7 +481,7 @@
|
|||
"description": "r600: fix refcnt imbalance related to r600_set_vertex_buffers()",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "27dcb466293f2ab3f80a141fd0b8c14617a8e37f"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue