พวกคุณดีบั๊ก GLSL อย่างไร?

ฉันเพิ่งพยายามเขียนโค้ด GLSL shader และโชคไม่ดีนักเมื่อ shader ไม่ได้วาดสิ่งที่ฉันคาดหวังไว้ (โดยพื้นฐานแล้วทุกอย่างจะเป็นสีดำบนหน้าจอ) นี่คือเครื่องมือที่ฉันลองใช้:

  1. การรวม Nvidia NSight VS - มันหยุดทำงานทันทีเมื่อฉันเริ่มแอปพลิเคชัน ลองใช้แอปพลิเคชันอื่นคู่กันแม้จะวาดรูปสามเหลี่ยมธรรมดาและยังไม่มีโชค ค้นหาผ่านอินเทอร์เน็ตและฟอรัม Nvidia และดูเหมือนว่าจะเป็นปัญหาทั่วไป และดูเหมือนว่าจะไม่พบวิธีแก้ไขใด ๆ

  2. glslDevil - มันสามารถเริ่มแอปพลิเคชันได้ แต่จากนั้นโปรแกรมก็จะออกต่อไปก่อนที่จะทำการเรนเดอร์ใด ๆ GL Trace คือ

    wglMakeCurrent(0, 0)
    wglDeleteContext(00010000)
    ChildProcess exited
    

    รับข้อขัดข้องอีกครั้งเมื่อเรียกใช้แอปพลิเคชันอื่นเมื่อหลังจากเรียก glDeleteTexture (1, 0314EF74) ออกจากกระบวนการลูกแล้ว

    ฉันไม่รู้ว่าเกิดอะไรขึ้น

  3. AMD PerfStudio 2 - ดูเหมือนว่าจะเป็นเครื่องมือที่มีแนวโน้มมากที่สุด เรียกใช้แอปพลิเคชันของฉันได้สำเร็จและแสดงข้อมูลที่จำเป็น อย่างไรก็ตาม ดูเหมือนว่าจะไม่รองรับการดีบัก GLSL ฉันไม่สามารถผ่านเชเดอร์และดูตัวแปรในเครื่องได้ ฯลฯ ดูเหมือนว่ารองรับเฉพาะ DirextX shader เท่านั้น

  4. gDebugger - มันใช้งานได้ค่อนข้างดีเครื่องมือคล้ายกับ AMD PerfStudio แต่อีกครั้งไม่ใช่ดีบักเกอร์ ไม่สามารถผ่านโค้ดเชเดอร์และดูตัวแปรในเครื่องได้

  5. พิมพ์ฟ - ?? มีคนอยู่ใน stack overflow บอกว่าใช้ printf ฉันจะ printf() ใน shader ได้อย่างไร

  6. แปลง DirectX shader เป็น GLSL - เนื่องจาก DirectX shader มีเครื่องมือแก้ไขจุดบกพร่องที่ดีกว่า และมีเครื่องมือเช่น http://sourceforge.net/projects/hlsl2glsl/ เพื่อแปลง hlsl เป็น glsl โดยอัตโนมัติ ดูเหมือนว่าจะเป็นทางเลือกอื่น โดยส่วนตัวแล้วฉันไม่ชอบวิธีแก้ปัญหานี้ และหวังว่าจะมีทางเลือกอื่นจริงๆ

ใครช่วยแนะนำวิธีแก้ไขข้อบกพร่อง GLSL ของคุณได้บ้าง คุณใช้เครื่องมืออะไรสำเร็จ?

ฉันกำลังดำเนินการอยู่:

  • NVidia GFX 460v2
  • วิชวลสตูดิโอ 2008 และ 2010
  • เกลว
  • โอเพ่นจีแอล 2.0

person NachoChip    schedule 23.05.2014    source แหล่งที่มา
comment
โดยปริยายคุณหมายถึงภายใต้ Windows?   -  person Tommy    schedule 24.05.2014
comment
ง่ายกว่าที่จะเขียนให้ถูกต้องตั้งแต่ต้น... และใช้การทดสอบด้วยภาพที่ชัดเจนเพื่อตรวจสอบว่าการคำนวณทำงานอย่างที่ควรจะเป็นหรือไม่   -  person Display Name    schedule 24.05.2014
comment
แก้ไขการติดตั้ง NSight ของคุณจะเป็นคำแนะนำของฉัน ตรวจสอบให้แน่ใจว่าคุณไม่มีสิ่งใดที่กำลังฟังอยู่ที่พอร์ต NSight Listens (ฉันมีสิ่งที่เรียกว่า freemake studio ติดตั้งอยู่ซึ่งบล็อก NSight) ยังดีกว่านั้น ให้ดูไฟล์บันทึกของ Nsight เพื่อดูว่าเหตุใดจึงขัดข้อง   -  person PeterT    schedule 24.05.2014
comment
ทุกอย่างเป็นสีดำบนหน้าจอ...คุณได้ตรวจสอบการรวบรวมเชเดอร์/สถานะ/บันทึกของเชเดอร์แล้วหรือยัง? ARB_debug_output?   -  person genpfault    schedule 24.05.2014
comment
เช่นเดียวกับgenpfault ก่อนที่จะตำหนิเชเดอร์ ฉันมักจะตรวจสอบว่า openGL ไม่มีข้อผิดพลาดหรือแม้แต่คำเตือนก่อนการโทรออก จากนั้นคุณสามารถชี้นิ้วของคุณไปทางเชเดอร์ได้ และดังที่ Sarge Borsch กล่าวไว้ บ่อยครั้งคุณควรเขียนเชเดอร์ทีละขั้นตอนแทนที่จะเขียนทั้งหมดในคราวเดียวแล้วค่อยคิดดูว่าส่วนไหนที่ล้มเหลว   -  person agrum    schedule 24.05.2014
comment
น่าเสียดาย glslDevil ใช้งานไม่ได้มานานหลายปี หากคุณโชคดีพอที่จะมีโค้ดเบส / ไดรเวอร์ที่เก่าพอ มันอาจใช้ได้ผลสำหรับคุณ แต่เนื่องจากยังไม่ได้รับการบำรุงรักษา การผสมผสานที่ลงตัวจึงเกิดขึ้นได้ยาก เครื่องมือ GL จำนวนมากอยู่ในสถานการณ์ที่คล้ายกัน รวมถึงเครื่องมือเฉพาะของผู้จำหน่ายด้วย NSight ได้รับการดูแลอย่างดีพอสมควรตราบใดที่คุณไม่ได้ใช้ Visual Studio เวอร์ชันล่าสุด (แต่ยังไม่รองรับ VS 2013)   -  person Andon M. Coleman    schedule 24.05.2014
comment
ใช่ ฉันตรวจสอบเพื่อให้แน่ใจว่าเชเดอร์ไม่มีข้อผิดพลาดในการคอมไพล์ใดๆ อยู่แล้ว และฉันใช้ gDeBugger เพื่อหยุดเมื่อพบข้อผิดพลาด OpenGL เช่นกัน ฉันคิดว่าฉันสามารถใช้เวลามากขึ้นและดูเชเดอร์ทีละขั้นตอนเพื่อค้นหาปัญหา อย่างไรก็ตาม ฉันรู้สึกท้อแท้เมื่อไม่มีเครื่องมือดีบักเกอร์สำหรับ glsl   -  person NachoChip    schedule 24.05.2014
comment
โดยปกติแล้ว ฉันจะใช้สีเพื่อดีบักโค้ดเชเดอร์ มันใช้งานได้ดีสำหรับการดีบักอย่างง่าย เช่น หากตัวแปรบางตัวมีค่าเท่ากับค่าใดค่าหนึ่ง ให้ตั้งค่าเอาต์พุตเป็นสีแดง มันเป็นแบบดั้งเดิม ดอกตูมทำงานได้ค่อนข้างดี แน่นอนว่าจำเป็นต้องใช้ความเป็นไปได้ในการคอมไพล์เชเดอร์ใหม่ระหว่างรันไทม์ ซึ่งช่วยประหยัดเวลาได้มาก!   -  person Jaa-c    schedule 27.05.2014


คำตอบ (2)


คุณสามารถระบุเอาต์พุตเพิ่มเติมได้โดยใช้ glDrawBuffers จากนั้นตรวจสอบสิ่งนั้น (printf ของคุณ)

อย่างไรก็ตาม นั่นไม่ได้แก้ไขอะไรเลยเมื่อดั้งเดิมอยู่นอกพื้นที่วาด

ไม่เช่นนั้นก็เป็นการเขียนโปรแกรมแบบเก่าโดยใช้เหตุผลล้วนๆ และการแก้ไขข้อบกพร่องทางจิต

person ratchet freak    schedule 23.05.2014

หลังจากดิ้นรนมาหลายชั่วโมง ในที่สุดฉันก็ทำให้ NSight ทำงานบนเครื่องของฉันได้ และฉันก็เขียนขั้นตอนไว้ที่นี่ และหวังว่ามันจะช่วยคนที่มีปัญหาคล้ายกันได้

  1. ดาวน์โหลด NSight จาก https://developer.nvidia.com/nsight-visual-studio-edition-downloads และเกี่ยวข้องกับขั้นตอนการดาวน์โหลด 2-3 ขั้นตอน เพียงทำตามคำแนะนำ ฉันเคยติดตั้ง Nsight Tegra มาก่อนและรับเมนู NSight ใน Visual Studio ของฉัน แต่เมื่อฉันเริ่มดีบักเกอร์กราฟิก แอปพลิเคชันหยุดทำงานทันที ฉันคิดว่าการรวม NSight มาพร้อมกับ NSight Terga ใช้งานไม่ได้ และติดตั้ง NSight ใหม่ตามลิงก์ด้านบนดูเหมือนว่าจะแก้ไขปัญหาได้

  2. เมื่อเรียกใช้ดีบักเกอร์กราฟิก NSight ฉันไม่สามารถดีบักโค้ดเชเดอร์ได้ เนื่องจากแอปของฉันใช้ฟังก์ชันบางอย่างที่เข้ากันไม่ได้ เช่น

    glTexImage2D() glTexEnvf()
    และอื่นๆ อีกมากมาย ตัวดีบักเกอร์กราฟิกบอกฉันว่าฉันสามารถเรียกใช้เครื่องมือชื่อ Nav.Launcher.exe เพื่อค้นหารายการฟังก์ชันที่เข้ากันไม่ได้ในแอปพลิเคชันของฉัน อย่างไรก็ตาม ฉันไม่พบเครื่องมือนี้ในฮาร์ดไดรฟ์ของฉัน

  3. จากนั้น ฉันตัดสินใจใช้ gDEBugger เพื่อรันแอปพลิเคชันของฉันอีกครั้ง และเปิดเบรกพอยต์ -> ฟังก์ชันหยุดการทำงานที่เลิกใช้แล้ว สิ่งนี้ทำให้ฉันรู้ว่าฟังก์ชันที่เลิกใช้แล้วทั้งหมดที่ฉันเรียกใช้ในโค้ดของฉัน หลังจากลบฟังก์ชันที่เลิกใช้แล้วทั้งหมดแล้ว คุณสามารถเปิดใช้งานคุณลักษณะดีบักเกอร์เฟรมของดีบักเกอร์กราฟิก NSight ได้ และในที่สุดฉันก็สามารถทำตามขั้นตอนโค้ดเชเดอร์ของฉันทีละบรรทัดใน Visual Studio

หวังว่าความช่วยเหลือนี้

person NachoChip    schedule 26.05.2014