2010-04-11 13 views
13

Czy istnieje maksymalna liczba instrukcji asemblerowych, które należy załadować do jednostki programu fragmentów? Mam algorytm na port z procesora do gpu i najwyraźniej nie pasuje do gpu.Maksymalna liczba instrukcji GLSL

+1

ja nic o shaderów wiedzieć, ale domyślam się, że nie mają nieskończonej przestrzeni dyskowej. –

Odpowiedz

2

Istnieje ograniczenie maksymalnej liczby instrukcji, które może mieć moduł cieniujący. O ile mi wiadomo, różni się to od GPU do GPU. Jeśli twój moduł cieniujący jest zbyt duży, kompilacja wygeneruje błąd.

34

Istnieje kilka twardych i miękkich ograniczeń, z których niektóre nie są oczywiste:

  • gniazda Instrukcja: Łączna liczba instrukcji, że sprzęt może pomieścić w pamięci lokalnej.
  • Zrealizowane instrukcje: Maksymalna liczba instrukcji, które będzie wykonywał (łącznie z instrukcjami, które działają kilka razy w pętli)
  • Pojedyncza instrukcja GLSL można mapować do kilkunastu instrukcji
  • Kilka instrukcje GLSL można mapować do pojedyncza instrukcja w zależności od jakości optymalizatora (np. multiply-add, dot, lerp)
  • Rejestry z ograniczonym tempem (tylko 32) mogą wymagać więcej instrukcji niż jest to konieczne na sprzęcie pre-SM4 (brak problemu z 4096).
  • Swizzling zazwyczaj nie kosztuje dodatkowe instrukcje w dzisiejszych czasach, ale robi na jakimś starszym sprzęcie i może w niektórych sytuacjach na niektórych urządzeniach (zwł. Gl_FragColor jest taki kandydat)
  • Niezależnie od rzeczywistych instrukcji, OpenGL 2.0 kompatybilny sprzęt jest ograniczona do 8 zależnych pobiera tekstur (nieograniczony na sprzęt, który może zrobić OpenGL 2.1 lub lepsza)

Trzeba te gwarantowane minima (większość kart ma więcej):

  • 512 slotów instruktażu dla vertex oraz pixel shaderów na OpenGL 2.x (SM3) zdolny sprzętu
    • 65536 wykonywane instrukcje
  • 4096 i 65536 wierzchołków pixel shader szczeliny instruktażowe na 3.x (SM4) sprzętu
    • 65536 wykonywane instrukcje vertex shader, nieograniczone pixel instrukcje
  • przynajmniej 24 oddziałów dynamiczne możliwych shader na 2.x (SM3) sprzętu
  • pełni dynamiczny rozgałęzienie (bez limitów) na sprzęcie SM4
  • Tylko warunkowy ruch dostępny na SM2.x, wszystko musi być zakwaterowani kodem powielania i odwijanie pętli, lub zawieść
+8

To jest świetna odpowiedź, ale byłoby lepiej z niektórymi odniesieniami. – Kaganar

Powiązane problemy