d3d/archive/D3D11_3_FunctionalSpec.htm [5618:5736]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// --------------------------------------------------------------------------------------------------------------------------------
// GetResourceTiling
// --------------------------------------------------------------------------------------------------------------------------------
// GetResourceTiling retrieves information about how a Tiled Resource is broken into tiles.
//

typedef struct D3D11_SUBRESOURCE_TILING
{
	// Each packed mip is individually reported as 0 for WidthInTiles, HeightInTiles and DepthInTiles.

    UINT WidthInTiles;
    UINT HeightInTiles;
    UINT DepthInTiles;
    // Total number of tiles in subresources is WidthInTiles*HeightInTiles*DepthInTiles
    UINT StartTileIndexInOverallResource;
};

// D3D11_PACKED_TILE is filled into D3D11_SUBRESOURCE_TILING.StartTileIndexInOverallResource
// for packed mip levels, signifying that this entire struct is meaningless (WidthInTiles, HeightInTiles,
// DepthInTiles are also al set to 0).
// For packed tiles, the description of the packed mips comes from D3D11_PACKED_MIP_DESC instead.
const UINT D3D11_PACKED_TILE = 0xffffffff;


typedef struct D3D11_TILE_SHAPE
{
    UINT WidthInTexels;
    UINT HeightInTexels;
    UINT DepthInTexels;
    // Texels are equivalent to pixels.  For untyped Buffer resources, a texel is just a byte.
    // For MSAA surfaces the numbers are still in terms of pixels/texels.
    // The values here are independent of the surface dimensions.  Even if the surface is
    // smaller than what would fit in a tile, the full tile dimensions are reported here.

};

typedef struct D3D11_PACKED_MIP_DESC
{
    UINT NumPackedMips; // How many mips starting from the least detailed mip are packed (either
                        // sharing tiles or using non standard tile layout).  0 if there no
                        // such packing in the resource.  For array surfaces this value is how many
                        // mips are packed for a given array slice - each array slice repeats the same
                        // packing.
                        // Mipmaps that fill at least one standard shaped tile in all dimensions
                        // are not allowed to be included in the set of packed mips.  Mips with at least one
                        // dimension less than the standard tile shape may or may not be packed,
                        // depending on the IHV.  Once a given mip needs to be packed, all coarser
                        // mips for a given array slice are considered packed as well.
    UINT NumTilesForPackedMips; // If there is no packing this value is meaningless and returns 0.
                                // Otherwise it returns how many tiles
                                // are needed to represent the set of packed mips.
                                // The pixel layout within the packed mips is hardware specific.
                                // If applications define only partial mappings for the set
                                // of tiles in packed mip(s), read/write behavior will be
                                // IHV specific and undefined.
                                // For arrays this only returns the count of packed mips within
                                // the subresources for each array slice.
    UINT StartTileIndexInOverallResource; // Offset of the first packed tile for the resource
                                // in the overall range of tiles.  If NumPackedMips is 0, this
                                // value is meaningless and returns 0.  Otherwise it returns the
                                // offset of the first packed tile for the resource in the overall
                                // range of tiles for the resource.  A return of 0 for
                                // StartTileIndexInOverallResourcein means the entire resource is packed.
                                // For array surfaces this is the offset for the tiles containing the packed
                                // mips for the first array slice.
                                // Packed mips for each array slice in arrayed surfaces are at this offset
                                // past the beginning of the tiles for each array slice.  (Note the
                                // number of overall tiles, packed or not, for a given array slice is
                                // simply the total number of tiles for the resource divided by the
                                // resource's array size, so it is easy to locate the range of tiles for
                                // any given array slice, out of which StartTileIndexInOverallResource identifies
                                // which of those are packed.)
};

