iris: Save/restore MI_PREDICATE_RESULT, not MI_PREDICATE_DATA.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 2 Apr 2019 06:28:06 +0000 (23:28 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 4 Apr 2019 18:41:10 +0000 (11:41 -0700)
MI_PREDICATE_DATA is an intermediate storage for the MI_PREDICATE
command's calculations - it holds the result of the subtraction when
the compare operation is SRCS_EQUAL or DELTAS_EQUAL.  But the actual
result of the predication is MI_PREDICATE_RESULT, which is what we
want to copy from the render context to the compute context.

src/gallium/drivers/iris/iris_context.h
src/gallium/drivers/iris/iris_draw.c
src/gallium/drivers/iris/iris_query.c

index 494c931d0f0a627df96a7eceecaaa06356032d1b..51b40f30cb840a03d516486f428aaeeeb857c356 100644 (file)
@@ -598,7 +598,7 @@ struct iris_context {
       enum iris_predicate_state predicate;
 
       /**
-       * Query BO with a MI_PREDICATE_DATA snapshot calculated on the
+       * Query BO with a MI_PREDICATE_RESULT snapshot calculated on the
        * render context that needs to be uploaded to the compute context.
        */
       struct iris_bo *compute_predicate;
index ab162583ca9054d7f75d5d57a4597b70b7943c11..e94346f33f08a2d68f63d2a30369b47f5d9ebbf6 100644 (file)
@@ -232,7 +232,7 @@ iris_launch_grid(struct pipe_context *ctx, const struct pipe_grid_info *grid)
    ice->vtbl.update_surface_base_address(batch, &ice->state.binder);
 
    if (ice->state.compute_predicate) {
-      ice->vtbl.load_register_mem64(batch, MI_PREDICATE_DATA,
+      ice->vtbl.load_register_mem64(batch, MI_PREDICATE_RESULT,
                                     ice->state.compute_predicate, 0);
       ice->state.compute_predicate = NULL;
    }
index 76816a7c0fd324bf49ee844a743a9907e58b6e29..904feba39cc08c4696c937b213c90fa9df1e6c0d 100644 (file)
@@ -117,8 +117,8 @@ struct iris_query {
 };
 
 struct iris_query_snapshots {
-   /** iris_render_condition's saved MI_PREDICATE_DATA value. */
-   uint64_t predicate_data;
+   /** iris_render_condition's saved MI_PREDICATE_RESULT value. */
+   uint64_t predicate_result;
 
    /** Have the start/end snapshots landed? */
    uint64_t snapshots_landed;
@@ -129,7 +129,7 @@ struct iris_query_snapshots {
 };
 
 struct iris_query_so_overflow {
-   uint64_t predicate_data;
+   uint64_t predicate_result;
    uint64_t snapshots_landed;
 
    struct {
@@ -1048,12 +1048,12 @@ set_predicate_for_result(struct iris_context *ice,
    /* We immediately set the predicate on the render batch, as all the
     * counters come from 3D operations.  However, we may need to predicate
     * a compute dispatch, which executes in a different GEM context and has
-    * a different MI_PREDICATE_DATA register.  So, we save the result to
+    * a different MI_PREDICATE_RESULT register.  So, we save the result to
     * memory and reload it in iris_launch_grid.
     */
    unsigned offset = q->query_state_ref.offset +
-                     offsetof(struct iris_query_snapshots, predicate_data);
-   ice->vtbl.store_register_mem64(batch, MI_PREDICATE_DATA,
+                     offsetof(struct iris_query_snapshots, predicate_result);
+   ice->vtbl.store_register_mem64(batch, MI_PREDICATE_RESULT,
                                   bo, offset, false);
    ice->state.compute_predicate = bo;
 }