[英]Upgrading an existing D3D9 SH3 project to SH4?
我有一個最近一直在處理的舊 DirectX 3D 9 Visual Stuido 項目。
我一直潛入渲染和 HLSL 着色器的世界,但對我來說很明顯 Shader Model 3 相當有限。 查看 Shader Model 3 和 4 的 MS Docs,似乎 4 是一個相當大的升級。 嘗試使用任何高於3_0
的 HLSL 着色器編譯我的項目會產生error X3506: Only 3_x and earlier targets are supported on this compiler.
,因此我認為我的項目需要升級它的編譯器。
看來我的項目會自動從SysWOW64
加載D3DCompiler_43.dll
,但是在查看該系統文件夾后,看來我已經有了D3DCompiler_47.dll
。 我還在網上讀到 SH4 有一個所謂的“傳統”模式,但是我對如何正確實現它有點困惑。 在查看 MS Docs 的編譯語法( https://docs.microsoft.com/en-us/windows/win32/direct3dtools/dx-graphics-tools-fxc-syntax )后,在編譯我的像素着色器時,使用關鍵字例如ps_4_0_level_9_0
將允許它在 D3D9 上運行,但是會產生error X3523: DX9-style intrinsics are disabled when not in dx9 compatibility mode.
. 在這一點上,我有點迷失了升級我的項目需要做什么。
是否可以在 D3D9 中將現有的 SH3 項目升級到 SH4? 甚至可以讓我的項目運行D3DCompiler_47.dll
而不是D3DCompiler_43.dll
嗎?
感謝您的幫助,感謝您閱讀我的帖子!
着色器模型 4.0 僅受 Direct3D 10 或更高版本支持。 要使用它,您必須遷移到舊版 Direct3D 9。建議遷移到 Direct3D 11。
Direct3D 9 時代的硬件不支持 Shader Model 4.0+ 着色器。 構建與Direct3D 硬件功能級別 9.x兼容的着色器所需的現代 Direct3D 的“10level9”HLSL 配置文件實際上會產生兩個着色器 blob:適用於 D3D10+ 硬件的着色器模型 4.0 和適用於 D3D9 硬件的着色器模型 2.x。
每當您嘗試通過編譯器的D3DX9
接口使用 Shader Model 4 或更高版本時,都會輸出error X3506
。 如果您使用D3DCompile API,它就可以工作,盡管 #43 已經很老了。 您可以使用 D3DCompiler_47.DLL 為 Direct3D 9 構建 Shader Model 2.0 和 Shader Model 3.0。DLL 本身適用於 Windows 7 SP1 或更高版本,但不會在 Windows XP 上加載。 有關 #47 編譯器及其用途的更多信息,請參閱此博客文章。
HLSL 編譯器有一個“兼容模式”來接受較舊的 DX9 樣式着色器語法。 這是/Gec
開關或D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY
標志。 這些“重大更改”是在 2008 年 3 月的舊版 DirectX SDK 中引入的:
如果您使用的是 D3DCompiler_43.DLL,那么您仍然擁有舊版 DirectX SDK。 請注意,如今通過 NuGet 使用 D3DX9/D3DX10/D3DX11 有一個更好的選擇,可以避免與現代 Windows SDK 標頭發生大量沖突。 請參閱此博客文章。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.