Mesa (master): svga: implement user index buffers
Marek Olšák
mareko at kemper.freedesktop.org
Fri Feb 24 23:15:14 UTC 2017
Module: Mesa
Branch: master
Commit: e78ccee9335ed677a6bf4597083954646760dadd
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e78ccee9335ed677a6bf4597083954646760dadd
Author: Marek Olšák <marek.olsak at amd.com>
Date: Fri Feb 17 02:21:29 2017 +0100
svga: implement user index buffers
Reviewed-by: Brian Paul <brianp at vmware.com>
Tested-by: Brian Paul <brianp at vmware.com> (VMware driver only)
---
src/gallium/drivers/svga/svga_pipe_draw.c | 13 ++++++++++++-
src/gallium/drivers/svga/svga_screen.c | 2 +-
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/src/gallium/drivers/svga/svga_pipe_draw.c b/src/gallium/drivers/svga/svga_pipe_draw.c
index c51c0b2..bbd4430 100644
--- a/src/gallium/drivers/svga/svga_pipe_draw.c
+++ b/src/gallium/drivers/svga/svga_pipe_draw.c
@@ -25,6 +25,7 @@
#include "util/u_format.h"
+#include "util/u_helpers.h"
#include "util/u_inlines.h"
#include "util/u_prim.h"
#include "util/u_prim_restart.h"
@@ -194,6 +195,14 @@ svga_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
svga->curr.rast->templ.cull_face == PIPE_FACE_FRONT_AND_BACK)
goto done;
+ /* Upload a user index buffer. */
+ struct pipe_index_buffer ibuffer_saved = {};
+ if (info->indexed && svga->curr.ib.user_buffer &&
+ !util_save_and_upload_index_buffer(pipe, info, &svga->curr.ib,
+ &ibuffer_saved)) {
+ return;
+ }
+
/*
* Mark currently bound target surfaces as dirty
* doesn't really matter if it is done before drawing.
@@ -277,8 +286,10 @@ svga_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
}
done:
+ if (info->indexed && ibuffer_saved.user_buffer)
+ pipe->set_index_buffer(pipe, &ibuffer_saved);
+
SVGA_STATS_TIME_POP(svga_sws(svga));
-;
}
diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c
index f9dfcd2..8af66b7 100644
--- a/src/gallium/drivers/svga/svga_screen.c
+++ b/src/gallium/drivers/svga/svga_screen.c
@@ -182,6 +182,7 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_NPOT_TEXTURES:
case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
+ case PIPE_CAP_USER_INDEX_BUFFERS:
return 1;
case PIPE_CAP_TWO_SIDED_STENCIL:
return 1;
@@ -213,7 +214,6 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
return 0;
case PIPE_CAP_USER_VERTEX_BUFFERS:
- case PIPE_CAP_USER_INDEX_BUFFERS:
return 0;
case PIPE_CAP_USER_CONSTANT_BUFFERS:
return 1;
More information about the mesa-commit
mailing list