1525921ed51176255474c73adacfc6801a7bf2783Marek Olšák/************************************************************************** 2525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * 3525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * Copyright 2015 Advanced Micro Devices, Inc. 4525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * Copyright 2008 VMware, Inc. 5525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * All Rights Reserved. 6525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * 7525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * Permission is hereby granted, free of charge, to any person obtaining a 8525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * copy of this software and associated documentation files (the "Software"), 9525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * to deal in the Software without restriction, including without limitation 10525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * on the rights to use, copy, modify, merge, publish, distribute, sub 11525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * license, and/or sell copies of the Software, and to permit persons to whom 12525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * the Software is furnished to do so, subject to the following conditions: 13525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * 14525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * The above copyright notice and this permission notice (including the next 15525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * paragraph) shall be included in all copies or substantial portions of the 16525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * Software. 17525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * 18525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 21525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 22525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 23525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 24525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * USE OR OTHER DEALINGS IN THE SOFTWARE. 25525921ed51176255474c73adacfc6801a7bf2783Marek Olšák * 26525921ed51176255474c73adacfc6801a7bf2783Marek Olšák **************************************************************************/ 27525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 28525921ed51176255474c73adacfc6801a7bf2783Marek Olšák#ifndef DD_H_ 29525921ed51176255474c73adacfc6801a7bf2783Marek Olšák#define DD_H_ 30525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 31525921ed51176255474c73adacfc6801a7bf2783Marek Olšák#include "pipe/p_context.h" 32525921ed51176255474c73adacfc6801a7bf2783Marek Olšák#include "pipe/p_state.h" 33525921ed51176255474c73adacfc6801a7bf2783Marek Olšák#include "pipe/p_screen.h" 3489f73827d03e28af548cc11247ebd6e2825789afMarek Olšák#include "dd_util.h" 35b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák#include "os/os_thread.h" 36525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 37525921ed51176255474c73adacfc6801a7bf2783Marek Olšákenum dd_mode { 38525921ed51176255474c73adacfc6801a7bf2783Marek Olšák DD_DETECT_HANGS, 39b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák DD_DETECT_HANGS_PIPELINED, 40642cf400aa806281720acbe599a35a6a176c04b3Marek Olšák DD_DUMP_ALL_CALLS, 41642cf400aa806281720acbe599a35a6a176c04b3Marek Olšák DD_DUMP_APITRACE_CALL, 42525921ed51176255474c73adacfc6801a7bf2783Marek Olšák}; 43525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 44525921ed51176255474c73adacfc6801a7bf2783Marek Olšákstruct dd_screen 45525921ed51176255474c73adacfc6801a7bf2783Marek Olšák{ 46525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_screen base; 47525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_screen *screen; 48525921ed51176255474c73adacfc6801a7bf2783Marek Olšák unsigned timeout_ms; 49525921ed51176255474c73adacfc6801a7bf2783Marek Olšák enum dd_mode mode; 50525921ed51176255474c73adacfc6801a7bf2783Marek Olšák bool no_flush; 5141875ac4edd8c884225c44c0840bd20291b410caNicolai Hähnle bool verbose; 52b86d5ccae2b6280ad26d1060295fcc4963e90011Nicolai Hähnle unsigned skip_count; 53642cf400aa806281720acbe599a35a6a176c04b3Marek Olšák unsigned apitrace_dump_call; 54525921ed51176255474c73adacfc6801a7bf2783Marek Olšák}; 55525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 56e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšákenum call_type 57e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák{ 58e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák CALL_DRAW_VBO, 59e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák CALL_LAUNCH_GRID, 60e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák CALL_RESOURCE_COPY_REGION, 61e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák CALL_BLIT, 62e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák CALL_FLUSH_RESOURCE, 63e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák CALL_CLEAR, 64e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák CALL_CLEAR_BUFFER, 65e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák CALL_CLEAR_RENDER_TARGET, 66e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák CALL_CLEAR_DEPTH_STENCIL, 67e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák CALL_GENERATE_MIPMAP, 68e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák}; 69e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák 70e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšákstruct call_resource_copy_region 71e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák{ 72e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct pipe_resource *dst; 73e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák unsigned dst_level; 74e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák unsigned dstx, dsty, dstz; 75e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct pipe_resource *src; 76e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák unsigned src_level; 770795a3d54f7748d27020851f2e9b4b7637597590Marek Olšák struct pipe_box src_box; 78e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák}; 79e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák 80e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšákstruct call_clear 81e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák{ 82e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák unsigned buffers; 830795a3d54f7748d27020851f2e9b4b7637597590Marek Olšák union pipe_color_union color; 84e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák double depth; 85e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák unsigned stencil; 86e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák}; 87e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák 88e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšákstruct call_clear_buffer 89e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák{ 90e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct pipe_resource *res; 91e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák unsigned offset; 92e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák unsigned size; 93e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák const void *clear_value; 94e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák int clear_value_size; 95e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák}; 96e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák 97e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšákstruct call_generate_mipmap { 98e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct pipe_resource *res; 99e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák enum pipe_format format; 100e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák unsigned base_level; 101e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák unsigned last_level; 102e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák unsigned first_layer; 103e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák unsigned last_layer; 104e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák}; 105e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák 106e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšákstruct dd_call 107e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák{ 108e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák enum call_type type; 109e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák 110e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák union { 111e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct pipe_draw_info draw_vbo; 112e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct pipe_grid_info launch_grid; 113e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct call_resource_copy_region resource_copy_region; 114e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct pipe_blit_info blit; 115e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct pipe_resource *flush_resource; 116e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct call_clear clear; 117e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct call_clear_buffer clear_buffer; 118e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák struct call_generate_mipmap generate_mipmap; 119e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák } info; 120e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák}; 121e4079677a7819a79a4e59425688000f15ceb19d7Marek Olšák 122525921ed51176255474c73adacfc6801a7bf2783Marek Olšákstruct dd_query 123525921ed51176255474c73adacfc6801a7bf2783Marek Olšák{ 124525921ed51176255474c73adacfc6801a7bf2783Marek Olšák unsigned type; 125525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_query *query; 126525921ed51176255474c73adacfc6801a7bf2783Marek Olšák}; 127525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 128525921ed51176255474c73adacfc6801a7bf2783Marek Olšákstruct dd_state 129525921ed51176255474c73adacfc6801a7bf2783Marek Olšák{ 130525921ed51176255474c73adacfc6801a7bf2783Marek Olšák void *cso; 131525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 132525921ed51176255474c73adacfc6801a7bf2783Marek Olšák union { 133525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_blend_state blend; 134525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_depth_stencil_alpha_state dsa; 135525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_rasterizer_state rs; 136525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_sampler_state sampler; 137525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct { 138525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_vertex_element velems[PIPE_MAX_ATTRIBS]; 139525921ed51176255474c73adacfc6801a7bf2783Marek Olšák unsigned count; 140525921ed51176255474c73adacfc6801a7bf2783Marek Olšák } velems; 141525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_shader_state shader; 142525921ed51176255474c73adacfc6801a7bf2783Marek Olšák } state; 143525921ed51176255474c73adacfc6801a7bf2783Marek Olšák}; 144525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 14595c3025a4163128584900b8f377d299c8e707d17Marek Olšákstruct dd_draw_state 146525921ed51176255474c73adacfc6801a7bf2783Marek Olšák{ 147525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct { 148525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct dd_query *query; 149525921ed51176255474c73adacfc6801a7bf2783Marek Olšák bool condition; 150525921ed51176255474c73adacfc6801a7bf2783Marek Olšák unsigned mode; 151525921ed51176255474c73adacfc6801a7bf2783Marek Olšák } render_cond; 152525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 153525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_index_buffer index_buffer; 154525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_vertex_buffer vertex_buffers[PIPE_MAX_ATTRIBS]; 155525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 156525921ed51176255474c73adacfc6801a7bf2783Marek Olšák unsigned num_so_targets; 157525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_stream_output_target *so_targets[PIPE_MAX_SO_BUFFERS]; 158525921ed51176255474c73adacfc6801a7bf2783Marek Olšák unsigned so_offsets[PIPE_MAX_SO_BUFFERS]; 159525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 160525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct dd_state *shaders[PIPE_SHADER_TYPES]; 161525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_constant_buffer constant_buffers[PIPE_SHADER_TYPES][PIPE_MAX_CONSTANT_BUFFERS]; 162525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_sampler_view *sampler_views[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS]; 163525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct dd_state *sampler_states[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS]; 164bceff68114d5daab7a52a42db422ec8f6dc22328Ilia Mirkin struct pipe_image_view shader_images[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_IMAGES]; 165525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_shader_buffer shader_buffers[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_BUFFERS]; 166525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 167525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct dd_state *velems; 168525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct dd_state *rs; 169525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct dd_state *dsa; 170525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct dd_state *blend; 171525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 172525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_blend_color blend_color; 173525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_stencil_ref stencil_ref; 174525921ed51176255474c73adacfc6801a7bf2783Marek Olšák unsigned sample_mask; 175525921ed51176255474c73adacfc6801a7bf2783Marek Olšák unsigned min_samples; 176525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_clip_state clip_state; 177525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_framebuffer_state framebuffer_state; 178525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_poly_stipple polygon_stipple; 179525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_scissor_state scissors[PIPE_MAX_VIEWPORTS]; 180525921ed51176255474c73adacfc6801a7bf2783Marek Olšák struct pipe_viewport_state viewports[PIPE_MAX_VIEWPORTS]; 181525921ed51176255474c73adacfc6801a7bf2783Marek Olšák float tess_default_levels[6]; 182b86d5ccae2b6280ad26d1060295fcc4963e90011Nicolai Hähnle 18350b223547814cefc0e7130e199fabc4dbedf97ceMarek Olšák unsigned apitrace_call_number; 184525921ed51176255474c73adacfc6801a7bf2783Marek Olšák}; 185525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 186b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšákstruct dd_draw_state_copy 187b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák{ 188b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_draw_state base; 189b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák 190b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák /* dd_draw_state_copy does not reference real CSOs. Instead, it points to 191b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * these variables, which serve as storage. 192b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák */ 193b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_query render_cond; 194b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_state shaders[PIPE_SHADER_TYPES]; 195b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_state sampler_states[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS]; 196b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_state velems; 197b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_state rs; 198b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_state dsa; 199b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_state blend; 200b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák}; 201b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák 202b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšákstruct dd_draw_record { 203b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_draw_record *next; 204b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák 205b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák int64_t timestamp; 206b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák uint32_t sequence_no; 207b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák 208b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_call call; 209b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_draw_state_copy draw_state; 210b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák char *driver_state_log; 211b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák}; 212b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák 21395c3025a4163128584900b8f377d299c8e707d17Marek Olšákstruct dd_context 21495c3025a4163128584900b8f377d299c8e707d17Marek Olšák{ 21595c3025a4163128584900b8f377d299c8e707d17Marek Olšák struct pipe_context base; 21695c3025a4163128584900b8f377d299c8e707d17Marek Olšák struct pipe_context *pipe; 21795c3025a4163128584900b8f377d299c8e707d17Marek Olšák 21895c3025a4163128584900b8f377d299c8e707d17Marek Olšák struct dd_draw_state draw_state; 21995c3025a4163128584900b8f377d299c8e707d17Marek Olšák unsigned num_draw_calls; 220b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák 221b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák /* Pipelined hang detection. 222b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * 223b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * This is without unnecessary flushes and waits. There is a memory-based 224b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * fence that is incremented by clear_buffer every draw call. Driver fences 225b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * are not used. 226b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * 227b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * After each draw call, a new dd_draw_record is created that contains 228b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * a copy of all states, the output of pipe_context::dump_debug_state, 229b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * and it has a fence number assigned. That's done without knowing whether 230b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * that draw call is problematic or not. The record is added into the list 231b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * of all records. 232b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * 233b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * An independent, separate thread loops over the list of records and checks 234b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * their fences. Records with signalled fences are freed. On fence timeout, 235b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák * the thread dumps the record of the oldest unsignalled fence. 236b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák */ 237b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák pipe_thread thread; 238b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák pipe_mutex mutex; 239b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák int kill_thread; 240b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct pipe_resource *fence; 241b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct pipe_transfer *fence_transfer; 242b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák uint32_t *mapped_fence; 243b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák uint32_t sequence_no; 244b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák struct dd_draw_record *records; 245b47727a83ad6b5386f27b2c174a5c0f110a61038Marek Olšák int max_log_buffer_size; 24695c3025a4163128584900b8f377d299c8e707d17Marek Olšák}; 24795c3025a4163128584900b8f377d299c8e707d17Marek Olšák 248525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 249525921ed51176255474c73adacfc6801a7bf2783Marek Olšákstruct pipe_context * 250525921ed51176255474c73adacfc6801a7bf2783Marek Olšákdd_context_create(struct dd_screen *dscreen, struct pipe_context *pipe); 251525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 252525921ed51176255474c73adacfc6801a7bf2783Marek Olšákvoid 253525921ed51176255474c73adacfc6801a7bf2783Marek Olšákdd_init_draw_functions(struct dd_context *dctx); 254b47727a83ad6b5386f27b2c174a5c0f110a61038Marek OlšákPIPE_THREAD_ROUTINE(dd_thread_pipelined_hang_detect, input); 255525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 256525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 257525921ed51176255474c73adacfc6801a7bf2783Marek Olšákstatic inline struct dd_context * 258525921ed51176255474c73adacfc6801a7bf2783Marek Olšákdd_context(struct pipe_context *pipe) 259525921ed51176255474c73adacfc6801a7bf2783Marek Olšák{ 260525921ed51176255474c73adacfc6801a7bf2783Marek Olšák return (struct dd_context *)pipe; 261525921ed51176255474c73adacfc6801a7bf2783Marek Olšák} 262525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 263525921ed51176255474c73adacfc6801a7bf2783Marek Olšákstatic inline struct dd_screen * 264525921ed51176255474c73adacfc6801a7bf2783Marek Olšákdd_screen(struct pipe_screen *screen) 265525921ed51176255474c73adacfc6801a7bf2783Marek Olšák{ 266525921ed51176255474c73adacfc6801a7bf2783Marek Olšák return (struct dd_screen*)screen; 267525921ed51176255474c73adacfc6801a7bf2783Marek Olšák} 268525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 269525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 270525921ed51176255474c73adacfc6801a7bf2783Marek Olšák#define CTX_INIT(_member) \ 271525921ed51176255474c73adacfc6801a7bf2783Marek Olšák dctx->base._member = dctx->pipe->_member ? dd_context_##_member : NULL 272525921ed51176255474c73adacfc6801a7bf2783Marek Olšák 273525921ed51176255474c73adacfc6801a7bf2783Marek Olšák#endif /* DD_H_ */ 274