Enable panwrap to compile
[chai.git] / src / chai-notes.h
1 /*
2  *
3  * (C) COPYRIGHT 2010-2016 ARM Limited. All rights reserved.
4  * Copyright (C) 2017 Cafe Beverage. All rights reserved.
5  *
6  * This program is free software and is provided to you under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation, and any use by you of this program is subject to the terms
9  * of such GNU licence.
10  *
11  * A copy of the licence is included with the program, and can also be obtained
12  * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
13  * Boston, MA  02110-1301, USA.
14  *
15  */
16
17 #include <stddef.h>
18
19 #include "jobs.h"
20
21 /* See corresponding structures in chai/jobs.h */
22
23 struct payload_set_value {
24         uint64_t out;
25         uint64_t unknown;
26 };
27
28 /* From mali_kbase_replay.c */
29 /* fbd_address & mask */
30 #define FBD_POINTER_MASK (~0x3f)
31
32 /* set for MFBD; otherwise SFBD */
33 #define FBD_TYPE 1
34
35 #define SFBD (0)
36 #define MFBD (1)
37
38 /* appears to be set for fragment; clear for vertex/tiler */
39
40 #define FBD_TILER (0)
41 #define FBD_FRAGMENT (2)
42
43 /* From mali_kbase_10969_workaround.c */
44 #define X_COORDINATE_MASK 0x00000FFF
45 #define Y_COORDINATE_MASK 0x0FFF0000
46
47 /* The above defines as useful macros */
48 #define TILE_COORD_X(coord) ((coord) & X_COORDINATE_MASK)
49 #define TILE_COORD_Y(coord) (((coord) & Y_COORDINATE_MASK) >> 16)
50
51 #define MAKE_TILE_COORD(X, Y, flag) ((X) | ((Y) << 16) | (flag))
52
53 struct payload_fragment {
54         uint32_t min_tile_coord;
55         uint32_t max_tile_coord;
56         uint64_t fragment_fbd;
57 };
58
59 /* Parts from mali_kbase_replay.c. Mostly from RE. */
60
61 struct payload_vertex_tiler32 {
62         uint32_t block1[11];
63
64         uint32_t zeroes;
65         uint32_t unknown1; /* pointer */
66         uint32_t null1;
67         uint32_t null2;
68         uint32_t unknown2; /* pointer */
69         uint32_t shader;   /* struct shader_meta */
70         uint32_t attributes; /* struct attribute_buffer[] */
71         uint32_t attribute_meta; /* attribute_meta[] */
72         uint32_t unknown5; /* pointer */
73         uint32_t unknown6; /* pointer */
74         uint32_t nullForVertex;
75         uint32_t null4;
76         uint32_t fbd;      /* struct tentative_fbd */
77         uint32_t unknown7; /* pointer */
78
79         uint32_t block2[36];
80 };
81
82 /* FIXME: This is very clearly wrong */
83
84 #define SHADER (1 << 0)
85 #define SHADER_VERTEX (1 << 2)
86 #define SHADER_FRAGMENT (1 << 3)
87
88 struct shader_meta {
89         uint64_t shader;
90         uint64_t unknown1;
91         uint64_t unknown2;
92 };
93
94 struct attribute_buffer {
95         uint64_t elements;
96         size_t element_size;
97         size_t total_size;
98 };
99
100 typedef uint64_t attribute_meta_t;
101
102 #define HAS_ATTRIBUTE(meta) (!!meta)
103 #define ATTRIBUTE_NO(meta) (meta & 0xFF)
104 #define ATTRIBUTE_FLAGS(meta) (meta & 0xFFFFFFFFFFFFFF00)
105
106 /* Synthesis of fragment_job from mali_kbase_reply.c with #defines from
107  * errata file */
108
109 #define JOB_NOT_STARTED (0)
110 #define JOB_TYPE_NULL           (1)
111 #define JOB_TYPE_SET_VALUE      (2)
112 #define JOB_TYPE_CACHE_FLUSH    (3)
113 #define JOB_TYPE_COMPUTE        (4)
114 #define JOB_TYPE_VERTEX         (5)
115 #define JOB_TYPE_TILER          (7)
116 #define JOB_TYPE_FUSED          (8)
117 #define JOB_TYPE_FRAGMENT       (9)
118
119 #define CHAI_POINTS             0x01
120 #define CHAI_LINES              0x02
121 #define CHAI_TRIANGLES          0x08
122 #define CHAI_TRIANGLE_STRIP     0x0A
123 #define CHAI_TRIANGLE_FAN       0x0C
124
125 /* See mali_kbase_replay.c */
126
127 #define FBD_HIERARCHY_WEIGHTS 8
128 #define FBD_HIERARCHY_MASK_MASK 0x1fff
129
130 struct tentative_mfbd {
131         uint64_t blah;
132         uint64_t ugaT;
133         uint32_t block1[10];
134         uint32_t unknown1;
135         uint32_t flags;
136         uint64_t block2[2];
137         uint64_t heap_free_address;
138         uint64_t unknown2;
139         uint32_t weights[FBD_HIERARCHY_WEIGHTS];
140         uint64_t unknown_gpu_addressN;
141         uint32_t block3[22];
142         uint64_t unknown_gpu_address;
143         uint64_t unknown3;
144         uint32_t block4[10];
145 };
146
147 #define JOB_32_BIT 0
148 #define JOB_64_BIT 1