summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/dri
diff options
context:
space:
mode:
authorJakob Bornecrantz <[email protected]>2010-04-24 14:05:59 +0100
committerJakob Bornecrantz <[email protected]>2010-04-26 00:40:17 +0100
commit27779ddad5c61d2fc46367e1556b5e53403c2a97 (patch)
tree7ad6054cd497b955a0fdde2a36b7332e45af659a /src/gallium/state_trackers/dri
parenta66b391edf746a5eb0cb4aad1ff2e546df00a11d (diff)
st/dri: Make st_framebuffer_iface the base for dri_drawable
Diffstat (limited to 'src/gallium/state_trackers/dri')
-rw-r--r--src/gallium/state_trackers/dri/common/dri_context.c2
-rw-r--r--src/gallium/state_trackers/dri/common/dri_drawable.c6
-rw-r--r--src/gallium/state_trackers/dri/common/dri_drawable.h7
-rw-r--r--src/gallium/state_trackers/dri/common/dri_st_api.c34
-rw-r--r--src/gallium/state_trackers/dri/common/dri_st_api.h8
-rw-r--r--src/gallium/state_trackers/dri/drm/dri1.c4
-rw-r--r--src/gallium/state_trackers/dri/drm/dri2.c4
-rw-r--r--src/gallium/state_trackers/dri/sw/drisw.c2
8 files changed, 26 insertions, 41 deletions
diff --git a/src/gallium/state_trackers/dri/common/dri_context.c b/src/gallium/state_trackers/dri/common/dri_context.c
index 97e3b0628f1..ba9fe62125d 100644
--- a/src/gallium/state_trackers/dri/common/dri_context.c
+++ b/src/gallium/state_trackers/dri/common/dri_context.c
@@ -165,7 +165,7 @@ dri_make_current(__DRIcontext * cPriv,
read->texture_stamp = driReadPriv->lastStamp - 1;
}
- stapi->make_current(stapi, ctx->st, draw->stfb, read->stfb);
+ stapi->make_current(stapi, ctx->st, &draw->base, &read->base);
}
else {
stapi->make_current(stapi, NULL, NULL, NULL);
diff --git a/src/gallium/state_trackers/dri/common/dri_drawable.c b/src/gallium/state_trackers/dri/common/dri_drawable.c
index 6b551ea3f96..a61e7e1b1b4 100644
--- a/src/gallium/state_trackers/dri/common/dri_drawable.c
+++ b/src/gallium/state_trackers/dri/common/dri_drawable.c
@@ -58,9 +58,7 @@ dri_create_buffer(__DRIscreen * sPriv,
goto fail;
dri_fill_st_visual(&drawable->stvis, screen, visual);
- drawable->stfb = dri_create_st_framebuffer(drawable);
- if (drawable->stfb == NULL)
- goto fail;
+ dri_init_st_framebuffer(drawable);
drawable->sPriv = sPriv;
drawable->dPriv = dPriv;
@@ -83,7 +81,7 @@ dri_destroy_buffer(__DRIdrawable * dPriv)
dri1_destroy_pipe_surface(drawable);
- dri_destroy_st_framebuffer(drawable->stfb);
+ dri_close_st_framebuffer(drawable);
drawable->desired_fences = 0;
diff --git a/src/gallium/state_trackers/dri/common/dri_drawable.h b/src/gallium/state_trackers/dri/common/dri_drawable.h
index dad218bde29..6c54a6953b3 100644
--- a/src/gallium/state_trackers/dri/common/dri_drawable.h
+++ b/src/gallium/state_trackers/dri/common/dri_drawable.h
@@ -42,14 +42,13 @@ struct dri_context;
struct dri_drawable
{
+ struct st_framebuffer_iface base;
+ struct st_visual stvis;
+
/* dri */
__DRIdrawable *dPriv;
__DRIscreen *sPriv;
- /* gallium */
- struct st_framebuffer_iface *stfb;
- struct st_visual stvis;
-
__DRIbuffer old[8];
unsigned old_num;
unsigned old_w;
diff --git a/src/gallium/state_trackers/dri/common/dri_st_api.c b/src/gallium/state_trackers/dri/common/dri_st_api.c
index 6c8a7e82abe..42e0ba020ad 100644
--- a/src/gallium/state_trackers/dri/common/dri_st_api.c
+++ b/src/gallium/state_trackers/dri/common/dri_st_api.c
@@ -106,38 +106,27 @@ dri_st_framebuffer_flush_front(struct st_framebuffer_iface *stfbi,
}
/**
- * Create a framebuffer from the given drawable.
+ * Init a framebuffer from the given drawable.
*/
-struct st_framebuffer_iface *
-dri_create_st_framebuffer(struct dri_drawable *drawable)
+void
+dri_init_st_framebuffer(struct dri_drawable *drawable)
{
- struct st_framebuffer_iface *stfbi;
-
- stfbi = CALLOC_STRUCT(st_framebuffer_iface);
- if (stfbi) {
- stfbi->visual = &drawable->stvis;
- stfbi->flush_front = dri_st_framebuffer_flush_front;
- stfbi->validate = dri_st_framebuffer_validate;
- stfbi->st_manager_private = (void *) drawable;
- }
-
- return stfbi;
+ drawable->base.visual = &drawable->stvis;
+ drawable->base.flush_front = dri_st_framebuffer_flush_front;
+ drawable->base.validate = dri_st_framebuffer_validate;
+ drawable->base.st_manager_private = (void *) drawable;
}
/**
* Destroy a framebuffer.
*/
void
-dri_destroy_st_framebuffer(struct st_framebuffer_iface *stfbi)
+dri_close_st_framebuffer(struct dri_drawable *drawable)
{
- struct dri_drawable *drawable =
- (struct dri_drawable *) stfbi->st_manager_private;
int i;
for (i = 0; i < ST_ATTACHMENT_COUNT; i++)
pipe_resource_reference(&drawable->textures[i], NULL);
-
- FREE(stfbi);
}
/**
@@ -145,11 +134,9 @@ dri_destroy_st_framebuffer(struct st_framebuffer_iface *stfbi)
* exist.
*/
void
-dri_st_framebuffer_validate_att(struct st_framebuffer_iface *stfbi,
+dri_st_framebuffer_validate_att(struct dri_drawable *drawable,
enum st_attachment_type statt)
{
- struct dri_drawable *drawable =
- (struct dri_drawable *) stfbi->st_manager_private;
enum st_attachment_type statts[ST_ATTACHMENT_COUNT];
unsigned i, count = 0;
@@ -167,7 +154,8 @@ dri_st_framebuffer_validate_att(struct st_framebuffer_iface *stfbi,
drawable->texture_stamp = drawable->dPriv->lastStamp - 1;
- stfbi->validate(stfbi, statts, count, NULL);
+ /* this calles into the manager */
+ drawable->base.validate(&drawable->base, statts, count, NULL);
}
static boolean
diff --git a/src/gallium/state_trackers/dri/common/dri_st_api.h b/src/gallium/state_trackers/dri/common/dri_st_api.h
index 0a0d43073cb..8cb9fabd4e4 100644
--- a/src/gallium/state_trackers/dri/common/dri_st_api.h
+++ b/src/gallium/state_trackers/dri/common/dri_st_api.h
@@ -49,14 +49,14 @@ dri_init_st_manager(struct dri_screen *screen);
void
dri_close_st_manager(struct dri_screen *screen);
-struct st_framebuffer_iface *
-dri_create_st_framebuffer(struct dri_drawable *drawable);
+void
+dri_init_st_framebuffer(struct dri_drawable *drawable);
void
-dri_destroy_st_framebuffer(struct st_framebuffer_iface *stfbi);
+dri_close_st_framebuffer(struct dri_drawable *drawable);
void
-dri_st_framebuffer_validate_att(struct st_framebuffer_iface *stfbi,
+dri_st_framebuffer_validate_att(struct dri_drawable *drawable,
enum st_attachment_type statt);
#endif /* _DRI_ST_API_H_ */
diff --git a/src/gallium/state_trackers/dri/drm/dri1.c b/src/gallium/state_trackers/dri/drm/dri1.c
index 3f6f930edef..313195b0967 100644
--- a/src/gallium/state_trackers/dri/drm/dri1.c
+++ b/src/gallium/state_trackers/dri/drm/dri1.c
@@ -104,13 +104,13 @@ dri1_propagate_drawable_change(struct dri_context *ctx)
if (dPriv && draw->texture_stamp != dPriv->lastStamp) {
ctx->st->flush(ctx->st, PIPE_FLUSH_RENDER_CACHE, NULL);
flushed = TRUE;
- ctx->st->notify_invalid_framebuffer(ctx->st, draw->stfb);
+ ctx->st->notify_invalid_framebuffer(ctx->st, &draw->base);
}
if (rPriv && dPriv != rPriv && read->texture_stamp != rPriv->lastStamp) {
if (!flushed)
ctx->st->flush(ctx->st, PIPE_FLUSH_RENDER_CACHE, NULL);
- ctx->st->notify_invalid_framebuffer(ctx->st, read->stfb);
+ ctx->st->notify_invalid_framebuffer(ctx->st, &read->base);
}
}
diff --git a/src/gallium/state_trackers/dri/drm/dri2.c b/src/gallium/state_trackers/dri/drm/dri2.c
index fa296a874a2..f2d6fc1e5a8 100644
--- a/src/gallium/state_trackers/dri/drm/dri2.c
+++ b/src/gallium/state_trackers/dri/drm/dri2.c
@@ -61,7 +61,7 @@ dri2_invalidate_drawable(__DRIdrawable *dPriv)
drawable->dPriv->lastStamp = *drawable->dPriv->pStamp;
if (ctx)
- ctx->st->notify_invalid_framebuffer(ctx->st, drawable->stfb);
+ ctx->st->notify_invalid_framebuffer(ctx->st, &drawable->base);
}
static const __DRI2flushExtension dri2FlushExtension = {
@@ -81,7 +81,7 @@ dri2_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target,
struct dri_drawable *drawable = dri_drawable(dPriv);
struct pipe_resource *pt;
- dri_st_framebuffer_validate_att(drawable->stfb, ST_ATTACHMENT_FRONT_LEFT);
+ dri_st_framebuffer_validate_att(drawable, ST_ATTACHMENT_FRONT_LEFT);
pt = drawable->textures[ST_ATTACHMENT_FRONT_LEFT];
diff --git a/src/gallium/state_trackers/dri/sw/drisw.c b/src/gallium/state_trackers/dri/sw/drisw.c
index 9bd838e6227..c3f88c936ef 100644
--- a/src/gallium/state_trackers/dri/sw/drisw.c
+++ b/src/gallium/state_trackers/dri/sw/drisw.c
@@ -112,7 +112,7 @@ drisw_invalidate_drawable(__DRIdrawable *dPriv)
/* check if swapping currently bound buffer */
if (ctx && ctx->dPriv == dPriv)
- ctx->st->notify_invalid_framebuffer(ctx->st, drawable->stfb);
+ ctx->st->notify_invalid_framebuffer(ctx->st, &drawable->base);
}
static INLINE void