{
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,
}
/**
- * 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);
}
/**
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_ */