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