gallium/u_blitter: add helper to save FS const buffer state
Not (currently) state that is overwridden by u_blitter itself, but drivers with custom blit/clear which are reusing part of the u_blitter infrastructure will use it. Signed-off-by: Rob Clark <robdclark@gmail.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
433e12fea8
commit
2b2f436c69
|
@ -283,6 +283,7 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)
|
|||
ctx->rs_discard_state = pipe->create_rasterizer_state(pipe, &rs_state);
|
||||
}
|
||||
|
||||
ctx->base.cb_slot = 0; /* 0 for now */
|
||||
ctx->base.vb_slot = 0; /* 0 for now */
|
||||
|
||||
/* vertex elements states */
|
||||
|
@ -698,6 +699,15 @@ void util_blitter_restore_textures(struct blitter_context *blitter)
|
|||
ctx->base.saved_num_sampler_views = ~0;
|
||||
}
|
||||
|
||||
void util_blitter_restore_constant_buffer_state(struct blitter_context *blitter)
|
||||
{
|
||||
struct pipe_context *pipe = blitter->pipe;
|
||||
|
||||
pipe->set_constant_buffer(pipe, PIPE_SHADER_FRAGMENT, blitter->cb_slot,
|
||||
&blitter->saved_fs_constant_buffer);
|
||||
pipe_resource_reference(&blitter->saved_fs_constant_buffer.buffer, NULL);
|
||||
}
|
||||
|
||||
static void blitter_set_rectangle(struct blitter_context_priv *ctx,
|
||||
int x1, int y1, int x2, int y2,
|
||||
float depth)
|
||||
|
|
|
@ -111,6 +111,9 @@ struct blitter_context
|
|||
unsigned saved_num_sampler_views;
|
||||
struct pipe_sampler_view *saved_sampler_views[PIPE_MAX_SAMPLERS];
|
||||
|
||||
unsigned cb_slot;
|
||||
struct pipe_constant_buffer saved_fs_constant_buffer;
|
||||
|
||||
unsigned vb_slot;
|
||||
struct pipe_vertex_buffer saved_vertex_buffer;
|
||||
|
||||
|
@ -485,6 +488,17 @@ util_blitter_save_fragment_sampler_views(struct blitter_context *blitter,
|
|||
views[i]);
|
||||
}
|
||||
|
||||
static inline void
|
||||
util_blitter_save_fragment_constant_buffer_slot(
|
||||
struct blitter_context *blitter,
|
||||
struct pipe_constant_buffer *constant_buffers)
|
||||
{
|
||||
pipe_resource_reference(&blitter->saved_fs_constant_buffer.buffer,
|
||||
constant_buffers[blitter->cb_slot].buffer);
|
||||
memcpy(&blitter->saved_fs_constant_buffer, &constant_buffers[blitter->cb_slot],
|
||||
sizeof(struct pipe_constant_buffer));
|
||||
}
|
||||
|
||||
static inline void
|
||||
util_blitter_save_vertex_buffer_slot(struct blitter_context *blitter,
|
||||
struct pipe_vertex_buffer *vertex_buffers)
|
||||
|
@ -536,6 +550,7 @@ void util_blitter_restore_fragment_states(struct blitter_context *blitter);
|
|||
void util_blitter_restore_render_cond(struct blitter_context *blitter);
|
||||
void util_blitter_restore_fb_state(struct blitter_context *blitter);
|
||||
void util_blitter_restore_textures(struct blitter_context *blitter);
|
||||
void util_blitter_restore_constant_buffer_state(struct blitter_context *blitter);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue