پروژه Wine انتشار بسته vkd3d 1.16 را با پیاده سازی Direct3D 12 منتشر کرده است که از طریق پخش تماس ها به API گرافیکی Vulkan کار می کند. این بسته شامل کتابخانههای libvkd3d با پیادهسازی Direct3D 12، libvkd3d-shader با مترجم مدلهای سایه زن 4 و 5 و libvkd3d-utils با عملکردهایی برای سادهسازی پورت کردن برنامههای Direct3D 12 و همچنین مجموعهای از نمونههای نمایشی شامل پورت است. از glxgears به Direct3D 12. کد پروژه با مجوز LGPLv2.1 توزیع شده است.
کتابخانه libvkd3d از اکثر ویژگیهای Direct3D 12، از جمله امکانات گرافیکی و محاسباتی، صفها و لیستهای فرمان، توصیفگرها و توصیفگرهای هیپ، امضاهای ریشه، دسترسی نامرتب، نمونهگیرها، امضاهای فرمان، ثابتهای ریشه، رندر غیرمستقیم، متدهای Clear*() و Copy*() پشتیبانی میکند. libvkd3d-shader ترجمه بایتکد مدل شیدر را به نمایش میانی SPIR-V پیادهسازی میکند. رأس، پیکسل، موزاییککاری، محاسبه و سایهزنهای هندسی ساده، سریالسازی امضای ریشه و حذف سریالسازی پشتیبانی میشوند. دستورالعملهای سایهزن شامل عملیات حسابی، اتمی و بیتی، عملگرهای مقایسه و کنترل جریان داده، دستورالعملهای نمونهبرداری، جمعآوری و بارگذاری و عملیات نمای دسترسی نامرتب (UAV) میشود.
در نسخه های جدید:
- پشتیبانی از سایهزن DXIL (زبان میانی DirectX) به طور پیشفرض تثبیت و فعال شد.
- پشتیبانی اولیه از سایهزنهای هندسی به کامپایلر زبان سایهزن HLSL اضافه شده است. برای مدلهای سایهزن ۱، ۲، ۳، پشتیبانی از آدرسدهی غیرمستقیم، ماژولها و محدودیتهای مقدار پیادهسازی شده است.
- کتابخانه libvkd3d ادعا میکند که از مدل سایهزن ۶.۰ پشتیبانی میکند. رابط برنامهنویسی کاربردی ID6.0D3Device12 متد SetEventOnMultipleFenceCompletion() را پیادهسازی میکند. پشتیبانی از افزونه Vulkan VK_KHR_zero_initialize_workgroup_memory برای مقداردهی اولیه حافظه سایهزن به صفر اضافه شد. افزونهی Vulakan به نام VK_KHR_maintenance1 که در مشخصات Vulkan 2 پیشنهاد شده بود، اکنون در فهرست اجباری قرار گرفته است.
- پشتیبانی از جداسازی قطعات سایهزنهای SPIR-V و جلوههای دودویی "fx_2_0" اضافه شد.
- پشتیبانی آزمایشی برای آدرسدهی غیرمستقیم بافرهای پایدار در GLSL (زبان سایهزنی OpenGL) اضافه شد.
- پیادهسازی زبان سایهزن Metal Shading Language (MSL) که توسط اپل در API گرافیکی Metal استفاده میشود، بهروزرسانی شده است تا قابلیت بارگذاری بافتها را نیز شامل شود.
- پشتیبانی از توابع داخلی HLSL اضافه شده است: AllMemoryBarrier()، AllMemoryBarrierWithGroupSync()، DeviceMemoryBarrier()، DeviceMemoryBarrierWithGroupSync()، GroupMemoryBarrier() و GroupMemoryBarrierWithGroupSync().
- پرچمهای VKD3D_SHADER_COMPILE_OPTION_FEATURE_ZERO_INITIALIZE_WORKGROUP_MEMORY، VKD3D_SHADER_COMPONENT_INT64، VKD3D_SHADER_COMPONENT_FLOAT16، VKD3D_SHADER_COMPONENT_UINT16، VKD3D_SHADER_COMPONENT_INT16، VKD3D_SHADER_RESOURCE_DATA_NONE و VKD3D_SHADER_RESOURCE_DATA_UINT پیادهسازی شدند.
منبع: opennet.ru
