示例#1
0
static void
llvmpipe_end_query(struct pipe_context *pipe, struct pipe_query *q)
{
   struct llvmpipe_context *llvmpipe = llvmpipe_context( pipe );
   struct llvmpipe_query *pq = llvmpipe_query(q);

   lp_setup_end_query(llvmpipe->setup, pq);

   if (pq->type == PIPE_QUERY_PRIMITIVES_EMITTED) {
      pq->num_primitives_written = llvmpipe->so_stats.num_primitives_written;
   }

   if (pq->type == PIPE_QUERY_PRIMITIVES_GENERATED) {
      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;
      llvmpipe->dirty |= LP_NEW_OCCLUSION_QUERY;
   }
}
示例#2
0
文件: lp_query.c 项目: DirectFB/mesa
static void
llvmpipe_end_query(struct pipe_context *pipe, struct pipe_query *q)
{
   struct llvmpipe_context *llvmpipe = llvmpipe_context( pipe );
   struct llvmpipe_query *pq = llvmpipe_query(q);

   lp_setup_end_query(llvmpipe->setup, pq);

   switch (pq->type) {

   case PIPE_QUERY_PRIMITIVES_EMITTED:
      pq->num_primitives_written =
         llvmpipe->so_stats.num_primitives_written - pq->num_primitives_written;
      break;
   case PIPE_QUERY_PRIMITIVES_GENERATED:
      pq->num_primitives_generated =
         llvmpipe->so_stats.primitives_storage_needed - pq->num_primitives_generated;
      break;
   case PIPE_QUERY_SO_STATISTICS:
      pq->num_primitives_written =
         llvmpipe->so_stats.num_primitives_written - pq->num_primitives_written;
      pq->num_primitives_generated =
         llvmpipe->so_stats.primitives_storage_needed - pq->num_primitives_generated;
      break;
   case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
      pq->num_primitives_written =
         llvmpipe->so_stats.num_primitives_written - pq->num_primitives_written;
      pq->num_primitives_generated =
         llvmpipe->so_stats.primitives_storage_needed - pq->num_primitives_generated;
      break;
   case PIPE_QUERY_PIPELINE_STATISTICS:
      pq->stats.ia_vertices =
         llvmpipe->pipeline_statistics.ia_vertices - pq->stats.ia_vertices;
      pq->stats.ia_primitives =
         llvmpipe->pipeline_statistics.ia_primitives - pq->stats.ia_primitives;
      pq->stats.vs_invocations =
         llvmpipe->pipeline_statistics.vs_invocations - pq->stats.vs_invocations;
      pq->stats.gs_invocations =
         llvmpipe->pipeline_statistics.gs_invocations - pq->stats.gs_invocations;
      pq->stats.gs_primitives =
         llvmpipe->pipeline_statistics.gs_primitives - pq->stats.gs_primitives;
      pq->stats.c_invocations =
         llvmpipe->pipeline_statistics.c_invocations - pq->stats.c_invocations;
      pq->stats.c_primitives =
         llvmpipe->pipeline_statistics.c_primitives - pq->stats.c_primitives;
      pq->stats.ps_invocations =
         llvmpipe->pipeline_statistics.ps_invocations - pq->stats.ps_invocations;

      llvmpipe->active_statistics_queries--;
      break;
   case PIPE_QUERY_OCCLUSION_COUNTER:
   case PIPE_QUERY_OCCLUSION_PREDICATE:
      assert(llvmpipe->active_occlusion_queries);
      llvmpipe->active_occlusion_queries--;
      llvmpipe->dirty |= LP_NEW_OCCLUSION_QUERY;
      break;
   default:
      break;
   }
}