llvmpipe: add ssbo to resources reference by scenes.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14923>
This commit is contained in:
Dave Airlie 2022-02-09 15:37:40 +10:00 committed by Marge Bot
parent ef34719459
commit eff32fa591
2 changed files with 18 additions and 6 deletions

View file

@ -1179,18 +1179,13 @@ lp_setup_is_resource_referenced( const struct lp_setup_context *setup,
return LP_REFERENCED_FOR_READ | LP_REFERENCED_FOR_WRITE;
}
/* check textures referenced by the scene */
/* check resources referenced by the scene */
for (i = 0; i < setup->num_active_scenes; i++) {
unsigned ref = lp_scene_is_resource_referenced(setup->scenes[i], texture);
if (ref)
return ref;
}
for (i = 0; i < ARRAY_SIZE(setup->ssbos); i++) {
if (setup->ssbos[i].current.buffer == texture)
return LP_REFERENCED_FOR_READ | LP_REFERENCED_FOR_WRITE;
}
for (i = 0; i < ARRAY_SIZE(setup->images); i++) {
if (setup->images[i].current.resource == texture)
return LP_REFERENCED_FOR_READ | LP_REFERENCED_FOR_WRITE;
@ -1408,6 +1403,17 @@ try_update_scene_state( struct lp_setup_context *setup )
}
}
}
for (i = 0; i < ARRAY_SIZE(setup->ssbos); i++) {
if (setup->ssbos[i].current.buffer) {
if (!lp_scene_add_resource_reference(scene,
setup->ssbos[i].current.buffer,
new_scene, setup->ssbo_write_mask & (1 << i))) {
assert(!new_scene);
return FALSE;
}
}
}
}
}

View file

@ -4042,6 +4042,12 @@ llvmpipe_set_shader_buffers(struct pipe_context *pipe,
util_copy_shader_buffer(&llvmpipe->ssbos[shader][i], buffer);
if (buffer && buffer->buffer) {
boolean read_only = !(writable_bitmask & (1 << idx));
llvmpipe_flush_resource(pipe, buffer->buffer, 0, read_only, false,
false, "buffer");
}
if (shader == PIPE_SHADER_VERTEX ||
shader == PIPE_SHADER_GEOMETRY ||
shader == PIPE_SHADER_TESS_CTRL ||