[Mesa-dev] [PATCH 1/3] ilo: add PIPE_QUERY_OCCLUSION_PREDICATE support
Ilia Mirkin
imirkin at alum.mit.edu
Thu Feb 4 18:36:46 UTC 2016
[+Chia-I Wu]
I'd appreciate it if you could have a look and see if this looks
reasonable. Not sure if you're still maintaining the driver or not.
The story is that I want to use this query type for GL_ANY_SAMPLES*
queries.
Cheers,
-ilia
On Thu, Feb 4, 2016 at 12:52 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
> src/gallium/drivers/ilo/ilo_draw.c | 2 ++
> src/gallium/drivers/ilo/ilo_query.c | 9 ++++++++-
> src/gallium/drivers/ilo/ilo_render.c | 2 ++
> 3 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/ilo/ilo_draw.c b/src/gallium/drivers/ilo/ilo_draw.c
> index 69f36ae..6831d2c 100644
> --- a/src/gallium/drivers/ilo/ilo_draw.c
> +++ b/src/gallium/drivers/ilo/ilo_draw.c
> @@ -71,6 +71,7 @@ query_process_bo(const struct ilo_context *ilo, struct ilo_query *q)
>
> switch (q->type) {
> case PIPE_QUERY_OCCLUSION_COUNTER:
> + case PIPE_QUERY_OCCLUSION_PREDICATE:
> case PIPE_QUERY_TIME_ELAPSED:
> case PIPE_QUERY_PRIMITIVES_GENERATED:
> case PIPE_QUERY_PRIMITIVES_EMITTED:
> @@ -157,6 +158,7 @@ ilo_init_draw_query(struct ilo_context *ilo, struct ilo_query *q)
>
> switch (q->type) {
> case PIPE_QUERY_OCCLUSION_COUNTER:
> + case PIPE_QUERY_OCCLUSION_PREDICATE:
> case PIPE_QUERY_TIME_ELAPSED:
> case PIPE_QUERY_PRIMITIVES_GENERATED:
> case PIPE_QUERY_PRIMITIVES_EMITTED:
> diff --git a/src/gallium/drivers/ilo/ilo_query.c b/src/gallium/drivers/ilo/ilo_query.c
> index 27d0812..106bd42 100644
> --- a/src/gallium/drivers/ilo/ilo_query.c
> +++ b/src/gallium/drivers/ilo/ilo_query.c
> @@ -47,7 +47,7 @@ static const struct {
> #define INFOX(prefix) { NULL, NULL, NULL, NULL, }
>
> [PIPE_QUERY_OCCLUSION_COUNTER] = INFO(draw),
> - [PIPE_QUERY_OCCLUSION_PREDICATE] = INFOX(draw),
> + [PIPE_QUERY_OCCLUSION_PREDICATE] = INFO(draw),
> [PIPE_QUERY_TIMESTAMP] = INFO(draw),
> [PIPE_QUERY_TIMESTAMP_DISJOINT] = INFOX(draw),
> [PIPE_QUERY_TIME_ELAPSED] = INFO(draw),
> @@ -75,6 +75,7 @@ ilo_create_query(struct pipe_context *pipe, unsigned query_type, unsigned index)
>
> switch (query_type) {
> case PIPE_QUERY_OCCLUSION_COUNTER:
> + case PIPE_QUERY_OCCLUSION_PREDICATE:
> case PIPE_QUERY_TIMESTAMP:
> case PIPE_QUERY_TIME_ELAPSED:
> case PIPE_QUERY_PRIMITIVES_GENERATED:
> @@ -163,6 +164,12 @@ query_serialize(const struct ilo_query *q, void *buf)
> dst[0] = q->result.u64;
> }
> break;
> + case PIPE_QUERY_OCCLUSION_PREDICATE:
> + {
> + uint64_t *dst = buf;
> + dst[0] = !!q->result.u64;
> + }
> + break;
> case PIPE_QUERY_PIPELINE_STATISTICS:
> {
> const struct pipe_query_data_pipeline_statistics *stats =
> diff --git a/src/gallium/drivers/ilo/ilo_render.c b/src/gallium/drivers/ilo/ilo_render.c
> index 8bc04df..9a47ca8 100644
> --- a/src/gallium/drivers/ilo/ilo_render.c
> +++ b/src/gallium/drivers/ilo/ilo_render.c
> @@ -202,6 +202,7 @@ ilo_render_get_query_len(const struct ilo_render *render,
>
> switch (query_type) {
> case PIPE_QUERY_OCCLUSION_COUNTER:
> + case PIPE_QUERY_OCCLUSION_PREDICATE:
> case PIPE_QUERY_TIMESTAMP:
> case PIPE_QUERY_TIME_ELAPSED:
> /* no reg */
> @@ -268,6 +269,7 @@ ilo_render_emit_query(struct ilo_render *render,
>
> switch (q->type) {
> case PIPE_QUERY_OCCLUSION_COUNTER:
> + case PIPE_QUERY_OCCLUSION_PREDICATE:
> pipe_control_dw1 = GEN6_PIPE_CONTROL_DEPTH_STALL |
> GEN6_PIPE_CONTROL_WRITE_PS_DEPTH_COUNT;
> break;
> --
> 2.4.10
>
More information about the mesa-dev
mailing list