gallium/util: optimize pipe_vertex_buffer_reference binding the same buffer
This eliminates atomic ops when the buffer doesn't change. Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8298>
This commit is contained in:
parent
cf82b3dc74
commit
104a41bd07
|
@ -223,6 +223,14 @@ static inline void
|
||||||
pipe_vertex_buffer_reference(struct pipe_vertex_buffer *dst,
|
pipe_vertex_buffer_reference(struct pipe_vertex_buffer *dst,
|
||||||
const struct pipe_vertex_buffer *src)
|
const struct pipe_vertex_buffer *src)
|
||||||
{
|
{
|
||||||
|
if (dst->buffer.resource == src->buffer.resource) {
|
||||||
|
/* Just copy the fields, don't touch reference counts. */
|
||||||
|
dst->stride = src->stride;
|
||||||
|
dst->is_user_buffer = src->is_user_buffer;
|
||||||
|
dst->buffer_offset = src->buffer_offset;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pipe_vertex_buffer_unreference(dst);
|
pipe_vertex_buffer_unreference(dst);
|
||||||
if (!src->is_user_buffer)
|
if (!src->is_user_buffer)
|
||||||
pipe_resource_reference(&dst->buffer.resource, src->buffer.resource);
|
pipe_resource_reference(&dst->buffer.resource, src->buffer.resource);
|
||||||
|
|
Loading…
Reference in New Issue