[Mesa-dev] [PATCH 2/2] llvmpipe: enable PIPE_CAP_QUERY_SO_OVERFLOW

Jose Fonseca jfonseca at vmware.com
Wed Aug 16 14:10:04 UTC 2017


On 15/08/17 17:23, sroland at vmware.com wrote:
> From: Roland Scheidegger <sroland at vmware.com>
> 
> The driver supported this since way before the GL spec for it existed.
> Just need to support both the per-stream and for all streams variants
> (which are identical due to only supporting 1 stream).
> Passes piglit arb_transform_feedback_overflow_query-basic.
> ---
>   docs/features.txt                        | 2 +-
>   src/gallium/drivers/llvmpipe/lp_query.c  | 3 +++
>   src/gallium/drivers/llvmpipe/lp_screen.c | 2 +-
>   3 files changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/docs/features.txt b/docs/features.txt
> index ace4669..6f57ec2 100644
> --- a/docs/features.txt
> +++ b/docs/features.txt
> @@ -232,7 +232,7 @@ GL 4.6, GLSL 4.60
>     GL_ARB_shader_group_vote                              DONE (i965, nvc0, radeonsi)
>     GL_ARB_spirv_extensions                               in progress (Nicolai Hähnle, Ian Romanick)
>     GL_ARB_texture_filter_anisotropic                     not started
> -  GL_ARB_transform_feedback_overflow_query              DONE (i965/gen6+, radeonsi, softpipe)
> +  GL_ARB_transform_feedback_overflow_query              DONE (i965/gen6+, radeonsi, llvmpipe, softpipe)
>     GL_KHR_no_error                                       started (Timothy Arceri)
>   
>   These are the extensions cherry-picked to make GLES 3.1
> diff --git a/src/gallium/drivers/llvmpipe/lp_query.c b/src/gallium/drivers/llvmpipe/lp_query.c
> index d5ed656..6f8ce94 100644
> --- a/src/gallium/drivers/llvmpipe/lp_query.c
> +++ b/src/gallium/drivers/llvmpipe/lp_query.c
> @@ -155,6 +155,7 @@ llvmpipe_get_query_result(struct pipe_context *pipe,
>         *result = pq->num_primitives_written;
>         break;
>      case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
> +   case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:
>         vresult->b = pq->num_primitives_generated > pq->num_primitives_written;
>         break;
>      case PIPE_QUERY_SO_STATISTICS: {
> @@ -215,6 +216,7 @@ llvmpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
>         pq->num_primitives_generated = llvmpipe->so_stats.primitives_storage_needed;
>         break;
>      case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
> +   case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:
>         pq->num_primitives_written = llvmpipe->so_stats.num_primitives_written;
>         pq->num_primitives_generated = llvmpipe->so_stats.primitives_storage_needed;
>         break;
> @@ -264,6 +266,7 @@ llvmpipe_end_query(struct pipe_context *pipe, struct pipe_query *q)
>            llvmpipe->so_stats.primitives_storage_needed - pq->num_primitives_generated;
>         break;
>      case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
> +   case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:
>         pq->num_primitives_written =
>            llvmpipe->so_stats.num_primitives_written - pq->num_primitives_written;
>         pq->num_primitives_generated =
> diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
> index 6c64133..32a4050 100644
> --- a/src/gallium/drivers/llvmpipe/lp_screen.c
> +++ b/src/gallium/drivers/llvmpipe/lp_screen.c
> @@ -270,6 +270,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>      case PIPE_CAP_DOUBLES:
>      case PIPE_CAP_INT64:
>      case PIPE_CAP_INT64_DIVMOD:
> +   case PIPE_CAP_QUERY_SO_OVERFLOW:
>         return 1;
>   
>      case PIPE_CAP_VENDOR_ID:
> @@ -357,7 +358,6 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>      case PIPE_CAP_POST_DEPTH_COVERAGE:
>      case PIPE_CAP_BINDLESS_TEXTURE:
>      case PIPE_CAP_NIR_SAMPLERS_AS_DEREF:
> -   case PIPE_CAP_QUERY_SO_OVERFLOW:
>      case PIPE_CAP_MEMOBJ:
>         return 0;
>      }
> 

Series is

Reviewed-by: Jose Fonseca <jfonseca at vmware.com>


More information about the mesa-dev mailing list