void
ID3D11Device2::
GetResourceTiling( _In_ ID3D11Resource* pTiledResource,
                   _Out_opt_ UINT* pNumTilesForEntireResource, // Total number of tiles needed to store the resource
                   _Out_opt_ D3D11_PACKED_MIP_DESC* pPackedMipDesc, // Mip packing details
                   _Out_opt_ D3D11_TILE_SHAPE* pTileShape, // How pixels fit in tiles, independent of surface dimensions,
                                                           // not including packed mip(s).  If the entire surface is packed,
                                                           // this parameter is meaningless since there is no defined layout
                                                           // for packed mips.  In this case the returned fields are set to 0.
                   _Inout_opt_ UINT* pNumSubresourceTilings, // IN: how many subresources to query tilings for,
                                                            // OUT: returns how many retrieved (clamped to what's available)
                   _In_ UINT FirstSubresourceTilingToGet, // ignored if *pNumSubresourceTilings is 0,
                   _Out_writes_(*pNumSubresourceTilings) D3D11_SUBRESOURCE_TILING* pSubresourceTilings, // Subresources that
                                                          // are part of packed mips return 0 for all of the fields in
                                                          // the corresponding output, except StartTileIndexInOverallResource which is
                                                          // set to D3D11_PACKED_TILE (0xffffffff) - basically indicating the whole
                                                          // struct is meaningless for this case and pPackedMipDesc applies.
                  );

// --------------------------------------------------------------------------------------------------------------------------------
// CheckMultisampleQualityLevels1
// --------------------------------------------------------------------------------------------------------------------------------
// CheckMultisampleQualityLevel1 is a variant of the existing CheckMultisampleQualityLevels API that adds a flags field that
// allows the caller to indicate the query is for a tiled resource.  This allows drivers to report multisample quality levels
// for tiled resources differently than non-Tiled resources.
//
// As with non-tiled Resources, when Multisampling is supported/required for a given format, applications are guaranteed to
// be able to use the standard or center multisample patterns instead of using one of the driver quality levels.
//
typedef enum D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAGS
{
    D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE = 0x00000001,
};

HRESULT
ID3D11Device2::
CheckMultisampleQualityLevels1(
            _In_  DXGI_FORMAT Format,
            _In_  UINT SampleCount,
            _In_  UINT Flags, // D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAGS
            _Out_  UINT *pNumQualityLevels);


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - d3d/archive/images/d3d11/D3D11_3_FunctionalSpec.htm [5016:5134]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// --------------------------------------------------------------------------------------------------------------------------------
// GetResourceTiling
// --------------------------------------------------------------------------------------------------------------------------------
// GetResourceTiling retrieves information about how a Tiled Resource is broken into tiles.
//

typedef struct D3D11_SUBRESOURCE_TILING
{
	// Each packed mip is individually reported as 0 for WidthInTiles, HeightInTiles and DepthInTiles.

    UINT WidthInTiles;
    UINT HeightInTiles;
    UINT DepthInTiles;
    // Total number of tiles in subresources is WidthInTiles*HeightInTiles*DepthInTiles
    UINT StartTileIndexInOverallResource;
};

// D3D11_PACKED_TILE is filled into D3D11_SUBRESOURCE_TILING.StartTileIndexInOverallResource
// for packed mip levels, signifying that this entire struct is meaningless (WidthInTiles, HeightInTiles,
// DepthInTiles are also al set to 0).
// For packed tiles, the description of the packed mips comes from D3D11_PACKED_MIP_DESC instead.
const UINT D3D11_PACKED_TILE = 0xffffffff;


typedef struct D3D11_TILE_SHAPE
{
    UINT WidthInTexels;
    UINT HeightInTexels;
    UINT DepthInTexels;
    // Texels are equivalent to pixels.  For untyped Buffer resources, a texel is just a byte.
    // For MSAA surfaces the numbers are still in terms of pixels/texels.
    // The values here are independent of the surface dimensions.  Even if the surface is
    // smaller than what would fit in a tile, the full tile dimensions are reported here.

};

typedef struct D3D11_PACKED_MIP_DESC
{
    UINT NumPackedMips; // How many mips starting from the least detailed mip are packed (either
                        // sharing tiles or using non standard tile layout).  0 if there no
                        // such packing in the resource.  For array surfaces this value is how many
                        // mips are packed for a given array slice - each array slice repeats the same
                        // packing.
                        // Mipmaps that fill at least one standard shaped tile in all dimensions
                        // are not allowed to be included in the set of packed mips.  Mips with at least one
                        // dimension less than the standard tile shape may or may not be packed,
                        // depending on the IHV.  Once a given mip needs to be packed, all coarser
                        // mips for a given array slice are considered packed as well.
    UINT NumTilesForPackedMips; // If there is no packing this value is meaningless and returns 0.
                                // Otherwise it returns how many tiles
                                // are needed to represent the set of packed mips.
                                // The pixel layout within the packed mips is hardware specific.
                                // If applications define only partial mappings for the set
                                // of tiles in packed mip(s), read/write behavior will be
                                // IHV specific and undefined.
                                // For arrays this only returns the count of packed mips within
                                // the subresources for each array slice.
    UINT StartTileIndexInOverallResource; // Offset of the first packed tile for the resource
                                // in the overall range of tiles.  If NumPackedMips is 0, this
                                // value is meaningless and returns 0.  Otherwise it returns the
                                // offset of the first packed tile for the resource in the overall
                                // range of tiles for the resource.  A return of 0 for
                                // StartTileIndexInOverallResourcein means the entire resource is packed.
                                // For array surfaces this is the offset for the tiles containing the packed
                                // mips for the first array slice.
                                // Packed mips for each array slice in arrayed surfaces are at this offset
                                // past the beginning of the tiles for each array slice.  (Note the
                                // number of overall tiles, packed or not, for a given array slice is
                                // simply the total number of tiles for the resource divided by the
                                // resource's array size, so it is easy to locate the range of tiles for
                                // any given array slice, out of which StartTileIndexInOverallResource identifies
                                // which of those are packed.)
};

void
ID3D11Device2::
GetResourceTiling( _In_ ID3D11Resource* pTiledResource,
                   _Out_opt_ UINT* pNumTilesForEntireResource, // Total number of tiles needed to store the resource
                   _Out_opt_ D3D11_PACKED_MIP_DESC* pPackedMipDesc, // Mip packing details
                   _Out_opt_ D3D11_TILE_SHAPE* pTileShape, // How pixels fit in tiles, independent of surface dimensions,
                                                           // not including packed mip(s).  If the entire surface is packed,
                                                           // this parameter is meaningless since there is no defined layout
                                                           // for packed mips.  In this case the returned fields are set to 0.
                   _Inout_opt_ UINT* pNumSubresourceTilings, // IN: how many subresources to query tilings for,
                                                            // OUT: returns how many retrieved (clamped to what's available)
                   _In_ UINT FirstSubresourceTilingToGet, // ignored if *pNumSubresourceTilings is 0,
                   _Out_writes_(*pNumSubresourceTilings) D3D11_SUBRESOURCE_TILING* pSubresourceTilings, // Subresources that
                                                          // are part of packed mips return 0 for all of the fields in
                                                          // the corresponding output, except StartTileIndexInOverallResource which is
                                                          // set to D3D11_PACKED_TILE (0xffffffff) - basically indicating the whole
                                                          // struct is meaningless for this case and pPackedMipDesc applies.
                  );

// --------------------------------------------------------------------------------------------------------------------------------
// CheckMultisampleQualityLevels1
// --------------------------------------------------------------------------------------------------------------------------------
// CheckMultisampleQualityLevel1 is a variant of the existing CheckMultisampleQualityLevels API that adds a flags field that
// allows the caller to indicate the query is for a tiled resource.  This allows drivers to report multisample quality levels
// for tiled resources differently than non-Tiled resources.
//
// As with non-tiled Resources, when Multisampling is supported/required for a given format, applications are guaranteed to
// be able to use the standard or center multisample patterns instead of using one of the driver quality levels.
//
typedef enum D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAGS
{
    D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE = 0x00000001,
};

HRESULT
ID3D11Device2::
CheckMultisampleQualityLevels1(
            _In_  DXGI_FORMAT Format,
            _In_  UINT SampleCount,
            _In_  UINT Flags, // D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAGS
            _Out_  UINT *pNumQualityLevels);


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -