summaryrefslogtreecommitdiff
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/state_trackers/dri/dri_drawable.c7
-rw-r--r--src/gallium/state_trackers/dri/dri_st_api.c36
-rw-r--r--src/gallium/state_trackers/dri/dri_st_api.h6
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_ */