Wine ํ”„๋กœ์ ํŠธ๋Š” Direct3D 1.11 ๊ตฌํ˜„์œผ๋กœ Vkd3d 12์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€