GPU จัดการกับพื้นผิวและ VRAM อย่างไร


18

จริงๆแล้วมันเป็นคำถามที่เกี่ยวข้องระหว่าง:

  1. พื้นผิวที่ถูกบีบอัด (dxt5 / dxt1 ฯลฯ ) แตกหักอย่างสมบูรณ์ในขณะที่กำลังแสดงผลไปป์ไลน์หรือไม่?

  2. หากคำตอบของคำถามแรกนั้นเป็นจริงหน่วยความจำจะถูกจัดการอย่างไรสำหรับพื้นผิวที่ไม่มีการบีบอัดขนาดใหญ่หลาย ๆ

  3. framebuffer ต่างจาก VRAM ใน GPU สมัยใหม่หรือไม่?

คำตอบ:


29

รูปแบบพื้นผิวที่ถูกบีบอัดของ GPU เช่นDXT / BC / ETCได้รับการออกแบบมาเป็นพิเศษเพื่อให้สามารถอ่านได้โดยตรงจากรูปแบบที่ถูกบีบอัด พวกเขาไม่จำเป็นต้องแตกไฟล์ลงในบัฟเฟอร์ RGBA แบบดิบ

วิธีการทำงานนี้คือแต่ละบล็อคของ texels (มัก 4x4) ใช้จำนวนบิตคงที่ - ดังนั้นเราจึงรู้ว่าในบัฟเฟอร์นั้นมองไกลแค่ไหนในการหา texel - และบล็อกเหล่านี้สามารถแตกได้โดยไม่ต้องอ่านทุกรอบ / ข้อมูลพื้นผิวก่อนหน้า GPUs มีฮาร์ดแวร์พิเศษที่คลายการบีบอัดเพียงบล็อกเท็กเซลตามที่ต้องการเพื่อตอบสนองการร้องขอการสุ่มตัวอย่างพื้นผิวจากเฉดสีของคุณ

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


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

" Framebuffer " เป็นเพียงส่วนหนึ่งของหน่วยความจำวิดีโอที่เราได้ตัดสินใจที่จะใช้เพื่อจัดเก็บภาพที่เราต้องการนำเสนอไปยังหน้าจอ จดบันทึกรายละเอียดในคำตอบของ JarkkoL ซึ่งในฮาร์ดแวร์พิเศษบางตัวเราอาจเลือกที่จะค้นหาบัฟเฟอร์นี้ในส่วนเฉพาะของหน่วยความจำวิดีโอที่มีอยู่ซึ่งปรับให้เหมาะกับความต้องการแบนด์วิดท์ของเป้าหมายการแสดงผล


ลิงก์ในอัลกอริทึมการบีบอัดนั้นมีประโยชน์อย่างมากและเจาะลึก ยินดีที่ได้พบ!
Coburn

7

คำตอบสำหรับคำถามของคุณขึ้นอยู่กับแพลตฟอร์ม โดยทั่วไปรูปแบบ BC จะถูกเก็บไว้ในรูปแบบการบีบอัดในหน่วยความจำและการบีบอัดจะทำในเที่ยวบินโดยหน่วยพื้นผิว GPU แต่มีข้อยกเว้น เป็นที่ทราบกันดีว่า Xbox 360 นั้นจะทำการคลายการบล็อกขนาด 4x4 พิกเซลให้สมบูรณ์ก่อนที่จะดึงข้อมูลออกมา ฉันไม่รู้ของแพลตฟอร์มใด ๆ ที่จะขยายทั้งพื้นผิวเพื่อ vram เมื่อโหลด แต่ฉันสงสัยอย่างมากเพราะหน่วยความจำที่เพิ่มขึ้นและการใช้แบนด์วิดธ์

สิ่งเดียวกันนี้เกิดขึ้นกับ framebuffers - ขึ้นอยู่กับแพลตฟอร์ม ใน Xbox 360 คุณมี EDRAM แบนด์วิดธ์สูงเฉพาะ 10MB ที่คุณต้องใช้เพื่อแสดงผลเป้าหมาย ใน Xbox One คุณยังคงมี ESRAM พิเศษ 32MB ซึ่งเป็นที่ต้องการสำหรับเรนเดอร์เป้าหมายเนื่องจากแบนด์วิธสูง (และสามารถดึงได้จากที่แตกต่างจากบน Xbox 360) แต่เรนเดอร์เป้าหมายสามารถอยู่ในหน่วยความจำ DDR3 ปกติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.