xref: /aosp_15_r20/external/mesa3d/src/microsoft/compiler/dxil_container.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © Microsoft 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 #ifndef DXIL_CONTAINER_H
25*61046927SAndroid Build Coastguard Worker #define DXIL_CONTAINER_H
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
28*61046927SAndroid Build Coastguard Worker extern "C" {
29*61046927SAndroid Build Coastguard Worker #endif
30*61046927SAndroid Build Coastguard Worker 
31*61046927SAndroid Build Coastguard Worker #include "util/blob.h"
32*61046927SAndroid Build Coastguard Worker 
33*61046927SAndroid Build Coastguard Worker #include "dxil_signature.h"
34*61046927SAndroid Build Coastguard Worker 
35*61046927SAndroid Build Coastguard Worker #define DXIL_MAX_PARTS 8
36*61046927SAndroid Build Coastguard Worker struct dxil_container {
37*61046927SAndroid Build Coastguard Worker    struct blob parts;
38*61046927SAndroid Build Coastguard Worker    unsigned part_offsets[DXIL_MAX_PARTS];
39*61046927SAndroid Build Coastguard Worker    unsigned num_parts;
40*61046927SAndroid Build Coastguard Worker };
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker enum dxil_resource_type {
43*61046927SAndroid Build Coastguard Worker   DXIL_RES_INVALID = 0,
44*61046927SAndroid Build Coastguard Worker   DXIL_RES_SAMPLER = 1,
45*61046927SAndroid Build Coastguard Worker   DXIL_RES_CBV = 2,
46*61046927SAndroid Build Coastguard Worker   DXIL_RES_SRV_TYPED = 3,
47*61046927SAndroid Build Coastguard Worker   DXIL_RES_SRV_RAW = 4,
48*61046927SAndroid Build Coastguard Worker   DXIL_RES_SRV_STRUCTURED = 5,
49*61046927SAndroid Build Coastguard Worker   DXIL_RES_UAV_TYPED = 6,
50*61046927SAndroid Build Coastguard Worker   DXIL_RES_UAV_RAW = 7,
51*61046927SAndroid Build Coastguard Worker   DXIL_RES_UAV_STRUCTURED,
52*61046927SAndroid Build Coastguard Worker   DXIL_RES_UAV_STRUCTURED_WITH_COUNTER,
53*61046927SAndroid Build Coastguard Worker   DXIL_RES_NUM_ENTRIES /* should always be last */
54*61046927SAndroid Build Coastguard Worker };
55*61046927SAndroid Build Coastguard Worker 
56*61046927SAndroid Build Coastguard Worker #define DXIL_FOURCC(ch0, ch1, ch2, ch3) ( \
57*61046927SAndroid Build Coastguard Worker   (uint32_t)(ch0)        | (uint32_t)(ch1) << 8 | \
58*61046927SAndroid Build Coastguard Worker   (uint32_t)(ch2) << 16  | (uint32_t)(ch3) << 24)
59*61046927SAndroid Build Coastguard Worker 
60*61046927SAndroid Build Coastguard Worker enum dxil_part_fourcc {
61*61046927SAndroid Build Coastguard Worker    DXIL_RDEF = DXIL_FOURCC('R', 'D', 'E', 'F'),
62*61046927SAndroid Build Coastguard Worker    DXIL_ISG1 = DXIL_FOURCC('I', 'S', 'G', '1'),
63*61046927SAndroid Build Coastguard Worker    DXIL_OSG1 = DXIL_FOURCC('O', 'S', 'G', '1'),
64*61046927SAndroid Build Coastguard Worker    DXIL_PSG1 = DXIL_FOURCC('P', 'S', 'G', '1'),
65*61046927SAndroid Build Coastguard Worker    DXIL_STAT = DXIL_FOURCC('S', 'T', 'A', 'T'),
66*61046927SAndroid Build Coastguard Worker    DXIL_ILDB = DXIL_FOURCC('I', 'L', 'D', 'B'),
67*61046927SAndroid Build Coastguard Worker    DXIL_ILDN = DXIL_FOURCC('I', 'L', 'D', 'N'),
68*61046927SAndroid Build Coastguard Worker    DXIL_SFI0 = DXIL_FOURCC('S', 'F', 'I', '0'),
69*61046927SAndroid Build Coastguard Worker    DXIL_PRIV = DXIL_FOURCC('P', 'R', 'I', 'V'),
70*61046927SAndroid Build Coastguard Worker    DXIL_RTS0 = DXIL_FOURCC('R', 'T', 'S', '0'),
71*61046927SAndroid Build Coastguard Worker    DXIL_DXIL = DXIL_FOURCC('D', 'X', 'I', 'L'),
72*61046927SAndroid Build Coastguard Worker    DXIL_PSV0 = DXIL_FOURCC('P', 'S', 'V', '0'),
73*61046927SAndroid Build Coastguard Worker    DXIL_RDAT = DXIL_FOURCC('R', 'D', 'A', 'T'),
74*61046927SAndroid Build Coastguard Worker    DXIL_HASH = DXIL_FOURCC('H', 'A', 'S', 'H'),
75*61046927SAndroid Build Coastguard Worker };
76*61046927SAndroid Build Coastguard Worker 
77*61046927SAndroid Build Coastguard Worker struct dxil_resource_v0 {
78*61046927SAndroid Build Coastguard Worker    uint32_t resource_type;
79*61046927SAndroid Build Coastguard Worker    uint32_t space;
80*61046927SAndroid Build Coastguard Worker    uint32_t lower_bound;
81*61046927SAndroid Build Coastguard Worker    uint32_t upper_bound;
82*61046927SAndroid Build Coastguard Worker };
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker struct dxil_resource_v1 {
85*61046927SAndroid Build Coastguard Worker    struct dxil_resource_v0 v0;
86*61046927SAndroid Build Coastguard Worker    uint32_t resource_kind;
87*61046927SAndroid Build Coastguard Worker    uint32_t resource_flags;
88*61046927SAndroid Build Coastguard Worker };
89*61046927SAndroid Build Coastguard Worker 
90*61046927SAndroid Build Coastguard Worker struct dxil_validation_state {
91*61046927SAndroid Build Coastguard Worker    struct dxil_psv_runtime_info_2 state;
92*61046927SAndroid Build Coastguard Worker    union {
93*61046927SAndroid Build Coastguard Worker       const struct dxil_resource_v0 *v0;
94*61046927SAndroid Build Coastguard Worker       const struct dxil_resource_v1 *v1;
95*61046927SAndroid Build Coastguard Worker    } resources;
96*61046927SAndroid Build Coastguard Worker    uint32_t num_resources;
97*61046927SAndroid Build Coastguard Worker };
98*61046927SAndroid Build Coastguard Worker 
99*61046927SAndroid Build Coastguard Worker void
100*61046927SAndroid Build Coastguard Worker dxil_container_init(struct dxil_container *c);
101*61046927SAndroid Build Coastguard Worker 
102*61046927SAndroid Build Coastguard Worker void
103*61046927SAndroid Build Coastguard Worker dxil_container_finish(struct dxil_container *c);
104*61046927SAndroid Build Coastguard Worker 
105*61046927SAndroid Build Coastguard Worker struct dxil_features;
106*61046927SAndroid Build Coastguard Worker 
107*61046927SAndroid Build Coastguard Worker bool
108*61046927SAndroid Build Coastguard Worker dxil_container_add_features(struct dxil_container *c,
109*61046927SAndroid Build Coastguard Worker                             const struct dxil_features *features);
110*61046927SAndroid Build Coastguard Worker 
111*61046927SAndroid Build Coastguard Worker 
112*61046927SAndroid Build Coastguard Worker bool
113*61046927SAndroid Build Coastguard Worker dxil_container_add_io_signature(struct dxil_container *c,
114*61046927SAndroid Build Coastguard Worker                                 enum dxil_part_fourcc part,
115*61046927SAndroid Build Coastguard Worker                                 unsigned num_records,
116*61046927SAndroid Build Coastguard Worker                                 struct dxil_signature_record *io,
117*61046927SAndroid Build Coastguard Worker                                 bool validator_7);
118*61046927SAndroid Build Coastguard Worker 
119*61046927SAndroid Build Coastguard Worker bool
120*61046927SAndroid Build Coastguard Worker dxil_container_add_state_validation(struct dxil_container *c,
121*61046927SAndroid Build Coastguard Worker                                     const struct dxil_module *m,
122*61046927SAndroid Build Coastguard Worker                                     struct dxil_validation_state *state);
123*61046927SAndroid Build Coastguard Worker 
124*61046927SAndroid Build Coastguard Worker bool
125*61046927SAndroid Build Coastguard Worker dxil_container_add_module(struct dxil_container *c,
126*61046927SAndroid Build Coastguard Worker                           const struct dxil_module *m);
127*61046927SAndroid Build Coastguard Worker 
128*61046927SAndroid Build Coastguard Worker bool
129*61046927SAndroid Build Coastguard Worker dxil_container_write(struct dxil_container *c, struct blob *blob);
130*61046927SAndroid Build Coastguard Worker 
131*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
132*61046927SAndroid Build Coastguard Worker }
133*61046927SAndroid Build Coastguard Worker #endif
134*61046927SAndroid Build Coastguard Worker 
135*61046927SAndroid Build Coastguard Worker #endif
136