diff options
author | Marek Olšák <[email protected]> | 2017-04-02 16:24:39 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-05-10 19:00:16 +0200 |
commit | 330d0607ed60fd3edca192e54b4246310f06652f (patch) | |
tree | 56bceba5b291ffcf42209ef1ab7ec515a8f5b666 /src/gallium/drivers/vc4 | |
parent | 22f6624ed318e8131681ec1f2e7b3a59449df412 (diff) |
gallium: remove pipe_index_buffer and set_index_buffer
pipe_draw_info::indexed is replaced with index_size. index_size == 0 means
non-indexed.
Instead of pipe_index_buffer::offset, pipe_draw_info::start is used.
For indexed indirect draws, pipe_draw_info::start is added to the indirect
start. This is the only case when "start" affects indirect draws.
pipe_draw_info::index is a union. Use either index::resource or
index::user depending on the value of pipe_draw_info::has_user_indices.
v2: fixes for nine, svga
Diffstat (limited to 'src/gallium/drivers/vc4')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_context.h | 3 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_draw.c | 20 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_resource.c | 11 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_resource.h | 5 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_state.c | 19 |
5 files changed, 20 insertions, 38 deletions
diff --git a/src/gallium/drivers/vc4/vc4_context.h b/src/gallium/drivers/vc4/vc4_context.h index 6bd2424ec79..3fe439543a8 100644 --- a/src/gallium/drivers/vc4/vc4_context.h +++ b/src/gallium/drivers/vc4/vc4_context.h @@ -67,7 +67,7 @@ #define VC4_DIRTY_CONSTBUF (1 << 13) #define VC4_DIRTY_VTXSTATE (1 << 14) #define VC4_DIRTY_VTXBUF (1 << 15) -#define VC4_DIRTY_INDEXBUF (1 << 16) + #define VC4_DIRTY_SCISSOR (1 << 17) #define VC4_DIRTY_FLAT_SHADE_FLAGS (1 << 18) #define VC4_DIRTY_PRIM_MODE (1 << 19) @@ -377,7 +377,6 @@ struct vc4_context { struct pipe_viewport_state viewport; struct vc4_constbuf_stateobj constbuf[PIPE_SHADER_TYPES]; struct vc4_vertexbuf_stateobj vertexbuf; - struct pipe_index_buffer indexbuf; /** @} */ }; diff --git a/src/gallium/drivers/vc4/vc4_draw.c b/src/gallium/drivers/vc4/vc4_draw.c index 01fae27cc1e..0aee73ed10b 100644 --- a/src/gallium/drivers/vc4/vc4_draw.c +++ b/src/gallium/drivers/vc4/vc4_draw.c @@ -289,7 +289,6 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info) return; if (info->mode >= PIPE_PRIM_QUADS) { - util_primconvert_save_index_buffer(vc4->primconvert, &vc4->indexbuf); util_primconvert_save_rasterizer_state(vc4->primconvert, &vc4->rasterizer->base); util_primconvert_draw_vbo(vc4->primconvert, info); perf_debug("Fallback conversion for %d %s vertices\n", @@ -340,23 +339,24 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info) * definitions, up to but not including QUADS. */ struct vc4_cl_out *bcl = cl_start(&job->bcl); - if (info->indexed) { - uint32_t offset = vc4->indexbuf.offset; - uint32_t index_size = vc4->indexbuf.index_size; + if (info->index_size) { + uint32_t index_size = info->index_size; + uint32_t offset = info->start * index_size; struct pipe_resource *prsc; - if (vc4->indexbuf.index_size == 4) { - prsc = vc4_get_shadow_index_buffer(pctx, &vc4->indexbuf, + if (info->index_size == 4) { + prsc = vc4_get_shadow_index_buffer(pctx, info, + offset, info->count, &offset); index_size = 2; } else { - if (vc4->indexbuf.user_buffer) { + if (info->has_user_indices) { prsc = NULL; u_upload_data(vc4->uploader, 0, info->count * index_size, 4, - vc4->indexbuf.user_buffer, + info->index.user, &offset, &prsc); } else { - prsc = vc4->indexbuf.buffer; + prsc = info->index.resource; } } struct vc4_resource *rsc = vc4_resource(prsc); @@ -373,7 +373,7 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info) cl_u32(&bcl, vc4->max_index); job->draw_calls_queued++; - if (vc4->indexbuf.index_size == 4 || vc4->indexbuf.user_buffer) + if (info->index_size == 4 || info->has_user_indices) pipe_resource_reference(&prsc, NULL); } else { uint32_t count = info->count; diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c index e4784ff86e2..5aeb65ec74e 100644 --- a/src/gallium/drivers/vc4/vc4_resource.c +++ b/src/gallium/drivers/vc4/vc4_resource.c @@ -979,12 +979,13 @@ vc4_update_shadow_baselevel_texture(struct pipe_context *pctx, */ struct pipe_resource * vc4_get_shadow_index_buffer(struct pipe_context *pctx, - const struct pipe_index_buffer *ib, + const struct pipe_draw_info *info, + uint32_t offset, uint32_t count, uint32_t *shadow_offset) { struct vc4_context *vc4 = vc4_context(pctx); - struct vc4_resource *orig = vc4_resource(ib->buffer); + struct vc4_resource *orig = vc4_resource(info->index.resource); perf_debug("Fallback conversion for %d uint indices\n", count); void *data; @@ -995,11 +996,11 @@ vc4_get_shadow_index_buffer(struct pipe_context *pctx, struct pipe_transfer *src_transfer = NULL; const uint32_t *src; - if (ib->user_buffer) { - src = ib->user_buffer; + if (info->has_user_indices) { + src = info->index.user; } else { src = pipe_buffer_map_range(pctx, &orig->base.b, - ib->offset, + offset, count * 4, PIPE_TRANSFER_READ, &src_transfer); } diff --git a/src/gallium/drivers/vc4/vc4_resource.h b/src/gallium/drivers/vc4/vc4_resource.h index 27aa4e87282..72af1d53082 100644 --- a/src/gallium/drivers/vc4/vc4_resource.h +++ b/src/gallium/drivers/vc4/vc4_resource.h @@ -121,9 +121,10 @@ struct pipe_resource *vc4_resource_create(struct pipe_screen *pscreen, void vc4_update_shadow_baselevel_texture(struct pipe_context *pctx, struct pipe_sampler_view *view); struct pipe_resource *vc4_get_shadow_index_buffer(struct pipe_context *pctx, - const struct pipe_index_buffer *ib, + const struct pipe_draw_info *info, + uint32_t offset, uint32_t count, - uint32_t *offset); + uint32_t *shadow_offset); void vc4_dump_surface(struct pipe_surface *psurf); #endif /* VC4_RESOURCE_H */ diff --git a/src/gallium/drivers/vc4/vc4_state.c b/src/gallium/drivers/vc4/vc4_state.c index 2e00104e459..fe339462308 100644 --- a/src/gallium/drivers/vc4/vc4_state.c +++ b/src/gallium/drivers/vc4/vc4_state.c @@ -302,24 +302,6 @@ vc4_set_vertex_buffers(struct pipe_context *pctx, } static void -vc4_set_index_buffer(struct pipe_context *pctx, - const struct pipe_index_buffer *ib) -{ - struct vc4_context *vc4 = vc4_context(pctx); - - if (ib) { - pipe_resource_reference(&vc4->indexbuf.buffer, ib->buffer); - vc4->indexbuf.index_size = ib->index_size; - vc4->indexbuf.offset = ib->offset; - vc4->indexbuf.user_buffer = ib->user_buffer; - } else { - pipe_resource_reference(&vc4->indexbuf.buffer, NULL); - } - - vc4->dirty |= VC4_DIRTY_INDEXBUF; -} - -static void vc4_blend_state_bind(struct pipe_context *pctx, void *hwcso) { struct vc4_context *vc4 = vc4_context(pctx); @@ -670,7 +652,6 @@ vc4_state_init(struct pipe_context *pctx) pctx->set_viewport_states = vc4_set_viewport_states; pctx->set_vertex_buffers = vc4_set_vertex_buffers; - pctx->set_index_buffer = vc4_set_index_buffer; pctx->create_blend_state = vc4_create_blend_state; pctx->bind_blend_state = vc4_blend_state_bind; |