DirectX
|

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