From: Marek Olšák <marek.ol...@amd.com> typically useful for hw bring-up --- src/gallium/auxiliary/util/u_helpers.c | 51 ++++++++++++++++++++++++++++++++++ src/gallium/auxiliary/util/u_helpers.h | 8 ++++++ 2 files changed, 59 insertions(+)
diff --git a/src/gallium/auxiliary/util/u_helpers.c b/src/gallium/auxiliary/util/u_helpers.c index 35cca82..5b46fa1 100644 --- a/src/gallium/auxiliary/util/u_helpers.c +++ b/src/gallium/auxiliary/util/u_helpers.c @@ -21,20 +21,21 @@ * IN NO EVENT SHALL THE AUTHORS AND/OR THEIR SUPPLIERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * **************************************************************************/ #include "util/u_helpers.h" #include "util/u_inlines.h" #include "util/u_upload_mgr.h" +#include <inttypes.h> /** * This function is used to copy an array of pipe_vertex_buffer structures, * while properly referencing the pipe_vertex_buffer::buffer member. * * enabled_buffers is updated such that the bits corresponding to the indices * of disabled buffers are set to 0 and the enabled ones are set to 1. * * \sa util_copy_framebuffer_state */ @@ -132,10 +133,60 @@ util_save_and_upload_index_buffer(struct pipe_context *pipe, u_upload_unmap(pipe->stream_uploader); new_ib.offset -= start_offset; new_ib.index_size = ib->index_size; util_set_index_buffer(out_saved, ib); pipe->set_index_buffer(pipe, &new_ib); pipe_resource_reference(&new_ib.buffer, NULL); return true; } + +struct pipe_query * +util_begin_pipestat_query(struct pipe_context *ctx) +{ + struct pipe_query *q = + ctx->create_query(ctx, PIPE_QUERY_PIPELINE_STATISTICS, 0); + if (!q) + return NULL; + + ctx->begin_query(ctx, q); + return q; +} + +void +util_end_pipestat_query(struct pipe_context *ctx, struct pipe_query *q, + FILE *f) +{ + static unsigned counter; + struct pipe_query_data_pipeline_statistics stats; + + ctx->end_query(ctx, q); + ctx->get_query_result(ctx, q, true, (void*)&stats); + ctx->destroy_query(ctx, q); + + fprintf(f, + "Draw call %u:\n" + " ia_vertices = %"PRIu64"\n" + " ia_primitives = %"PRIu64"\n" + " vs_invocations = %"PRIu64"\n" + " gs_invocations = %"PRIu64"\n" + " gs_primitives = %"PRIu64"\n" + " c_invocations = %"PRIu64"\n" + " c_primitives = %"PRIu64"\n" + " ps_invocations = %"PRIu64"\n" + " hs_invocations = %"PRIu64"\n" + " ds_invocations = %"PRIu64"\n" + " cs_invocations = %"PRIu64"\n", + p_atomic_inc_return(&counter), + stats.ia_vertices, + stats.ia_primitives, + stats.vs_invocations, + stats.gs_invocations, + stats.gs_primitives, + stats.c_invocations, + stats.c_primitives, + stats.ps_invocations, + stats.hs_invocations, + stats.ds_invocations, + stats.cs_invocations); +} diff --git a/src/gallium/auxiliary/util/u_helpers.h b/src/gallium/auxiliary/util/u_helpers.h index 7de960b..2b382a1 100644 --- a/src/gallium/auxiliary/util/u_helpers.h +++ b/src/gallium/auxiliary/util/u_helpers.h @@ -22,20 +22,21 @@ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * **************************************************************************/ #ifndef U_HELPERS_H #define U_HELPERS_H #include "pipe/p_state.h" +#include <stdio.h> #ifdef __cplusplus extern "C" { #endif void util_set_vertex_buffers_mask(struct pipe_vertex_buffer *dst, uint32_t *enabled_buffers, const struct pipe_vertex_buffer *src, unsigned start_slot, unsigned count); @@ -45,15 +46,22 @@ void util_set_vertex_buffers_count(struct pipe_vertex_buffer *dst, unsigned start_slot, unsigned count); void util_set_index_buffer(struct pipe_index_buffer *dst, const struct pipe_index_buffer *src); bool util_save_and_upload_index_buffer(struct pipe_context *pipe, const struct pipe_draw_info *info, const struct pipe_index_buffer *ib, struct pipe_index_buffer *out_saved); +struct pipe_query * +util_begin_pipestat_query(struct pipe_context *ctx); + +void +util_end_pipestat_query(struct pipe_context *ctx, struct pipe_query *q, + FILE *f); + #ifdef __cplusplus } #endif #endif -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev