diff options
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/state_trackers/dri/dri_drawable.c | 7 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/dri_st_api.c | 36 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/dri_st_api.h | 6 |
3 files changed, 26 insertions, 23 deletions
diff --git a/src/gallium/state_trackers/dri/dri_drawable.c b/src/gallium/state_trackers/dri/dri_drawable.c index 930387f8a6..4e2300d78f 100644 --- a/src/gallium/state_trackers/dri/dri_drawable.c +++ b/src/gallium/state_trackers/dri/dri_drawable.c @@ -48,8 +48,11 @@ void dri2_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target, { struct dri_context *ctx = dri_context(pDRICtx); struct dri_drawable *drawable = dri_drawable(dPriv); - struct pipe_texture *pt = - dri_get_st_framebuffer_texture(drawable->stfb, ST_ATTACHMENT_FRONT_LEFT); + struct pipe_texture *pt; + + dri_st_framebuffer_validate_att(drawable->stfb, ST_ATTACHMENT_FRONT_LEFT); + + pt = drawable->textures[ST_ATTACHMENT_FRONT_LEFT]; if (pt) { ctx->st->teximage(ctx->st, diff --git a/src/gallium/state_trackers/dri/dri_st_api.c b/src/gallium/state_trackers/dri/dri_st_api.c index 84c94cb06d..c067cee66c 100644 --- a/src/gallium/state_trackers/dri/dri_st_api.c +++ b/src/gallium/state_trackers/dri/dri_st_api.c @@ -390,33 +390,33 @@ dri_destroy_st_framebuffer(struct st_framebuffer_iface *stfbi) } /** - * Return the texture at an attachment. Allocate the texture if it does not + * Validate the texture at an attachment. Allocate the texture if it does not * exist. */ -struct pipe_texture * -dri_get_st_framebuffer_texture(struct st_framebuffer_iface *stfbi, - enum st_attachment_type statt) +void +dri_st_framebuffer_validate_att(struct st_framebuffer_iface *stfbi, + enum st_attachment_type statt) { struct dri_drawable *drawable = (struct dri_drawable *) stfbi->st_manager_private; - - if (!(drawable->texture_mask & (1 << statt))) { - enum st_attachment_type statts[ST_ATTACHMENT_COUNT]; - unsigned i, count = 0; + enum st_attachment_type statts[ST_ATTACHMENT_COUNT]; + unsigned i, count = 0; - /* make sure DRI2 does not destroy existing buffers */ - for (i = 0; i < ST_ATTACHMENT_COUNT; i++) { - if (drawable->texture_mask & (1 << i)) { - statts[count++] = i; - } - } - statts[count++] = statt; + /* check if buffer already exists */ + if (drawable->texture_mask & (1 << statt)) + return; - drawable->texture_stamp = drawable->dPriv->lastStamp - 1; - dri_st_framebuffer_validate(stfbi, statts, count, NULL); + /* make sure DRI2 does not destroy existing buffers */ + for (i = 0; i < ST_ATTACHMENT_COUNT; i++) { + if (drawable->texture_mask & (1 << i)) { + statts[count++] = i; + } } + statts[count++] = statt; + + drawable->texture_stamp = drawable->dPriv->lastStamp - 1; - return drawable->textures[statt]; + stfbi->validate(stfbi, statts, count, NULL); } /** diff --git a/src/gallium/state_trackers/dri/dri_st_api.h b/src/gallium/state_trackers/dri/dri_st_api.h index 7cf522e469..99a217bfa7 100644 --- a/src/gallium/state_trackers/dri/dri_st_api.h +++ b/src/gallium/state_trackers/dri/dri_st_api.h @@ -48,8 +48,8 @@ dri_create_st_framebuffer(struct dri_drawable *drawable); void dri_destroy_st_framebuffer(struct st_framebuffer_iface *stfbi); -struct pipe_texture * -dri_get_st_framebuffer_texture(struct st_framebuffer_iface *stfbi, - enum st_attachment_type statt); +void +dri_st_framebuffer_validate_att(struct st_framebuffer_iface *stfbi, + enum st_attachment_type statt); #endif /* _DRI_ST_API_H_ */ |