From 7fff5b77f12174610d82d0c14da19fd8e81c92db Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 17 Feb 2017 02:14:36 +0100 Subject: [PATCH] freedreno: add support for user index buffers Reviewed-by: Brian Paul --- src/gallium/drivers/freedreno/freedreno_draw.c | 12 ++++++++++++ src/gallium/drivers/freedreno/freedreno_screen.c | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c b/src/gallium/drivers/freedreno/freedreno_draw.c index cfe13cd6782..5d5b7c11beb 100644 --- a/src/gallium/drivers/freedreno/freedreno_draw.c +++ b/src/gallium/drivers/freedreno/freedreno_draw.c @@ -31,6 +31,7 @@ #include "util/u_memory.h" #include "util/u_prim.h" #include "util/u_format.h" +#include "util/u_helpers.h" #include "freedreno_draw.h" #include "freedreno_context.h" @@ -84,6 +85,14 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info) return; } + /* Upload a user index buffer. */ + struct pipe_index_buffer ibuffer_saved = {}; + if (info->indexed && ctx->indexbuf.user_buffer && + !util_save_and_upload_index_buffer(pctx, info, &ctx->indexbuf, + &ibuffer_saved)) { + return; + } + if (ctx->in_blit) { fd_batch_reset(batch); ctx->dirty = ~0; @@ -201,6 +210,9 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info) ctx->dirty = 0xffffffff; fd_batch_check_size(batch); + + if (info->indexed && ibuffer_saved.user_buffer) + pctx->set_index_buffer(pctx, &ibuffer_saved); } /* Generic clear implementation (partially) using u_blitter: */ diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c index 1122e29269d..e1b95a6debb 100644 --- a/src/gallium/drivers/freedreno/freedreno_screen.c +++ b/src/gallium/drivers/freedreno/freedreno_screen.c @@ -179,6 +179,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT: case PIPE_CAP_STRING_MARKER: case PIPE_CAP_MIXED_COLOR_DEPTH_BITS: + case PIPE_CAP_USER_INDEX_BUFFERS: return 1; case PIPE_CAP_VERTEXID_NOBASE: @@ -253,7 +254,6 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER: case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS: case PIPE_CAP_USER_VERTEX_BUFFERS: - case PIPE_CAP_USER_INDEX_BUFFERS: case PIPE_CAP_QUERY_PIPELINE_STATISTICS: case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK: case PIPE_CAP_TGSI_VS_LAYER_VIEWPORT: -- 2.30.2