Direct3D 11.1 功能
Direct3D 11.1 中已新增下列功能,其中包含Windows 8、Windows RT和Windows Server 2012。 Windows 7 和 Windows Server 2008 R2 上提供 Direct3D 11.1 的部分支援,可透過 Windows 7 平臺更新取得,可透過 Windows 7 平臺更新取得。
- 著色器追蹤和編譯器增強功能
- Direct3D 裝置共用
- 檢查新的 Direct3D 11.1 功能和格式的支援
- 使用 HLSL 最小精確度
- 在功能層級 9 和更新版本上,在 HLSL 中指定使用者裁剪平面
- 建立比著色器可以存取的較大常數緩衝區
- 在轉譯目標中使用邏輯作業
- 強制取樣計數建立點陣化狀態
- 使用著色器處理影片資源
- 共用 Texture2D 資源的擴充支援
- 使用新的複製選項變更子資源
- 捨棄資源和資源檢視
- 支援較多的 UAV
- 將常數緩衝區的子範圍系結至著色器
- 擷取系結至著色器之常數緩衝區的子範圍
- 清除資源檢視的所有或部分
- 使用 NO_OVERWRITE 對應動態緩衝區的 SRV
- 在每個管線階段使用 UAV
- WARP 裝置的擴充支援
- 在會話 0 程式中使用 Direct3D
- 支援功能層級 9 上的陰影緩衝區
- 相關主題
著色器追蹤和編譯器增強功能
Direct3D 11.1 可讓您使用著色器追蹤,以確保您的程式碼如預期般執行,如果無法探索並補救問題。 適用于 Windows 8 的 Windows 軟體發展工具組 (SDK) 包含 HLSL 編譯器增強功能。 著色器追蹤和 HLSL 編譯器會在 D3dcompiler_nn.dll 中實作。
著色器追蹤 API 和 HLSL 編譯器的增強功能包含下列方法和函式。
- ID3D11RefDefaultTrackingOptions::SetTrackingOptions
- ID3D11RefTrackingOptions::SetTrackingOptions
- ID3D11TracingDevice::SetShaderTrackingOptions
- ID3D11TracingDevice::SetShaderTrackingOptionsByType
- ID3D11ShaderTraceFactory::CreateShaderTrace
- ID3D11ShaderTrace::TraceReady
- ID3D11ShaderTrace::ResetTrace
- ID3D11ShaderTrace::GetTraceStats
- ID3D11ShaderTrace::P SSelectStamp
- ID3D11ShaderTrace::GetInitialRegisterContents
- ID3D11ShaderTrace::GetStep
- ID3D11ShaderTrace::GetWrittenRegister
- ID3D11ShaderTrace::GetReadRegister
- D3DCompile2
- D3DCompileFromFile
- D3DDisassemble11Trace
- D3DDisassembleRegion
- D3DGetTraceInstructionOffsets
- D3DReadFileToBlob
- D3DSetBlobPart
- D3DWriteBlobToFile
D3dcompiler.lib 程式庫需要D3dcompiler_nn.dll。 此 DLL 不是Windows 8的一部分;它位於 Windows SDK for Windows 8 的 \bin 資料夾中,以及 HLSL 編譯器的Fxc.exe命令列版本。
注意
雖然您可以使用此程式庫和 DLL 組合進行開發,但您無法部署使用此組合的 Windows 市集應用程式。 因此,您必須先改為編譯 HLSL 著色器,才能寄送 Windows 市集應用程式。 您可以將 HLSL 編譯二進位檔寫入磁片,或者編譯器可以使用包含著色器 Blob 資料的靜態位元組陣列來產生標頭。 您可以使用 ID3DBlob 介面來存取 Blob 資料。 若要開發 Windows 市集應用程式,請呼叫 D3DCompile2 或 D3DCompileFromFile 以編譯原始的 HLSL 來源,然後將產生的 Blob 資料摘要至 Direct3D。
Direct3D 裝置共用
Direct3D 11.1 可讓 Direct3D 10 API 和 Direct3D 11 API 使用一個基礎轉譯裝置。
此 Direct3D 11.1 功能包含下列方法和介面。
- ID3D11Device1::CreateDeviceCoNtextState
- ID3D11DeviceCoNtext1::SwapDeviceCoNtextState
- ID3DDeviceCoNtextState
檢查新的 Direct3D 11.1 功能和格式的支援
Direct3D 11.1 可讓您檢查圖形驅動程式可能支援的新功能,以及裝置上支援格式的新方式。 Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 也會指定新的 DXGI_FORMAT 值。
此 Direct3D 11.1 功能包含下列 API。
- ID3D11Device::CheckFeatureSupport 與 D3D11_FEATURE_DATA_D3D11_OPTIONS、 D3D11_FEATURE_DATA_ARCHITECTURE_INFO、 D3D11_FEATURE_DATA_D3D9_OPTIONS、 D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT和 D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT 結構
- ID3D11Device::CheckFormatSupport與D3D11_FORMAT_SUPPORT_DECODER_OUTPUT、D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT、D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_INPUT、D3D11_FORMAT_SUPPORT_VIDEO_ENCODER和D3D11_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP
使用 HLSL 最小精確度
從Windows 8開始,圖形驅動程式可以使用大於或等於其指定位精確度的任何精確度,實作最小精確度HLSL 純量資料類型。 當您的 HLSL 最小精確度著色器程式碼用於實作 HLSL 最小精確度的硬體時,您會使用較少的記憶體頻寬,因此您也會使用較少的系統電源。
您可以使用D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT值呼叫ID3D11Device::CheckFeatureSupport,以查詢圖形驅動程式所提供的最小精確度支援。 在此ID3D11Device::CheckFeatureSupport呼叫中,將指標傳遞給ID3D11Device::CheckFeatureSupport填滿的D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT指標,其中包含驅動程式針對圖元著色器階段和其他著色器階段所支援的最小有效位數層級。 傳回的資訊只會指出圖形硬體可以比標準 32 位浮點精確度低的精確度執行 HLSL 作業,但並不保證圖形硬體實際上會以較低的精確度執行。
您不需要撰寫多個執行且不使用最小精確度的著色器。 相反地,如果圖形驅動程式報告它不支援任何最小精確度,則建立具有最小精確度的著色器,而最小有效位數變數會以完整的 32 位有效位數運作。 如需有關 HLSL 最小精確度的詳細資訊,請參閱 使用 HLSL 最小精確度。
HLSL 最小精確度著色器無法在早于Windows 8的作業系統上運作。
在功能層級 9 和更新版本上,在 HLSL 中指定使用者裁剪平面
從Windows 8開始,您可以使用 HLSL函式宣告中的剪輯平面函式屬性,而不是SV_ClipDistance讓您的著色器在功能層級上運作9_x以及功能層級 10 和更新版本。 如需詳細資訊,請參閱 功能層級 9 硬體上的使用者裁剪平面。
建立比著色器可以存取的較大常數緩衝區
Direct3D 11.1 可讓您建立大於著色器可存取的常數緩衝區大小上限的常數緩衝區, (4096 32 位*4 元件常數 – 64KB) 。 之後,當您透過PSSetConstantBuffers 或 PSSetConstantBuffers1將緩衝區系結至管線時,您可以指定著色器可存取的緩衝區範圍,以符合 4096 限制。
Direct3D 11.1 會更新此功能的 ID3D11Device::CreateBuffer 方法。
在轉譯目標中使用邏輯作業
Direct3D 11.1 可讓您使用邏輯作業,而不是混合轉譯目標。 不過,您無法將邏輯作業混合在多個轉譯目標之間。
此 Direct3D 11.1 功能包含下列 API。
強制取樣計數建立點陣化狀態
Direct3D 11.1 可讓您在建立點陣化狀態時指定強制樣本計數。
此 Direct3D 11.1 功能包含下列 API。
注意
如果您想要轉譯樣本計數強制為 1 或更新版本,您必須遵循下列指導方針:
- 請勿系結深度樣板檢視。
- 停用深度測試。
- 確定著色器不會輸出深度。
- 如果您有 (系結的任何轉譯目標檢視 D3D11_BIND_RENDER_TARGET) ,而且您強制取樣計數大於 1,請確定每個轉譯目標只有單一樣本。
- 請勿以取樣頻率操作著色器。 因此, ID3D11ShaderReflection::IsSampleFrequencyShader 會傳回 FALSE。
否則,轉譯行為是未定義的。 如需如何設定深度樣板的詳細資訊,請參閱 設定Depth-Stencil功能。
使用著色器處理視訊資源
Direct3D 11.1 可讓您建立檢視 (SRV/RTV/UAV) 到視訊資源,讓 Direct3D 著色器可以處理這些視訊資源。 基礎視訊資源的格式會限制檢視可以使用的格式。 DXGI_FORMAT列舉包含新的視訊資源格式值。 這些 DXGI_FORMAT 值會指定您可以建立的有效檢視格式,以及 Direct3D 11.1 執行時間如何對應檢視。 您可以建立相同表面不同部分的多個檢視,而且視格式而定,檢視的大小可能會彼此不同。
Direct3D 11.1 會更新此功能的下列方法。
- ID3D11Device::CreateShaderResourceView
- ID3D11Device::CreateRenderTargetView
- ID3D11Device::CreateUnorderedAccessView
共用 Texture2D 資源的擴充支援
Direct3D 11.1 保證您可以共用使用特定資源類型和格式所建立的 Texture2D 資源。 若要共用 Texture2D 資源,請在建立這些資源時,針對Windows 8) 旗標使用D3D11_RESOURCE_MISC_SHARED、D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX或D3D11_RESOURCE_MISC_SHARED_NTHANDLE (新的D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX和D3D11_RESOURCE_MISC_SHARED_NTHANDLE組合。
Direct3D 11.1 保證您可以共用使用這些 DXGI_FORMAT 值所建立的 Texture2D 資源:
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
- DXGI_FORMAT_B8G8R8X8_UNORM
- DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R16G16B16A16_FLOAT
此外,Direct3D 11.1 保證您可以共用使用 mipmap 層級 1 建立的 Texture2D 資源、陣列大小為 1、系結 D3D11_BIND_SHADER_RESOURCE 旗標和 D3D11_BIND_RENDER_TARGET 合併、使用預設 (D3D11_USAGE_DEFAULT) ,以及只有下列 D3D11_RESOURCE_MISC_FLAG 值:
- D3D11_RESOURCE_MISC_SHARED
- D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX
- D3D11_RESOURCE_MISC_SHARED_NTHANDLE
- D3D11_RESOURCE_MISC_GDI_COMPATIBLE
Direct3D 11.1 可讓您共用更多種類的 Texture2D 資源類型和格式。 您可以使用D3D11_FEATURE_D3D11_OPTIONS值呼叫ID3D11Device::CheckFeatureSupport,查詢圖形驅動程式和硬體是否支援擴充 Texture2D 資源分享。 在此 ID3D11Device::CheckFeatureSupport 呼叫中,將指標傳遞至 D3D11_FEATURE_DATA_D3D11_OPTIONS 結構。 如果硬體和驅動程式支援擴充 Texture2D 資源分享,ID3D11Device::CheckFeatureSupport會將D3D11_FEATURE_DATA_D3D11_OPTIONS的ExtendedResourceSharing成員設定為TRUE。
如果ID3D11Device::CheckFeatureSupport在ExtendedResourceSharing中傳回TRUE,您可以共用使用這些DXGI_FORMAT值建立的資源:
- DXGI_FORMAT_R32G32B32A32_TYPELESS
- DXGI_FORMAT_R32G32B32A32_FLOAT
- DXGI_FORMAT_R32G32B32A32_UINT
- DXGI_FORMAT_R32G32B32A32_SINT
- DXGI_FORMAT_R16G16B16A16_TYPELESS
- DXGI_FORMAT_R16G16B16A16_FLOAT
- DXGI_FORMAT_R16G16B16A16_UNORM
- DXGI_FORMAT_R16G16B16A16_UINT
- DXGI_FORMAT_R16G16B16A16_SNORM
- DXGI_FORMAT_R16G16B16A16_SINT
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R10G10B10A2_UINT
- DXGI_FORMAT_R8G8B8A8_TYPELESS
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
- DXGI_FORMAT_R8G8B8A8_UINT
- DXGI_FORMAT_R8G8B8A8_SNORM
- DXGI_FORMAT_R8G8B8A8_SINT
- DXGI_FORMAT_B8G8R8A8_TYPELESS
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_B8G8R8X8_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
- DXGI_FORMAT_B8G8R8X8_TYPELESS
- DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
- DXGI_FORMAT_R32_TYPELESS
- DXGI_FORMAT_R32_FLOAT
- DXGI_FORMAT_R32_UINT
- DXGI_FORMAT_R32_SINT
- DXGI_FORMAT_R16_TYPELESS
- DXGI_FORMAT_R16_FLOAT
- DXGI_FORMAT_R16_UNORM
- DXGI_FORMAT_R16_UINT
- DXGI_FORMAT_R16_SNORM
- DXGI_FORMAT_R16_SINT
- DXGI_FORMAT_R8_TYPELESS
- DXGI_FORMAT_R8_UNORM
- DXGI_FORMAT_R8_UINT
- DXGI_FORMAT_R8_SNORM
- DXGI_FORMAT_R8_SINT
- DXGI_FORMAT_A8_UNORM
- DXGI_FORMAT_AYUV
- DXGI_FORMAT_YUY2
- DXGI_FORMAT_NV12
- DXGI_FORMAT_NV11
- DXGI_FORMAT_P016
- DXGI_FORMAT_P010
- DXGI_FORMAT_Y216
- DXGI_FORMAT_Y210
- DXGI_FORMAT_Y416
- DXGI_FORMAT_Y410
如果ID3D11Device::CheckFeatureSupport在ExtendedResourceSharing中傳回TRUE,您可以共用使用這些功能和旗標建立的資源:
- D3D11_USAGE_DEFAULT
- D3D11_BIND_SHADER_RESOURCE
- D3D11_BIND_RENDER_TARGET
- D3D11_RESOURCE_MISC_GENERATE_MIPS
- D3D11_BIND_UNORDERED_ACCESS
- Mipmap 層級 (D3D11_TEXTURE2D_DESC ) 的 MipLevels成員中指定的 2D 紋理資源) 一或多個層級 (
- 2D 紋理資源的陣列 (一個或多個紋理) (指定于 arraySize 成員的 arraySizeD3D11_TEXTURE2D_DESC)
- D3D11_BIND_DECODER
- D3D11_RESOURCE_MISC_RESTRICTED_CONTENT
- D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE
- D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER
注意
當 ExtendedResourceSharing 為 TRUE時,當您指定共用 Texture2D 資源的系結旗標時,會有更大的彈性。 圖形驅動程式和硬體不僅支援更多系結旗標,也支援更多可能的系結旗標組合。 例如,您可以只指定 D3D11_BIND_RENDER_TARGET 或沒有系結旗標等等。
即使ID3D11Device::CheckFeatureSupport在ExtendedResourceSharing中傳回TRUE,您仍然無法共用您使用這些功能和旗標建立的資源:
- D3D11_BIND_DEPTH_STENCIL
- 多重取樣反鋸齒 (MSAA) 模式中的 2D 紋理資源, (使用DXGI_SAMPLE_DESC)
- D3D11_RESOURCE_MISC_RESOURCE_CLAMP
- D3D11_USAGE_IMMUTABLE、 D3D11_USAGE_DYNAMIC或 D3D11_USAGE_STAGING (,也就是可對應)
- D3D11_RESOURCE_MISC_TEXTURECUBE
使用新的複製選項變更子資源
Direct3D 11.1 可讓您使用新的複製旗標來複製和更新子資源。 當您複製子資源時,來源和目的地資源可以相同,而且來源和目的地區域可以重迭。
此 Direct3D 11.1 功能包含下列 API。
捨棄資源和資源檢視
Direct3D 11.1 可讓您捨棄裝置內容中資源的資源和檢視。 這項新功能會通知 GPU 不再需要資源或資源檢視中的現有內容。
此 Direct3D 11.1 功能包含下列 API。
- ID3D11DeviceCoNtext1::D iscardResource
- ID3D11DeviceCoNtext1::D iscardView
- ID3D11DeviceCoNtext1::D iscardView1
支援較多的 UAV
當您將資源系結至 輸出合併階段 ,以及當您設定未排序資源的檢視陣列時,Direct3D 11.1 可讓您使用較多的 UAV。
Direct3D 11.1 會更新此功能的下列方法。
- ID3D11DeviceCoNtext::OMSetRenderTargetsAndUnorderedAccessViews
- ID3D11DeviceCoNtext::CSSetUnorderedAccessViews
將常數緩衝區的子範圍系結至著色器
Direct3D 11.1 可讓您系結常數緩衝區的子範圍,以便著色器存取。 您可以提供較大的常數緩衝區,並指定著色器可以使用的子範圍。
此 Direct3D 11.1 功能包含下列 API。
- ID3D11DeviceCoNtext1::CSSetConstantBuffers1
- ID3D11DeviceCoNtext1::D SSetConstantBuffers1
- ID3D11DeviceCoNtext1::GSSetConstantBuffers1
- ID3D11DeviceCoNtext1::HSSetConstantBuffers1
- ID3D11DeviceCoNtext1::P SSetConstantBuffers1
- ID3D11DeviceCoNtext1::VSSetConstantBuffers1
擷取系結至著色器之常數緩衝區的子範圍
Direct3D 11.1 可讓您擷取系結至著色器之常數緩衝區的子範圍。
此 Direct3D 11.1 功能包含下列 API。
- ID3D11DeviceCoNtext1::CSGetConstantBuffers1
- ID3D11DeviceCoNtext1::D SGetConstantBuffers1
- ID3D11DeviceCoNtext1::GSGetConstantBuffers1
- ID3D11DeviceCoNtext1::HSGetConstantBuffers1
- ID3D11DeviceCoNtext1::P SGetConstantBuffers1
- ID3D11DeviceCoNtext1::VSGetConstantBuffers1
清除資源檢視的所有或部分
Direct3D 11.1 可讓您清除 RTV、UAV 或任何 Texture2D 表面視) 的資源 (檢視。 您可以將相同的色彩值套用至檢視的所有部分。
此 Direct3D 11.1 功能包含下列 API。
使用 NO_OVERWRITE 對應動態緩衝區的 SRV
Direct3D 11.1 可讓您使用 D3D11_MAP_WRITE_NO_OVERWRITE 來對應動態緩衝區的 SRV) (著色器資源檢視。 Direct3D 11 和更早的執行時間僅限於頂點或索引緩衝區的對應。
Direct3D 11.1 會更新此功能的 ID3D11DeviceCoNtext::Map 方法。
在每個管線階段使用 UAV
Direct3D 11.1 可讓您在所有先前只用于圖元著色器和計算著色器的著色器階段,使用下列著色器模型 5.0 指示。
- dcl_uav_typed
- dcl_uav_raw
- dcl_uav_structured
- ld_raw
- ld_structured
- ld_uav_typed
- store_raw
- store_structured
- store_uav_typed
- sync_uglobal
- 例如 ,atomic_and 和 imm_atomic_and) 等所有不可 (部分完成專案和立即不可部分完成專案
Direct3D 11.1 會更新此功能的下列方法。
- ID3D11DeviceCoNtext::CreateDomainShader
- ID3D11DeviceCoNtext::CreateGeometryShader
- ID3D11DeviceCoNtext::CreateGeometryShaderWithStreamOutput
- ID3D11DeviceCoNtext::CreateHullShader
- ID3D11DeviceCoNtext::CreateVertexShader
這些指示存在於 direct3D 11.0 中,ps_5_0 和 cs_5_0。 由於 Direct3D 11.1 可讓所有著色器階段提供 UAV,因此這些指示適用于所有著色器階段。
如果您將編譯的著色器 (VS/HS/DS/HS) ,以使用上述任何指示來建立著色器函式,例如 CreateVertexShader,在不支援每個階段的裝置上傳遞編譯的著色器, (包括未使用此功能實作的現有驅動程式) ,則 create-shader 函式會失敗。 如果著色器嘗試使用 UAV 位置超出硬體支援的一組 UAV 插槽,建立著色器函式也會失敗。
這些指示所參考的 UAV 會跨所有管線階段共用。 例如,在 輸出合併階段 于位置 0 系結的 UAV 可在位置 0 取得至 VS/HS/DS/GS/PS。
UAV 存取您在指定 Draw* () 內執行的著色器階段內或跨著色器發出,或從 Dispatch* () 內的計算著色器發出,不保證會按照您發出的順序完成。 但所有 UAV 存取都會在 Draw* () 或 Dispatch* () 結束時完成。
WARP 裝置的擴充支援
Direct3D 11.1 可延伸WARP裝置的支援,您可以在D3D11CreateDevice的DriverType參數中傳遞D3D_DRIVER_TYPE_WARP來建立此裝置。
從 Direct3D 11.1 WARP 裝置開始支援:
WARP 裝置不支援下列選擇性功能:
當您執行虛擬機器 (VM) Hyper-V 時,您的圖形處理單位 (GPU) 停用,或沒有顯示驅動程式時,您會收到易記名稱為 「Microsoft Basic Display Adapter」 的 WARP 裝置。此 WARP 裝置可以執行完整的 Windows 體驗,包括 DWM、Internet Explorer 和 Windows 市集應用程式。 此 WARP 裝置也支援執行繼承應用程式,這些應用程式使用 DirectDraw 或執行使用 Direct3D 3 到 Direct3D 11.1 的應用程式。
在會話 0 程式中使用 Direct3D
從Windows 8和Windows Server 2012開始,您可以在會話 0 程式中使用大部分的 Direct3D API。
注意
這些輸出、視窗、交換鏈結和簡報相關的 API 無法在會話 0 程式中使用,因為它們不適用於會話 0 環境:
- IDXGIFactory::CreateSwapChain
- IDXGIFactory::GetWindowAssociation
- IDXGIFactory::MakeWindowAssociation
- IDXGIAdapter::EnumOutputs
- ID3D11Debug::SetFeatureMask
- ID3D11Debug::SetPresentPerRenderOpDelay
- ID3D11Debug::SetSwapChain
- ID3D10Debug::SetFeatureMask
- ID3D10Debug::SetPresentPerRenderOpDelay
- ID3D10Debug::SetSwapChain
- D3D10CreateDeviceAndSwapChain
- D3D10CreateDeviceAndSwapChain1
- D3D11CreateDeviceAndSwapChain
如果您在會話 0 程式中呼叫上述其中一個 API,它會傳回 DXGI_ERROR_NOT_CURRENTLY_AVAILABLE。
支援功能層級 9 上的陰影緩衝區
使用 Direct3D 10_0+ 陰影緩衝區功能的子集,在 功能層級 上實作陰影效果9_x。 如需實作功能層級9_x陰影效果所需執行動作的相關資訊,請參閱 實作 Direct3D 功能層級 9 的陰影緩衝區。
相關主題