st/mesa: Associate a sampler view with an st texture object.

Lazily create a sampler view when the texture is being bound
for the first time.
This commit is contained in:
Michal Krol
2010-03-12 14:37:36 +01:00
parent 08f89988c8
commit b8030c6561
8 changed files with 119 additions and 47 deletions

View File

@@ -56,7 +56,7 @@ update_textures(struct st_context *st)
/* loop over sampler units (aka tex image units) */
for (su = 0; su < st->ctx->Const.MaxTextureImageUnits; su++) {
struct pipe_texture *pt = NULL;
struct pipe_sampler_view *sampler_view = NULL;
if (samplersUsed & (1 << su)) {
struct gl_texture_object *texObj;
@@ -84,7 +84,7 @@ update_textures(struct st_context *st)
st->state.num_textures = su + 1;
pt = st_get_stobj_texture(stObj);
sampler_view = st_get_stobj_sampler_view(stObj);
}
/*
@@ -96,17 +96,17 @@ update_textures(struct st_context *st)
}
*/
pipe_texture_reference(&st->state.sampler_texture[su], pt);
pipe_sampler_view_reference(&st->state.sampler_views[su], sampler_view);
}
cso_set_sampler_textures(st->cso_context,
st->state.num_textures,
st->state.sampler_texture);
cso_set_fragment_sampler_views(st->cso_context,
st->state.num_textures,
st->state.sampler_views);
if (st->ctx->Const.MaxVertexTextureImageUnits > 0) {
cso_set_vertex_sampler_textures(st->cso_context,
MIN2(st->state.num_textures,
st->ctx->Const.MaxVertexTextureImageUnits),
st->state.sampler_texture);
cso_set_vertex_sampler_views(st->cso_context,
MIN2(st->state.num_textures,
st->ctx->Const.MaxVertexTextureImageUnits),
st->state.sampler_views);
}
}