پس از یک سال و نیم توسعه، پروژه Wine بسته vkd3d 1.3 را با پیادهسازی 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) می باشد.
از مهم ترین نوآوری های Vkd3d 1.3 می توان به موارد زیر اشاره کرد:
- اضافه شدن پشتیبانی اولیه برای کامپایل و پیش پردازش سایه بان ها در HLSL (زبان سایه زن سطح بالا)، که با DirectX 9.0 شروع می شود.
- پشتیبانی اضافه شده برای آرایه های توصیفگر تعریف شده در مدل سایه زن 5.1.
- پشتیبانی از عملیات ممیز شناور با دقت دوگانه در شیدرها، آدرس دهی غیرمستقیم برای شیدرهای تسلیت، صادرات شابلون ها از شیدرها، اصلاح کننده سایه زن "دقیق" و موانع جهانی منابع حافظه را ارائه می دهد.
- توانایی جدا کردن سایهزنهای Direct3D از بایت کد به نمایش اسمبلی پیادهسازی شده است.
- پشتیبانی اضافه شده برای تجزیه فرمت بایت کد قدیمی Direct3D مورد استفاده در مدل های سایه زن Direct3D 1، 2 و 3.
- libvkd3d ویژگیهای Direct3D 12 مانند امضاهای ریشه، شمارندههای نمایش خارج از نظم، عملگرهای ادغام منطقی برای خروجی و حالت آدرسدهی بافت mirror_once را اضافه میکند. ساختار vkd3d_host_time_domain_info اضافه شد.
منبع: opennet.ru