Autor Wątek: Dynamiczne ładowanie świata  (Przeczytany 4798 razy)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Kwiecień 21, 2008, 03:21:16
Cytuj
W firmie mam w tej chwili ATI 1300 w kompie i gra o której wspomniałem wyżej (D3DCREATE_MULTITHREADED + 2 wątki) wczytuje się/uruchamia ze 3x wolniej niż na NVidii 7900GT. Oczywiście główny powód to tworzenie tekstur, buforów, shader'ów itd.
Możliwe że te dwa wątki sobie w takim przypadku zaczynają jednak przeszkadzać i nie chodzi tu jedynie o blokowanie sekcji krytycznej DirectX'a, ale znacznym problemem mogą być zapisy po PCI-E. Rdzenie są dwa, PCI-E jedno, więc w momencie, gdy oba rdzenie zaczną próbować dopchać się jednocześnie do karty graficznej, to może być ciężko, bo pomimo sekcji krytycznej drugi wątek cały czas przepycha tekstury do zalockowanej pamięci i w efekcie driver lub GPU mogą dostać fioła, jeżeli nie są zbyt dobrze na taką sytuację przygotowane. :)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Kwiecień 21, 2008, 11:02:33
Jak wygląda kwestia tworzenia zasobów w czasie kiedy urządzenie D3D jest utracone? Jeśli nie działa, to jak sobie z tym poradzić?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Kwiecień 21, 2008, 14:08:24
Jak wygląda kwestia tworzenia zasobów w czasie kiedy urządzenie D3D jest utracone? Jeśli nie działa, to jak sobie z tym poradzić?
Po prostu funkcje zaczną zwracać Ci kody błędów i tyle. :)

Offline Esidar

  • Użytkownik

# Kwiecień 22, 2008, 00:02:34
Cytuj
W firmie mam w tej chwili ATI 1300 w kompie i gra o której wspomniałem wyżej (D3DCREATE_MULTITHREADED + 2 wątki) wczytuje się/uruchamia ze 3x wolniej niż na NVidii 7900GT. Oczywiście główny powód to tworzenie tekstur, buforów, shader'ów itd.
Możliwe że te dwa wątki sobie w takim przypadku zaczynają jednak przeszkadzać i nie chodzi tu jedynie o blokowanie sekcji krytycznej DirectX'a, ale znacznym problemem mogą być zapisy po PCI-E.

Bardziej jednak chodzi o sekcje krytyczne ;) W tym wypadku chodzi o to, że karta ATI X1300 jest kilka razy gorsza od Nvidii 7900GT. To oznacza, że DirectX więcej czasu spędza w driverze i w sekcji krytycznej. Częściej następują kolizje i przestoje.


Xbox radzi sobie z tym doskonale. Dużo lepiej niż PC. Na Xbox dzięki temu, że CPU dzieli pamięć z GPU, nie trzeba mieć sekcji krytycznej podczas renderingu + wczytywania. Można utworzyć dowolny zasób bez udziału DirectX za pomocą zwykłego malloc i fread :) Na Xbox'ie poprostu wszystkie dane są trzymane w pamięci CPU. Alokujemy obszar, wczytujemy dane (np. texturę) inicjujemy samemu pola struktury IDirect3DTextureBuffer i wszystko działa... A rendering na drugim wątku sobie spokojnie idzie.