D3D11_RESOURCE_MISC_FLAG 枚举 (d3d11.h)

标识资源的选项。

语法

typedef enum D3D11_RESOURCE_MISC_FLAG {
  D3D11_RESOURCE_MISC_GENERATE_MIPS = 0x1L,
  D3D11_RESOURCE_MISC_SHARED = 0x2L,
  D3D11_RESOURCE_MISC_TEXTURECUBE = 0x4L,
  D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS = 0x10L,
  D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS = 0x20L,
  D3D11_RESOURCE_MISC_BUFFER_STRUCTURED = 0x40L,
  D3D11_RESOURCE_MISC_RESOURCE_CLAMP = 0x80L,
  D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX = 0x100L,
  D3D11_RESOURCE_MISC_GDI_COMPATIBLE = 0x200L,
  D3D11_RESOURCE_MISC_SHARED_NTHANDLE = 0x800L,
  D3D11_RESOURCE_MISC_RESTRICTED_CONTENT = 0x1000L,
  D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE = 0x2000L,
  D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER = 0x4000L,
  D3D11_RESOURCE_MISC_GUARDED = 0x8000L,
  D3D11_RESOURCE_MISC_TILE_POOL = 0x20000L,
  D3D11_RESOURCE_MISC_TILED = 0x40000L,
  D3D11_RESOURCE_MISC_HW_PROTECTED = 0x80000L,
  D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE,
  D3D11_RESOURCE_MISC_SHARED_EXCLUSIVE_WRITER
} ;

常量

 
D3D11_RESOURCE_MISC_GENERATE_MIPS
值: 0x1L
在纹理资源上使用 ID3D11DeviceContext::GenerateMips 启用 MIP 贴图生成。 必须使用 绑定标志 创建资源,这些标志指定资源是呈现目标和着色器资源。
D3D11_RESOURCE_MISC_SHARED
值: 0x2L
启用两个或多个 Direct3D 设备之间的资源数据共享。 唯一可以共享的资源是 2D 非误入式纹理。


D3D11_RESOURCE_MISC_SHAREDD3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX 是相互排斥的。


WARPREF 设备不支持共享资源。
如果尝试在 WARPREF 设备上使用此标志创建资源,create 方法将返回 E_OUTOFMEMORY 错误代码。


注意从Windows 8开始,WARP 设备完全支持共享资源。

 

注意从Windows 8开始,建议改为使用D3D11_RESOURCE_MISC_SHARED_NTHANDLED3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX标志的组合在两个或多个 Direct3D 设备之间启用资源数据共享。

 
D3D11_RESOURCE_MISC_TEXTURECUBE
值: 0x4L
将资源设置为从包含 6 个纹理的 Texture2DArray 创建的立方体纹理。
D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS
值: 0x10L
启用 GPU 生成的内容的实例化。
D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS
值: 0x20L
启用资源作为 字节地址缓冲区
D3D11_RESOURCE_MISC_BUFFER_STRUCTURED
值: 0x40L
将资源作为 结构化缓冲区启用。
D3D11_RESOURCE_MISC_RESOURCE_CLAMP
值: 0x80L
启用具有 MIP 映射固定的资源,以便与 ID3D11DeviceContext::SetResourceMinLOD 一起使用。
D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX
值: 0x100L
允许使用 IDXGIKeyedMutex::AcquireSync 和 同步资源
IDXGIKeyedMutex::ReleaseSync Api。
以下 Direct3D 11 资源创建 API(采用 D3D11_RESOURCE_MISC_FLAG 参数)已扩展为支持新标志。


如果在设置了 D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX 标志的情况下调用这些方法中的任何一个,则返回的接口将支持 IDXGIKeyedMutex 接口。 可以使用 IUnknown::QueryInterface 从资源检索指向 IDXGIKeyedMutex 接口的指针。 IDXGIKeyedMutex 接口实现 IDXGIKeyedMutex::AcquireSyncIDXGIKeyedMutex::ReleaseSync API,以同步对图面的访问。 创建图面的设备以及使用 OpenSharedResource 打开图面的任何其他设备在向图面发出任何呈现命令之前,必须调用 IDXGIKeyedMutex::AcquireSync 。 当这些设备完成呈现时,它们必须调用 IDXGIKeyedMutex::ReleaseSync


D3D11_RESOURCE_MISC_SHAREDD3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX 是相互排斥的。


WARPREF 设备不支持共享资源。
如果尝试在 WARPREF 设备上使用此标志创建资源,create 方法将返回 E_OUTOFMEMORY 错误代码。


注意从Windows 8开始,WARP 设备完全支持共享资源。

 
D3D11_RESOURCE_MISC_GDI_COMPATIBLE
值: 0x200L
启用与 GDI 兼容的资源。 必须在与 GDI 一起使用的图面上设置 D3D11_RESOURCE_MISC_GDI_COMPATIBLE 标志。 设置 D3D11_RESOURCE_MISC_GDI_COMPATIBLE 标志允许通过 IDXGISurface1::GetDC 在图面上呈现 GDI。


