mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 19:30:11 +01:00
gallium/util: add new helpers for user index buffer uploading
v3: split from the etnaviv patch; fix new_ib.buffer leak Reviewed-by: Brian Paul <brianp@vmware.com> Tested-by: Brian Paul <brianp@vmware.com> (VMware driver only)
This commit is contained in:
parent
b10197e3a4
commit
f139b6fb4f
2 changed files with 35 additions and 0 deletions
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include "util/u_helpers.h"
|
||||
#include "util/u_inlines.h"
|
||||
#include "util/u_upload_mgr.h"
|
||||
|
||||
/**
|
||||
* This function is used to copy an array of pipe_vertex_buffer structures,
|
||||
|
|
@ -109,3 +110,32 @@ util_set_index_buffer(struct pipe_index_buffer *dst,
|
|||
memset(dst, 0, sizeof(*dst));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a user index buffer, save the structure to "saved", and upload it.
|
||||
*/
|
||||
bool
|
||||
util_save_and_upload_index_buffer(struct pipe_context *pipe,
|
||||
const struct pipe_draw_info *info,
|
||||
const struct pipe_index_buffer *ib,
|
||||
struct pipe_index_buffer *out_saved)
|
||||
{
|
||||
struct pipe_index_buffer new_ib = {0};
|
||||
unsigned start_offset = info->start * ib->index_size;
|
||||
|
||||
u_upload_data(pipe->stream_uploader, start_offset,
|
||||
info->count * ib->index_size, 4,
|
||||
(char*)ib->user_buffer + start_offset,
|
||||
&new_ib.offset, &new_ib.buffer);
|
||||
if (!new_ib.buffer)
|
||||
return false;
|
||||
u_upload_unmap(pipe->stream_uploader);
|
||||
|
||||
new_ib.offset -= start_offset;
|
||||
new_ib.index_size = ib->index_size;
|
||||
|
||||
util_set_index_buffer(out_saved, ib);
|
||||
pipe->set_index_buffer(pipe, &new_ib);
|
||||
pipe_resource_reference(&new_ib.buffer, NULL);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,11 @@ void util_set_vertex_buffers_count(struct pipe_vertex_buffer *dst,
|
|||
void util_set_index_buffer(struct pipe_index_buffer *dst,
|
||||
const struct pipe_index_buffer *src);
|
||||
|
||||
bool util_save_and_upload_index_buffer(struct pipe_context *pipe,
|
||||
const struct pipe_draw_info *info,
|
||||
const struct pipe_index_buffer *ib,
|
||||
struct pipe_index_buffer *out_saved);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue