รายงานความก้าวหน้า มกราคม 2565

เรามีเดือนอะไร ยุซเอ๋อ ครั้งนี้ เราขอเสนอการเปลี่ยนแปลงเคอร์เนล การแก้ไขอินพุตและส่วนเพิ่มเติมมากมายให้กับคุณ และยังมีการแก้ไขไดรเวอร์ NVIDIA เพิ่มเติม การเปลี่ยนแปลงอินเทอร์เฟซผู้ใช้ และอื่นๆ อีกมากมาย!

PSA สำหรับผู้ใช้ NVIDIA: ตอนที่ 3

มันยังไม่จบ

ดัง ที่คุณทราบ GPU เดสก์ท็อปและแล็ปท็อป NVIDIA ปกติไม่รองรับการถอดรหัสพื้นผิว ASTC ดังนั้น yuzu จึงใช้ประโยชน์จากความสามารถในการประมวลผลของ GPU เพื่อทำให้กระบวนการขนานกัน อย่างไรก็ตาม ไดรเวอร์ 511.XX รุ่นล่าสุดได้นำเสนอปัญหาที่ส่งผลต่อการถอดรหัสพื้นผิว ASTC ที่เร่งการประมวลผลด้วย shader ของเรา

Crispy (ซูเปอร์มาริโอโอดิสซีย์)Crispy (ซูเปอร์มาริโอโอดิสซีย์)

Crispy (ซูเปอร์มาริโอโอดิสซีย์)

หลังจากการสอบสวนหลาย ครั้ง Epicboy พบว่าสาเหตุของข้อบกพร่องนั้นเกิดจากการเพิ่มประสิทธิภาพมากเกินไปโดยไดรเวอร์ใหม่ (การปรับให้เหมาะสมสำหรับสถานการณ์หนึ่งส่งผลให้เกิดปัญหาสำหรับอีกสถานการณ์หนึ่ง) การเปลี่ยนแปลงพฤติกรรมเล็กน้อยช่วยแก้ปัญหา ได้ คุณสามารถค้นหาข้อมูลทางเทคนิคเพิ่มเติมได้ในคำขอดึง

ผู้ใช้ที่เล่น Hyrule Warriors: Age of Calamity หรือ Luigi's Mansion 3 ควรยึดติดกับไดรเวอร์ซีรีส์ 47X.XX เนื่องจากเวอร์ชันที่ใหม่กว่านั้นจะมีปัญหาการเรนเดอร์หลายประการ อย่าหงุดหงิด เรากำลังตรวจสอบสาเหตุ!

เครื่องกำเนิดงานศิลปะนามธรรม (Hyrule Warriors: Age of Calamity)

เครื่องกำเนิดงานศิลปะนามธรรม (Hyrule Warriors: Age of Calamity)

ในทางกลับกัน เวอร์ชัน 511.65 รวมการสนับสนุน Vulkan 1.3 ที่เพิ่งเปิดตัวและเพิ่มประสิทธิภาพอย่างมากเมื่อใช้ API ดังกล่าว บางเกมแสดงประสิทธิภาพที่เพิ่มขึ้นถึง 24%!

ตำนานใหม่

ในที่สุด หลังจากผ่านไปกว่าสองทศวรรษ แฟรนไชส์โปเกมอนแตกต่างจากสูตรที่เหนื่อย และทำการเปลี่ยนแปลงครั้งใหญ่ในการเล่นเกมใน Pokémon Legends: Arceus ที่เพิ่งเปิดตัว

ทั้งหมดนี้ต้องแลกกับความเที่ยงตรงของกราฟิก แต่เดี๋ยวก่อน มีเกมที่ดูแย่กว่านี้… ใน GameCube

นอกเหนือจากกราฟิกที่น่าผิดหวัง การเปิดตัวของเกมนี้เผยให้เห็นปัญหาหลายประการเกี่ยวกับ yuzu และยังช่วยเราแก้ไขปัญหาที่มีมาอย่างยาวนานซึ่งส่งผลต่อเกมอีกมากมาย

bunnei แก้ไขการชะงักงันที่พบในรหัสที่ใช้ในการ โยกย้ายเธรดระหว่างแกน ซึ่งทำให้ซอฟต์ล็อคที่น่าสังเกตมีอยู่ใน Pokémon Legends: Arceus

ปัญหาสามารถสรุปได้ดังนี้: หนึ่งเธรด (เธรด A ) กำลังรออีกอันหนึ่ง (เธรด B ) เพื่อปลดล็อค และในทางกลับกัน เธรด B จะรอให้เธรด A ปล่อยการล็อกอื่น ส่งผลให้เกิดการหยุดชะงัก

การเปลี่ยนแปลงรูปแบบการเล่นที่ดีที่สุดในรอบหลายทศวรรษ (Pokémon Legends: Arceus)

การเปลี่ยนแปลงรูปแบบการเล่นที่ดีที่สุดในรอบหลายทศวรรษ (Pokémon Legends: Arceus)

ต่อจากปัญหาเคอร์เนล Epicboy นำการเปลี่ยนแปลง GPU ต่างๆ มาใช้

เขาพบว่า การลดจำนวนการจัดสรรบัฟเฟอร์ ในตอนเริ่มต้น แทนที่จะเป็นเพียงตอนท้าย ทำให้เกมไม่สามารถหยุดทำงานในบางตำแหน่งได้

