پروژه Wine انتشار بسته vkd3d 1.7 را با پیاده سازی Direct3D 12 منتشر کرده است که از طریق پخش تماس ها به API گرافیکی Vulkan کار می کند. این بسته شامل کتابخانههای libvkd3d با پیادهسازی Direct3D 12، libvkd3d-shader با مترجم مدلهای سایه زن 4 و 5 و libvkd3d-utils با عملکردهایی برای سادهسازی پورت کردن برنامههای Direct3D 12 و همچنین مجموعهای از نمونههای نمایشی شامل پورت است. از glxgears به Direct3D 12. کد پروژه با مجوز LGPLv2.1 توزیع شده است.
کتابخانه libvkd3d از اکثر ویژگیهای Direct3D 12 پشتیبانی میکند، از جمله امکانات گرافیکی و محاسباتی، صفها و لیستهای دستوری، دستهها و دستههای پشته، امضاهای ریشه، دسترسی خارج از دستور، نمونهها، امضاهای فرمان، ثابتهای ریشه، رندر غیرمستقیم، روشهای پاک کردن *( ) و کپی*(). در libvkd3d-shader، ترجمه بایت کد مدل های سایه زن 4 و 5 به یک نمایش متوسط SPIR-V پیاده سازی شده است. از راس، پیکسل، تسلاسیون، محاسبات و شیدرهای هندسی ساده، سریالسازی امضای ریشه و سریالزدایی پشتیبانی میکند. دستورالعمل های سایه زن شامل عملیات حسابی، اتمی و بیت، مقایسه و عملگرهای کنترل جریان داده، دستورالعمل های نمونه، جمع آوری و بارگذاری، عملیات دسترسی نامرتب (UAV، Unordered Access View) می باشد.
در نسخه های جدید:
- کار برای بهبود کامپایلر سایه زن در HLSL (زبان سایه زن سطح بالا) ادامه یافت:
- قابلیت فراخوانی توابع سفارشی و استفاده از آرایه ها به عنوان پارامتر برای توابع سفارشی اضافه شده است.
- پشتیبانی از پارامترهای SV_DispatchThreadID، SV_GroupID و SV_GroupThreadID اضافه شده است.
- توابع داخلی all()، distance()، exp()، exp2()، frac()، lit()، reflect()، sin()، cos()، smoothstep()، sqrt()، rsqrt () ، step()، transpose().
- پشتیبانی اولیه برای انواع نقطه شناور با دقت کم مانند "min16float" اضافه شده است.
- پشتیبانی قابل توجهی از پروفایل های مدل سایه زن Direct3D 1/2/3 بهبود یافته است.
- API عمومی برای تجزیه (vkd3d_shader_parse_dxbc) و سریال سازی (vkd3d_shader_serialize_dxbc) داده های باینری DXBC اضافه شده است.
منبع: opennet.ru