ID3D11DeviceContext2::CopyTiles 方法 (d3d11_2.h)

将磁贴从缓冲区复制到平铺资源,反之亦然。

语法

void CopyTiles(
  [in] ID3D11Resource                        *pTiledResource,
  [in] const D3D11_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate,
  [in] const D3D11_TILE_REGION_SIZE          *pTileRegionSize,
  [in] ID3D11Buffer                          *pBuffer,
  [in] UINT64                                BufferStartOffsetInBytes,
  [in] UINT                                  Flags
);

参数

[in] pTiledResource

类型: ID3D11Resource*

指向平铺资源的指针。

[in] pTileRegionStartCoordinate

类型: const D3D11_TILED_RESOURCE_COORDINATE*

指向描述平铺资源的起始坐标的 D3D11_TILED_RESOURCE_COORDINATE 结构的指针。

[in] pTileRegionSize

类型: const D3D11_TILE_REGION_SIZE*

指向描述平铺区域大小的 D3D11_TILE_REGION_SIZE 结构的指针。

[in] pBuffer

类型: ID3D11Buffer*

指向 ID3D11Buffer 的指针,该 ID3D11Buffer 表示默认缓冲区、动态缓冲区或暂存缓冲区。

[in] BufferStartOffsetInBytes

类型: UINT64

pBuffer 处缓冲区中用于启动操作的偏移量(以字节为单位)。

[in] Flags

类型: UINT

使用按位 OR 运算组合的 D3D11_TILE_COPY_FLAG类型值的组合,用于标识如何复制磁贴。

返回值

备注

CopyTiles 将写入操作拖放到未映射的区域,并处理未映射区域 (读取操作, 但Tier_1 平铺资源除外,其中读取和写入未映射区域) 无效。

如果复制操作涉及多次写入同一内存位置,因为目标资源中的多个位置映射到同一磁贴内存,则对多映射磁贴生成的写入操作是不确定的且不可重复的;也就是说,对磁贴内存的访问将按硬件执行复制操作的任何顺序发生。

复制操作中涉及的磁贴不能包含包含已打包 mipmap 的磁贴,或者复制操作的结果未定义。 若要将数据传入和从硬件打包的 mipmap 传输到构成已打包 mip 的一个或多个磁贴中, 必须使用标准 (,即非磁贴特定的) 复制和更新 API (如 ID3D11DeviceContext1::CopySubresourceRegion1ID3D11DeviceContext1::UpdateSubresource1) 或 ID3D11DeviceContext::GenerateMips ,用于整个 mipmap 链。

复制操作的非平铺缓冲区资源端的磁贴的内存布局在内存中是线性的,在 64 KB 磁贴内,硬件和驱动程序在与平铺资源之间传输时,会相应地对每个磁贴进行重排和取消重排。 对于多重采样抗锯齿 (MSAA) 图面,硬件和驱动程序会按采样索引顺序遍历每个像素的样本,然后再移动到下一个像素。 对于在右侧部分填充的磁贴 (的图面的宽度不是图块宽度的倍数(以像素) 为单位),下移行的间距和步幅是平铺已满时可适应的像素数像素的完整大小(以字节为单位)。 因此,内存中的每一行像素之间可能存在间隙。 小于磁贴的 Mipmap 不会在线性布局中打包在一起,这似乎浪费了内存空间,但如前所述,不能使用 CopyTilesID3D11DeviceContext2::UpdateTiles 复制到硬件打包在一起的 mipmap。 只需使用泛型复制和更新 API (ID3D11DeviceContext1::CopySubresourceRegion1ID3D11DeviceContext1::UpdateSubresource1) 分别复制小型 mipmap。 尽管在泛型复制 API ((如 ID3D11DeviceContext1::CopySubresourceRegion1) )的情况下,线性内存必须与平铺资源维度相同; 例如,ID3D11DeviceContext1::CopySubresourceRegion1 无法从缓冲区资源复制到 Texture2D。

有关平铺资源的详细信息,请参阅 平铺资源

要求

要求
最低受支持的客户端 Windows 8.1 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2012 R2 [桌面应用 |UWP 应用]
目标平台 Windows
标头 d3d11_2.h
Library D3D11.lib

另请参阅

ID3D11DeviceContext2