Microsoft ปล่อย DirectStorage 1.3: ปรับปรุงการจัดการ I/O และลดภาระ CPU เพื่อการโหลดเกมที่รวดเร็วยิ่งขึ้น
Microsoft ได้ปล่อย DirectStorage 1.3 เวอร์ชันใหม่ล่าสุด ซึ่งเป็นการอัปเดตที่สำคัญสำหรับนักพัฒนาเกม เพื่อช่วยยกระดับประสิทธิภาพการโหลดข้อมูลในเกมให้ดียิ่งขึ้น ด้วยการเพิ่ม API ใหม่ และการปรับปรุงแก้ไขข้อผิดพลาดหลายจุด ซึ่งการอัปเดตนี้มีเป้าหมายหลักในการเพิ่มความยืดหยุ่นในการจัดการข้อมูล และลดภาระการทำงานของ CPU ที่เกิดขึ้นระหว่างการโหลดฉากและทรัพยากรภายในเกม
EnqueueRequests: ควบคุมการโหลดข้อมูลอย่างชาญฉลาด
ฟีเจอร์สำคัญที่สุดใน DirectStorage 1.3 คือการเพิ่ม API ใหม่ที่ชื่อว่า EnqueueRequests ซึ่งเปิดโอกาสให้นักพัฒนาสามารถควบคุมและจัดลำดับการโหลดข้อมูลได้อย่างละเอียดมากขึ้น โดยสามารถรวมคำขอโหลดข้อมูลหลายรายการเข้าเป็นชุดเดียว (batch) และซิงโครไนซ์การทำงานร่วมกับ D3D12 fence ได้อย่างแม่นยำ
ในทางเทคนิคแล้ว สิ่งนี้ช่วยให้นักพัฒนาสามารถกำหนดได้ว่าการโหลดข้อมูลจะเกิดขึ้นเมื่อใด และประสานงานกับการทำงานของ GPU ในไปป์ไลน์การเรนเดอร์ได้อย่างไร ตัวอย่างเช่น การกำหนดให้การโหลดพื้นผิว (texture) และการอัปเดตแผนที่กระเบื้อง (tile mappings) เกิดขึ้นตามลำดับที่ถูกต้อง เพื่อป้องกันไม่ให้ GPU เริ่มทำงานเร็วเกินไป ซึ่งจะช่วยให้การโหลดข้อมูลสำคัญเป็นไปอย่างมีประสิทธิภาพและคาดเดาได้มากขึ้น
DSTORAGE_DESTINATION แบบใหม่เพื่อการจัดการ Texture ที่ยืดหยุ่น
นอกจากนี้ DirectStorage 1.3 ยังแนะนำประเภทปลายทาง (destination type) ใหม่ที่เรียกว่า DSTORAGE_DESTINATION_MULTIPLE_SUBRESOURCES_RANGE ซึ่งช่วยให้นักพัฒนาสามารถคัดลอกช่วงของ subresources ต่อเนื่องไปยัง resource ของ D3D12 ได้โดยตรง ซึ่งมีประโยชน์อย่างยิ่งในการเขียนข้อมูลลงในระดับ MIPS ของพื้นผิว (texture) ที่เฉพาะเจาะจงหรือเป็นช่วง ๆ
การเปลี่ยนแปลงนี้เมื่อใช้งานร่วมกับ API EnqueueRequests จะช่วยลดภาระการทำงานของ CPU ลงอย่างเห็นได้ชัด และปรับปรุงประสิทธิภาพการโหลดทรัพยากรต่าง ๆ ในเกมให้ดีขึ้น
การแก้ไขข้อบกพร่องและแนวทางปฏิบัติใหม่สำหรับนักพัฒนา
การอัปเดตนี้ยังมีการแก้ไขข้อผิดพลาดหลายประการตามรายงานจากนักพัฒนา เช่น:
- แก้ไขการบีบอัดข้อมูล (decompression): ปรับปรุงให้การบีบอัดด้วย CPU สามารถรายงานความผิดพลาดเมื่อพบข้อมูล GDeflate ที่เสียหาย ซึ่งก่อนหน้านี้จะเกิดปัญหา TDR (Timeout Detection and Recovery) ขึ้นในฝั่ง GPU
- แก้ไข DSTORAGE_DESTINATION_TILES: ปรับปรุงการทำงานให้ถูกต้องสำหรับทรัพยากรที่มีความกว้างและความสูงไม่เท่ากัน
- เปลี่ยนชื่อคุณสมบัติ (Property): เพื่อป้องกันความขัดแย้งกับแพ็กเกจ NuGet อื่น ๆ มีการเปลี่ยนชื่อ MSBuild property จาก NativeBuildDirectory เป็น DirectStorageNativeBuildDirectory
Microsoft ยังได้เพิ่ม ตัวอย่างโค้ด (sample) ใหม่บน GitHub เพื่อแสดงการใช้งาน API EnqueueRequests ร่วมกับ DSTORAGE_DESTINATION_MULTIPLE_SUBRESOURCES_RANGE ในการเติมข้อมูล MIPS ของพื้นผิว ซึ่งจะช่วยให้นักพัฒนาสามารถนำไปปรับใช้ในการสร้างระบบสตรีมมิ่งพื้นผิว (texture streaming) ได้ง่ายขึ้น
สรุป
การอัปเดต DirectStorage 1.3 สะท้อนให้เห็นถึงความมุ่งมั่นของ Microsoft ในการผลักดันเทคโนโลยีการโหลดข้อมูลสำหรับเกมยุคใหม่ให้มีประสิทธิภาพสูงสุด การเพิ่ม EnqueueRequests และ DSTORAGE_DESTINATION_MULTIPLE_SUBRESOURCES_RANGE ไม่ได้เป็นเพียงการเพิ่มฟีเจอร์ใหม่ แต่เป็นการมอบเครื่องมือที่ทรงพลังให้นักพัฒนาสามารถ “จัดระเบียบ” การไหลของข้อมูลจาก SSD สู่ GPU ได้อย่างละเอียดลออมากขึ้น จากเดิมที่ DirectStorage เน้นความเร็วในการส่งข้อมูล การอัปเดตนี้คือการเพิ่ม การควบคุม (control) และ ความแม่นยำ (precision) เข้าไป ซึ่งจะส่งผลโดยตรงต่อการลดอาการสะดุด (stuttering) และการโหลดฉากที่ราบรื่น โดยเฉพาะในเกมโลกเปิดที่มีขนาดใหญ่และต้องโหลดทรัพยากรจำนวนมหาศาลตลอดเวลา
การลดภาระ CPU และการประสานงานระหว่าง I/O กับ GPU อย่างใกล้ชิด จะช่วยปลดปล่อยศักยภาพของฮาร์ดแวร์ยุคใหม่อย่าง SSD NVMe และการ์ดจอได้อย่างเต็มที่ ทำให้ประสบการณ์การเล่นเกมมีความลื่นไหลและไร้รอยต่อมากขึ้น ซึ่งเป็นการยกระดับคุณภาพของเกมโดยรวม และตอกย้ำความสำคัญของ DirectStorage ในฐานะแกนหลักของเทคโนโลยีเกมบน PC ในอนาคตอันใกล้นี้อย่างแท้จริง
ที่มา: DirectX Developer Blog