mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 15:48:36 +02:00
r300g: add conditional rendering
This commit is contained in:
parent
116c99768e
commit
655fe28155
3 changed files with 33 additions and 0 deletions
|
|
@ -377,6 +377,8 @@ struct r300_context {
|
|||
uint32_t zbuffer_bpp;
|
||||
/* Whether scissor is enabled. */
|
||||
boolean scissor_enabled;
|
||||
/* Whether rendering is conditional and should be skipped. */
|
||||
boolean skip_rendering;
|
||||
/* upload managers */
|
||||
struct u_upload_mgr *upload_vb;
|
||||
struct u_upload_mgr *upload_ib;
|
||||
|
|
|
|||
|
|
@ -159,10 +159,33 @@ static boolean r300_get_query_result(struct pipe_context* pipe,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static void r300_render_condition(struct pipe_context *pipe,
|
||||
struct pipe_query *query,
|
||||
uint mode)
|
||||
{
|
||||
struct r300_context *r300 = r300_context(pipe);
|
||||
uint64_t result;
|
||||
boolean wait;
|
||||
|
||||
if (query) {
|
||||
wait = mode == PIPE_RENDER_COND_WAIT ||
|
||||
mode == PIPE_RENDER_COND_BY_REGION_WAIT;
|
||||
|
||||
if (!r300_get_query_result(pipe, query, wait, &result)) {
|
||||
r300->skip_rendering = FALSE;
|
||||
}
|
||||
|
||||
r300->skip_rendering = result == 0;
|
||||
} else {
|
||||
r300->skip_rendering = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void r300_init_query_functions(struct r300_context* r300) {
|
||||
r300->context.create_query = r300_create_query;
|
||||
r300->context.destroy_query = r300_destroy_query;
|
||||
r300->context.begin_query = r300_begin_query;
|
||||
r300->context.end_query = r300_end_query;
|
||||
r300->context.get_query_result = r300_get_query_result;
|
||||
r300->context.render_condition = r300_render_condition;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -427,6 +427,10 @@ void r300_draw_range_elements(struct pipe_context* pipe,
|
|||
#endif
|
||||
unsigned short_count;
|
||||
|
||||
if (r300->skip_rendering) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!u_trim_pipe_prim(mode, &count)) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -503,6 +507,10 @@ void r300_draw_arrays(struct pipe_context* pipe, unsigned mode,
|
|||
#endif
|
||||
unsigned short_count;
|
||||
|
||||
if (r300->skip_rendering) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!u_trim_pipe_prim(mode, &count)) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue