โดยปกติฉันสามารถผูกกับพื้นผิวได้กี่ครั้ง?


23

ฉันกำลังพัฒนาเอ็นจิ้นเกมและมันจะทำงานกับฮาร์ดแวร์ที่ทันสมัย ​​(Shader model 4+) เท่านั้น ฉันคิดว่าตามเวลาที่ฉันทำกับมันจะไม่เป็นเช่นข้อกำหนดที่ไร้เหตุผล

คำถามของฉันคือพื้นผิวฉันสามารถผูกในการ์ดกราฟิกที่ทันสมัยได้กี่ครั้ง? 16 ก็เพียงพอแล้ว ฉันสามารถคาดหวังว่าการ์ดกราฟิกสมัยใหม่ส่วนใหญ่จะรองรับพื้นผิวจำนวนนั้นได้หรือไม่

GTX 460 ของฉันดูเหมือนจะรองรับ 32 แต่ฉันไม่รู้ว่านั่นเป็นตัวแทนของการ์ดแสดงผลที่ทันสมัยที่สุดหรือไม่


คุณใช้ API การแสดงผลแบบใด
Adam

2
แน่นอน OpenGL :)
Avi

คำตอบ:


53

จำนวนของพื้นผิวที่สามารถจะผูกพันกับ OpenGL คือไม่ได้ 32หรือ16 glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);มันไม่ได้เป็นสิ่งที่คุณได้รับด้วย ฟังก์ชั่นที่ดึงจำนวนของพื้นผิวที่สามารถเข้าถึงได้โดย Shader

ดูแต่ละshader มีขีด จำกัดของจำนวนพื้นผิวที่สามารถใช้ได้ อย่างไรก็ตามยังมีจำนวนพื้นผิวทั้งหมดที่สามารถใช้เป็นจุด นี้ถูกกำหนดไว้ (ใน OpenGL) GL_MAX_COMBINED_TEXTURE_IMAGE_UNITSโดย

ดังนั้นจึงมีข้อ จำกัด อยู่สองประการคือพื้นผิวต่อเวทีและพื้นผิวรวมกัน

OpenGL 3.x กำหนดจำนวนขั้นต่ำสำหรับขีด จำกัด ต่อสเตจเป็น 16 ดังนั้นฮาร์ดแวร์ต้องไม่น้อยกว่า 16 เท็กซ์เจอร์ต่อสเตจ มันอาจมีขีด จำกัด ที่สูงกว่า แต่คุณรู้ว่าคุณได้รับอย่างน้อย 16 3.x กำหนดจำนวนขั้นต่ำสำหรับผลรวมของพื้นผิวที่ถูกผูกไว้ที่ 48 AKA: 16 * 3 สเตจ ในทำนองเดียวกัน GL 4.x กำหนดตัวเลขให้เป็นพื้นผิว 16 รายการต่อขั้นและพื้นผิวรวมที่ จำกัด 96 พื้นผิว (เช่น: 16 * 6 สเตจรวมถึงการคำนวณเฉดสี)

อีกครั้งคือตัวเลขขั้นต่ำ ฮาร์ดแวร์สามารถ (และไม่) แตกต่างกันไป

สำหรับฮาร์ดแวร์เฉพาะคุณสามารถคาดหวังกับฮาร์ดแวร์ระดับ DX10 เพื่อให้ตรงกับตัวเลขเหล่านี้ ฮาร์ดแวร์ระดับ DX11 มีความแปรปรวนบางอย่าง NVIDIA (GeForce 4xx +) และชิป AMD ระดับสูงกว่า (aka: GCN-cores) อาจมีมากกว่า 16-per-stage


2
ฉันหวังว่านี่คือคำตอบที่ได้รับการยอมรับ มันจะช่วยให้ฉันอ่านอย่างไม่มีจุดหมายได้ 5 นาที
Fibbles

3

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

เท่าที่ฉันรู้สำหรับการสนับสนุน openGL 4.x คุณจะต้องมีการ์ด Fermi หรือการ์ด nvidia รุ่นใหม่กว่า (หรือการ์ด amd ที่สอดคล้องกัน) รุ่นที่สูงกว่าทั้งหมดดูเหมือนจะมี 32 หน่วยในขณะที่การ์ดระดับต่ำสุด (GT 430 เป็นต้น) ) มี 16 อย่างไรก็ตามการดูแผ่นข้อมูลจำเพาะของ AMD พวกเขาแสดงรายการหมายเลขเช่น 80 หรือ 128 หน่วยพื้นผิว แต่รายการหน่วยสี ROP 32 ซึ่งดูเหมือนจะยังคงอยู่ตลอดรุ่น

ในทางกลับกัน GTX 480 มีหน่วยประมวลผลพื้นผิว 60 หน่วยและหน่วย ROP 48 หน่วยในขณะที่การ์ดระดับล่างสุดที่รายงานเช่น 430 มีหน่วยพื้นผิว 16 หน่วยและหน่วย ROP 4 หน่วย ดังนั้นโดยรวมแล้วฉันไม่มั่นใจอย่างใดอย่างหนึ่งซึ่งก็คือจำนวนที่คุณกำลังมองหา

คุณสามารถตรวจสอบจำนวนหน่วยพื้นผิวที่มีสำหรับการแสดงผลฟังก์ชันไปป์ไลน์แบบ non-fixed ได้glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);ดังนั้นหากคุณเข้าถึงฮาร์ดแวร์ที่หลากหลายคุณสามารถตรวจสอบตัวเองได้

แก้ไข: ไซต์นี้ให้คุณเปรียบเทียบความสามารถของ openGL ที่รายงานของการ์ดวิดีโอทุกประเภทที่ควรให้ตัวเลขที่คุณต้องการ: http://feedback.wildfiregames.com/report/opengl/device/GeForce%20GTX%20580

PS: AMD และ nvidia เพิ่งเปิดตัว "bindless textures" (amd มีชื่อแตกต่างกัน) ซึ่งช่วยให้คุณสามารถใช้ textures จำนวนมากโดยไม่ผูกกับ textutre ในขณะนี้มีเฉพาะใน openGL


1
หลังจากนั้นคำตอบที่แท้จริงคือคำว่า 'คุณมีได้มากเท่าที่ hw สามารถเสนอได้' หรือใช้ถ้อยคำต่างกันทุกอย่างควรวิ่งเร็วเท่าที่จะทำได้ (และใน OpenGL ที่ครอบคลุมเกือบทุกสาขา)
Darkwings

@ Darkwings ฉันคิดว่าเป็นเช่นนั้นการผูกพื้นผิวมากกว่าฮาร์ดแวร์ที่สามารถจัดการได้มักจะทำให้เกิดข้อผิดพลาดหรือไดรเวอร์หมดเวลา ฉันอ่านผิดเขายังบอกว่า shader model 4+ ไม่ใช่ opengl 4+ ดูที่การ์ด DX10 แรก (การ์ดตระกูล X2900 และ 8800) พวกเขาทั้งหมดดูเหมือนจะมีอย่างน้อย 16 หน่วยพื้นผิว

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

4
-1: คำตอบนี้ผิด ดูคำตอบของฉันสำหรับสาเหตุ (ยาวเกินไปที่จะอธิบายที่นี่)
Nicol Bolas

1
สิ่งที่อาจไม่ชัดเจนในทันที เกือบจะไม่มีใครใช้ GL_TEXTURE n GLenums ใช้ GL_TEXTURE0 + n แทนโดยที่nคือสล็อตที่จะโยง GLenums นั้นมีมากถึง 32 สล็อต แต่นั่นไม่ได้หมายความว่า OpenGL จะ จำกัด คุณไว้ที่ 32 เท่านั้นสเป็ครับประกันว่าพวกเขาจะต่อเนื่องกัน นอกจากนี้หากคุณไม่ได้ใช้ DSA คุณอาจต้องการจองสล็อตสำหรับการผูกเพื่อสร้าง / แก้ไขดังนั้นสถานะที่ใช้สำหรับสร้าง / แก้ไขมีปฏิสัมพันธ์น้อยกว่ากับสถานะที่ใช้ในการวาด
Maximus Minimus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.