mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 04:30:10 +01:00
freedreno: ssbo: mark resource read or written depending on usage
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Reviewed-by: Rob Clark <robdclark@chromium.org> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/1963> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/1963>
This commit is contained in:
parent
061b262a0c
commit
8cdace95ac
1 changed files with 15 additions and 10 deletions
|
|
@ -185,12 +185,15 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
|
||||||
resource_written(batch, pfb->cbufs[i]->texture);
|
resource_written(batch, pfb->cbufs[i]->texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark SSBOs as being written.. we don't actually know which ones are
|
/* Mark SSBOs */
|
||||||
* read vs written, so just assume the worst
|
|
||||||
*/
|
|
||||||
if (ctx->dirty_shader[PIPE_SHADER_FRAGMENT] & FD_DIRTY_SHADER_SSBO) {
|
if (ctx->dirty_shader[PIPE_SHADER_FRAGMENT] & FD_DIRTY_SHADER_SSBO) {
|
||||||
foreach_bit(i, ctx->shaderbuf[PIPE_SHADER_FRAGMENT].enabled_mask)
|
const struct fd_shaderbuf_stateobj *so = &ctx->shaderbuf[PIPE_SHADER_FRAGMENT];
|
||||||
resource_written(batch, ctx->shaderbuf[PIPE_SHADER_FRAGMENT].sb[i].buffer);
|
|
||||||
|
foreach_bit (i, so->enabled_mask & so->writable_mask)
|
||||||
|
resource_written(batch, so->sb[i].buffer);
|
||||||
|
|
||||||
|
foreach_bit (i, so->enabled_mask & ~so->writable_mask)
|
||||||
|
resource_read(batch, so->sb[i].buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->dirty_shader[PIPE_SHADER_FRAGMENT] & FD_DIRTY_SHADER_IMAGE) {
|
if (ctx->dirty_shader[PIPE_SHADER_FRAGMENT] & FD_DIRTY_SHADER_IMAGE) {
|
||||||
|
|
@ -417,6 +420,7 @@ static void
|
||||||
fd_launch_grid(struct pipe_context *pctx, const struct pipe_grid_info *info)
|
fd_launch_grid(struct pipe_context *pctx, const struct pipe_grid_info *info)
|
||||||
{
|
{
|
||||||
struct fd_context *ctx = fd_context(pctx);
|
struct fd_context *ctx = fd_context(pctx);
|
||||||
|
const struct fd_shaderbuf_stateobj *so = &ctx->shaderbuf[PIPE_SHADER_COMPUTE];
|
||||||
struct fd_batch *batch, *save_batch = NULL;
|
struct fd_batch *batch, *save_batch = NULL;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
|
|
@ -427,11 +431,12 @@ fd_launch_grid(struct pipe_context *pctx, const struct pipe_grid_info *info)
|
||||||
|
|
||||||
mtx_lock(&ctx->screen->lock);
|
mtx_lock(&ctx->screen->lock);
|
||||||
|
|
||||||
/* Mark SSBOs as being written.. we don't actually know which ones are
|
/* Mark SSBOs */
|
||||||
* read vs written, so just assume the worst
|
foreach_bit (i, so->enabled_mask & so->writable_mask)
|
||||||
*/
|
resource_written(batch, so->sb[i].buffer);
|
||||||
foreach_bit(i, ctx->shaderbuf[PIPE_SHADER_COMPUTE].enabled_mask)
|
|
||||||
resource_written(batch, ctx->shaderbuf[PIPE_SHADER_COMPUTE].sb[i].buffer);
|
foreach_bit (i, so->enabled_mask & ~so->writable_mask)
|
||||||
|
resource_read(batch, so->sb[i].buffer);
|
||||||
|
|
||||||
foreach_bit(i, ctx->shaderimg[PIPE_SHADER_COMPUTE].enabled_mask) {
|
foreach_bit(i, ctx->shaderimg[PIPE_SHADER_COMPUTE].enabled_mask) {
|
||||||
struct pipe_image_view *img =
|
struct pipe_image_view *img =
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue