diff options
author | Brian Paul <[email protected]> | 2009-12-31 14:46:15 -0700 |
---|---|---|
committer | Brian Paul <[email protected]> | 2009-12-31 14:46:15 -0700 |
commit | 41450b03a8e8e0f94f8eefc6880d32e9b0ef6f6d (patch) | |
tree | 7ee85c856ee85d56ec9de0e2836333c6f6860e85 /src/gallium/drivers/softpipe/sp_query.c | |
parent | c0b4fb06b8b570b1999a0849797d3cb77f6ee5cd (diff) |
softpipe: implement conditional rendering
Diffstat (limited to 'src/gallium/drivers/softpipe/sp_query.c')
-rw-r--r-- | src/gallium/drivers/softpipe/sp_query.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/gallium/drivers/softpipe/sp_query.c b/src/gallium/drivers/softpipe/sp_query.c index 379cf4ad064..4ef5d9f7b1d 100644 --- a/src/gallium/drivers/softpipe/sp_query.c +++ b/src/gallium/drivers/softpipe/sp_query.c @@ -99,6 +99,32 @@ softpipe_get_query_result(struct pipe_context *pipe, } +/** + * Called by rendering function to check rendering is conditional. + * \return TRUE if we should render, FALSE if we should skip rendering + */ +boolean +softpipe_check_render_cond(struct softpipe_context *sp) +{ + struct pipe_context *pipe = &sp->pipe; + boolean b, wait; + uint64_t result; + + if (!sp->render_cond_query) { + return TRUE; /* no query predicate, draw normally */ + } + + wait = (sp->render_cond_mode == PIPE_RENDER_COND_WAIT || + sp->render_cond_mode == PIPE_RENDER_COND_BY_REGION_WAIT); + + b = pipe->get_query_result(pipe, sp->render_cond_query, wait, &result); + if (b) + return result > 0; + else + return TRUE; +} + + void softpipe_init_query_funcs(struct softpipe_context *softpipe ) { softpipe->pipe.create_query = softpipe_create_query; |