xref: /aosp_15_r20/external/mesa3d/src/intel/vulkan/anv_util.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2015 Intel Corporation
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  * Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*61046927SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21*61046927SAndroid Build Coastguard Worker  * IN THE SOFTWARE.
22*61046927SAndroid Build Coastguard Worker  */
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker #include <stdarg.h>
25*61046927SAndroid Build Coastguard Worker #include <stdio.h>
26*61046927SAndroid Build Coastguard Worker #include <stdlib.h>
27*61046927SAndroid Build Coastguard Worker #include <string.h>
28*61046927SAndroid Build Coastguard Worker #include <errno.h>
29*61046927SAndroid Build Coastguard Worker #include <assert.h>
30*61046927SAndroid Build Coastguard Worker 
31*61046927SAndroid Build Coastguard Worker #include "anv_private.h"
32*61046927SAndroid Build Coastguard Worker #include "vk_enum_to_str.h"
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker void
__anv_perf_warn(struct anv_device * device,const struct vk_object_base * object,const char * file,int line,const char * format,...)35*61046927SAndroid Build Coastguard Worker __anv_perf_warn(struct anv_device *device,
36*61046927SAndroid Build Coastguard Worker                 const struct vk_object_base *object,
37*61046927SAndroid Build Coastguard Worker                 const char *file, int line, const char *format, ...)
38*61046927SAndroid Build Coastguard Worker {
39*61046927SAndroid Build Coastguard Worker    va_list ap;
40*61046927SAndroid Build Coastguard Worker    char buffer[256];
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker    va_start(ap, format);
43*61046927SAndroid Build Coastguard Worker    vsnprintf(buffer, sizeof(buffer), format, ap);
44*61046927SAndroid Build Coastguard Worker    va_end(ap);
45*61046927SAndroid Build Coastguard Worker 
46*61046927SAndroid Build Coastguard Worker    if (object) {
47*61046927SAndroid Build Coastguard Worker       __vk_log(VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,
48*61046927SAndroid Build Coastguard Worker                VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT,
49*61046927SAndroid Build Coastguard Worker                VK_LOG_OBJS(object), file, line,
50*61046927SAndroid Build Coastguard Worker                "PERF: %s", buffer);
51*61046927SAndroid Build Coastguard Worker    } else {
52*61046927SAndroid Build Coastguard Worker       __vk_log(VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,
53*61046927SAndroid Build Coastguard Worker                VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT,
54*61046927SAndroid Build Coastguard Worker                VK_LOG_NO_OBJS(device->physical->instance), file, line,
55*61046927SAndroid Build Coastguard Worker                "PERF: %s", buffer);
56*61046927SAndroid Build Coastguard Worker    }
57*61046927SAndroid Build Coastguard Worker }
58*61046927SAndroid Build Coastguard Worker 
59*61046927SAndroid Build Coastguard Worker void
anv_dump_pipe_bits(enum anv_pipe_bits bits,FILE * f)60*61046927SAndroid Build Coastguard Worker anv_dump_pipe_bits(enum anv_pipe_bits bits, FILE *f)
61*61046927SAndroid Build Coastguard Worker {
62*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_DEPTH_CACHE_FLUSH_BIT)
63*61046927SAndroid Build Coastguard Worker       fputs("+depth_flush ", f);
64*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_DATA_CACHE_FLUSH_BIT)
65*61046927SAndroid Build Coastguard Worker       fputs("+dc_flush ", f);
66*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_HDC_PIPELINE_FLUSH_BIT)
67*61046927SAndroid Build Coastguard Worker       fputs("+hdc_flush ", f);
68*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT)
69*61046927SAndroid Build Coastguard Worker       fputs("+rt_flush ", f);
70*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_TILE_CACHE_FLUSH_BIT)
71*61046927SAndroid Build Coastguard Worker       fputs("+tile_flush ", f);
72*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_STATE_CACHE_INVALIDATE_BIT)
73*61046927SAndroid Build Coastguard Worker       fputs("+state_inval ", f);
74*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_CONSTANT_CACHE_INVALIDATE_BIT)
75*61046927SAndroid Build Coastguard Worker       fputs("+const_inval ", f);
76*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_VF_CACHE_INVALIDATE_BIT)
77*61046927SAndroid Build Coastguard Worker       fputs("+vf_inval ", f);
78*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_TEXTURE_CACHE_INVALIDATE_BIT)
79*61046927SAndroid Build Coastguard Worker       fputs("+tex_inval ", f);
80*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_INSTRUCTION_CACHE_INVALIDATE_BIT)
81*61046927SAndroid Build Coastguard Worker       fputs("+ic_inval ", f);
82*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_STALL_AT_SCOREBOARD_BIT)
83*61046927SAndroid Build Coastguard Worker       fputs("+pb_stall ", f);
84*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_PSS_STALL_SYNC_BIT)
85*61046927SAndroid Build Coastguard Worker       fputs("+pss_stall ", f);
86*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_DEPTH_STALL_BIT)
87*61046927SAndroid Build Coastguard Worker       fputs("+depth_stall ", f);
88*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_CS_STALL_BIT ||
89*61046927SAndroid Build Coastguard Worker        bits & ANV_PIPE_END_OF_PIPE_SYNC_BIT)
90*61046927SAndroid Build Coastguard Worker       fputs("+cs_stall ", f);
91*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_UNTYPED_DATAPORT_CACHE_FLUSH_BIT)
92*61046927SAndroid Build Coastguard Worker       fputs("+utdp_flush ", f);
93*61046927SAndroid Build Coastguard Worker    if (bits & ANV_PIPE_CCS_CACHE_FLUSH_BIT)
94*61046927SAndroid Build Coastguard Worker       fputs("+ccs_flush ", f);
95*61046927SAndroid Build Coastguard Worker }
96*61046927SAndroid Build Coastguard Worker 
97*61046927SAndroid Build Coastguard Worker const char *
anv_gfx_state_bit_to_str(enum anv_gfx_state_bits state)98*61046927SAndroid Build Coastguard Worker anv_gfx_state_bit_to_str(enum anv_gfx_state_bits state)
99*61046927SAndroid Build Coastguard Worker {
100*61046927SAndroid Build Coastguard Worker #define NAME(name) case ANV_GFX_STATE_##name: return #name;
101*61046927SAndroid Build Coastguard Worker    switch (state) {
102*61046927SAndroid Build Coastguard Worker       NAME(URB);
103*61046927SAndroid Build Coastguard Worker       NAME(VF_STATISTICS);
104*61046927SAndroid Build Coastguard Worker       NAME(VF_SGVS);
105*61046927SAndroid Build Coastguard Worker       NAME(VF_SGVS_2);
106*61046927SAndroid Build Coastguard Worker       NAME(VF_SGVS_INSTANCING);
107*61046927SAndroid Build Coastguard Worker       NAME(PRIMITIVE_REPLICATION);
108*61046927SAndroid Build Coastguard Worker       NAME(MULTISAMPLE);
109*61046927SAndroid Build Coastguard Worker       NAME(SBE);
110*61046927SAndroid Build Coastguard Worker       NAME(SBE_SWIZ);
111*61046927SAndroid Build Coastguard Worker       NAME(SO_DECL_LIST);
112*61046927SAndroid Build Coastguard Worker       NAME(VS);
113*61046927SAndroid Build Coastguard Worker       NAME(HS);
114*61046927SAndroid Build Coastguard Worker       NAME(DS);
115*61046927SAndroid Build Coastguard Worker       NAME(GS);
116*61046927SAndroid Build Coastguard Worker       NAME(PS);
117*61046927SAndroid Build Coastguard Worker       NAME(PS_EXTRA);
118*61046927SAndroid Build Coastguard Worker       NAME(SBE_MESH);
119*61046927SAndroid Build Coastguard Worker       NAME(CLIP_MESH);
120*61046927SAndroid Build Coastguard Worker       NAME(MESH_CONTROL);
121*61046927SAndroid Build Coastguard Worker       NAME(MESH_SHADER);
122*61046927SAndroid Build Coastguard Worker       NAME(MESH_DISTRIB);
123*61046927SAndroid Build Coastguard Worker       NAME(TASK_CONTROL);
124*61046927SAndroid Build Coastguard Worker       NAME(TASK_SHADER);
125*61046927SAndroid Build Coastguard Worker       NAME(TASK_REDISTRIB);
126*61046927SAndroid Build Coastguard Worker       NAME(BLEND_STATE_PTR);
127*61046927SAndroid Build Coastguard Worker       NAME(CLIP);
128*61046927SAndroid Build Coastguard Worker       NAME(CC_STATE);
129*61046927SAndroid Build Coastguard Worker       NAME(CC_STATE_PTR);
130*61046927SAndroid Build Coastguard Worker       NAME(CPS);
131*61046927SAndroid Build Coastguard Worker       NAME(DEPTH_BOUNDS);
132*61046927SAndroid Build Coastguard Worker       NAME(INDEX_BUFFER);
133*61046927SAndroid Build Coastguard Worker       NAME(LINE_STIPPLE);
134*61046927SAndroid Build Coastguard Worker       NAME(PS_BLEND);
135*61046927SAndroid Build Coastguard Worker       NAME(RASTER);
136*61046927SAndroid Build Coastguard Worker       NAME(SAMPLE_MASK);
137*61046927SAndroid Build Coastguard Worker       NAME(SAMPLE_PATTERN);
138*61046927SAndroid Build Coastguard Worker       NAME(SCISSOR);
139*61046927SAndroid Build Coastguard Worker       NAME(SF);
140*61046927SAndroid Build Coastguard Worker       NAME(STREAMOUT);
141*61046927SAndroid Build Coastguard Worker       NAME(TE);
142*61046927SAndroid Build Coastguard Worker       NAME(VERTEX_INPUT);
143*61046927SAndroid Build Coastguard Worker       NAME(VF);
144*61046927SAndroid Build Coastguard Worker       NAME(VF_TOPOLOGY);
145*61046927SAndroid Build Coastguard Worker       NAME(VFG);
146*61046927SAndroid Build Coastguard Worker       NAME(VIEWPORT_CC);
147*61046927SAndroid Build Coastguard Worker       NAME(VIEWPORT_CC_PTR);
148*61046927SAndroid Build Coastguard Worker       NAME(VIEWPORT_SF_CLIP);
149*61046927SAndroid Build Coastguard Worker       NAME(WM);
150*61046927SAndroid Build Coastguard Worker       NAME(WM_DEPTH_STENCIL);
151*61046927SAndroid Build Coastguard Worker       NAME(PMA_FIX);
152*61046927SAndroid Build Coastguard Worker       NAME(WA_18019816803);
153*61046927SAndroid Build Coastguard Worker       NAME(TBIMR_TILE_PASS_INFO);
154*61046927SAndroid Build Coastguard Worker    default: unreachable("invalid state");
155*61046927SAndroid Build Coastguard Worker    }
156*61046927SAndroid Build Coastguard Worker }
157*61046927SAndroid Build Coastguard Worker 
158*61046927SAndroid Build Coastguard Worker VkResult
anv_device_print_init(struct anv_device * device)159*61046927SAndroid Build Coastguard Worker anv_device_print_init(struct anv_device *device)
160*61046927SAndroid Build Coastguard Worker {
161*61046927SAndroid Build Coastguard Worker    VkResult result =
162*61046927SAndroid Build Coastguard Worker       anv_device_alloc_bo(device, "printf",
163*61046927SAndroid Build Coastguard Worker                           debug_get_num_option("ANV_PRINTF_BUFFER_SIZE", 1024 * 1024),
164*61046927SAndroid Build Coastguard Worker                           ANV_BO_ALLOC_CAPTURE |
165*61046927SAndroid Build Coastguard Worker                           ANV_BO_ALLOC_MAPPED |
166*61046927SAndroid Build Coastguard Worker                           ANV_BO_ALLOC_HOST_COHERENT |
167*61046927SAndroid Build Coastguard Worker                           ANV_BO_ALLOC_NO_LOCAL_MEM,
168*61046927SAndroid Build Coastguard Worker                           0 /* explicit_address */,
169*61046927SAndroid Build Coastguard Worker                           &device->printf.bo);
170*61046927SAndroid Build Coastguard Worker    if (result != VK_SUCCESS)
171*61046927SAndroid Build Coastguard Worker       return result;
172*61046927SAndroid Build Coastguard Worker 
173*61046927SAndroid Build Coastguard Worker    util_dynarray_init(&device->printf.prints, ralloc_context(NULL));
174*61046927SAndroid Build Coastguard Worker    simple_mtx_init(&device->printf.mutex, mtx_plain);
175*61046927SAndroid Build Coastguard Worker 
176*61046927SAndroid Build Coastguard Worker    *((uint32_t *)device->printf.bo->map) = 4;
177*61046927SAndroid Build Coastguard Worker 
178*61046927SAndroid Build Coastguard Worker    return VK_SUCCESS;
179*61046927SAndroid Build Coastguard Worker }
180*61046927SAndroid Build Coastguard Worker 
181*61046927SAndroid Build Coastguard Worker void
anv_device_print_fini(struct anv_device * device)182*61046927SAndroid Build Coastguard Worker anv_device_print_fini(struct anv_device *device)
183*61046927SAndroid Build Coastguard Worker {
184*61046927SAndroid Build Coastguard Worker    anv_device_release_bo(device, device->printf.bo);
185*61046927SAndroid Build Coastguard Worker    util_dynarray_fini(&device->printf.prints);
186*61046927SAndroid Build Coastguard Worker    simple_mtx_destroy(&device->printf.mutex);
187*61046927SAndroid Build Coastguard Worker }
188*61046927SAndroid Build Coastguard Worker 
189*61046927SAndroid Build Coastguard Worker void
anv_device_print_shader_prints(struct anv_device * device)190*61046927SAndroid Build Coastguard Worker anv_device_print_shader_prints(struct anv_device *device)
191*61046927SAndroid Build Coastguard Worker {
192*61046927SAndroid Build Coastguard Worker    simple_mtx_lock(&device->printf.mutex);
193*61046927SAndroid Build Coastguard Worker 
194*61046927SAndroid Build Coastguard Worker    uint32_t *size = device->printf.bo->map;
195*61046927SAndroid Build Coastguard Worker 
196*61046927SAndroid Build Coastguard Worker    u_printf_ptr(stdout,
197*61046927SAndroid Build Coastguard Worker                 device->printf.bo->map + sizeof(uint32_t),
198*61046927SAndroid Build Coastguard Worker                 *size - 4,
199*61046927SAndroid Build Coastguard Worker                 util_dynarray_begin(&device->printf.prints),
200*61046927SAndroid Build Coastguard Worker                 util_dynarray_num_elements(&device->printf.prints, u_printf_info*));
201*61046927SAndroid Build Coastguard Worker 
202*61046927SAndroid Build Coastguard Worker    /* Reset */
203*61046927SAndroid Build Coastguard Worker    *size = 4;
204*61046927SAndroid Build Coastguard Worker 
205*61046927SAndroid Build Coastguard Worker    simple_mtx_unlock(&device->printf.mutex);
206*61046927SAndroid Build Coastguard Worker }
207