Jump to content
Unity Insider Forum
Sign in to follow this  
Mr 3d

[Gelöst] Compute Shader Texturgenerierung auf mehrere Dispatches aufteilen

Recommended Posts

Hi,

ich habe einen relativ aufwendigen Compute Shader, der eine Textur generiert.

Bei Texturen, die größer als ~1024 Pixel sind, erreiche ich aber das 2 Sekunden Timeoutlimit von Windows ( https://docs.microsoft.com/en-us/windows-hardware/drivers/display/timeout-detection-and-recovery )

Ich weiß, dass man den in der Registry anpassen kann, will ich aber nicht^^

 

Meine Idee wäre jetzt einfach gewesen die große Textur in vier (oder mehr) Teile zu teilen und diese nacheinander zu verarbeiten.

In etwa so:

int size = texSize / 16; // (texSize / 2) / 8;  8x8 Threadgruppen
int offset = texSize / 2;
for(int y = 0; y < 2; y++)
{
 for (int x = 0; x < 2; x++)
 {
  compute.SetInts("startOffset", x * offset, y * offset);
  compute.Dispatch(kernelIndex, size, size, 1);
 }
}

 

Nur wartet der Mainthread nicht darauf, dass die erste Dispatchgruppe fertig ist.

Zumindest arbeiten alle Gruppen mit dem selben 'startOffset'.

 

Aber wie kann ich jedem Dispatch einen eigenen 'startOffset' setzen? Jemand ne Idee? :)

Share this post


Link to post
Share on other sites
vor 12 Stunden schrieb Mr 3d:

Zumindest arbeiten alle Gruppen mit dem selben 'startOffset'.

Was auch daran liegen könnte, dass ich im shader vergessen habe den 'startOffset' hinzu zu addieren :rolleyes:

Share this post


Link to post
Share on other sites

Und nochmal ein kleiner Nachtrag für zukünftige Leser..

 

Allein durch das Aufteilen auf mehrere Dispatch Aufrufe, verhindert man nicht, dass das Timeout Limit nicht überschritten wird.

Nach dem was ich gelesen habe, werden die Dispatch Aufrufe gequeued und dann zusammen ausgeführt, was wieder zu dem Timeout führt.

Wenn man aber nach jedem Dispatch 'GL.Flush();' aufruft, erzwingt man, dass sie direkt und nacheinander bearbeitet werden.

 

 

Zumindest hat das für mich den Fehler behoben.^^

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×