diff options
author | Maarten Lankhorst <maarten.lankhorst@canonical.com> | 2013-09-09 13:02:08 +0200 |
---|---|---|
committer | Maarten Lankhorst <maarten.lankhorst@canonical.com> | 2013-09-11 09:03:44 +0200 |
commit | b217d48364f368f541e53006af5dd56f664be24d (patch) | |
tree | 19cc7c1691d62564311470e8ef1c4f04a2c370cc /src/gallium/state_trackers/dri/common/dri_drawable.c | |
parent | 169f9c030c16d1247a3a762972d8687d89a16750 (diff) |
st/dri: do not create a new context for msaa copy
Commit b77316ad7594f
st/dri: always copy new DRI front and back buffers to corresponding MSAA buffers
introduced creating a pipe_context for every call to validate, which is not required
because the callers have a context anyway.
Only exception is egl_g3d_create_pbuffer_from_client_buffer, can someone test if it
still works with NULL passed as context for validate? From examining the code I
believe it does, but I didn't thoroughly test it.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Cc: 9.2 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Diffstat (limited to 'src/gallium/state_trackers/dri/common/dri_drawable.c')
-rw-r--r-- | src/gallium/state_trackers/dri/common/dri_drawable.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/gallium/state_trackers/dri/common/dri_drawable.c b/src/gallium/state_trackers/dri/common/dri_drawable.c index 18d8d8988a9..ddf940048cf 100644 --- a/src/gallium/state_trackers/dri/common/dri_drawable.c +++ b/src/gallium/state_trackers/dri/common/dri_drawable.c @@ -42,11 +42,13 @@ static void swap_fences_unref(struct dri_drawable *draw); static boolean -dri_st_framebuffer_validate(struct st_framebuffer_iface *stfbi, +dri_st_framebuffer_validate(struct st_context_iface *stctx, + struct st_framebuffer_iface *stfbi, const enum st_attachment_type *statts, unsigned count, struct pipe_resource **out) { + struct dri_context *ctx = (struct dri_context *)stctx->st_manager_private; struct dri_drawable *drawable = (struct dri_drawable *) stfbi->st_manager_private; struct dri_screen *screen = dri_screen(drawable->sPriv); @@ -78,7 +80,7 @@ dri_st_framebuffer_validate(struct st_framebuffer_iface *stfbi, if (new_stamp && drawable->update_drawable_info) drawable->update_drawable_info(drawable); - drawable->allocate_textures(drawable, statts, count); + drawable->allocate_textures(ctx, drawable, statts, count); /* add existing textures */ for (i = 0; i < ST_ATTACHMENT_COUNT; i++) { @@ -183,7 +185,8 @@ dri_destroy_buffer(__DRIdrawable * dPriv) * exist. Used by the TFP extension. */ static void -dri_drawable_validate_att(struct dri_drawable *drawable, +dri_drawable_validate_att(struct dri_context *ctx, + struct dri_drawable *drawable, enum st_attachment_type statt) { enum st_attachment_type statts[ST_ATTACHMENT_COUNT]; @@ -203,7 +206,7 @@ dri_drawable_validate_att(struct dri_drawable *drawable, drawable->texture_stamp = drawable->dPriv->lastStamp - 1; - drawable->base.validate(&drawable->base, statts, count, NULL); + drawable->base.validate(ctx->st, &drawable->base, statts, count, NULL); } /** @@ -217,7 +220,7 @@ dri_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target, struct dri_drawable *drawable = dri_drawable(dPriv); struct pipe_resource *pt; - dri_drawable_validate_att(drawable, ST_ATTACHMENT_FRONT_LEFT); + dri_drawable_validate_att(ctx, drawable, ST_ATTACHMENT_FRONT_LEFT); /* Use the pipe resource associated with the X drawable */ pt = drawable->textures[ST_ATTACHMENT_FRONT_LEFT]; |