On Sat, Feb 11, 2017 at 9:58 PM, Marek Olšák <mar...@gmail.com> wrote: > From: Marek Olšák <marek.ol...@amd.com> > > --- > src/gallium/drivers/radeon/r600_query.c | 25 > ++++++++++++++++++++++- > src/gallium/drivers/radeon/r600_query.h | 1 + > src/gallium/drivers/radeon/radeon_winsys.h | 1 + > src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 2 ++ > src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 2 ++ > 5 files changed, 30 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/drivers/radeon/r600_query.c > b/src/gallium/drivers/radeon/r600_query.c > index 05741d3..8009416 100644 > --- a/src/gallium/drivers/radeon/r600_query.c > +++ b/src/gallium/drivers/radeon/r600_query.c > @@ -19,37 +19,41 @@ > * THE AUTHOR(S) 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 "r600_query.h" > #include "r600_cs.h" > #include "util/u_memory.h" > #include "util/u_upload_mgr.h" > - > +#include "os/os_time.h" > #include "tgsi/tgsi_text.h" > > struct r600_hw_query_params { > unsigned start_offset; > unsigned end_offset; > unsigned fence_offset; > unsigned pair_stride; > unsigned pair_count; > }; > > /* Queries without buffer handling or suspend/resume. */ > struct r600_query_sw { > struct r600_query b; > > uint64_t begin_result; > uint64_t end_result; > + > + uint64_t begin_time; > + uint64_t end_time; > + > /* Fence for GPU_FINISHED. */ > struct pipe_fence_handle *fence; > }; > > static void r600_query_sw_destroy(struct r600_common_context *rctx, > struct r600_query *rquery) > { > struct pipe_screen *screen = rctx->b.screen; > struct r600_query_sw *query = (struct r600_query_sw *)rquery; > > @@ -69,28 +73,30 @@ static enum radeon_value_id winsys_id_from_type(unsigned > type) > case R600_QUERY_NUM_GFX_IBS: return RADEON_NUM_GFX_IBS; > case R600_QUERY_NUM_SDMA_IBS: return RADEON_NUM_SDMA_IBS; > case R600_QUERY_NUM_BYTES_MOVED: return RADEON_NUM_BYTES_MOVED; > case R600_QUERY_NUM_EVICTIONS: return RADEON_NUM_EVICTIONS; > case R600_QUERY_VRAM_USAGE: return RADEON_VRAM_USAGE; > case R600_QUERY_VRAM_VIS_USAGE: return RADEON_VRAM_VIS_USAGE; > case R600_QUERY_GTT_USAGE: return RADEON_GTT_USAGE; > case R600_QUERY_GPU_TEMPERATURE: return RADEON_GPU_TEMPERATURE; > case R600_QUERY_CURRENT_GPU_SCLK: return RADEON_CURRENT_SCLK; > case R600_QUERY_CURRENT_GPU_MCLK: return RADEON_CURRENT_MCLK; > + case R600_QUERY_CS_THREAD_BUSY: return RADEON_CS_THREAD_TIME; > default: unreachable("query type does not correspond to winsys id"); > } > } > > static bool r600_query_sw_begin(struct r600_common_context *rctx, > struct r600_query *rquery) > { > struct r600_query_sw *query = (struct r600_query_sw *)rquery; > + enum radeon_value_id ws_id; > > switch(query->b.type) { > case PIPE_QUERY_TIMESTAMP_DISJOINT: > case PIPE_QUERY_GPU_FINISHED: > break; > case R600_QUERY_DRAW_CALLS: > query->begin_result = rctx->num_draw_calls; > break; > case R600_QUERY_SPILL_DRAW_CALLS: > query->begin_result = rctx->num_spill_draw_calls; > @@ -139,22 +145,28 @@ static bool r600_query_sw_begin(struct > r600_common_context *rctx, > case R600_QUERY_NUM_MAPPED_BUFFERS: > query->begin_result = 0; > break; > case R600_QUERY_BUFFER_WAIT_TIME: > case R600_QUERY_NUM_GFX_IBS: > case R600_QUERY_NUM_SDMA_IBS: > case R600_QUERY_NUM_BYTES_MOVED: > case R600_QUERY_NUM_EVICTIONS: { > enum radeon_value_id ws_id = > winsys_id_from_type(query->b.type); > query->begin_result = rctx->ws->query_value(rctx->ws, ws_id); > + query->begin_time = os_time_get_nano(); > break;
Is this needed? The corresponding end_time is never set. Gražvydas _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev