Module: Mesa
Branch: master
Commit: 26d46b94b4f03a8a5203539949e19124e3cdefad
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=26d46b94b4f03a8a5203539949e19124e3cdefad

Author: Roland Scheidegger <srol...@vmware.com>
Date:   Tue Aug 15 17:52:41 2017 +0200

softpipe: enable PIPE_CAP_QUERY_SO_OVERFLOW

The driver was supposed to support this since way before the GL spec for it
existed, albeit it was apparently broken, so fix and enable it.

Reviewed-by: Jose Fonseca <jfons...@vmware.com>

---

 docs/features.txt                        | 2 +-
 src/gallium/drivers/softpipe/sp_query.c  | 7 ++++++-
 src/gallium/drivers/softpipe/sp_screen.c | 3 ++-
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/docs/features.txt b/docs/features.txt
index ac7645d069..ace46692b5 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)
+  GL_ARB_transform_feedback_overflow_query              DONE (i965/gen6+, 
radeonsi, 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/softpipe/sp_query.c 
b/src/gallium/drivers/softpipe/sp_query.c
index bec0116a56..63f6c4be04 100644
--- a/src/gallium/drivers/softpipe/sp_query.c
+++ b/src/gallium/drivers/softpipe/sp_query.c
@@ -63,6 +63,7 @@ softpipe_create_query(struct pipe_context *pipe,
           type == PIPE_QUERY_TIME_ELAPSED ||
           type == PIPE_QUERY_SO_STATISTICS ||
           type == PIPE_QUERY_SO_OVERFLOW_PREDICATE ||
+          type == PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE ||
           type == PIPE_QUERY_PRIMITIVES_EMITTED ||
           type == PIPE_QUERY_PRIMITIVES_GENERATED || 
           type == PIPE_QUERY_PIPELINE_STATISTICS ||
@@ -102,7 +103,9 @@ softpipe_begin_query(struct pipe_context *pipe, struct 
pipe_query *q)
       sq->so.primitives_storage_needed = 
softpipe->so_stats.primitives_storage_needed;
       break;
    case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
-      sq->end = FALSE;
+   case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:
+      sq->so.num_primitives_written = 
softpipe->so_stats.num_primitives_written;
+      sq->so.primitives_storage_needed = 
softpipe->so_stats.primitives_storage_needed;
       break;
    case PIPE_QUERY_PRIMITIVES_EMITTED:
       sq->so.num_primitives_written = 
softpipe->so_stats.num_primitives_written;
@@ -153,6 +156,7 @@ softpipe_end_query(struct pipe_context *pipe, struct 
pipe_query *q)
       sq->end = os_time_get_nano();
       break;
    case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
+   case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:
       sq->so.num_primitives_written =
          softpipe->so_stats.num_primitives_written - 
sq->so.num_primitives_written;
       sq->so.primitives_storage_needed =
@@ -230,6 +234,7 @@ softpipe_get_query_result(struct pipe_context *pipe,
       vresult->b = TRUE;
       break;
    case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
+   case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:
       vresult->b = sq->end != 0;
       break;
    case PIPE_QUERY_TIMESTAMP_DISJOINT: {
diff --git a/src/gallium/drivers/softpipe/sp_screen.c 
b/src/gallium/drivers/softpipe/sp_screen.c
index 0feef2189a..2988095eec 100644
--- a/src/gallium/drivers/softpipe/sp_screen.c
+++ b/src/gallium/drivers/softpipe/sp_screen.c
@@ -220,6 +220,8 @@ softpipe_get_param(struct pipe_screen *screen, enum 
pipe_cap param)
       return 31;
    case PIPE_CAP_DRAW_INDIRECT:
       return 1;
+   case PIPE_CAP_QUERY_SO_OVERFLOW:
+      return 1;
 
    case PIPE_CAP_VENDOR_ID:
       return 0xFFFFFFFF;
@@ -307,7 +309,6 @@ softpipe_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;
    case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to