static INLINE void nv50_stage_set_sampler_views(struct nv50_context *nv50, int s, unsigned nr, struct pipe_sampler_view **views) { unsigned i; assert(nr <= PIPE_MAX_SAMPLERS); for (i = 0; i < nr; ++i) { struct nv50_tic_entry *old = nv50_tic_entry(nv50->textures[s][i]); if (old) nv50_screen_tic_unlock(nv50->screen, old); pipe_sampler_view_reference(&nv50->textures[s][i], views[i]); } assert(nv50->num_textures[s] <= PIPE_MAX_SAMPLERS); for (i = nr; i < nv50->num_textures[s]; ++i) { struct nv50_tic_entry *old = nv50_tic_entry(nv50->textures[s][i]); if (!old) continue; nv50_screen_tic_unlock(nv50->screen, old); pipe_sampler_view_reference(&nv50->textures[s][i], NULL); } nv50->num_textures[s] = nr; nouveau_bufctx_reset(nv50->bufctx_3d, NV50_BIND_TEXTURES); nv50->dirty |= NV50_NEW_TEXTURES; }
static inline void nv50_stage_set_sampler_views(struct nv50_context *nv50, int s, unsigned nr, struct pipe_sampler_view **views) { unsigned i; assert(nr <= PIPE_MAX_SAMPLERS); for (i = 0; i < nr; ++i) { struct nv50_tic_entry *old = nv50_tic_entry(nv50->textures[s][i]); if (old) nv50_screen_tic_unlock(nv50->screen, old); if (views[i] && views[i]->texture) { struct pipe_resource *res = views[i]->texture; if (res->target == PIPE_BUFFER && (res->flags & PIPE_RESOURCE_FLAG_MAP_COHERENT)) nv50->textures_coherent[s] |= 1 << i; else nv50->textures_coherent[s] &= ~(1 << i); } else { nv50->textures_coherent[s] &= ~(1 << i); } pipe_sampler_view_reference(&nv50->textures[s][i], views[i]); } assert(nv50->num_textures[s] <= PIPE_MAX_SAMPLERS); for (i = nr; i < nv50->num_textures[s]; ++i) { struct nv50_tic_entry *old = nv50_tic_entry(nv50->textures[s][i]); if (!old) continue; nv50_screen_tic_unlock(nv50->screen, old); pipe_sampler_view_reference(&nv50->textures[s][i], NULL); } nv50->num_textures[s] = nr; nouveau_bufctx_reset(nv50->bufctx_3d, NV50_BIND_3D_TEXTURES); nv50->dirty_3d |= NV50_NEW_3D_TEXTURES; }