1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
use ctypes::c_void;
use shared::basetsd::{UINT16, UINT64, UINT8};
use shared::dxgiformat::DXGI_FORMAT;
use shared::minwindef::{BOOL, INT, UINT};
use um::d3d11::{ID3D11Buffer, ID3D11DeviceChild, ID3D11Resource};
use um::d3d11_1::{
    ID3D11Device1, ID3D11Device1Vtbl, ID3D11DeviceContext1, ID3D11DeviceContext1Vtbl,
};
use um::winnt::{HRESULT, LPCWSTR};
DEFINE_GUID!{IID_ID3D11DeviceContext2,
    0x420d5b32, 0xb90c, 0x4da4, 0xbe, 0xf0, 0x35, 0x9f, 0x6a, 0x24, 0xa8, 0x3a}
DEFINE_GUID!{IID_ID3D11Device2,
    0x9d06dffa, 0xd1e5, 0x4d07, 0x83, 0xa8, 0x1b, 0xb1, 0x23, 0xf2, 0xf8, 0x41}
STRUCT!{struct D3D11_TILED_RESOURCE_COORDINATE {
    X: UINT,
    Y: UINT,
    Z: UINT,
    Subresource: UINT,
}}
STRUCT!{struct D3D11_TILE_REGION_SIZE {
    NumTiles: UINT,
    bUseBox: BOOL,
    Width: UINT,
    Height: UINT16,
    Depth: UINT16,
}}
ENUM!{enum D3D11_TILE_MAPPING_FLAG {
    D3D11_TILE_MAPPING_NO_OVERWRITE = 0x00000001,
}}
ENUM!{enum D3D11_TILE_RANGE_FLAG {
    D3D11_TILE_RANGE_NULL = 0x00000001,
    D3D11_TILE_RANGE_SKIP = 0x00000002,
    D3D11_TILE_RANGE_REUSE_SINGLE_TILE = 0x00000004,
}}
STRUCT!{struct D3D11_SUBRESOURCE_TILING {
    WidthInTiles: UINT,
    HeightInTiles: UINT16,
    DepthInTiles: UINT16,
    StartTileIndexInOverallResource: UINT,
}}
STRUCT!{struct D3D11_TILE_SHAPE {
    WidthInTexels: UINT,
    HeightInTexels: UINT,
    DepthInTexels: UINT,
}}
STRUCT!{struct D3D11_PACKED_MIP_DESC {
    NumStandardMips: UINT8,
    NumPackedMips: UINT8,
    NumTilesForPackedMips: UINT,
    StartTileIndexInOverallResource: UINT,
}}
ENUM!{enum D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG {
    D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE = 0x00000001,
}}
ENUM!{enum D3D11_TILE_COPY_FLAG {
    D3D11_TILE_COPY_NO_OVERWRITE = 0x00000001,
    D3D11_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x00000002,
    D3D11_TILE_COPY_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x00000004,
}}
RIDL!{#[uuid(0x420d5b32, 0xb90c, 0x4da4, 0xbe, 0xf0, 0x35, 0x9f, 0x6a, 0x24, 0xa8, 0x3a)]
interface ID3D11DeviceContext2(ID3D11DeviceContext2Vtbl):
    ID3D11DeviceContext1(ID3D11DeviceContext1Vtbl) {
    fn UpdateTileMappings(
        pTiledResource: *mut ID3D11Resource,
        NumTiledResourceRegions: UINT,
        pTiledResourceRegionStartCoordinates: *const D3D11_TILED_RESOURCE_COORDINATE,
        pTiledResourceRegionSizes: *const D3D11_TILE_REGION_SIZE,
        pTilePool: *mut ID3D11Buffer,
        NumRanges: UINT,
        pRangeFlags: *const UINT,
        pTilePoolStartOffsets: *const UINT,
        pRangeTileCounts: *const UINT,
        Flags: UINT,
    ) -> HRESULT,
    fn CopyTileMappings(
        pDestTiledResource: *mut ID3D11Resource,
        pDestRegionStartCoordinate: *const D3D11_TILED_RESOURCE_COORDINATE,
        pSourceTiledResource: *mut ID3D11Resource,
        pSourceRegionStartCoordinate: *const D3D11_TILED_RESOURCE_COORDINATE,
        pTileRegionSize: *const D3D11_TILE_REGION_SIZE,
        Flags: UINT,
    ) -> HRESULT,
    fn CopyTiles(
        pTiledResource: *mut ID3D11Resource,
        pTileRegionStartCoordinate: *const D3D11_TILED_RESOURCE_COORDINATE,
        pTileRegionSize: *const D3D11_TILE_REGION_SIZE,
        pBuffer: *mut ID3D11Buffer,
        BufferStartOffsetInBytes: UINT64,
        Flags: UINT,
    ) -> (),
    fn UpdateTiles(
        pDestTiledResource: *mut ID3D11Resource,
        pDestTileRegionStartCoordinate: *const D3D11_TILED_RESOURCE_COORDINATE,
        pDestTileRegionSize: *const D3D11_TILE_REGION_SIZE,
        pSourceTileData: *const c_void,
        Flags: UINT,
    ) -> (),
    fn ResizeTilePool(
        pTilePool: *mut ID3D11Buffer,
        NewSizeInBytes: UINT64,
    ) -> HRESULT,
    fn TiledResourceBarrier(
        pTiledResourceOrViewAccessBeforeBarrier: *mut ID3D11DeviceChild,
        pTiledResourceOrViewAccessAfterBarrier: *mut ID3D11DeviceChild,
    ) -> (),
    fn IsAnnotationEnabled() -> BOOL,
    fn SetMarkerInt(
        pLabel: LPCWSTR,
        Data: INT,
    ) -> (),
    fn BeginEventInt(
        pLabel: LPCWSTR,
        Data: INT,
    ) -> (),
    fn EndEvent() -> (),
}}
RIDL!{#[uuid(0x9d06dffa, 0xd1e5, 0x4d07, 0x83, 0xa8, 0x1b, 0xb1, 0x23, 0xf2, 0xf8, 0x41)]
interface ID3D11Device2(ID3D11Device2Vtbl): ID3D11Device1(ID3D11Device1Vtbl) {
    fn GetImmediateContext2(
        ppImmediateContext: *mut *mut ID3D11DeviceContext2,
    ) -> (),
    fn CreateDeferredContext2(
        ContextFlags: UINT,
        ppDeferredContext: *mut *mut ID3D11DeviceContext2,
    ) -> HRESULT,
    fn GetResourceTiling(
        pTiledResource: *mut ID3D11Resource,
        pNumTilesForEntireResource: *mut UINT,
        pPackedMipDesc: *mut D3D11_PACKED_MIP_DESC,
        pStandardTileShapeForNonPackedMips: *mut D3D11_TILE_SHAPE,
        pNumSubresourceTilings: *mut UINT,
        FirstSubresourceTilingToGet: UINT,
        pSubresourceTilingsForNonPackedMips: *mut D3D11_SUBRESOURCE_TILING,
    ) -> (),
    fn CheckMultisampleQualityLevels1(
        Format: DXGI_FORMAT,
        SampleCount: UINT,
        Flags: UINT,
        pNumQualityLevels: *mut UINT,
    ) -> HRESULT,
}}