This is a better fix for the previous check-in.
Fixes texadd.c conform test, and probably other bugs.
const GLuint su = fprog->Base.SamplerUnits[unit];
struct gl_texture_object *texObj = st->ctx->Texture.Unit[su]._Current;
struct st_texture_object *stObj = st_texture_object(texObj);
+ struct pipe_texture *pt;
if (texObj) {
GLboolean flush, retval;
* this table before being deleted, otherwise the pointer
* comparison below could fail.
*/
- if (st->state.sampler_texture[unit] != stObj ||
- (stObj && stObj->dirtyData)) {
- /* should really test if the bound 'pt' is changing */
- struct pipe_texture *pt = st_get_stobj_texture(stObj);
- st->state.sampler_texture[unit] = stObj;
+
+ pt = st_get_stobj_texture(stObj);
+
+ if (st->state.sampler_texture[unit] != pt) {
+ st->state.sampler_texture[unit] = pt;
st->pipe->set_sampler_texture(st->pipe, unit, pt);
}
- stObj = st->state.sampler_texture[unit];
-
if (stObj && stObj->dirtyData) {
- struct pipe_texture *pt = st_get_stobj_texture(stObj);
st->pipe->texture_update(st->pipe, pt);
stObj->dirtyData = GL_FALSE;
}
pipe->bind_rasterizer_state(pipe, ctx->st->state.rasterizer->data);
pipe->bind_fs_state(pipe, ctx->st->state.fs->data);
pipe->bind_vs_state(pipe, ctx->st->state.vs->cso->data);
- pipe->set_sampler_texture(pipe, unit,
- st_get_stobj_texture(ctx->st->state.sampler_texture[unit]));
+ pipe->set_sampler_texture(pipe, unit, ctx->st->state.sampler_texture[unit]);
pipe->bind_sampler_state(pipe, unit, ctx->st->state.sampler[unit]->data);
pipe->set_viewport_state(pipe, &ctx->st->state.viewport);
}
struct pipe_clip_state clip;
struct pipe_constant_buffer constants[2];
struct pipe_framebuffer_state framebuffer;
- struct st_texture_object *sampler_texture[PIPE_MAX_SAMPLERS];
+ struct pipe_texture *sampler_texture[PIPE_MAX_SAMPLERS];
struct pipe_poly_stipple poly_stipple;
struct pipe_scissor_state scissor;
struct pipe_viewport_state viewport;
pipe->bind_vs_state(pipe, st->state.vs->cso->data);
if (st->state.sampler[0])
pipe->bind_sampler_state(pipe, 0, st->state.sampler[0]->data);
- pipe->set_sampler_texture(pipe, 0,
- st_get_stobj_texture(st->state.sampler_texture[0]));
+ pipe->set_sampler_texture(pipe, 0, st->state.sampler_texture[0]);
pipe->set_viewport_state(pipe, &st->state.viewport);
return TRUE;