~ubuntu-branches/ubuntu/precise/mesa/precise-updates

« back to all changes in this revision

Viewing changes to src/gallium/drivers/r600/r600_query.c

  • Committer: Package Import Robot
  • Author(s): Robert Hooker
  • Date: 2012-02-02 12:05:48 UTC
  • mfrom: (1.7.1) (3.3.27 sid)
  • Revision ID: package-import@ubuntu.com-20120202120548-nvkma85jq0h4coix
Tags: 8.0~rc2-0ubuntu4
Drop drisearchdir handling, it is no longer needed with multiarch
and dri-alternates being removed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
43
43
        struct r600_query *rquery = (struct r600_query *)query;
44
44
 
45
 
        rquery->result = 0;
 
45
        memset(&rquery->result, 0, sizeof(rquery->result));
46
46
        rquery->results_start = rquery->results_end;
47
47
        r600_query_begin(&rctx->ctx, (struct r600_query *)query);
 
48
        LIST_ADDTAIL(&rquery->list, &rctx->ctx.active_query_list);
48
49
}
49
50
 
50
51
static void r600_end_query(struct pipe_context *ctx, struct pipe_query *query)
51
52
{
52
53
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
 
54
        struct r600_query *rquery = (struct r600_query *)query;
53
55
 
54
 
        r600_query_end(&rctx->ctx, (struct r600_query *)query);
 
56
        r600_query_end(&rctx->ctx, rquery);
 
57
        LIST_DELINIT(&rquery->list);
55
58
}
56
59
 
57
60
static boolean r600_get_query_result(struct pipe_context *ctx,
73
76
        int wait_flag = 0;
74
77
 
75
78
        /* If we already have nonzero result, render unconditionally */
76
 
        if (query != NULL && rquery->result != 0)
 
79
        if (query != NULL && rquery->result.u64 != 0) {
 
80
                if (rctx->current_render_cond) {
 
81
                        r600_render_condition(ctx, NULL, 0);
 
82
                }
77
83
                return;
 
84
        }
78
85
 
79
86
        rctx->current_render_cond = query;
80
87
        rctx->current_render_cond_mode = mode;
93
100
        }
94
101
 
95
102
        rctx->ctx.predicate_drawing = true;
96
 
        r600_query_predication(&rctx->ctx, rquery, PREDICATION_OP_ZPASS, wait_flag);
 
103
 
 
104
        switch (rquery->type) {
 
105
        case PIPE_QUERY_OCCLUSION_COUNTER:
 
106
        case PIPE_QUERY_OCCLUSION_PREDICATE:
 
107
                r600_query_predication(&rctx->ctx, rquery, PREDICATION_OP_ZPASS, wait_flag);
 
108
                break;
 
109
        case PIPE_QUERY_PRIMITIVES_EMITTED:
 
110
        case PIPE_QUERY_PRIMITIVES_GENERATED:
 
111
        case PIPE_QUERY_SO_STATISTICS:
 
112
        case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
 
113
                r600_query_predication(&rctx->ctx, rquery, PREDICATION_OP_PRIMCOUNT, wait_flag);
 
114
                break;
 
115
        default:
 
116
                assert(0);
 
117
        }
97
118
}
98
119
 
99
120
void r600_init_query_functions(struct r600_pipe_context *rctx)
104
125
        rctx->context.end_query = r600_end_query;
105
126
        rctx->context.get_query_result = r600_get_query_result;
106
127
 
107
 
        if (r600_get_num_backends(rctx->screen->radeon) > 0)
 
128
        if (rctx->screen->info.r600_num_backends > 0)
108
129
            rctx->context.render_condition = r600_render_condition;
109
130
}