ไดรเวอร์ Vulkan บางตัว โดยเฉพาะ Intel Windows ไม่สามารถประมวลผลการทำงานของอะตอมมิกแบบ 64 บิตได้ (การดำเนินการที่สามารถทำงานโดยไม่ขึ้นกับกระบวนการอื่นใด) Epicboy เพิ่มการรองรับใน yuzu สำหรับการดำเนินการอะตอมมิก 2×32 บิตที่ไม่ได้ลงนาม เนื่องจากเป็นตัวเลือกทางเลือกที่ไดรเวอร์ดังกล่าวใช้ ด้วยการเปลี่ยนแปลงนี้ เกมจะบู๊ตด้วย Intel GPU ที่ใช้ Vulkan

AMD มีปัญหากับ Transform Feedback มาอย่างยาวนานทั้งในไดรเวอร์ Windows และ Linux อย่างเป็นทางการ ทำให้เกิดปัญหาในการเรนเดอร์ในเกมนับไม่ถ้วน แม้ว่าสิ่งนี้จะได้รับการแก้ไขในไดรเวอร์ Linux AMDVLK เมื่อเร็ว ๆ นี้ แต่ไดรเวอร์ AMD Windows ยังคงต้องได้รับการบอกว่า Execution Mode การใดที่จะใช้ต่อไป

การระบุอย่างชัดเจนว่าจะใช้โหมดการ Execution Mode การ Xfb ก่อนเริ่มใช้ Transform Feedback ช่วยแก้ปัญหาทั้งหมดที่เกี่ยวข้องกับไดรเวอร์ AMD Windows Vulkan ไม่เพียงแต่เป็นประโยชน์ต่อ Pokémon Legends: Arceus แต่ยังรวมถึงเกมอย่าง Xenoblade Chronicles 2 , Xenoblade Chronicles Definitive Edition , Hellblade: Senua's Sacrifice , Donkey Kong Country: Tropical Freeze , POKKÉN TOURNAMENT DX และอีกมากมาย

Pokémon Legends: ArceusPokémon Legends: Arceus

Pokémon Legends: Arceus

Xenoblade Chronicles Definitive EditionXenoblade Chronicles Definitive Edition

Xenoblade Chronicles Definitive Edition

Donkey Kong Country: น้ำแข็งเขตร้อนDonkey Kong Country: น้ำแข็งเขตร้อน

Donkey Kong Country: น้ำแข็งเขตร้อน

Pokémon Legends: Arceus ได้รับผลกระทบจากการระเบิดจุดยอด โดยแสดงให้เห็นว่าพื้นผิวขยายออกไปแบบสุ่ม ข่าวร้ายก็คือว่านี่เป็นปัญหาของ Buffer Cache และการแก้ไขจะใช้เวลามาก

ข่าวดีก็คือ Blinkhawk ด้วยความช่วยเหลือจาก Epicboy จึงสามารถใช้วิธีแก้ไขปัญหาชั่วคราวเพื่อหลีกเลี่ยงปัญหานี้ได้ในขณะที่วิธีแก้ปัญหาแบบถาวรเริ่มเป็นรูปเป็นร่าง การล้างบัฟเฟอร์ก่อนเขียน ช่วยเราให้พ้นจากขุมนรกหลายเหลี่ยมด้วยต้นทุนประสิทธิภาพที่ต่ำที่สุด

ลองนึกภาพว่ามันมีลักษณะอย่างไรจากอวกาศ (Pokémon Legends: Arceus)ลองนึกภาพว่ามันมีลักษณะอย่างไรจากอวกาศ (Pokémon Legends: Arceus)

ลองนึกภาพว่ามันมีลักษณะอย่างไรจากอวกาศ (Pokémon Legends: Arceus)

ทำเครื่องหมายวันนี้เป็นวันที่เราเริ่มวางแผนการเขียนบัฟเฟอร์แคชอีกครั้ง

ในช่วงเริ่มต้น Arceus แสดงการใช้ VRAM ที่สูงกว่าปกติอย่างมาก ทำให้ผู้ใช้ GPU 2GB หยุดทำงานระหว่างการตัดฉาก วิธีแก้ปัญหาของ Blinkhawk คือการ ขยายทิศทางเฉพาะที่บัฟเฟอร์แคชกำลังเพิ่มขึ้น แทนที่จะเป็นวิธีการก่อนหน้านี้ในการเพิ่มขนาดเป็นสองเท่า สิ่งนี้ทำให้ผู้ใช้ 2GB เล่นได้เป็นประจำ และผู้ใช้ 4GB ก็สามารถขยายได้ถึง 2 เท่าโดยไม่ต้องกลัวว่าจะเกิดการแครช

สำหรับคำแนะนำทั่วไปบางประการ:

การบันทึกจากเกม Switch Pokémon ก่อนหน้านี้จะปลดล็อกตัวเลือกเสื้อผ้าพิเศษหลังการสอน

เราวัดการปรับปรุงประสิทธิภาพที่บางกว่า (ปัจจุบัน) ไดรเวอร์ AMD Windows 22.2.1 ล่าสุด และดังที่กล่าวไว้ เพิ่มขึ้น 24% ด้วยไดรเวอร์ NVIDIA Windows 511.65 Chad Vulkan 1.3 ให้ยืมมือ

เกี่ยวกับความแม่นยำของ GPU ในขณะที่ Normal ให้ประสิทธิภาพสูงสุด High อนุญาตให้แสดงอนุภาคที่เหมาะสม ดังนั้นหากคุณต้องการความแม่นยำเป็นพิเศษและต้องสำรองประสิทธิภาพ ให้ยึดติดกับ High

เอฟเฟกต์ อนุภาค และการโจมตีบางอย่างดูเหมือนจะแสดงผลอย่างไม่ถูกต้องที่ความละเอียดมากกว่า 1x ดั้งเดิม ขณะที่เรากำลังตรวจสอบสาเหตุนี้ ดูเหมือนว่าจะเกิดขึ้นบนสวิตช์ด้วย ดังนั้นอาจเป็นเพียงธรรมชาติของเฉดสีเหล่านี้ (ทำให้นึกถึงภาพซ้อนใน เกมโปเกมอน 3DS .

ขอบคุณ Serfrost! (ตำนานโปเกมอน: อาร์เซียส)

ขอบคุณ Serfrost! (ตำนานโปเกมอน: อาร์เซียส)

การตั้งค่าเริ่มต้นของ yuzu คือการเรียกใช้เกมใน OpenGL โดยใช้ GLASM หรือที่รู้จักกันทั่วไปว่าเป็นชุดประกอบ การตั้งค่าเหล่านี้จะทำให้เกิดเงาแปลกๆ บนอักขระ และวิธีแก้ปัญหาคือใช้ GLSL แทน GLASM หรือที่เราแนะนำ ให้เปลี่ยนไปใช้ Vulkan ทั้งหมด

เงาแตก? ศูนย์! (ตำนานโปเกมอน: อาร์เซียส)เงาแตก? ศูนย์! (ตำนานโปเกมอน: อาร์เซียส)

เงาแตก? ศูนย์! (ตำนานโปเกมอน: อาร์เซียส)

ผู้ใช้ Radeon GPU รุ่นเก่ากว่า 400 ซีรีส์ที่ใช้ Windows จะประสบปัญหาเนื่องจากไดรเวอร์ที่ล้าสมัยและไม่ได้รับการสนับสนุน ดูเหมือนไดรเวอร์ที่ดัดแปลงแล้วไม่ได้ช่วย ดังนั้นทางออกเดียวคือใช้ Linux โดยที่ยังคงรองรับและไดรเวอร์ Mesa ที่เร็วกว่า

สุดท้าย การใช้ mod มากเกินไปหรือค่า Anisotropic Filtering ที่สูงอาจทำให้เกิดการระเบิดจุดสุดยอดด้วยการกำหนดค่า GPU บางอย่าง เรายังคงตรวจสอบสาเหตุของเรื่องนี้อยู่

การแก้ไขกราฟิกอื่น ๆ

Blinkhawk ได้ทำการ เปลี่ยนแปลงบางอย่างใน Garbage Collector ( GC ) ซึ่งรวมถึงการแก้ไขจุดบกพร่องจำนวนหนึ่ง ปรับปรุงอัลกอริธึมเพื่อทำให้หน่วยความจำสะอาดอย่างชาญฉลาดยิ่งขึ้น และทำให้ iGPU มีประสิทธิภาพมากขึ้น

ค่าของขีดจำกัดขั้น minimal ที่ expected และ critical ได้รับการปรับสมดุลใหม่ เพื่อไม่ให้ทำงานอย่างดุเดือดบน GPU ที่มีหน่วยความจำมากขึ้น ในขณะที่ยังคงทำงานภายในขอบเขตที่ยอมรับได้สำหรับการ์ดกราฟิกที่มีหน่วยความจำต่ำ นอกจากนี้ yuzu ในขณะนี้สอบถามขนาดของหน่วยความจำ GPU แทนการประมาณการ ทำให้ GC สามารถตัดสินใจได้ดีขึ้นเมื่อทำความสะอาด การเปลี่ยนแปลงเหล่านี้พยายามให้ประโยชน์ทั้ง GPU ระดับล่างและระดับไฮเอนด์มากที่สุด โดยไม่ส่งผลกระทบในทางลบแต่อย่างใด

มีการพิจารณาเป็นพิเศษเกี่ยวกับพื้นผิว ASTC ซึ่งมีหน่วยความจำมากฉาวโฉ่ GC จะทำความสะอาดพวกเขาเร็วเกินไป ทำให้เกิดการทุจริตกราฟิกในชื่อที่ใช้ทรัพยากรเหล่านี้ ด้วยเหตุผลนี้ เงื่อนไขในการพิจารณาว่าจะทำความสะอาดพื้นผิว ASTC เมื่อใดจึงมีความเข้มงวดน้อยลง ซึ่งจะช่วยบรรเทาปัญหาได้ในสถานการณ์ส่วนใหญ่

แม้ว่าการเปลี่ยนแปลงเหล่านี้จะเป็นส่วนหนึ่งของโครงการ YFC แต่เดิม Blinkhawk ตัดสินใจที่จะดำเนินการเปลี่ยนแปลงเหล่านี้ในขณะนี้ เพื่อบรรเทาปัญหาที่เกี่ยวข้องกับการใช้งาน GC ก่อนหน้านี้ ยังมีอีกมากจากโครงการนี้ โปรดติดตามข้อมูลเพิ่มเติมในการอัปเดตในอนาคต

โปรดทราบว่าชื่อกรณีพิเศษ เช่น ASTRAL CHAIN ​​จะยังคงต้องการ VRAM 3GB ขึ้นไปเพื่อจำลองอย่างถูกต้อง

ในอีกทางหนึ่ง บางชื่อ เช่น พอร์ต Super Mario 64 (homebrew) อาจมีอาการค้างใน GPU บางรุ่น (โดยเฉพาะ iGPU)

Blinkhawk ตรวจสอบปัญหาและสังเกตว่ามันอยู่ใน Vulkan Scheduler ซึ่งเป็นคลาสที่แยกบัฟเฟอร์คำสั่งเพื่อให้สามารถดำเนินการเหมือน OpenGL ในสภาพแวดล้อมของ Vulkan

เนื่องจากตัวจัดกำหนดการจะจัดการลำดับที่จะต้องจัดคิวคำสั่ง GPU ก่อนส่งคำสั่งเหล่านั้นไปยังอุปกรณ์ ตรรกะการฟันดาบที่ใช้ในการพิจารณาว่ามีการจับเวลาอย่างถูกต้องจึงเป็นสิ่งสำคัญ

ก่อนหน้านี้ ตัวจัดกำหนดการจะจัดคิวเฉพาะกลุ่มคำสั่งที่มีประเภทออฟเซ็ตแตกต่างจากศูนย์ ปัญหาเกิดขึ้นเนื่องจากมีประเภทคำสั่งที่ถูกต้องซึ่งมีออฟเซ็ตเป็นศูนย์จริงๆ การไม่คำนึงถึงกรณีนี้ขัดขวางตรรกะการฟันดาบของตัวจัดกำหนดการ ทำให้ไม่สามารถทำงานได้อย่างถูกต้อง

โชคดีที่โซลูชันนี้ไม่ต้องการการเปลี่ยนแปลงที่ยุ่งยากใดๆ และ Blinkhawk สามารถบรรเทาการหยุดทำงานเหล่านี้ได้โดย ส่งโปรแกรมแก้ไขง่ายๆ ที่แก้ไขปัญหาเฉพาะนี้

มันคือ-เขา! (ซูเปอร์มาริโอ 64 โฮมบรูว์)

มันคือ-เขา! (ซูเปอร์มาริโอ 64 โฮมบรูว์)

การเปลี่ยนแปลงเคอร์เนล

รหัสสำหรับการจัดการหน่วยความจำ — หนึ่งในฟังก์ชันของเคอร์เนล — เดิมเขียนขึ้นเมื่อต้นปี 2020 ตามข้อมูลที่มีอยู่ในขณะนั้น ตั้งแต่นั้นมา มีการอัปเดตระบบปฏิบัติการของ Nintendo Switch เป็นจำนวนมาก รวมถึงเอกสารใหม่ที่ได้รับจากวิศวกรรมย้อนกลับ

ด้วยเหตุผลนี้ bunnei ได้ผ่านทุกส่วนของโค้ดที่ใช้จัดการหน่วยความจำ โดยมุ่งเน้นที่การปรับปรุงทั้งความเสถียรและความแม่นยำของเคอร์เนล

การเปลี่ยนแปลงเหล่านี้เกี่ยวข้องกับการแปรง นิยามแอตทริบิวต์ หน่วยความจำและการ อนุญาต เพื่อให้สอดคล้องกับพฤติกรรมของ HorizonOS ล่าสุดอย่างใกล้ชิดยิ่งขึ้น โค้ดส่วนใหญ่ที่ใช้ในการสร้างแผนที่และ unmap memory ได้รับการ จัดระเบียบ และฟังก์ชันต่างๆ ถูกเปลี่ยนชื่อเพื่อให้ตรงกับการตั้งชื่ออย่างเป็นทางการ ในทำนองเดียวกัน โค้ดที่ใช้ในการจัดสรรและล้างหน่วยความจำฮีปก็ได้รับ การตรวจสอบ ในลักษณะนี้

การใช้งานใหม่นี้ควรทำงานได้ดีขึ้น และทำให้โค้ดอ่านและนำทางได้ง่ายขึ้น

ขณะตรวจสอบการหยุดทำงานของ Pokémon Sword/Shield ชิลด์ ที่มีมาอย่างยาวนาน บันนี่พบว่าสิ่งเหล่านี้เกี่ยวข้องกับสภาพการแข่งขัน

สิ่งแรกจะเกิดขึ้นเมื่อเปิดเซสชันใหม่ในบริการ นั่นคือ yuzu จะสร้าง host thread ที่ไม่ได้จำลอง) ซึ่งสามารถส่งคำขอเซสชันบริการไปยังแบบอะซิงโครนัสได้ เมื่อปิดเซสชันนี้ host thread สำหรับเซสชันการปิดจะถูกลบออกจากรายการติดตามพร้อมกับเพิ่มรายการใหม่ ซึ่งทำให้เกิดสภาวะการแย่งชิง

เกมจะร้องขอบริการต่างๆ เมื่อต้องการส่งเสียงเพื่อเล่นไปยังลำโพง ร้องขอกราฟิกบางอย่างเพื่อโหลดลงในหน่วยความจำ ฯลฯ Pokémon Sword/Shield จะเปิดและปิดเซสชันบริการ LDN บ่อยมาก ซึ่งเป็นสาเหตุ เป็นหนึ่งในชื่อที่ได้รับผลกระทบมากที่สุด

ด้วย การแนะนำเธรดผู้ปฏิบัติงานเพื่อจัดการรายการบริการ ขณะนี้เธรดเดียวเท่านั้นที่จะสามารถสร้างหรือทำลายเซสชันบริการ ป้องกันไม่ให้เกิดความผิดพลาดขึ้น

ตามลีดนี้ bunnei ได้กลับมายังโค้ดที่ใช้ในการออกจากเธรด และพบว่ามีสภาวะการแข่งขันอื่นเกิดขึ้น ซึ่งการอ้างอิงเธรดถูกทำลายในขณะที่ยังคงสามารถเลือกสำหรับการจัดกำหนดการได้ ส่งผลให้เกิดการขัดข้อง

วิธีแก้ไขคือปรับ ใช้รหัสสิ้นสุดของเธรดใหม่ให้แม่นยำยิ่งขึ้น เพื่อให้ตรงกับโค้ดของ HorizonOS ตอนนี้ yuzu รอให้เธรดถูกยกเลิกการกำหนดเวลาจากคอร์ทั้งหมดก่อนที่จะปิด เพื่อที่จะถูกทำลายก็ต่อเมื่อไม่ได้ทำงานอีกต่อไป

ปัญหาอีกประการหนึ่งที่มีมายาวนานกับ Pokémon Sword/Shield เกี่ยวข้องกับโค้ดที่ใช้สำหรับการจัดการเธรดบริการ High-Level Emulation ( HLE )

เมื่อเกมร้องขอบริการบางอย่าง แทนที่จะเลียนแบบตรรกะภายในของระบบปฏิบัติการของ Nintendo Switch (ซึ่งจะเป็น Low-Level Emulation, LLE ) yuzu รันการใช้งานที่เขียนโดยนักพัฒนาที่ทำงานเดียวกันบนคอมพิวเตอร์ของผู้ใช้

บริการ HLE เหล่านี้จำเป็นต้องสามารถโต้ตอบกับเคอร์เนลที่จำลองได้ เพื่อดึงการล็อกและทริกเกอร์สำหรับการกำหนดเวลาใหม่ ฯลฯ yuzu ทำได้โดยใช้ dummy threads ซึ่งสร้างขึ้นเป็นเอนทิตี KThread ที่จำลองขึ้น

dummy thread ถูกสร้างขึ้นสำหรับทุก host thread ของอินเทอร์เฟซบริการที่ทำงานในคอมพิวเตอร์ของผู้ใช้ ดังนั้นเมื่อใดก็ตามที่เคอร์เนลต้องการโต้ตอบกับ host thread ก็สามารถทำได้ผ่าน dummy threads เหล่านี้

ก่อนหน้านี้ dummy threads เหล่านี้ไม่ถูกปล่อยเมื่อเธรดหลักถูกทำลาย และด้วยเหตุนี้ เธรดเหล่านี้จึงจะสะสมเมื่อเวลาผ่านไป เนื่องจากเคอร์เนลกำหนดขีดจำกัดจำนวนเธรดที่กระบวนการสามารถทำได้ ในที่สุด yuzu ก็ไม่สามารถสร้างเธรดเพิ่มเติมเพื่อเปิดอินเทอร์เฟซบริการในช่วงการเล่นเกมที่ยาวนานได้ นอกจากนี้ เธรดจำลองเหล่านี้อาจถูกกำหนดเวลาไว้บนคอร์ที่จำลองโดยไม่ได้ตั้งใจ ซึ่งส่งผลให้เกิดข้อขัดข้อง เนื่องจากไม่ใช่เธรดจริงที่ตั้งใจจะรัน

หลังจากตรวจสอบปัญหาเหล่านี้แล้ว bunnei ได้ ดำเนินการแก้ไขและตรวจสอบต่างๆ เพื่อแก้ไขพฤติกรรมที่ผิดพลาดนี้ และป้องกันการรั่วไหลของทรัพยากรและการขัดข้อง

ถัดไป bunnei แก้ไขการดำเนินการเพิ่ม/ลดตัวนับ KThread เนื่องจากการใช้งานแบบเก่าไม่ถูกต้อง และบางครั้งอาจล้น นี่คือตัวนับดังกล่าวที่ใช้ในการติดตาม KThread ทั้งหมดในกระบวนการ เพื่อให้มั่นใจว่าขีดจำกัดที่กำหนดโดยเคอร์เนลจะไม่ถูกละเมิด

Epicboy ยังตรวจสอบเคอร์เนล และเพิ่มวิธีการปิดเครื่องใหม่เพื่อ ซิงโครไนซ์เธรดอย่างเหมาะสม ก่อนที่จะถูกทำลาย การเปลี่ยนแปลงนี้แก้ไขการแฮงค์ที่อาจเกิดขึ้นเมื่อหยุดการจำลองใน yuzu

การปรับปรุง UI

ในชุดการเปลี่ยนแปลงเล็กน้อย ผู้ร่วมให้ข้อมูลจำนวนหนึ่งตัดสินใจปรับปรุงและแก้ไของค์ประกอบบางอย่างที่แสดงบนอินเทอร์เฟซของเรา และวิธีที่ผู้ใช้สามารถโต้ตอบกับองค์ประกอบเหล่านั้นได้

german77 สังเกตว่าบางรายการ เช่น ปุ่ม Stop และ Start ไม่ถูกปิดใช้งานจากการโต้ตอบเมื่อกระบวนการจำลองหยุดลง และ แก้ไขพฤติกรรมที่ผิดพลาดนี้ ทันที

นอกจากนี้ เขายังดำเนินการตามองค์ประกอบกราฟิกที่จำเป็นในการ รายงานระดับแบตเตอรี่ ของตัวควบคุม UDP แม้ว่ารหัสนี้จะอยู่ในแหล่งที่มาของ yuzu มาระยะหนึ่งแล้ว แต่การเตรียมกราฟิกส่วนหน้าที่เหมาะสมและการใช้งาน UI ที่ตามมานั้นยังคงค้างอยู่เป็นเวลานาน

ค่อนข้างมีประโยชน์สำหรับ Joy-Cons!

ค่อนข้างมีประโยชน์สำหรับ Joy-Cons!

ขณะ อัปเดตการพึ่งพา AMD FidelityFX Super Resolution ( FSR ) เป็นเวอร์ชันล่าสุด Moonlacer ได้เปลี่ยนสตริงข้อความเพื่อแทนที่วงเล็บรอบข้อความ Vulkan Only ด้วยวงเล็บ เพื่อให้สอดคล้องกับข้อความอื่นๆ ทั้งหมดในอินเทอร์เฟซของเรา

ในทำนองเดียวกัน gidoly ได้แก้ไขข้อผิดพลาดในการสะกดคำในสตริงที่อธิบายชื่อเกมแพดเชิงพาณิชย์ ได้แก่ คอนโทรลเลอร์ PlayStation และ Xbox

จากการสำรวจความคิดเห็น Patreon ที่ดำเนินการใน เซิร์ฟเวอร์ที่ไม่ลงรอยกัน ของเรา gidoly ได้ทำการเปลี่ยนแปลงที่จำเป็นเพื่อทำให้ธีม Dark Colorful เป็นธีม เริ่มต้น ที่ใช้เมื่อเรียกใช้ yuzu เป็นครั้งแรกบน Windows

จากการติดตามผล v1993 ได้ทำการเปลี่ยนแปลงเพื่อให้ธีมที่มีสีสัน (เช่น มืดหรือสว่าง) ที่ใช้เป็นครั้งแรก ขึ้นอยู่กับธีมทั้งระบบใน ระบบ *NIX

ผิดนัดตามคำเรียกร้อง

ผิดนัดตามคำเรียกร้อง

โดยธรรมชาติแล้ว ผู้ใช้ยังคงสามารถเปลี่ยนธีมผ่านการตั้งค่าการกำหนดค่าได้ หากต้องการ

การเปลี่ยนแปลงอินพุต

german77 มีงานยุ่งเป็น พิเศษ ในเดือนนี้ ดังนั้นจึงมีอะไรให้พูดถึงบ้างในส่วนนี้

ผู้ใช้รายงานว่าเกมパワプロクンポケットR และเกมอื่นๆ ของ Power Pocket saga ขัดข้องเมื่ออยู่ในเกม มีสาเหตุมาจากบริการ SetNpadAnalogStickUseCenterClamp สามารถเตรียมใช้งานระบบย่อย applet_resource ได้ แม้ว่าจะไม่ได้เตรียมใช้งานมาก่อนก็ตาม การจำลองพฤติกรรมนี้ช่วยแก้ปัญหาและทำให้บางโหมดเกมสามารถเล่นได้ อย่างไรก็ตาม โหมดเกมบางโหมดยังคงแสดงว่า yuzu ขาดการสนับสนุนรูปแบบจุดยอดบางรูปแบบ ทำให้เกิดข้อขัดข้อง

パワプロクンポケットR

パワプロクンポケットR

ตอนนี้ yuzu จะ แสดงเฉพาะประเภทคอนโทรลเลอร์ที่รองรับในปัจจุบันในแอพเพล็ต ขึ้นอยู่กับว่าแต่ละเกมรายงานว่าเข้ากันได้อย่างไร

Fullkey เป็นชื่อรหัสที่ Nintendo ใช้เพื่ออ้างถึงคอนโทรลเลอร์ประเภททั่วไปที่รายงานตัวเองว่าเป็น Pro Controller หากคุณเชื่อมต่อ gamepad ที่ “ไม่รองรับ” ข้อมูลนี้สามารถอ้างถึงตัวควบคุม GameCube, NES, SNES, N64 และ Sega Genesis ในกรณีที่เกิดปัญหา คอนโซลจะกลับไปรายงาน Pro Controller สำหรับคอนโทรลเลอร์ประเภทดังกล่าว german77 เพิ่มฟังก์ชันนี้ให้กับ yuzu ด้วย

เพิ่มการรองรับเพื่อ ให้อุปกรณ์ที่มีมาตรความเร่งเท่านั้นทำหน้าที่เป็นอุปกรณ์เคลื่อนที่ แม้ว่านี่จะหมายถึงการรองรับที่กว้างขึ้น การไม่มีไจโรสโคปหมายถึงผลลัพธ์ในการเคลื่อนไหวที่แย่มาก เนื่องจากการเคลื่อนที่ของแกนบางตัวจะไม่ได้รับการลงทะเบียน

ด้วยความช่วยเหลือของ v1993 german77 แก้ไขการแมปคอนโทรลเลอร์ UDP (อุปกรณ์ใดๆ ที่เชื่อมต่อโดยใช้โปรโตคอล cemuhook) ขณะนี้การเคลื่อนไหวถูกต้องโดยอัตโนมัติและการแมปด้วยตนเองจะไม่รีเซ็ตอุปกรณ์ในรายการอินพุต

ในการประชาสัมพันธ์แยกต่างหาก ตามคำร้องขอของ v1993 german77 ได้เพิ่มการรองรับสำหรับปุ่ม Home และ Touch ในการเชื่อมต่อ UDP

อุปกรณ์การเคลื่อนไหวบางอย่างสามารถป้อนค่าที่แม่นยำมาก หากเกณฑ์สูงเกินไป ค่าการเคลื่อนไหวจะถูกละเว้น การลดขีดจำกัดสำหรับข้อมูลไจโร ช่วยแก้ปัญหานี้ได้

ขณะเล่น Mario Tennis Aces ในโหมดสวิง การเคลื่อนไหวอาจหยุดทำงานกะทันหัน เนื่องจากช่วงอัตราการอัปเดตสำหรับข้อมูลการเคลื่อนไหวถูกตั้งค่าไว้สูงเกินไป การลดอัตราการอัปเดตการเคลื่อนไหวเป็น 10ms จะคืนค่าฟังก์ชันการทำงาน

นอกจากนี้ยังเกี่ยวข้องกับการจำลองการเคลื่อนไหว คุณภาพและความไวของอุปกรณ์อาจส่งผลต่อการเล่นเกมได้เช่นกัน เพื่อเป็นการชดเชย german77 ได้แนะนำ ตัวเลือกในการกำหนดค่าเกณฑ์ไจโร คุณสามารถค้นหาได้หากคุณมีตัวควบคุมที่เคลื่อนไหวได้ (ในตัวอย่าง Joy-Cons คู่) กำหนดค่าใน Emulation > Configure… > Controls > right click Motion > Set gyro threshold

คลิกขวา!

คลิกขวา!

การเข้าถึงโหมดผู้เล่น 2 คนใน Pokémon: Let's Go Eevee & Pikachu ต้องใช้การเขย่า การสั่นที่จำลองบนคีย์บอร์ดนั้นอ่อนเกินไปที่จะลงทะเบียนโดยเกม ดังนั้น การเพิ่ม “แรง” ของมัน จะทำให้สิ่งต่าง ๆ สั่นสะเทือนเพื่อให้ผู้เล่นหลายคนในท้องที่

หนึ่งในคุณสมบัติที่ขาดหายไปจากการเปิดตัว Project Kraken การเขียนอินพุตใหม่คือการสนับสนุนการเคลื่อนไหวของเมาส์ German77 ได้แนะนำการสนับสนุนอีก ครั้ง โดยตอนนี้ใช้ล้อเลื่อนของเมาส์เป็นอินพุตสำหรับแกน Z นอกจากนี้ ปุ่มเมาส์ยังได้รับชื่อที่ถูกต้องเมื่อทำการแมป

อีกคุณสมบัติหนึ่งที่พลาดบันทึกช่วยจำ คือตัวปรับแต่งไม้สำหรับการป้อนข้อมูลด้วยแป้นพิมพ์ โดยถือคีย์ที่แมปไว้เพื่อย้ายแท่งอนาล็อกโดยลดขีดจำกัดลง ตัวอย่างเช่น ด้วยการจับคู่แป้นพิมพ์เริ่มต้น หากคุณกด shift แท่งอนาล็อกด้านซ้ายจะเคลื่อนที่ได้ไม่เกิน 50% ของช่วง ทำให้ผู้ใช้แป้นพิมพ์เดินได้

เราเพิ่งเปิดตัวการนำทาง UI ของคอนโทรลเลอร์ ผู้ใช้บางคนเรียกใช้โปรแกรมภายนอกเพื่อแปลอินพุตของคอนโทรลเลอร์เป็นอินพุตคีย์บอร์ดและเมาส์ในขณะที่ใช้งานได้สะดวก สำหรับพวกเขา มีการเพิ่มการสลับเพื่อปิดใช้งานการนำทางคอนโทรลเลอร์ ใน Emulation > Configure… > Controls > Advanced > Controller Navigation

คอเกมถูกใจสิ่งนี้

คอเกมถูกใจสิ่งนี้

ตามค่าเริ่มต้น yuzu ถือว่าคอนโทรลเลอร์ที่ไม่ใช่ Nintendo Switch เช่นคอนโทรลเลอร์ Xbox จะใช้มอเตอร์ดังก้อง สิ่งเหล่านี้ถูกกว่าและใช้เส้นโค้งแอมพลิจูดแบบเอ็กซ์โปเนนเชียลสำหรับเสียงก้อง ทำให้วิธีการประเภทนี้เข้ากันไม่ได้สำหรับการจำลอง HD Rumble DS5 บน PlayStation 5 กลับใช้ตัวกระตุ้นเชิงเส้นที่มีราคาแพงกว่า (และต้องการเส้นโค้งแอมพลิจูดเชิงเส้น) เช่น Pro Controller และ Joy-Cons ด้วยการเปลี่ยนแปลงนี้ german77 ได้ขยายการสนับสนุนเพื่อรวมคอนโทรลเลอร์ PlayStation 5 อย่างเป็นทางการ DS5 ซึ่งสามารถให้ความแม่นยำที่จำเป็นสำหรับ HD Rumble

การเปลี่ยนแปลงทั่วไปและการแก้ไขข้อผิดพลาด

สคริปต์ TAS บางครั้งอาจมีข้อผิดพลาดส่งผลให้ yuzu ประสบปัญหา german77 จัดเตรียมรหัสที่จำเป็นเพื่อ เพิ่มการจัดการข้อผิดพลาดให้กับสคริปต์ TAS เพื่อ ป้องกันการขัดข้องเหล่านี้

Windows มีข้อจำกัดที่น่ารังเกียจและซ่อนเร้น ซึ่งเป็นขีดจำกัดสูงสุดของไฟล์เปิดที่โปรแกรมสามารถใช้ได้ ม็อดเกมบางตัวสามารถมีได้ หลาย ไฟล์ เกินขีดจำกัด 4096 ก่อนหน้า ดังนั้น Morph จึง เพิ่มขีด จำกัด เป็นสองเท่าเป็น 8192

v1993 ได้ทำการทำความสะอาดโค้ดโดยใช้ PVS-Studio และผลลัพธ์ก็ยอดเยี่ยม จนถึงตอนนี้ พบข้อผิดพลาดและแก้ไขใน สี่ ส่วน ที่เกี่ยวข้องกับ อินพุต ที่ แยกจากกัน คอมไพเลอร์ shader และแม้แต่การ จำลองเคอร์เนล !

ขอบคุณ v1993! ไม่มีอะไรดีไปกว่าโค้ดที่สะอาดกว่า โดยเฉพาะอย่างยิ่งหากสามารถแก้ปัญหานอกขอบเขตได้

Morph ขัดจังหวะบริการ SetCpuOverclockEnabled (คุณไม่จำเป็นต้องโอเวอร์คล็อกโฮสต์ CPU ทันทีเมื่อจำลอง) ซึ่งช่วยให้ Gravity Rider Zero บูตได้ แต่ยังไม่มีการแสดงบนหน้าจอเนื่องจากขาดการสนับสนุนรูปแบบพื้นผิว

และสุดท้าย german77 ได้ ใช้เวอร์ชัน 32 บิตของ Supervisor call (SVC) SynchronizePreemptionState ทำให้ Espgaluda II เล่นได้

เอสปกาลูดา II

เอสปกาลูดา II

ในขณะเดียวกัน liushuyu ได้ อัปเดตโมดูลย่อยภายนอกแบบไดนามิก ให้การปรับให้ เหมาะสมและยังแก้ไขข้อผิดพลาดในการคอมไพล์ ที่เกิดจากการอัปเดตไลบรารี fmt ภายนอกอื่น ซึ่งใช้จัดรูปแบบข้อความในบันทึกและอินเทอร์เฟซของ yuzu

german77 ยังเพิ่ม ปุ่มลัดใหม่ที่อนุญาตให้ผู้ใช้ควบคุมระดับเสียง ของแอปพลิเคชันได้โดยตรงด้วยแป้นเกม ซึ่งเป็นคุณสมบัติที่จะสะดวกสำหรับผู้ที่ชอบ yuzu จากโซฟาที่แสนสบาย

ตามค่าเริ่มต้น Home + D-Pad Right จะปิดเสียงแอปพลิเคชัน ในขณะที่ Home + D-Pad Down จะลดระดับเสียงลง และ Home + D-Pad Up จะเพิ่มระดับเสียง ผู้ใช้สามารถเปลี่ยนการแมปเหล่านี้ได้อย่างอิสระผ่านเมนูการกำหนดค่า Emulation > Configure > Hotkeys

ยิ่งเริด!

ยิ่งเริด!

ในขณะที่ดำเนินการกับการเปลี่ยนแปลงนี้ german77 สังเกตเห็นว่าสมการที่ใช้ในการเปลี่ยนจากค่าเปอร์เซ็นต์เป็น “ความดัง” (เช่น กำลังขับ) นั้นรุนแรงเกินไปที่ต่ำกว่าเครื่องหมาย 70% ทำให้ระดับเสียงเบามากในช่วงนี้ ดังนั้น เขาจึงตัดสินใจแก้ไขสูตร เพื่อให้การเปลี่ยนแปลงราบรื่นขึ้นตลอดช่วงค่าเปอร์เซ็นต์ทั้งหมด

เก่าเป็นสีแดงและใหม่เป็นสีเขียว ดูเส้นโค้งเหล่านั้นสิ!

เก่าเป็นสีแดงและใหม่เป็นสีเขียว ดูเส้นโค้งเหล่านั้นสิ!

การเปลี่ยนแปลงในอนาคต

ความคืบหน้าดำเนินไปอย่างราบรื่นในโครงการที่กำลังพัฒนาของเรา ตัวอย่างเช่น german77 กำลังสนุกกับฟีเจอร์ที่มีการร้องขอจำนวนมาก Blinkhawk พยายามทำให้หนึ่งในโปรเจ็กต์ลับสุดยอดที่ โรดริโก ทำไม่เสร็จให้เสร็จก่อนที่จะ เปลี่ยนเป็นสีเขียว Host Conditional Rendering คาดว่าจะได้ยินเพิ่มเติมในข่าว Project YFC ในอนาคต

สำหรับการรั่วไหลเล็กๆ น้อยๆ ของการทดสอบภายในล่าสุด: Marvel Ultimate Alliance 3: The Black Order เพิ่มขึ้นจาก 19 เป็น 51 FPS และหมึกของศัตรูใน Splatoon 2 ทำงานอย่างถูกต้อง ทั้งสองเปลี่ยนการปรับปรุง Vulkan

ประสิทธิภาพเพิ่มขึ้นมากกว่าสองเท่าสำหรับน้ำตาของนักพัฒนาเพียงไม่กี่ลิตร (Marvel Ultimate Alliance 3: The Black Order)ประสิทธิภาพเพิ่มขึ้นมากกว่าสองเท่าสำหรับน้ำตาของนักพัฒนาเพียงไม่กี่ลิตร (Marvel Ultimate Alliance 3: The Black Order)

ประสิทธิภาพการทำงานเพิ่มขึ้นมากกว่าสองเท่าสำหรับน้ำตาของนักพัฒนาเพียงไม่กี่ลิตร (Marvel Ultimate Alliance 3: The Black Order)

นั่นคือทั้งหมดที่! เรารู้สึกยินดีเป็นอย่างยิ่งที่มีคุณอยู่ที่นี่ หวังว่าเราจะได้พบกันอีกในเดือนหน้า!

โปรดพิจารณาสนับสนุนเราใน Patreon !
หากคุณต้องการมีส่วนร่วมในโครงการนี้ ชำระเงิน GitHub ของเรา!