Wine ํ๋ก์ ํธ๋ Vulkan ๊ทธ๋ํฝ API์ ๋ํ ๋ธ๋ก๋์บ์คํธ ํธ์ถ์ ํตํด ์๋ํ๋ Direct3D 1.11๋ฅผ ๊ตฌํํ vkd3d 12 ํจํค์ง ๋ฆด๋ฆฌ์ค๋ฅผ ๋ฐํํ์ต๋๋ค. ํจํค์ง์๋ Direct3D 3 ๊ตฌํ์ด ํฌํจ๋ libvkd12d ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ ฐ์ด๋ ๋ชจ๋ธ 3 ๋ฐ 4์ ๋ณํ๊ธฐ๊ฐ ํฌํจ๋ libvkd5d-shader, Direct3D 3 ์ ํ๋ฆฌ์ผ์ด์ ์ด์์ ๋จ์ํํ๋ ๊ธฐ๋ฅ์ด ํฌํจ๋ libvkd12d-utils ๋ฐ ํฌํธ๋ฅผ ํฌํจํ ๋ฐ๋ชจ ์์ ์ธํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. Direct3D 12์ ๋ํ glxgears์ ํ๋ก์ ํธ ์ฝ๋๋ LGPLv2.1์ ๋ฐ๋ผ ๋ผ์ด์ผ์ค๊ฐ ๋ถ์ฌ๋์ด ๋ฐฐํฌ๋ฉ๋๋ค.
libvkd3d ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ทธ๋ํฝ ๋ฐ ๊ณ์ฐ ๊ธฐ๋ฅ, ๋๊ธฐ์ด ๋ฐ ๋ช ๋ น ๋ชฉ๋ก, ํธ๋ค ๋ฐ ํ ํธ๋ค, ๋ฃจํธ ์๋ช , ๋น์์ฐจ์ ์ก์ธ์ค, ์ํ๋ฌ, ๋ช ๋ น ์๋ช , ๋ฃจํธ ์์, ๊ฐ์ ๋ ๋๋ง, Clear ๋ฉ์๋๋ฅผ ํฌํจํ ๋๋ถ๋ถ์ Direct3D 12 ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ) ๋ฐ ๋ณต์ฌ*(). libvkd3d-shader์์๋ ์ ฐ์ด๋ ๋ชจ๋ธ 4์ 5์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ค๊ฐ SPIR-V ํํ์ผ๋ก ๋ณํํ๋ ์์ ์ด ๊ตฌํ๋ฉ๋๋ค. ์ ์ , ํฝ์ , ํ ์ ๋ ์ด์ , ์ปดํจํ ๋ฐ ๋จ์ ์ง์ค๋ฉํธ๋ฆฌ ์ ฐ์ด๋, ๋ฃจํธ ์๋ช ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ๋ฅผ ์ง์ํฉ๋๋ค. ์ ฐ์ด๋ ๋ช ๋ น์๋ ์ฐ์ , ์์ ๋ฐ ๋นํธ ์ฐ์ฐ, ๋น๊ต ๋ฐ โโ๋ฐ์ดํฐ ํ๋ฆ ์ ์ด ์ฐ์ฐ์, ์ํ๋ง, ์์ง ๋ฐ ๋ก๋ ๋ช ๋ น, ์์ ์๋ ์ก์ธ์ค ์์ (UAV, ์์ ์๋ ์ก์ธ์ค ๋ณด๊ธฐ)์ด ํฌํจ๋ฉ๋๋ค.
์ ๋ฒ์ ์์:
- ๋ ๊ฑฐ์ Direct3D ๋ฐ์ดํธ์ฝ๋๋ฅผ SPIR-V ์ ฐ์ด๋ ์ค๊ฐ ํํ์ผ๋ก ์ปดํ์ผํ๊ธฐ ์ํ ์ด๊ธฐ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- HLSL ์ปดํ์ผ๋ฌ๋ Direct3D ํจ๊ณผ ํ๋กํ('fx_2_0', 'fx_4_0', 'fx_4_1', 'fx_5_0')์ ์ปดํ์ผํ๊ธฐ ์ํ ์ด๊ธฐ ์ง์์ ์ถ๊ฐํ์ต๋๋ค.
- DirectX Intermediate Language(DXIL)๋ฅผ SPIR-V ํํ๊ณผ Direct3D ์ ฐ์ด๋ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด๋ก ์ปดํ์ผํ๊ธฐ ์ํ ์คํ์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- HLSL์ ์ด์ "fx_2_0", "fx_4_0", "fx_4_1" ๋ฐ "fx_5_0" ํ๋กํ์ ์ง์ํ๊ณ , ๋ด์ฅ ํจ์ acos(), asin(), atan() ๋ฐ atan2()๋ฅผ ๊ตฌํํ๋ฉฐ, "๋ฒํผ" ๋ฆฌ์์ค์ ๋ํ ์ง์์ ์ ๊ณตํฉ๋๋ค.
- ํ๋ ์๋ง๋ค ๋ง์ ์์ ์ค๋ช ์๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋๋ฅผ ํฅ์์ํฌ ์ ์๋ ์ค๋ช ์ ์ ๋ฐ์ดํธ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ํํ๋ ์ต์ ํ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- Vulkan ํ์ฅ ๊ธฐ๋ฅ์ธ VK_EXT_mutable_descriptor_type๊ณผ VK_EXT_shader_viewport_index_layer๋ฅผ ์ฌ์ฉํ์ฌ ๋์คํฌ๋ฆฝํฐ ํ ์์ ์ ํจ์จ์ฑ์ ๊ฐ์ ํ๊ณ ์ ์ ๋ฐ ํ ์ ๋ ์ด์ ์ ฐ์ด๋ ๋ฐฐ์ด์ ๋ ๋๋ง ์๋๋ฅผ ๋์์ต๋๋ค.
- ID3D12Device7 ๋ฐ ID3D12Resource2 API์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. GetResourceAllocationInfo3() ๋ฉ์๋๊ฐ ID12D4Device1 ์ธํฐํ์ด์ค์ ์ถ๊ฐ๋์์ต๋๋ค.
- D3DReflect() ๋ฐ D3DDisassemble() ์ธํฐํ์ด์ค์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- D3D12_FEATURE_D3D12_OPTIONS6 D3D12_FEATURE_D3D12_OPTIONS7, D3D12_FEATURE_D3D12_OPTIONS8, D3D12_FEATURE_D3D12_OPTIONS9, D3D12_FEATURE_D3D12_OPTIONS10, D3D12_FEATURE_D3D12_OPTIONS11, D3D12_FEATURE_D3D12_OPTIONS12, D3D12_FEATURE_D3D12_OPTIONS13์ ๋ํ ๊ฒ์ฆ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌํํ์ต๋๋ค.
- ์๋ก์ด ๋น๋ ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค: VKD3D_SHADER_COMPILE_OPTION_FEATURE, VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64, VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64, VKD3D_SHADER_API_VERSION_1_10 ๋ฐ VKD3D_SHADER_SPIRV_EXTENSION_EXT_VIEWPORT_INDEX_LAYER.
- D3D12CreateDeviceVKD3D() ๋ฐ D3D12CreateDevice() ํจ์๋ Vulkan ํ์ฅ ๊ธฐ๋ฅ์ธ VK_KHR_android_surface, VK_KHR_wayland_surface, VK_KHR_win32_surface, VK_KHR_xlib_surface, VK_EXT_metal_surface ๋ฐ VK_MVK_ios_surface๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ถ์ฒ : opennet.ru
