mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-02 15:20:26 +01:00
gallium/u_index_modify: don't add PIPE_TRANSFER_UNSYNCHRONIZED unconditionally
It's OK for r300g (because r300g can't write to buffers via the GPU), but not later hardware. This issue was spotted randomly. Cc: mesa-stable@lists.freedesktop.org Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> (cherry picked from commitc8ef512398) (cherry picked from commitbc8d047068)
This commit is contained in:
parent
65a6a9fab8
commit
1441b436e7
5 changed files with 14 additions and 6 deletions
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
void util_shorten_ubyte_elts_to_userptr(struct pipe_context *context,
|
||||
struct pipe_index_buffer *ib,
|
||||
unsigned add_transfer_flags,
|
||||
int index_bias,
|
||||
unsigned start,
|
||||
unsigned count,
|
||||
|
|
@ -43,7 +44,7 @@ void util_shorten_ubyte_elts_to_userptr(struct pipe_context *context,
|
|||
} else {
|
||||
in_map = pipe_buffer_map(context, ib->buffer,
|
||||
PIPE_TRANSFER_READ |
|
||||
PIPE_TRANSFER_UNSYNCHRONIZED,
|
||||
add_transfer_flags,
|
||||
&src_transfer);
|
||||
}
|
||||
in_map += start;
|
||||
|
|
@ -62,6 +63,7 @@ void util_shorten_ubyte_elts_to_userptr(struct pipe_context *context,
|
|||
|
||||
void util_rebuild_ushort_elts_to_userptr(struct pipe_context *context,
|
||||
struct pipe_index_buffer *ib,
|
||||
unsigned add_transfer_flags,
|
||||
int index_bias,
|
||||
unsigned start, unsigned count,
|
||||
void *out)
|
||||
|
|
@ -76,7 +78,7 @@ void util_rebuild_ushort_elts_to_userptr(struct pipe_context *context,
|
|||
} else {
|
||||
in_map = pipe_buffer_map(context, ib->buffer,
|
||||
PIPE_TRANSFER_READ |
|
||||
PIPE_TRANSFER_UNSYNCHRONIZED,
|
||||
add_transfer_flags,
|
||||
&in_transfer);
|
||||
}
|
||||
in_map += start;
|
||||
|
|
@ -95,6 +97,7 @@ void util_rebuild_ushort_elts_to_userptr(struct pipe_context *context,
|
|||
|
||||
void util_rebuild_uint_elts_to_userptr(struct pipe_context *context,
|
||||
struct pipe_index_buffer *ib,
|
||||
unsigned add_transfer_flags,
|
||||
int index_bias,
|
||||
unsigned start, unsigned count,
|
||||
void *out)
|
||||
|
|
@ -109,7 +112,7 @@ void util_rebuild_uint_elts_to_userptr(struct pipe_context *context,
|
|||
} else {
|
||||
in_map = pipe_buffer_map(context, ib->buffer,
|
||||
PIPE_TRANSFER_READ |
|
||||
PIPE_TRANSFER_UNSYNCHRONIZED,
|
||||
add_transfer_flags,
|
||||
&in_transfer);
|
||||
}
|
||||
in_map += start;
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ struct pipe_index_buffer;
|
|||
|
||||
void util_shorten_ubyte_elts_to_userptr(struct pipe_context *context,
|
||||
struct pipe_index_buffer *ib,
|
||||
unsigned add_transfer_flags,
|
||||
int index_bias,
|
||||
unsigned start,
|
||||
unsigned count,
|
||||
|
|
@ -36,12 +37,14 @@ void util_shorten_ubyte_elts_to_userptr(struct pipe_context *context,
|
|||
|
||||
void util_rebuild_ushort_elts_to_userptr(struct pipe_context *context,
|
||||
struct pipe_index_buffer *ib,
|
||||
unsigned add_transfer_flags,
|
||||
int index_bias,
|
||||
unsigned start, unsigned count,
|
||||
void *out);
|
||||
|
||||
void util_rebuild_uint_elts_to_userptr(struct pipe_context *context,
|
||||
struct pipe_index_buffer *ib,
|
||||
unsigned add_transfer_flags,
|
||||
int index_bias,
|
||||
unsigned start, unsigned count,
|
||||
void *out);
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ void r300_translate_index_buffer(struct r300_context *r300,
|
|||
&out_offset, out_buffer, &ptr);
|
||||
|
||||
util_shorten_ubyte_elts_to_userptr(
|
||||
&r300->context, ib, index_offset,
|
||||
&r300->context, ib, PIPE_TRANSFER_UNSYNCHRONIZED, index_offset,
|
||||
*start, count, ptr);
|
||||
|
||||
*index_size = 2;
|
||||
|
|
@ -55,6 +55,7 @@ void r300_translate_index_buffer(struct r300_context *r300,
|
|||
&out_offset, out_buffer, &ptr);
|
||||
|
||||
util_rebuild_ushort_elts_to_userptr(&r300->context, ib,
|
||||
PIPE_TRANSFER_UNSYNCHRONIZED,
|
||||
index_offset, *start,
|
||||
count, ptr);
|
||||
|
||||
|
|
@ -69,6 +70,7 @@ void r300_translate_index_buffer(struct r300_context *r300,
|
|||
&out_offset, out_buffer, &ptr);
|
||||
|
||||
util_rebuild_uint_elts_to_userptr(&r300->context, ib,
|
||||
PIPE_TRANSFER_UNSYNCHRONIZED,
|
||||
index_offset, *start,
|
||||
count, ptr);
|
||||
|
||||
|
|
|
|||
|
|
@ -1740,7 +1740,7 @@ static void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info
|
|||
&out_offset, &out_buffer, &ptr);
|
||||
|
||||
util_shorten_ubyte_elts_to_userptr(
|
||||
&rctx->b.b, &ib, 0, ib.offset + start, count, ptr);
|
||||
&rctx->b.b, &ib, 0, 0, ib.offset + start, count, ptr);
|
||||
|
||||
pipe_resource_reference(&ib.buffer, NULL);
|
||||
ib.user_buffer = NULL;
|
||||
|
|
|
|||
|
|
@ -1035,7 +1035,7 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
|
|||
return;
|
||||
}
|
||||
|
||||
util_shorten_ubyte_elts_to_userptr(&sctx->b.b, &ib, 0,
|
||||
util_shorten_ubyte_elts_to_userptr(&sctx->b.b, &ib, 0, 0,
|
||||
ib.offset + start,
|
||||
count, ptr);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue