โครงการ Wine ได้ออกเวอร์ชันใหม่ของแพ็กเกจ vkd3d 1.2 ซึ่ง มาพร้อมกับการใช้งาน Direct3D 12โดยทำงานผ่านการแปลงการเรียกใช้ API กราฟิก Vulkan
vkd3d เวอร์ชัน 1.2 ใหม่นี้มีการปรับปรุงหลายอย่างแต่ที่โดดเด่นที่สุดคือการเปิดใช้งาน libvkd3d-shader เป็นไลบรารีสาธารณะการรองรับ tessellation shaders และการรองรับเอาต์พุตแบบสตรีม
แพ็คเกจนี้ประกอบด้วยไลบรารี 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 ระดับกลาง รองรับจุดยอด พิกเซล การแบ่งส่วนย่อย เชเดอร์เรขาคณิตแบบง่ายและแบบคำนวณ การแปลงลายเซ็นรากเป็นอนุกรม และการแปลงกลับเป็นอนุกรม
คำสั่ง Shader ประกอบด้วยการดำเนินการทางคณิตศาสตร์ อะตอมิก และบิตต่อบิตการควบคุมการไหลของข้อมูลและตัวดำเนินการเปรียบเทียบ คำสั่งการสุ่มตัวอย่าง การรวบรวม และการโหลด และการดำเนินการเข้าถึงแบบไม่เรียงลำดับ (UAV, Unordered Access View)
ในขั้นตอนนี้ของการพัฒนา ฟังก์ชันการทำงานของ Direct3D 12 ยังไม่ได้ถูกนำมาใช้ทั้งหมดและการทดสอบส่วนใหญ่ดำเนินการกับชุดแอปพลิเคชันสาธิตเท่านั้น เวอร์ชันนี้ยังไม่รวมคุณสมบัติที่อยู่ระหว่างการพัฒนา เช่น การรองรับเทสเซลเลชันและเชเดอร์เรขาคณิตที่ซับซ้อน รวมถึงการปรับปรุงหลายอย่างที่เกี่ยวข้องกับเชเดอร์และวิธีการหลักของ Direct3D 12 คุณสมบัติเหล่านี้จะถูกเพิ่มเข้ามาในเวอร์ชันถัดไป
คุณสมบัติใหม่หลักของ Vkd3d 1.2
หนึ่งในความเปลี่ยนแปลงที่สำคัญที่สุดในเวอร์ชันใหม่นี้คือการเปิดใช้งานไลบรารี libvkd3d-shaderสำหรับใช้ในโปรเจกต์ของบุคคลที่สาม เนื่องจากมีการเพิ่มคุณสมบัติ Direct3D 12 หลายอย่าง เช่น:
- หลายการสุ่มตัวอย่าง
- ทรัพยากรที่สงวนไว้
- อัตราการส่งผ่านข้อมูลอินสแตนซ์
- API "ข้อมูลส่วนตัว" สำหรับอินเทอร์เฟซทั้งหมด
- การแมปองค์ประกอบมุมมองทรัพยากร Shader
- VK_KHR_draw_indirect_count ส่วนขยาย
- การแสดงเพรดิเคต / เงื่อนไข
- การเรนเดอร์ความลึกโดยไม่มี Pixel Shader
- ตัวตัดความลึก สิ่งนี้ต้องการส่วนขยาย VK_EXT_depth_clip_enable
- ทิ้งแรสเตอร์
- การผสมแหล่งคู่
- การทำแผนที่ทรัพยากรที่วางไว้
- วิธีการ ReadFromSubresource () และ WriteToSubresource () ID3D12Resource
- เข้าถึงทรัพยากรหลายคิวพร้อมกัน
- มุมมอง Null นั่นคือมุมมองที่ไม่มีทรัพยากรพื้นฐาน
- คำถามเกี่ยวกับการสนับสนุนคุณสมบัติอื่น ๆ อีกมากมาย
นอกจากนี้การเพิ่มการรองรับการแปลง การทำให้เป็นอนุกรม และการยกเลิกการทำให้เป็นอนุกรมของลายเซ็นราก (vkd3d_serialize_versioned_root_signature() และ vkd3d_create_versioned_root_signature_deserializer()) ก็เป็นสิ่งที่น่าสนใจเช่นกันรวมถึงการรองรับการส่งออกข้อมูลแบบสตรีมมิ่งด้วย
การเปลี่ยนแปลงที่สำคัญอีกประการหนึ่งคือการนำตัวแปรสภาพแวดล้อมมาใช้ ได้แก่ VKD3D_CONFIG สำหรับตั้งค่าตัวเลือกเพื่อเปลี่ยนแปลงพฤติกรรมของ libvkd3d และ VKD3D_VULKAN_DEVICE สำหรับกำหนดค่าอุปกรณ์สำหรับ Vulkan API ใหม่
นอกจากนี้ ยังมีการเพิ่มการรองรับคำสั่งการแรเงา bufinfo, eval_centroid, eval_sample_index, ld2ms, sample_b, sample_d, sample_info, samplepos และการรองรับเบื้องต้นสำหรับเชเดอร์โมเดล 5.1
และยังรองรับสภาพแวดล้อมเป้าหมาย OpenGL SPIR-V สิ่งนี้ช่วยให้ SPIR-V ที่ผลิตโดย libvkd3d-shader สามารถใช้กับ GL_ARB_gl_spirv ได้ ซึ่งรวมถึงการรองรับตัวนับอะตอม OpenGL และตัวอย่างรวม
สุดท้ายนี้หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเวอร์ชันใหม่นี้ คุณสามารถดูรายการการเปลี่ยนแปลงทั้งหมดได้ที่ลิงก์ต่อไปนี้
จะติดตั้ง vkd3d บน Linux ได้อย่างไร?
สำหรับผู้ที่สนใจที่จะสามารถติดตั้ง vkd3d ในระบบของพวกเขาพวกเขาควรได้รับซอร์สโค้ดและดำเนินการรวบรวมแม้ว่าจะใช้งานได้จริงหรือสำหรับมือใหม่ก็สามารถลองใช้ไลบรารีนี้ได้โดยไม่ต้องใช้ความพยายามมากนัก สำหรับสิ่งนี้พวกเขาจะต้องติดตั้ง lutris และอยู่ในการกำหนดค่าเท่านั้น
สำหรับผู้ที่สนใจในการรวบรวมจะต้องได้รับรหัสด้วย:
git clone git://source.winehq.org/git/vkd3d.git/
./autogen.sh
./configure
make
../vkd3d/configure --build=i686-pc-linux-gnu "CPPFLAGS=-m32" "LDFLAGS=-m32"
สุดท้ายต้องเปิดใช้งานเลเยอร์ Vulkan:
export VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_standard_validation
VKD3D_CONFIG=vk_debug