summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/radeonsi/si_state.c
diff options
context:
space:
mode:
authorNicolai Hähnle <nicolai.haehnle@amd.com>2016-09-14 09:46:36 +0200
committerNicolai Hähnle <nicolai.haehnle@amd.com>2016-09-29 11:14:37 +0200
commit51b57a9b5a42f20e460c9ff34887cddb6c42a9ec (patch)
tree05fdf880c61a62e5bfc153d2af4dd5262e93f5ef /src/gallium/drivers/radeonsi/si_state.c
parent70f9ca24683f84c04990266c3be3b70947ac6e78 (diff)
downloadexternal_mesa3d-51b57a9b5a42f20e460c9ff34887cddb6c42a9ec.zip
external_mesa3d-51b57a9b5a42f20e460c9ff34887cddb6c42a9ec.tar.gz
external_mesa3d-51b57a9b5a42f20e460c9ff34887cddb6c42a9ec.tar.bz2
radeonsi: add save_qbo_state
Save compute shader state that will be used for the ARB_query_buffer_object implementation. Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_state.c')
-rw-r--r--src/gallium/drivers/radeonsi/si_state.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index 1703e42..443dc37 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -28,6 +28,7 @@
#include "si_shader.h"
#include "sid.h"
#include "radeon/r600_cs.h"
+#include "radeon/r600_query.h"
#include "util/u_dual_blend.h"
#include "util/u_format.h"
@@ -1074,6 +1075,16 @@ static void si_set_occlusion_query_state(struct pipe_context *ctx, bool enable)
si_mark_atom_dirty(sctx, &sctx->db_render_state);
}
+static void si_save_qbo_state(struct pipe_context *ctx, struct r600_qbo_state *st)
+{
+ struct si_context *sctx = (struct si_context*)ctx;
+
+ st->saved_compute = sctx->cs_shader_state.program;
+
+ si_get_pipe_constant_buffer(sctx, PIPE_SHADER_COMPUTE, 0, &st->saved_const0);
+ si_get_shader_buffers(sctx, PIPE_SHADER_COMPUTE, 0, 3, st->saved_ssbo);
+}
+
static void si_emit_db_render_state(struct si_context *sctx, struct r600_atom *state)
{
struct radeon_winsys_cs *cs = sctx->b.gfx.cs;
@@ -3498,6 +3509,7 @@ void si_init_state_functions(struct si_context *sctx)
sctx->b.b.set_active_query_state = si_set_active_query_state;
sctx->b.set_occlusion_query_state = si_set_occlusion_query_state;
+ sctx->b.save_qbo_state = si_save_qbo_state;
sctx->b.need_gfx_cs_space = si_need_gfx_cs_space;
sctx->b.b.draw_vbo = si_draw_vbo;