1646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark/* -*- mode: C; c-file-style: "k&r"; tab-width 4; indent-tabs-mode: t; -*- */ 2646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark 3646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark/* 413a0cf4480b908aafa337c121cbdfc338318f088Rob Clark * Copyright (C) 2013 Rob Clark <robclark@freedesktop.org> 5646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * 6646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * Permission is hereby granted, free of charge, to any person obtaining a 7646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * copy of this software and associated documentation files (the "Software"), 8646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * to deal in the Software without restriction, including without limitation 9646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * and/or sell copies of the Software, and to permit persons to whom the 11646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * Software is furnished to do so, subject to the following conditions: 12646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * 13646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * The above copyright notice and this permission notice (including the next 14646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * paragraph) shall be included in all copies or substantial portions of the 15646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * Software. 16646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * 17646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * SOFTWARE. 24646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * 25646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * Authors: 26646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark * Rob Clark <robclark@freedesktop.org> 27646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark */ 28646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark 29646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark#ifndef FREEDRENO_QUERY_H_ 30646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark#define FREEDRENO_QUERY_H_ 31646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark 32646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark#include "pipe/p_context.h" 33646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark 3413a0cf4480b908aafa337c121cbdfc338318f088Rob Clarkstruct fd_context; 3513a0cf4480b908aafa337c121cbdfc338318f088Rob Clarkstruct fd_query; 3613a0cf4480b908aafa337c121cbdfc338318f088Rob Clark 3713a0cf4480b908aafa337c121cbdfc338318f088Rob Clarkstruct fd_query_funcs { 3813a0cf4480b908aafa337c121cbdfc338318f088Rob Clark void (*destroy_query)(struct fd_context *ctx, 3913a0cf4480b908aafa337c121cbdfc338318f088Rob Clark struct fd_query *q); 4096f164f6f047833091eb98a73aa80c31dc94f962Samuel Pitoiset boolean (*begin_query)(struct fd_context *ctx, struct fd_query *q); 4113a0cf4480b908aafa337c121cbdfc338318f088Rob Clark void (*end_query)(struct fd_context *ctx, struct fd_query *q); 4213a0cf4480b908aafa337c121cbdfc338318f088Rob Clark boolean (*get_query_result)(struct fd_context *ctx, 4313a0cf4480b908aafa337c121cbdfc338318f088Rob Clark struct fd_query *q, boolean wait, 4413a0cf4480b908aafa337c121cbdfc338318f088Rob Clark union pipe_query_result *result); 4513a0cf4480b908aafa337c121cbdfc338318f088Rob Clark}; 4613a0cf4480b908aafa337c121cbdfc338318f088Rob Clark 4713a0cf4480b908aafa337c121cbdfc338318f088Rob Clarkstruct fd_query { 4813a0cf4480b908aafa337c121cbdfc338318f088Rob Clark const struct fd_query_funcs *funcs; 4913a0cf4480b908aafa337c121cbdfc338318f088Rob Clark bool active; 5013a0cf4480b908aafa337c121cbdfc338318f088Rob Clark int type; 5113a0cf4480b908aafa337c121cbdfc338318f088Rob Clark}; 5213a0cf4480b908aafa337c121cbdfc338318f088Rob Clark 5313a0cf4480b908aafa337c121cbdfc338318f088Rob Clarkstatic inline struct fd_query * 5413a0cf4480b908aafa337c121cbdfc338318f088Rob Clarkfd_query(struct pipe_query *pq) 5513a0cf4480b908aafa337c121cbdfc338318f088Rob Clark{ 5613a0cf4480b908aafa337c121cbdfc338318f088Rob Clark return (struct fd_query *)pq; 5713a0cf4480b908aafa337c121cbdfc338318f088Rob Clark} 5813a0cf4480b908aafa337c121cbdfc338318f088Rob Clark 5913a0cf4480b908aafa337c121cbdfc338318f088Rob Clark#define FD_QUERY_DRAW_CALLS (PIPE_QUERY_DRIVER_SPECIFIC + 0) 6013a0cf4480b908aafa337c121cbdfc338318f088Rob Clark#define FD_QUERY_BATCH_TOTAL (PIPE_QUERY_DRIVER_SPECIFIC + 1) /* total # of batches (submits) */ 6113a0cf4480b908aafa337c121cbdfc338318f088Rob Clark#define FD_QUERY_BATCH_SYSMEM (PIPE_QUERY_DRIVER_SPECIFIC + 2) /* batches using system memory (GMEM bypass) */ 6213a0cf4480b908aafa337c121cbdfc338318f088Rob Clark#define FD_QUERY_BATCH_GMEM (PIPE_QUERY_DRIVER_SPECIFIC + 3) /* batches using GMEM */ 6313a0cf4480b908aafa337c121cbdfc338318f088Rob Clark#define FD_QUERY_BATCH_RESTORE (PIPE_QUERY_DRIVER_SPECIFIC + 4) /* batches requiring GMEM restore */ 6413a0cf4480b908aafa337c121cbdfc338318f088Rob Clark 65646c16af6e23184078995bcd3fc3db00b7c21250Rob Clarkvoid fd_query_screen_init(struct pipe_screen *pscreen); 66646c16af6e23184078995bcd3fc3db00b7c21250Rob Clarkvoid fd_query_context_init(struct pipe_context *pctx); 67646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark 680e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clarkstatic inline bool 690e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clarkskip_begin_query(int type) 700e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clark{ 710e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clark switch (type) { 720e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clark case PIPE_QUERY_TIMESTAMP: 730e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clark case PIPE_QUERY_GPU_FINISHED: 740e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clark return true; 750e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clark default: 760e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clark return false; 770e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clark } 780e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clark} 790e91dccf9cd2894e46028bac39caa54d80e39e8eRob Clark 80646c16af6e23184078995bcd3fc3db00b7c21250Rob Clark#endif /* FREEDRENO_QUERY_H_ */ 81