u_vbuf_mgr: restore buffer offsets
u_vbuf_upload_buffers modifies the buffer offsets. If they are not restored, and any of the vertex formats is not supported natively, the next u_vbuf_mgr_draw_begin call will translate the vertex buffers with incorrect buffer offsets.
This commit is contained in:
parent
000896c0bb
commit
afc160e1c8
|
@ -79,6 +79,8 @@ struct u_vbuf_mgr_priv {
|
||||||
void *saved_ve, *fallback_ve;
|
void *saved_ve, *fallback_ve;
|
||||||
boolean ve_binding_lock;
|
boolean ve_binding_lock;
|
||||||
|
|
||||||
|
unsigned saved_buffer_offset[PIPE_MAX_ATTRIBS];
|
||||||
|
|
||||||
boolean any_user_vbs;
|
boolean any_user_vbs;
|
||||||
boolean incompatible_vb_layout;
|
boolean incompatible_vb_layout;
|
||||||
};
|
};
|
||||||
|
@ -488,6 +490,7 @@ void u_vbuf_mgr_set_vertex_buffers(struct u_vbuf_mgr *mgrb,
|
||||||
|
|
||||||
pipe_resource_reference(&mgr->b.vertex_buffer[i].buffer, vb->buffer);
|
pipe_resource_reference(&mgr->b.vertex_buffer[i].buffer, vb->buffer);
|
||||||
pipe_resource_reference(&mgr->b.real_vertex_buffer[i], NULL);
|
pipe_resource_reference(&mgr->b.real_vertex_buffer[i], NULL);
|
||||||
|
mgr->saved_buffer_offset[i] = vb->buffer_offset;
|
||||||
|
|
||||||
if (!vb->buffer) {
|
if (!vb->buffer) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -647,6 +650,13 @@ u_vbuf_mgr_draw_begin(struct u_vbuf_mgr *mgrb,
|
||||||
void u_vbuf_mgr_draw_end(struct u_vbuf_mgr *mgrb)
|
void u_vbuf_mgr_draw_end(struct u_vbuf_mgr *mgrb)
|
||||||
{
|
{
|
||||||
struct u_vbuf_mgr_priv *mgr = (struct u_vbuf_mgr_priv*)mgrb;
|
struct u_vbuf_mgr_priv *mgr = (struct u_vbuf_mgr_priv*)mgrb;
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
/* buffer offsets were modified in u_vbuf_upload_buffers */
|
||||||
|
if (mgr->any_user_vbs) {
|
||||||
|
for (i = 0; i < mgr->b.nr_vertex_buffers; i++)
|
||||||
|
mgr->b.vertex_buffer[i].buffer_offset = mgr->saved_buffer_offset[i];
|
||||||
|
}
|
||||||
|
|
||||||
if (mgr->fallback_ve) {
|
if (mgr->fallback_ve) {
|
||||||
u_vbuf_translate_end(mgr);
|
u_vbuf_translate_end(mgr);
|
||||||
|
|
Loading…
Reference in New Issue