Texture Cache ทำงานอย่างไรใน GPU ที่ใช้การแสดงผลแบบกระเบื้อง


9

แคชทำงานอย่างไรกับการเรนเดอร์แบบเรียงต่อกัน?

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


1
คุณหมายถึงรูปแบบแนวตั้งและแนวนอนของรูปสามเหลี่ยม?
Mokosha

@Mokosha ขออภัยฉันไม่สังเกตเห็นสิ่งนี้ ฉันเพิ่งเห็นมันตอนนี้ นี่เป็นคำถามเชิงทฤษฎีมากกว่าคำถามเชิงปฏิบัติและฉันไม่รู้ด้วยซ้ำว่าเรื่องนี้สมเหตุสมผลหรือไม่ อย่างไรก็ตามสิ่งที่ฉันหมายถึงคือพูดแผ่นสามเหลี่ยมตัดกัน (x, y) และ (x + 1, y) และว่ากระเบื้องทั้งสองนี้ได้รับการประมวลผลทีละแผ่น นั่นจะดีกว่าสำหรับแคชเนื้อหรือเปล่าถ้าฉันมีรูปสามเหลี่ยมตัดกัน (x, y) และ (x, y + 1) (เนื่องจากพิกเซลขอบและเค้าโครงของรูปสามเหลี่ยมที่ไม่ได้อยู่ในทิศทางเดียวกันกับการประมวลผลของกระเบื้อง)
Felipe Lira

คำตอบ:


19

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

ดังนั้นมันจะมีประสิทธิภาพมากกว่าในการเรนเดอร์สามเหลี่ยมที่อยู่ใกล้กับสามเหลี่ยมด้านเท่าเนื่องจากระบบหน่วยความจำ GPU ดึงสายแคชของ texels

เห็นได้ชัดว่าบนขอบกระเบื้องอาจเกิดขึ้นได้คุณต้องดึงข้อความสองครั้ง ค่าใช้จ่ายนี้มีค่าใช้จ่ายเพียงเล็กน้อยเนื่องจากเส้นขอบของกระเบื้องนั้นมีพิกเซลเพียงเล็กน้อย

เนื้อหาของ GPU บนเดสก์ท็อปมีพฤติกรรมเหมือนกันกับ GPU แบบเรียงต่อกันเช่นการทดลองดังต่อไปนี้: http://www.g-truc.net/post-0597.html

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

เมื่อการเข้ารหัสสำหรับ GPU ที่ใช้ไทล์แนะนำของฉันคือคำนึงถึงเสมอ:

  1. อย่าสลับวัตถุเฟรมบัฟเฟอร์เว้นแต่คุณจะต้องการจริงๆ
  2. เมื่อทำการเชื่อมโยงวัตถุ framebuffer ใหม่หากคุณไม่ต้องการบันทึกเนื้อหาของ framebuffer ปัจจุบันให้ทิ้งมันไป หากไม่ต้องการโหลดเนื้อหาของ framebuffer ใหม่คุณควรล้าง framebuffer

ฉันอัพเดตไอเท็มที่สองเนื่องจากการแก้ไขไม่ใช่สิ่งที่ฉันต้องการ มิฉะนั้นมันดูดี!
Christophe

สวัสดี Christophe คุณหมายถึงรูปสามเหลี่ยม "ด้านเท่ากันหมด" แทนที่จะเป็น "หน้าจั่ว" หรือไม่? มากกว่า "ฮิลแบร์ต" ฉันได้กล่าวว่า "มอร์ตัน" เพื่อเป็นที่อยู่เป็นมากได้ง่ายขึ้นในฮาร์ดแวร์
Simon F

@ Christophe ขอบคุณ! นี่เป็นประโยชน์จริงๆ ดังนั้นสำหรับพิกเซลเส้นขอบเนื้อแคชไม่สำคัญ นั่นเป็นสิ่งที่ฉันสงสัย ดังนั้นถ้าฉันมีรูปสามเหลี่ยมที่ตัดระหว่างกระเบื้อง (x, y) และ (x + 1, y) และ GPU เพียงแค่เรียงภาพแรสเตอร์ (x, y) สมมติว่าไทล์ (x + 1, y) จะเป็นถัดไปแม้ว่าหน่วยประมวลผลอื่นจะประมวลผลฉันจะไม่ได้รับประโยชน์จากแคชของพื้นผิวเมื่อสุ่มตัวอย่าง texels สำหรับสามเหลี่ยมนี้หรือไม่
เฟลิเป้ลิร่า

นอกจากนี้ฉันยังสงสัยเกี่ยวกับลวดลายของฮิลแบร์ต ฉันคิดเสมอว่าสิ่งนี้เป็นจริงสำหรับบล็อกพื้นผิวที่ถูกบีบอัด สิ่งนี้เป็นจริงสำหรับพื้นผิวทั้งหมดหรือไม่ PS: ฉันยังไม่ได้ทำตามวรรคสุดท้าย
Felipe Lira

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