diff options
author | Chia-I Wu <[email protected]> | 2013-06-26 13:44:27 +0800 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2013-06-26 16:42:46 +0800 |
commit | 95c21f12f321bb33ae8e1f1b255680ac8eeffade (patch) | |
tree | be15c847df41f9b7b82c7ad18c2891b0b7c0bb12 /src/gallium/drivers/ilo/ilo_3d.c | |
parent | 5fb5d4f0a6208e720998bbdbfe83df1035957f4a (diff) |
ilo: support PIPE_CAP_USER_INDEX_BUFFERS
We want to access the user buffer, if available, when primitive restart is
enabled and the restart index/primitive type is not natively supported.
And since we are handling index buffer uploads in the driver with this change,
we can also work around misalignment of index buffer offsets.
Diffstat (limited to 'src/gallium/drivers/ilo/ilo_3d.c')
-rw-r--r-- | src/gallium/drivers/ilo/ilo_3d.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/gallium/drivers/ilo/ilo_3d.c b/src/gallium/drivers/ilo/ilo_3d.c index 69808d90751..ef3aeced340 100644 --- a/src/gallium/drivers/ilo/ilo_3d.c +++ b/src/gallium/drivers/ilo/ilo_3d.c @@ -605,15 +605,22 @@ ilo_draw_vbo_with_sw_restart(struct pipe_context *pipe, return; } - struct pipe_transfer *transfer = NULL; - const void *map = NULL; - map = pipe_buffer_map(pipe, ilo->ib.state.buffer, - PIPE_TRANSFER_READ, &transfer); + if (ilo->ib.state.buffer) { + struct pipe_transfer *transfer; + const void *map; - sub_prim_count = ilo_find_sub_primitives(map + ilo->ib.state.offset, - ilo->ib.state.index_size, info, restart_info); + map = pipe_buffer_map(pipe, ilo->ib.state.buffer, + PIPE_TRANSFER_READ, &transfer); - pipe_buffer_unmap(pipe, transfer); + sub_prim_count = ilo_find_sub_primitives(map + ilo->ib.state.offset, + ilo->ib.state.index_size, info, restart_info); + + pipe_buffer_unmap(pipe, transfer); + } + else { + sub_prim_count = ilo_find_sub_primitives(ilo->ib.state.user_buffer, + ilo->ib.state.index_size, info, restart_info); + } info = restart_info; |