์คํ์์ค Win32 API ๊ตฌํ์ ์คํ์ ๋ฒ์ ์ธ Wine 11.17์ด ์ถ์๋์์ต๋๋ค. 11.16 ๋ฒ์ ์ถ์ ์ดํ 44๊ฑด์ ๋ฒ๊ทธ ๋ณด๊ณ ์๊ฐ ํด๊ฒฐ๋์๊ณ 387๊ฑด์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋์์ต๋๋ค.
๊ฐ์ฅ ์ค์ํ ๋ณ๊ฒฝ ์ฌํญ:
- ์ด๊ธฐ ๋จ๊ณ์์ ํ๋ฉด ๋ชจ๋ ์๋ฎฌ๋ ์ด์ ์ง์์ด ์ถ๊ฐ๋์ด ์ ์ฒด ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฒ์์ด ์์ฒด ๊ฐ์ ํด์๋๋ก ์คํ๋ ์ ์๊ฒ ๋์์ต๋๋ค. ์ด ๊ฐ์ ํด์๋๋ ์ค์ ๋ ๋๋ง ์ ๋ชจ๋ํฐ์ DPI์ ๋ฐ๋ผ ์กฐ์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ค๋๋ ๊ฒ์์ 640x480 ํด์๋๋ฅผ ์ฌ์ฉํ์ง๋ง ํ๋ฉด ๋น์จ์ ์ ์งํ๋ฉด์ ๋ ๋์ ํด์๋์ ํ๋ฉด์ ํ์๋ ์ ์์ต๋๋ค.
- ์์คํ ์ ์ฒด ๋ฐ ๊ฐ๋ณ ์ฌ์ฉ์์ ๋ํด ๋ ์ง์คํธ๋ฆฌ์ ๊ตฌ์ฑ๋ ๊ธฐ๋ณธ ์ธํฐํ์ด์ค ์ธ์ด ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋ RtlGetSystemPreferredUILanguages โโ๋ฐ RtlGetUserPreferredUILanguages โโํจ์์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด ๋ชฉ๋ก์ ๋ก์ผ์ผ ์ค์ ์ ๋ฐ๋ผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์์ฑ๋ฉ๋๋ค. ๋ํ ํ๋ก์ธ์ค ๋ฐ ์ค๋ ๋ ์์ค์์ ๊ธฐ๋ณธ ์ธ์ด ๋ชฉ๋ก์ ํ์ธํ๊ณ ์ค์ ํ๋ RtlGetProcessPreferredUILanguages, SetProcessPreferredUILanguages, RtlGetSetThreadPreferredUILanguages โโ๋ฐ SetThreadPreferredUILanguages โโํจ์๋ ์ถ๊ฐ๋์์ต๋๋ค.
- Direct3D 3 ๊ตฌํ์ด ํฌํจ๋ ๋ด์ฅ Vkd12d ํจํค์ง๊ฐ ๋ฒ์ 2.1๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
- ๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ด๋ จ๋ ์ค๋ฅ ๋ณด๊ณ ์๊ฐ ์ฒ๋ฆฌ๋์์ต๋๋ค: certmgr.exe, Signtools, Advanced SystemCare 6.4, Autodesk 3ds Max 9, SketchUp 2021, Nokia S60 5th Edition SDK 1.0, PDFCreator, SafeDisc v2.05.030, Bigrasts, PTC Pro Engineer Wildfire V5, VisualSubSync 1.0.2.1, PS4 Remote Play 2.x, MigrosBank EBanking 8.2.x, Sparda Bank SecureApp 1.x, MSXML 6.0, Sennheiser Wireless Systems Manager 4.4, Netscape Navigator 3.04, xEdit.
- ๋ค์ ๊ฒ์๋ค์ ์๋๊ณผ ๊ด๋ จ๋ ๋ฒ๊ทธ ๋ณด๊ณ ์๊ฐ ์ฒ๋ฆฌ ์๋ฃ๋์์ต๋๋ค: GTA: Vice City, GTA: San Andreas, Tetris JR, Worms Blast, Horizon Chase Turbo, Star Wars: Knights of the Old Republic I/II, GunBound, Marathon, Ground Control, Ankh โ Anniversary Edition, Clive Barker's Jericho.
๋ํ, ์์ธ ๊ด๋ จ ํ๋ก์ ํธ์ ์๋ก์ด ์ถ์ ์์์ ์๋ ค๋๋ฆฝ๋๋ค.
- Wine Staging 11.17์ด ์ถ์๋์์ต๋๋ค. ์ด ๋ฒ์ ์ ๋ฉ์ธ Wine ๋ธ๋์น์ ํตํฉํ๊ธฐ์ ์์ง ์ ํฉํ์ง ์์ ๋ถ์์ ํ๊ฑฐ๋ ์ํํ ํจ์น๋ฅผ ํฌํจํ๋ ํ์ฅ๋ Wine ๋น๋๋ฅผ ์ ๊ณตํฉ๋๋ค. Wine Staging์ Wine ๋ฒ์ ๊ณผ ๋น๊ตํ์ฌ 279๊ฐ์ ์ถ๊ฐ ํจ์น๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ก์ด Wine Staging ๋ฆด๋ฆฌ์ค๋ Wine 11.17 ์ฝ๋๋ฒ ์ด์ค์ ๋๊ธฐํ๋๋ฉฐ vkd3d ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. kernel32.dll ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ SetThreadpoolTimerEx ํจ์๋ฅผ ๊ตฌํํ๋ ํจ์น๊ฐ ๋ฉ์ธ Wine ๋ฐฐํฌํ์ ์ ์ฉ๋์์ต๋๋ค.
- vkd3d 2.1์ ์ถ์ํ์ต๋๋ค. vkd3d๋ Vulkan ๊ทธ๋ํฝ API์์ ํธ์ถ ๋ณํ์ ํตํด ์๋ํ๋ Direct3D 12 ๊ตฌํ์ฒด์
๋๋ค. ์ด ํจํค์ง์๋ Direct3D 12 ๊ตฌํ์ฒด๊ฐ ํฌํจ๋ libvkd3d ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์
ฐ์ด๋ ๋ชจ๋ธ ๋ณํ๊ธฐ๊ฐ ํฌํจ๋ libvkd3d-shader, ๊ทธ๋ฆฌ๊ณ Direct3D 12 ์ ํ๋ฆฌ์ผ์ด์
ํฌํ
์ ๊ฐ์ํํ๋ ํจ์๋ค์ด ํฌํจ๋ libvkd3d-utils๊ฐ ์์ต๋๋ค. ๋ํ glxgears๋ฅผ Direct3D 12๋ก ํฌํ
ํ ๊ฒ์ ํฌํจํ ์ฌ๋ฌ ๋ฐ๋ชจ๋ ์ ๊ณต๋ฉ๋๋ค. libvkd3d ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ทธ๋ํฝ ๋ฐ ์ปดํจํ
๋๊ตฌ, ํ ๋ฐ ๋ช
๋ น ๋ชฉ๋ก, ๋์คํฌ๋ฆฝํฐ ๋ฐ ํ ๋์คํฌ๋ฆฝํฐ, ๋ฃจํธ ์๊ทธ๋์ฒ, ์์ ์๋ ์ ๊ทผ, ์ํ๋ฌ, ๋ช
๋ น ์๊ทธ๋์ฒ, ๋ฃจํธ ์์, ๊ฐ์ ๋ ๋๋ง, ๊ทธ๋ฆฌ๊ณ Clear*() ๋ฐ Copy*() ๋ฉ์๋๋ฅผ ํฌํจํ ๋๋ถ๋ถ์ Direct3D 12 ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. libvkd3d-shader๋ ์
ฐ์ด๋ ๋ชจ๋ธ ๋ฐ์ดํธ์ฝ๋๋ฅผ SPIR-V ์ค๊ฐ ํํ์ผ๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
vkd3d์ ์๋ก์ด ๋ฒ์ ์์๋:
- HLSL ์ ฐ์ด๋ ์ธ์ด ๊ตฌํ์ด ์ ๋ฐ์ดํธ๋์ด ์ ฐ์ด๋ ๋ชจ๋ธ 4 ๋ฐ 5๋ฅผ ์ฌ์ฉํ ๋ "half" ์ ํ์ ์ฌ์ฉํ ์ฐ์ ์ฐ์ฐ์ ์ง์ํฉ๋๋ค.
- HLSL ์ ฐ์ด๋ ์ปดํ์ผ๋ฌ๋ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ๋ฐ์ดํฐ ๊ฒ์ฌ๋ฅผ ๊ฐํํ์ผ๋ฉฐ ์ ฐ์ด๋ ๋ชจ๋ธ 1-3์์ ์ฌ์ฉ๋์ง ์๋ ์ ์ญ ๋ณ์(uniform)๋ฅผ ์ ๊ฑฐํ๋ ๋จ๊ณ๋ฅผ ๊ตฌํํ์ต๋๋ค.
- GLSL(OpenGL Shading Language) ๋ฐฑ์๋๋ ์ ๋ ฅ ๋ ์ง์คํฐ์ ๊ฐ์ ์ฃผ์ ์ง์ , ์์์ ๋น๊ต ๋ฐ โโ์ ์ ๋ง์ ์ฐ์ฐ, ๋นํธ ์ฐ์ฐ ๋ฐ ๋ฐฐ๋ฆฌ์ด, UAV(Unordered Access View)์ ๋ํ ๋ก๋/์ ์ฅ ์ฐ์ฐ, ๊ทธ๋ฆฌ๊ณ ์ค๋ ๋ ๊ทธ๋ฃน์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์ง์์ ๊ตฌํํฉ๋๋ค.
- ๊ธฐ์กด Direct3D ๋ฐ์ด๋๋ฆฌ ์ ฐ์ด๋ ํ์์ ๋ํ ์ง์์ด ํฅ์๋์์ต๋๋ค. "sub" ๋ฐ "break_cmp" ๋ช ๋ น์ด, "_x2", "_x4", "_x8", "_d2", "_d4", "_d8" ๋ช ๋ น์ด ์์ ์, ๊ทธ๋ฆฌ๊ณ "_bias", "_x2", "_bx2" ํผ์ฐ์ฐ์ ์์ ์๊ฐ ๊ตฌํ๋์์ต๋๋ค.
- SPIR-V ์ ฐ์ด๋์ ์ค๊ฐ ํํ์ผ๋ก ๋ณํํ ๋, ๋ถ๋ ์์์ ์ซ์๋ฅผ 64๋นํธ ์ ์๋ก ๋ณํํ๋ ์ฐ์ฐ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- Libvkd3d-utils๋ ์ ฐ์ด๋ ๋ฐ์ฌ API์ ๋ํ ์ง์์ ํ์ฅํ์ต๋๋ค. ์ด์ ID3D10ShaderReflection, ID3D10ShaderReflection1 ๋ฐ ID3D11ShaderReflection ์ธํฐํ์ด์ค๊ฐ ๊ตฌํ๋์์ผ๋ฉฐ, ID3D12ShaderReflection ๋ฐ ID3D12ShaderReflectionType ์ธํฐํ์ด์ค์ ๋๋ถ๋ถ ๋ฉ์๋๋ ๊ตฌํ๋์์ต๋๋ค.
- vkd3d-compiler์ "--allow-half-globals" ์ต์ ์, libvkd3d-shader์ VKD3D_SHADER_COMPILE_OPTION_BACKCOMPAT_ALLOW_HALF_GLOBALS ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ฌ "half" ํ์ ์ ์ ์ญ ๋ณ์๋ฅผ "float" ํ์ ์ผ๋ก ์ปดํ์ผํฉ๋๋ค.
- DXVK 3.1์ด ์ถ์๋์์ต๋๋ค. DXVK๋ Vulkan API๋ก์ ํจ์ ํธ์ถ ๋ณํ์ ํตํด DXGI(DirectX Graphics Infrastructure), Direct3D 8, 9, 10, 11์ ๊ตฌํํฉ๋๋ค. DXVK๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด NVIDIA 575.51.02, Mesa AMD RADV 25.0, NVIDIA 25.1, Intel ANV 25.1๊ณผ ๊ฐ์ด Vulkan 1.4 API๋ฅผ ์ง์ํ๋ ๋๋ผ์ด๋ฒ๊ฐ ํ์ํฉ๋๋ค. DXVK๋ฅผ ์ฌ์ฉํ๋ฉด 3D ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๊ฒ์์ ์คํํ ์ ์์ต๋๋ค. Linux Wine์ ์ฌ์ฉํ์ฌ OpenGL ์์ ์คํ๋๋ Wine์ ๋ด์ฅ Direct3D ๊ตฌํ๋ณด๋ค ๊ณ ์ฑ๋ฅ ๋์์ ์ ๊ณตํฉ๋๋ค.
์ ๋ฒ์ ์์:
- DXGI์์ ์ฆ๋ถ ๋ ๋๋ง ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ Vulkan ํ์ฅ ๊ธฐ๋ฅ์ธ VK_KHR_incremental_present๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ๋ฉด์์ ๋ณ๊ฒฝ๋ ์์ญ๋ง ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. ์ด ์๋ก์ด ๊ธฐ๋ฅ์ VirtualDJ ๋ฐ Ubisoft Connect์ ๊ฐ์ ๋ค์ํ ๊ฒ์ ๋ฐ์ฒ์์ ๋ฐ์ํ๋ ๋ ๋๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
- ๋ฒํผ์ ๋ ๋๋ง ๋์ ๋ทฐ๋ฅผ ์ง์ ์์ฑํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด Battlefield 3์ ๊ฐ์ ์ผ๋ถ Frostbite ๊ธฐ๋ฐ ๊ฒ์์์ ๋ฐ์ํ๋ ํด๋ผ์ฐ๋ ๋ ๋๋ง ์ค๋ฅ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
- ์ธํ GPU ์ ์ฉ ํ์ฅ ๊ธฐ๋ฅ(๋ฒค๋ ํ์ฅ ๊ธฐ๋ฅ)์ ์ง์ํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋ฉ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค.
- ๋ง๋น๋ ธ๊ธฐ, ๋ ์์ณ 1, ๊ณ ์คํธ ๋ฆฌ์ฝ ๋ธ๋ ์ดํฌํฌ์ธํธ, ๋ฏธ๋ฌ์ฆ ์ฃ์ง, ๋ ์ด์ค๋ฃธ ๋ ์ด์ฑ ์ต์คํผ๋ฆฌ์ธ์ค์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์์ ํ์ต๋๋ค.
- D7VK 2.2 ํ๋ก์ ํธ๊ฐ ์ถ์๋์์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ ๋ง์ดํฌ๋ก์ํํธ๊ฐ 1996๋
, 1997๋
, 1998๋
, 1999๋
์ ์ ์ํ๋ Direct3D 3, 5, 6, 7 ๊ทธ๋ํฝ API์ ๊ตฌํ์ ๊ฐ๋ฐํ์ต๋๋ค. D7VK๋ Vulkan API ํธ์ถ์ ๋ณํํ์ฌ ์คํํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. Linux Direct3D 3, 5, 6, 7 API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ ํธ๋ก ๊ฒ์ ํ๋ก์ ํธ์
๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ C++๋ก ์์ฑ๋์์ผ๋ฉฐ Zlib ๋ผ์ด์ ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ๊ฐ๋ฐ์ DXVK ํ๋ก์ ํธ์ d3d9 ๋ฐฑ์๋ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. D7VK๋ Direct3D 3, 5, 6, 7 API๋ฅผ Direct3D 9 ํธ์ถ๋ก ๋ณํํ๊ณ , ์ด๋ฅผ ๋ค์ Vulkan API๋ก ๋ณํํฉ๋๋ค. ๊ฐ๋ฐ์๋ Vulkan ๊ธฐ๋ฐ์ Direct3D 8 ๋ฐ Direct3D 9 ๊ตฌํ์ฒ๋ผ D7VK๋ฅผ DXVK์ ํฌํจ์ํค๋ ค๋ ์๋๋ ์์ต๋๋ค.
์ ๋ฒ์ ์ DXVK 3.1 ๋ฒ์ ์ผ๋ก ์ ํ๋์๊ณ , D3D3 ์ฅ์น์ ๋ํ D3D3 ์คํ ํ์ผ ๋ฒํผ ๊ฒ์ฌ ๋ฐ ์ฐธ์กฐ ์นด์ดํ ์ด ๊ฐ์ ๋์์ผ๋ฉฐ, D3D5/3์ ํ ์ค์ฒ ์ฒ๋ฆฌ๊ฐ ํฅ์๋์์ต๋๋ค. ๋ํ, ๋ฐ์ง์ ์ ์, ๋ ์ง๋ํธ ์ด๋ธ 2, ํ๋ก๊ฑฐ์ ํ๋ํฐ๋ฅด ์ง์์ด ๊ฐ์ ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru
