Re: [Mesa-dev] [PATCH 1/3] softpipe: support nested/overlapping queries for all query types

2013-08-26 Thread Brian Paul

On 08/23/2013 03:10 PM, srol...@vmware.com wrote:

From: Roland Scheidegger srol...@vmware.com

There's just no way resetting the counters is working with nested/overlapping
queries.
---
  src/gallium/drivers/softpipe/sp_prim_vbuf.c |2 +-
  src/gallium/drivers/softpipe/sp_query.c |   33 +--
  2 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/src/gallium/drivers/softpipe/sp_prim_vbuf.c 
b/src/gallium/drivers/softpipe/sp_prim_vbuf.c
index 5d0b5e1..80c6450 100644
--- a/src/gallium/drivers/softpipe/sp_prim_vbuf.c
+++ b/src/gallium/drivers/softpipe/sp_prim_vbuf.c
@@ -595,7 +595,7 @@ sp_vbuf_so_info(struct vbuf_render *vbr, uint primitives, 
uint vertices,
 struct softpipe_context *softpipe = cvbr-softpipe;

 softpipe-so_stats.num_primitives_written += primitives;
-   softpipe-so_stats.primitives_storage_needed =
+   softpipe-so_stats.primitives_storage_needed +=
vertices * 4 /*sizeof(float|int32)*/ * 4 /*x,y,z,w*/;
 softpipe-num_primitives_generated += prim_generated;
  }
diff --git a/src/gallium/drivers/softpipe/sp_query.c 
b/src/gallium/drivers/softpipe/sp_query.c
index daeef53..ca15f03 100644
--- a/src/gallium/drivers/softpipe/sp_query.c
+++ b/src/gallium/drivers/softpipe/sp_query.c
@@ -99,22 +99,17 @@ softpipe_begin_query(struct pipe_context *pipe, struct 
pipe_query *q)
sq-start = os_time_get_nano();
break;
 case PIPE_QUERY_SO_STATISTICS:
-  sq-so.primitives_storage_needed = 0;
-  sq-num_primitives_generated = 0;
-  softpipe-num_primitives_generated = 0;
-  sq-so.num_primitives_written = 0;
-  softpipe-so_stats.num_primitives_written = 0;
+  sq-so.num_primitives_written = 
softpipe-so_stats.num_primitives_written;
+  sq-so.primitives_storage_needed = softpipe-num_primitives_generated;
break;
 case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
sq-end = FALSE;
break;
 case PIPE_QUERY_PRIMITIVES_EMITTED:
-  sq-so.num_primitives_written = 0;
-  softpipe-so_stats.num_primitives_written = 0;
+  sq-so.num_primitives_written = 
softpipe-so_stats.num_primitives_written;
break;
 case PIPE_QUERY_PRIMITIVES_GENERATED:
-  sq-num_primitives_generated = 0;
-  softpipe-num_primitives_generated = 0;
+  sq-num_primitives_generated = softpipe-num_primitives_generated;
break;
 case PIPE_QUERY_TIMESTAMP:
 case PIPE_QUERY_GPU_FINISHED:
@@ -158,21 +153,25 @@ softpipe_end_query(struct pipe_context *pipe, struct 
pipe_query *q)
sq-end = os_time_get_nano();
break;
 case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
-  sq-end = (softpipe-num_primitives_generated 
- softpipe-so_stats.num_primitives_written);
+  sq-so.num_primitives_written =
+ softpipe-so_stats.num_primitives_written - 
sq-so.num_primitives_written;
+  sq-num_primitives_generated =
+ softpipe-num_primitives_generated - sq-num_primitives_generated;
+  sq-end = sq-num_primitives_generated  sq-so.num_primitives_written;
break;
 case PIPE_QUERY_SO_STATISTICS:
-  sq-num_primitives_generated =
- softpipe-num_primitives_generated;
sq-so.num_primitives_written =
- softpipe-so_stats.num_primitives_written;
+ softpipe-so_stats.num_primitives_written - 
sq-so.num_primitives_written;
+  sq-so.primitives_storage_needed =
+ softpipe-num_primitives_generated - sq-so.primitives_storage_needed;
break;
 case PIPE_QUERY_PRIMITIVES_EMITTED:
sq-so.num_primitives_written =
- softpipe-so_stats.num_primitives_written;
+ softpipe-so_stats.num_primitives_written - 
sq-so.num_primitives_written;
break;
 case PIPE_QUERY_PRIMITIVES_GENERATED:
-  sq-num_primitives_generated = softpipe-num_primitives_generated;
+  sq-num_primitives_generated =
+ softpipe-num_primitives_generated - sq-num_primitives_generated;
break;
 case PIPE_QUERY_GPU_FINISHED:
 case PIPE_QUERY_TIMESTAMP_DISJOINT:
@@ -219,7 +218,7 @@ softpipe_get_query_result(struct pipe_context *pipe,
struct pipe_query_data_so_statistics *stats =
   (struct pipe_query_data_so_statistics *)vresult;
stats-num_primitives_written = sq-so.num_primitives_written;
-  stats-primitives_storage_needed = sq-num_primitives_generated;
+  stats-primitives_storage_needed = sq-so.primitives_storage_needed;
 }
break;
 case PIPE_QUERY_PIPELINE_STATISTICS:



