Commit 9a899e57 authored by Neil Roberts's avatar Neil Roberts

v3d: Update the TEXTURE_SHADER_STATE when there’s a new buf for a tex

When a texture is mapped with the DISCARD_WHOLE_RESOURCE flag set,
v3d_map_usage_prep will try to allocate a new buffer for the resource.
Previously, if the resource was used in a bound texture then nothing
would cause it to update the sampler view with the offset for the new
buffer. This commit just adds that in by looking at all sampler views
and calling v3d_create_texture_shader_state_bo for each one that
references this resource.
Reviewed-by: Eric Anholt's avatarEric Anholt <eric@anholt.net>
Part-of: <!6914>
parent e2f037e9
Pipeline #209476 waiting for manual action with stages
......@@ -146,6 +146,29 @@ v3d_resource_transfer_unmap(struct pipe_context *pctx,
slab_free(&v3d->transfer_pool, ptrans);
}
static void
rebind_sampler_views(struct v3d_context *v3d,
struct v3d_resource *rsc)
{
for (int st = 0; st < PIPE_SHADER_TYPES; st++) {
struct v3d_texture_stateobj *tex = v3d->tex + st;
for (unsigned i = 0; i < tex->num_textures; i++) {
struct pipe_sampler_view *psview = tex->textures[i];
if (psview->texture != &rsc->base)
continue;
struct v3d_sampler_view *sview =
v3d_sampler_view(psview);
v3d_create_texture_shader_state_bo(v3d, sview);
v3d_flag_dirty_sampler_state(v3d, st);
}
}
}
static void
v3d_map_usage_prep(struct pipe_context *pctx,
struct pipe_resource *prsc,
......@@ -164,6 +187,8 @@ v3d_map_usage_prep(struct pipe_context *pctx,
v3d->dirty |= VC5_DIRTY_VTXBUF;
if (prsc->bind & PIPE_BIND_CONSTANT_BUFFER)
v3d->dirty |= VC5_DIRTY_CONSTBUF;
if (prsc->bind & PIPE_BIND_SAMPLER_VIEW)
rebind_sampler_views(v3d, rsc);
} else {
/* If we failed to reallocate, flush users so that we
* don't violate any syncing requirements.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment