Skip to content
Snippets Groups Projects
Commit afc160e1 authored by Chia-I Wu's avatar Chia-I Wu
Browse files

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.
parent 000896c0
No related branches found
No related tags found
No related merge requests found
...@@ -79,6 +79,8 @@ struct u_vbuf_mgr_priv { ...@@ -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, ...@@ -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, ...@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment