st/dri: make get_texture into validate_att
authorGeorge Sapountzis <gsapountzis@gmail.com>
Thu, 25 Mar 2010 15:01:52 +0000 (17:01 +0200)
committerGeorge Sapountzis <gsapountzis@gmail.com>
Thu, 25 Mar 2010 15:01:52 +0000 (17:01 +0200)
This is a wrapper around dri_st_framebuffer_validate for a single attachment.
Also, call validate through hook to make it more generic.

src/gallium/state_trackers/dri/dri_drawable.c
src/gallium/state_trackers/dri/dri_st_api.c
src/gallium/state_trackers/dri/dri_st_api.h

index 930387f..4e2300d 100644 (file)
@@ -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,
index 84c94cb..c067cee 100644 (file)
@@ -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);
 }
 
 /**
index 7cf522e..99a217b 100644 (file)
@@ -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_ */