st/dri: Bind the post-processing queue to dri

Signed-off-by: Lauri Kasanen <cand@gmx.com>
Signed-off-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Lauri Kasanen
2011-08-19 18:23:10 +03:00
committed by Brian Paul
parent 6a6441fc03
commit 421235d42a
5 changed files with 47 additions and 4 deletions
@@ -48,6 +48,16 @@ dri_init_extensions(struct dri_context *ctx)
driInitExtensions(st->ctx, NULL, GL_FALSE);
}
static void
dri_pp_query(struct dri_context *ctx)
{
unsigned int i;
for (i = 0; i < PP_FILTERS; i++) {
ctx->pp_enabled[i] = driQueryOptioni(&ctx->optionCache, pp_filters[i].name);
}
}
GLboolean
dri_create_context(gl_api api, const struct gl_config * visual,
__DRIcontext * cPriv, void *sharedContextPrivate)
@@ -105,6 +115,11 @@ dri_create_context(gl_api api, const struct gl_config * visual,
if (api == API_OPENGL)
dri_init_extensions(ctx);
// Context successfully created. See if post-processing is requested.
dri_pp_query(ctx);
ctx->pp = pp_init(screen->base.screen, ctx->pp_enabled);
return GL_TRUE;
fail:
@@ -134,6 +149,8 @@ dri_destroy_context(__DRIcontext * cPriv)
ctx->st->flush(ctx->st, 0, NULL);
ctx->st->destroy(ctx->st);
if (ctx->pp) pp_free(ctx->pp);
FREE(ctx);
}
@@ -187,6 +204,13 @@ dri_make_current(__DRIcontext * cPriv,
ctx->stapi->make_current(ctx->stapi, ctx->st, &draw->base, &read->base);
// This is ok to call here. If they are already init, it's a no-op.
if (draw->textures[ST_ATTACHMENT_BACK_LEFT] && draw->textures[ST_ATTACHMENT_DEPTH_STENCIL]
&& ctx->pp)
pp_init_fbos(ctx->pp, draw->textures[ST_ATTACHMENT_BACK_LEFT]->width0,
draw->textures[ST_ATTACHMENT_BACK_LEFT]->height0,
draw->textures[ST_ATTACHMENT_DEPTH_STENCIL]);
return GL_TRUE;
}
@@ -34,6 +34,7 @@
#include "pipe/p_compiler.h"
#include "dri_wrapper.h"
#include "postprocess/filters.h"
struct pipe_context;
struct pipe_fence;
@@ -61,6 +62,8 @@ struct dri_context
/* gallium */
struct st_api *stapi;
struct st_context_iface *st;
struct pp_queue_t *pp;
unsigned int pp_enabled[PP_FILTERS];
};
static INLINE struct dri_context *
@@ -51,10 +51,16 @@ PUBLIC const char __driConfigOptions[] =
DRI_CONF_SECTION_QUALITY
/* DRI_CONF_FORCE_S3TC_ENABLE(false) */
DRI_CONF_ALLOW_LARGE_TEXTURES(1)
DRI_CONF_PP_CELSHADE(0)
DRI_CONF_PP_NORED(0)
DRI_CONF_PP_NOGREEN(0)
DRI_CONF_PP_NOBLUE(0)
DRI_CONF_PP_JIMENEZMLAA(0, 0, 32)
DRI_CONF_PP_JIMENEZMLAA_COLOR(0, 0, 32)
DRI_CONF_SECTION_END
DRI_CONF_END;
static const uint __driNConfigOptions = 3;
static const uint __driNConfigOptions = 9;
static const __DRIconfig **
dri_fill_in_modes(struct dri_screen *screen,
+10 -3
View File
@@ -44,12 +44,19 @@
* DRI2 flush extension.
*/
static void
dri2_flush_drawable(__DRIdrawable *draw)
dri2_flush_drawable(__DRIdrawable *dPriv)
{
struct dri_context *ctx = dri_get_current(draw->driScreenPriv);
struct dri_context *ctx = dri_get_current(dPriv->driScreenPriv);
struct dri_drawable *drawable = dri_drawable(dPriv);
struct pipe_resource *ptex = drawable->textures[ST_ATTACHMENT_BACK_LEFT];
if (ctx) {
if (ptex && ctx->pp && drawable->textures[ST_ATTACHMENT_DEPTH_STENCIL])
pp_run(ctx->pp, ptex, ptex, drawable->textures[ST_ATTACHMENT_DEPTH_STENCIL]);
if (ctx)
ctx->st->flush(ctx->st, 0, NULL);
}
}
static void
@@ -136,6 +136,9 @@ drisw_swap_buffers(__DRIdrawable *dPriv)
ptex = drawable->textures[ST_ATTACHMENT_BACK_LEFT];
if (ptex) {
if (ctx->pp && drawable->textures[ST_ATTACHMENT_DEPTH_STENCIL])
pp_run(ctx->pp, ptex, ptex, drawable->textures[ST_ATTACHMENT_DEPTH_STENCIL]);
ctx->st->flush(ctx->st, ST_FLUSH_FRONT, NULL);
drisw_copy_to_front(dPriv, ptex);