Czy istnieją wytyczne DirectX dotyczące wiązania i odwiązywania zasobów między wywołaniami losowania?
Wszystkie książki i samouczki DirectX zdecydowanie polecamzmniejszenie alokacji zasobów pomiędzy wywołaniami do minimum - jednak nie mogę znaleźć żadnych wskazówek, które pozwolą lepiej poznać szczegóły. Przeglądając wiele przykładowego kodu znalezionego w sieci, doszedłem do wniosku, że programiści mają zupełnie inne zasady kodowania dotyczące tego tematu. Niektóre są nawet ustawione i rozbrojone
VS/PS
VS/PS ResourceViews
RasterizerStage
DepthStencilState
PrimitiveTopology
...
przed i pokażdy narysuj połączenie (chociaż konfiguracja pozostaje niezmieniona), a inne nie.
Myślę, że to trochę przesadzone ...
Z moich własnych eksperymentów dowiedziałem się, że jedyne zasoby, które muszę powiązać przy każdym wywołaniu, toShaderResourceViews
(doVS
iPS
w moim przypadku). Wymóg ten może być spowodowany użyciem shaderów obliczeniowych, ponieważ wiążę / rozłączamUAVs
do buforów, które są powiązaneVS
/ PS
później.
Straciłem wiele godzin pracy, zanim wykryłem, że to ponowne wiązanie jest konieczne. I myślę, że wielu programistów nie jest pewnych i woli odwiązać i ponownie powiązać „trochę za dużo” zamiast wpadać w podobną pułapkę.
Pytanie 1: Czy istnieją przynajmniej pewne zasady dotyczące tego problemu?
Pytanie 2: Czy to możliwe, że mójShaderResourceViews
przywiązany doVS/PS
są niezwiązane przez rdzeń sterownika / DirectX, ponieważ wiążęUAVs
do tych samych buforów przed wywołaniem wysyłki CS (nie rozłączamSRVs
siebie)?
Pytanie 3: Nawet nie ustawiamVS/PS
do null przed użyciem shaderów obliczeniowych. Działa bez problemów, ale wciąż nie jestem pewien, czy wykopuję kolejną pułapkę, stosując takie „leniwe” podejście.