在创建纹理或在交换链中使用该纹理时,请考虑以下使用D3D11_RESOURCE_MISC_GDI_COMPATIBLE的编程提示:


  • D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX和D3D11_RESOURCE_MISC_GDI_COMPATIBLE是相互排斥的。 因此,不要将它们一起使用。

  • D3D11_RESOURCE_MISC_RESOURCE_CLAMP和D3D11_RESOURCE_MISC_GDI_COMPATIBLE是互斥的。 因此,不要将它们一起使用。

  • 必须将纹理绑定为输出合并阶段的呈现目标。 例如,在 D3D11_TEXTURE2D_DESC 结构的 BindFlags 成员中设置 D3D11_BIND_RENDER_TARGET 标志。

  • 必须将 MIP 映射级别的最大数目设置为 1。 例如,将 D3D11_TEXTURE2D_DESC 结构的 MipLevels 成员设置为 1。

  • 必须指定纹理需要 GPU 的读取和写入访问权限。 例如,将 D3D11_TEXTURE2D_DESC 结构的 Usage 成员设置为 D3D11_USAGE_DEFAULT。


  • 必须将纹理格式设置为以下类型之一。


    • DXGI_FORMAT_B8G8R8A8_UNORM

    • DXGI_FORMAT_B8G8R8A8_TYPELESS

    • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB

    例如,将 D3D11_TEXTURE2D_DESC 结构的 Format 成员设置为以下类型之一。

  • 不能将D3D11_RESOURCE_MISC_GDI_COMPATIBLE用于多重采样。 因此,将 DXGI_SAMPLE_DESC 结构的 Count 成员设置为 1。 然后,将 D3D11_TEXTURE2D_DESC 结构的 SampleDesc 成员设置为此DXGI_SAMPLE_DESC结构。

D3D11_RESOURCE_MISC_SHARED_NTHANDLE
值: 0x800L
设置此标志,以便在创建共享资源时启用 NT HANDLE 值。 启用此标志后,将弃用现有 HANDLE 值。

值指定新的共享资源类型,该类型指示运行时对共享资源使用 NT HANDLE 值。 然后,运行时必须确认共享资源在指定 功能级别的所有硬件上正常工作。


如果不设置此标志,运行时不会严格验证共享资源参数 (即格式、标志、使用情况等) 。 当运行时不验证共享资源参数时,大部分 Direct3D API 的行为可能未定义,并且可能因驱动程序而异。

Direct3D 11 及更早版本: 在 Direct3D 11.1 之前不支持此值。
D3D11_RESOURCE_MISC_RESTRICTED_CONTENT
值: 0x1000L
设置此标志以指示资源可能包含受保护的内容;因此,仅当驱动程序和硬件支持内容保护时,操作系统才应使用该资源。 如果驱动程序和硬件不支持内容保护,并且你尝试使用此标志创建资源,则资源创建将失败。

Direct3D 11: 在 Direct3D 11.1 之前不支持此值。
D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE
值: 0x2000L
设置此标志以指示操作系统限制对共享图面的访问。 仅当创建共享图面时,才能将此标志与 D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER 标志一起使用。 创建共享资源的过程始终可以打开共享资源。

Direct3D 11: 在 Direct3D 11.1 之前不支持此值。
D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER
值: 0x4000L
设置此标志以指示驱动程序限制对共享图面的访问。 仅当创建共享图面时,才能将此标志与 D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE 标志结合使用。 创建共享资源的过程始终可以打开共享资源。

Direct3D 11: 在 Direct3D 11.1 之前不支持此值。
D3D11_RESOURCE_MISC_GUARDED
值: 0x8000L
设置此标志以指示资源受到保护。 此类资源由 IDCompositionSurface::BeginDraw (DirectComposition) 和 ISurfaceImageSourceNative::BeginDraw (Windows 运行时) API 返回。 对于这些 API,可在图面上提供感兴趣的区域 (ROI) 进行更新。 此图面与 MRT) (多个渲染目标不兼容。

受保护的资源会自动限制对与上述某个 API 相关的区域的所有写入。 此外,资源通过以下限制强制访问 ROI:


Direct3D 11: 在 Direct3D 11.1 之前不支持此值。
D3D11_RESOURCE_MISC_TILE_POOL
值: 0x20000L
设置此标志以指示资源是磁贴池。

Direct3D 11: 在 Direct3D 11.2 之前不支持此值。
D3D11_RESOURCE_MISC_TILED
值: 0x40000L
设置此标志以指示资源是平铺资源。

Direct3D 11: 在 Direct3D 11.2 之前不支持此值。
D3D11_RESOURCE_MISC_HW_PROTECTED
值: 0x80000L
设置此标志以指示应创建资源,使其受硬件保护。 如果不支持硬件内容保护,则资源创建将失败。

此标志具有以下限制:


  • 此标志不能与以下 D3D11_USAGE 值一起使用:

    • D3D11_USAGE_DYNAMIC

    • D3D11_USAGE_STAGING



  • 此标志不能与以下 D3D11_BIND_FLAG 值一起使用。

    • D3D11_BIND_VERTEX_BUFFER

    • D3D11_BIND_INDEX_BUFFER



  • 无法指定 CPU 访问标志。


注意  

使用此标志创建纹理并不自动保证会为基础分配启用硬件保护。 某些实现要求在保证保护之前先初始化 DRM 组件。


 

注意从Windows 10开始支持此枚举值。
D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE
使资源能够使用 可显示表面 功能。 必须将 D3D11_RESOURCE_MISC_SHARED_DISPLAYABLED3D11_RESOURCE_MISC_SHAREDD3D11_RESOURCE_MISC_SHARED_NTHANDLE 结合使用。
D3D11_RESOURCE_MISC_SHARED_EXCLUSIVE_WRITER
TBD

注解

此枚举用于 D3D11_BUFFER_DESCD3D11_TEXTURE1D_DESCD3D11_TEXTURE2D_DESCD3D11_TEXTURE3D_DESC

这些标志可以按位 OR 组合。

创建具有 D3D11_CPU_ACCESS 标志的资源时,无法使用 D3D11_RESOURCE_MISC_FLAG

要求

要求
Header d3d11.h

另请参阅

资源枚举