mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 11:48:06 +02:00
llvmpipe: pass ssbo write mask down into setup.
this will be used to keep track of ssbo buffer references. Reviewed-by: Roland Scheidegger <sroland@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14923>
This commit is contained in:
parent
403f9aea0e
commit
ef34719459
6 changed files with 10 additions and 4 deletions
|
|
@ -90,7 +90,7 @@ struct llvmpipe_context {
|
|||
|
||||
struct pipe_shader_buffer ssbos[PIPE_SHADER_TYPES][LP_MAX_TGSI_SHADER_BUFFERS];
|
||||
struct pipe_image_view images[PIPE_SHADER_TYPES][LP_MAX_TGSI_SHADER_IMAGES];
|
||||
|
||||
uint32_t fs_ssbo_write_mask;
|
||||
unsigned num_samplers[PIPE_SHADER_TYPES];
|
||||
unsigned num_sampler_views[PIPE_SHADER_TYPES];
|
||||
unsigned num_images[PIPE_SHADER_TYPES];
|
||||
|
|
|
|||
|
|
@ -703,7 +703,8 @@ lp_setup_set_fs_constants(struct lp_setup_context *setup,
|
|||
void
|
||||
lp_setup_set_fs_ssbos(struct lp_setup_context *setup,
|
||||
unsigned num,
|
||||
struct pipe_shader_buffer *buffers)
|
||||
struct pipe_shader_buffer *buffers,
|
||||
uint32_t ssbo_write_mask)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
|
|
@ -717,6 +718,7 @@ lp_setup_set_fs_ssbos(struct lp_setup_context *setup,
|
|||
for (; i < ARRAY_SIZE(setup->ssbos); i++) {
|
||||
util_copy_shader_buffer(&setup->ssbos[i].current, NULL);
|
||||
}
|
||||
setup->ssbo_write_mask = ssbo_write_mask;
|
||||
setup->dirty |= LP_SETUP_NEW_SSBOS;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -111,7 +111,8 @@ lp_setup_set_fs_constants(struct lp_setup_context *setup,
|
|||
void
|
||||
lp_setup_set_fs_ssbos(struct lp_setup_context *setup,
|
||||
unsigned num,
|
||||
struct pipe_shader_buffer *buffers);
|
||||
struct pipe_shader_buffer *buffers,
|
||||
uint32_t ssbo_write_mask);
|
||||
|
||||
void
|
||||
lp_setup_set_fs_images(struct lp_setup_context *setup,
|
||||
|
|
|
|||
|
|
@ -159,6 +159,7 @@ struct lp_setup_context
|
|||
struct {
|
||||
struct pipe_shader_buffer current;
|
||||
} ssbos[LP_MAX_TGSI_SHADER_BUFFERS];
|
||||
uint32_t ssbo_write_mask;
|
||||
|
||||
struct {
|
||||
struct pipe_image_view current;
|
||||
|
|
|
|||
|
|
@ -332,7 +332,7 @@ void llvmpipe_update_derived( struct llvmpipe_context *llvmpipe )
|
|||
if (llvmpipe->dirty & LP_NEW_FS_SSBOS)
|
||||
lp_setup_set_fs_ssbos(llvmpipe->setup,
|
||||
ARRAY_SIZE(llvmpipe->ssbos[PIPE_SHADER_FRAGMENT]),
|
||||
llvmpipe->ssbos[PIPE_SHADER_FRAGMENT]);
|
||||
llvmpipe->ssbos[PIPE_SHADER_FRAGMENT], llvmpipe->fs_ssbo_write_mask);
|
||||
|
||||
if (llvmpipe->dirty & LP_NEW_FS_IMAGES)
|
||||
lp_setup_set_fs_images(llvmpipe->setup,
|
||||
|
|
|
|||
|
|
@ -4057,6 +4057,8 @@ llvmpipe_set_shader_buffers(struct pipe_context *pipe,
|
|||
} else if (shader == PIPE_SHADER_COMPUTE) {
|
||||
llvmpipe->cs_dirty |= LP_CSNEW_SSBOS;
|
||||
} else if (shader == PIPE_SHADER_FRAGMENT) {
|
||||
llvmpipe->fs_ssbo_write_mask &= ~(((1 << count) - 1) << start_slot);
|
||||
llvmpipe->fs_ssbo_write_mask |= writable_bitmask << start_slot;
|
||||
llvmpipe->dirty |= LP_NEW_FS_SSBOS;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue