panfrost: Wire up statistics for primitives
GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN should now be handled. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
#include "util/half_float.h"
|
||||
#include "util/u_helpers.h"
|
||||
#include "util/u_format.h"
|
||||
#include "util/u_prim.h"
|
||||
#include "util/u_prim_restart.h"
|
||||
#include "indices/u_primconvert.h"
|
||||
#include "tgsi/tgsi_parse.h"
|
||||
@@ -234,6 +235,9 @@ panfrost_invalidate_frame(struct panfrost_context *ctx)
|
||||
|
||||
/* XXX */
|
||||
ctx->dirty |= PAN_DIRTY_SAMPLERS | PAN_DIRTY_TEXTURES;
|
||||
|
||||
/* TODO: When does this need to be handled? */
|
||||
ctx->active_queries = true;
|
||||
}
|
||||
|
||||
/* In practice, every field of these payloads should be configurable
|
||||
@@ -1560,6 +1564,26 @@ panfrost_scissor_culls_everything(struct panfrost_context *ctx)
|
||||
return (ss->minx == ss->maxx) || (ss->miny == ss->maxy);
|
||||
}
|
||||
|
||||
/* Count generated primitives (when there is no geom/tess shaders) for
|
||||
* transform feedback */
|
||||
|
||||
static void
|
||||
panfrost_statistics_record(
|
||||
struct panfrost_context *ctx,
|
||||
const struct pipe_draw_info *info)
|
||||
{
|
||||
if (!ctx->active_queries)
|
||||
return;
|
||||
|
||||
uint32_t prims = u_prims_for_vertices(info->mode, info->count);
|
||||
ctx->prims_generated += prims;
|
||||
|
||||
if (ctx->streamout.num_targets <= 0)
|
||||
return;
|
||||
|
||||
ctx->tf_prims_generated += prims;
|
||||
}
|
||||
|
||||
static void
|
||||
panfrost_draw_vbo(
|
||||
struct pipe_context *pipe,
|
||||
@@ -1646,6 +1670,8 @@ panfrost_draw_vbo(
|
||||
draw_flags |= 0x800;
|
||||
}
|
||||
|
||||
panfrost_statistics_record(ctx, info);
|
||||
|
||||
if (info->index_size) {
|
||||
/* Calculate the min/max index used so we can figure out how
|
||||
* many times to invoke the vertex shader */
|
||||
|
||||
Reference in New Issue
Block a user