Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/broadcom/clif/clif_private.h
4560 views
1
/*
2
* Copyright © 2016-2018 Broadcom
3
*
4
* Permission is hereby granted, free of charge, to any person obtaining a
5
* copy of this software and associated documentation files (the "Software"),
6
* to deal in the Software without restriction, including without limitation
7
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
* and/or sell copies of the Software, and to permit persons to whom the
9
* Software is furnished to do so, subject to the following conditions:
10
*
11
* The above copyright notice and this permission notice (including the next
12
* paragraph) shall be included in all copies or substantial portions of the
13
* Software.
14
*
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
* IN THE SOFTWARE.
22
*/
23
24
#ifndef CLIF_PRIVATE_H
25
#define CLIF_PRIVATE_H
26
27
#include <stdint.h>
28
#include <stdarg.h>
29
#include "util/list.h"
30
31
struct clif_bo {
32
const char *name;
33
uint32_t offset;
34
uint32_t size;
35
void *vaddr;
36
bool dumped;
37
};
38
39
struct clif_dump {
40
const struct v3d_device_info *devinfo;
41
FILE *out;
42
43
struct v3d_spec *spec;
44
45
/* List of struct reloc_worklist_entry */
46
struct list_head worklist;
47
48
struct clif_bo *bo;
49
int bo_count;
50
int bo_array_size;
51
52
/**
53
* Flag to switch from CLIF ABI to slightly more human-readable
54
* output.
55
*/
56
bool pretty;
57
};
58
59
enum reloc_worklist_type {
60
reloc_cl,
61
reloc_gl_shader_state,
62
reloc_generic_tile_list,
63
};
64
65
struct reloc_worklist_entry {
66
struct list_head link;
67
68
enum reloc_worklist_type type;
69
uint32_t addr;
70
71
union {
72
struct {
73
uint32_t end;
74
} cl;
75
struct {
76
uint32_t num_attrs;
77
} shader_state;
78
struct {
79
uint32_t end;
80
} generic_tile_list;
81
};
82
};
83
84
struct clif_bo *
85
clif_lookup_bo(struct clif_dump *clif, uint32_t addr);
86
87
struct reloc_worklist_entry *
88
clif_dump_add_address_to_worklist(struct clif_dump *clif,
89
enum reloc_worklist_type type,
90
uint32_t addr);
91
92
bool v3d33_clif_dump_packet(struct clif_dump *clif, uint32_t offset,
93
const uint8_t *cl, uint32_t *size, bool reloc_mode);
94
bool v3d41_clif_dump_packet(struct clif_dump *clif, uint32_t offset,
95
const uint8_t *cl, uint32_t *size, bool reloc_mode);
96
bool v3d42_clif_dump_packet(struct clif_dump *clif, uint32_t offset,
97
const uint8_t *cl, uint32_t *size, bool reloc_mode);
98
99
static inline void
100
out(struct clif_dump *clif, const char *fmt, ...)
101
{
102
va_list args;
103
104
va_start(args, fmt);
105
vfprintf(clif->out, fmt, args);
106
va_end(args);
107
}
108
109
static inline void
110
out_address(struct clif_dump *clif, uint32_t addr)
111
{
112
struct clif_bo *bo = clif_lookup_bo(clif, addr);
113
if (bo) {
114
out(clif, "[%s+0x%08x] /* 0x%08x */",
115
bo->name, addr - bo->offset, addr);
116
} else if (addr) {
117
out(clif, "/* XXX: BO unknown */ 0x%08x", addr);
118
} else {
119
out(clif, "[null]");
120
}
121
}
122
123
#endif /* CLIF_PRIVATE_H */
124
125