[Mesa-dev] [PATCH 2/4] llvmpipe: implement PIPE_QUERY_SO_STATISTICS

Roland Scheidegger sroland at vmware.com
Tue Apr 9 18:10:22 PDT 2013


Am 10.04.2013 02:22, schrieb Zack Rusin:
> We were missing the implementation of PIPE_QUERY_SO_STATISTICS
> query, this change implements it on top of the existing
> facilities.
> 
> Signed-off-by: Zack Rusin <zackr at vmware.com>
> ---
>  src/gallium/drivers/llvmpipe/lp_query.c |   19 +++++++++++++++++++
>  src/gallium/drivers/llvmpipe/lp_rast.c  |    3 +++
>  2 files changed, 22 insertions(+)
> 
> diff --git a/src/gallium/drivers/llvmpipe/lp_query.c b/src/gallium/drivers/llvmpipe/lp_query.c
> index 01d5201..013d192 100644
> --- a/src/gallium/drivers/llvmpipe/lp_query.c
> +++ b/src/gallium/drivers/llvmpipe/lp_query.c
> @@ -137,6 +137,13 @@ llvmpipe_get_query_result(struct pipe_context *pipe,
>     case PIPE_QUERY_PRIMITIVES_EMITTED:
>        *result = pq->num_primitives_written;
>        break;
> +   case PIPE_QUERY_SO_STATISTICS: {
> +      struct pipe_query_data_so_statistics *stats =
> +         (struct pipe_query_data_so_statistics *)vresult;
> +      stats->num_primitives_written = pq->num_primitives_written;
> +      stats->primitives_storage_needed = pq->num_primitives_generated;
> +   }
> +      break;
>     default:
>        assert(0);
>        break;
> @@ -174,6 +181,13 @@ llvmpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
>        llvmpipe->num_primitives_generated = 0;
>     }
>  
> +   if (pq->type == PIPE_QUERY_SO_STATISTICS) {
> +      pq->num_primitives_written = 0;
> +      llvmpipe->so_stats.num_primitives_written = 0;
> +      pq->num_primitives_generated = 0;
> +      llvmpipe->num_primitives_generated = 0;
> +   }
> +
>     if (pq->type == PIPE_QUERY_OCCLUSION_COUNTER) {
>        llvmpipe->active_occlusion_query = TRUE;
>        llvmpipe->dirty |= LP_NEW_OCCLUSION_QUERY;
> @@ -197,6 +211,11 @@ llvmpipe_end_query(struct pipe_context *pipe, struct pipe_query *q)
>        pq->num_primitives_generated = llvmpipe->num_primitives_generated;
>     }
>  
> +   if (pq->type == PIPE_QUERY_SO_STATISTICS) {
> +      pq->num_primitives_written = llvmpipe->so_stats.num_primitives_written;
> +      pq->num_primitives_generated = llvmpipe->num_primitives_generated;
> +   }
> +
>     if (pq->type == PIPE_QUERY_OCCLUSION_COUNTER) {
>        assert(llvmpipe->active_occlusion_query);
>        llvmpipe->active_occlusion_query = FALSE;
> diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c
> index 6183f41..903cb448 100644
> --- a/src/gallium/drivers/llvmpipe/lp_rast.c
> +++ b/src/gallium/drivers/llvmpipe/lp_rast.c
> @@ -476,6 +476,8 @@ lp_rast_begin_query(struct lp_rasterizer_task *task,
>        break;
>     case PIPE_QUERY_PRIMITIVES_GENERATED:
>     case PIPE_QUERY_PRIMITIVES_EMITTED:
> +   case PIPE_QUERY_SO_STATISTICS:
> +      break;
>        break;
double break?

>     default:
>        assert(0);
> @@ -507,6 +509,7 @@ lp_rast_end_query(struct lp_rasterizer_task *task,
>        break;
>     case PIPE_QUERY_PRIMITIVES_GENERATED:
>     case PIPE_QUERY_PRIMITIVES_EMITTED:
> +   case PIPE_QUERY_SO_STATISTICS:
>        break;
>     default:
>        assert(0);
> 
Otherwise Reviewed-by: Roland Scheidegger <sroland at vmware.com>


More information about the mesa-dev mailing list