For the series:
Reviewed-by: Brian Paul bri...@vmware.com


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/3] softpipe: support nested/overlapping queries for all query types

2013-08-23 Thread sroland
From: Roland Scheidegger srol...@vmware.com

There's just no way resetting the counters is working with nested/overlapping
queries.
---
 src/gallium/drivers/softpipe/sp_prim_vbuf.c |2 +-
 src/gallium/drivers/softpipe/sp_query.c |   33 +--
 2 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/src/gallium/drivers/softpipe/sp_prim_vbuf.c 
b/src/gallium/drivers/softpipe/sp_prim_vbuf.c
index 5d0b5e1..80c6450 100644
--- a/src/gallium/drivers/softpipe/sp_prim_vbuf.c
+++ b/src/gallium/drivers/softpipe/sp_prim_vbuf.c
@@ -595,7 +595,7 @@ sp_vbuf_so_info(struct vbuf_render *vbr, uint primitives, 
uint vertices,
struct softpipe_context *softpipe = cvbr-softpipe;
 
softpipe-so_stats.num_primitives_written += primitives;
-   softpipe-so_stats.primitives_storage_needed =
+   softpipe-so_stats.primitives_storage_needed +=
   vertices * 4 /*sizeof(float|int32)*/ * 4 /*x,y,z,w*/;
softpipe-num_primitives_generated += prim_generated;
 }
diff --git a/src/gallium/drivers/softpipe/sp_query.c 
b/src/gallium/drivers/softpipe/sp_query.c
index daeef53..ca15f03 100644
--- a/src/gallium/drivers/softpipe/sp_query.c
+++ b/src/gallium/drivers/softpipe/sp_query.c
@@ -99,22 +99,17 @@ softpipe_begin_query(struct pipe_context *pipe, struct 
pipe_query *q)
   sq-start = os_time_get_nano();
   break;
case PIPE_QUERY_SO_STATISTICS:
-  sq-so.primitives_storage_needed = 0;
-  sq-num_primitives_generated = 0;
-  softpipe-num_primitives_generated = 0;
-  sq-so.num_primitives_written = 0;
-  softpipe-so_stats.num_primitives_written = 0;
+  sq-so.num_primitives_written = 
softpipe-so_stats.num_primitives_written;
+  sq-so.primitives_storage_needed = softpipe-num_primitives_generated;
   break;
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
   sq-end = FALSE;
   break;
case PIPE_QUERY_PRIMITIVES_EMITTED:
-  sq-so.num_primitives_written = 0;
-  softpipe-so_stats.num_primitives_written = 0;
+  sq-so.num_primitives_written = 
softpipe-so_stats.num_primitives_written;
   break;
case PIPE_QUERY_PRIMITIVES_GENERATED:
-  sq-num_primitives_generated = 0;
-  softpipe-num_primitives_generated = 0;
+  sq-num_primitives_generated = softpipe-num_primitives_generated;
   break;
case PIPE_QUERY_TIMESTAMP:
case PIPE_QUERY_GPU_FINISHED:
@@ -158,21 +153,25 @@ softpipe_end_query(struct pipe_context *pipe, struct 
pipe_query *q)
   sq-end = os_time_get_nano();
   break;
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
-  sq-end = (softpipe-num_primitives_generated 
- softpipe-so_stats.num_primitives_written);
+  sq-so.num_primitives_written =
+ softpipe-so_stats.num_primitives_written - 
sq-so.num_primitives_written;
+  sq-num_primitives_generated =
+ softpipe-num_primitives_generated - sq-num_primitives_generated;
+  sq-end = sq-num_primitives_generated  sq-so.num_primitives_written;
   break;
case PIPE_QUERY_SO_STATISTICS:
-  sq-num_primitives_generated =
- softpipe-num_primitives_generated;
   sq-so.num_primitives_written =
- softpipe-so_stats.num_primitives_written;
+ softpipe-so_stats.num_primitives_written - 
sq-so.num_primitives_written;
+  sq-so.primitives_storage_needed =
+ softpipe-num_primitives_generated - sq-so.primitives_storage_needed;
   break;
case PIPE_QUERY_PRIMITIVES_EMITTED:
   sq-so.num_primitives_written =
- softpipe-so_stats.num_primitives_written;
+ softpipe-so_stats.num_primitives_written - 
sq-so.num_primitives_written;
   break;
case PIPE_QUERY_PRIMITIVES_GENERATED:
-  sq-num_primitives_generated = softpipe-num_primitives_generated;
+  sq-num_primitives_generated =
+ softpipe-num_primitives_generated - sq-num_primitives_generated;
   break;
case PIPE_QUERY_GPU_FINISHED:
case PIPE_QUERY_TIMESTAMP_DISJOINT:
@@ -219,7 +218,7 @@ softpipe_get_query_result(struct pipe_context *pipe,
   struct pipe_query_data_so_statistics *stats =
  (struct pipe_query_data_so_statistics *)vresult;
   stats-num_primitives_written = sq-so.num_primitives_written;
-  stats-primitives_storage_needed = sq-num_primitives_generated;
+  stats-primitives_storage_needed = sq-so.primitives_storage_needed;
}
   break;
case PIPE_QUERY_PIPELINE_STATISTICS:
-- 
1.7.9.5
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev