From 742503ae6872c3258a1c0d9a8796d2715da1c01d Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Thu, 14 Jul 2022 21:21:53 +0900 Subject: [PATCH] internal/graphicsdriver/directx: bug fix: need to reset command allocators Closes #2202 --- .../directx/graphics_windows.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/internal/graphicsdriver/directx/graphics_windows.go b/internal/graphicsdriver/directx/graphics_windows.go index f9cd23975..adac27da6 100644 --- a/internal/graphicsdriver/directx/graphics_windows.go +++ b/internal/graphicsdriver/directx/graphics_windows.go @@ -515,9 +515,16 @@ func (g *Graphics) resizeSwapChain(width, height int) error { g.frameIndex = int(g.swapChain.GetCurrentBackBufferIndex()) + if err := g.drawCommandAllocators[g.frameIndex].Reset(); err != nil { + return err + } if err := g.drawCommandList.Reset(g.drawCommandAllocators[g.frameIndex], nil); err != nil { return err } + + if err := g.copyCommandAllocators[g.frameIndex].Reset(); err != nil { + return err + } if err := g.copyCommandList.Reset(g.copyCommandAllocators[g.frameIndex], nil); err != nil { return err } @@ -561,10 +568,16 @@ func (g *Graphics) Begin() error { g.frameIndex = int(g.swapChain.GetCurrentBackBufferIndex()) } + if err := g.drawCommandAllocators[g.frameIndex].Reset(); err != nil { + return err + } if err := g.drawCommandList.Reset(g.drawCommandAllocators[g.frameIndex], nil); err != nil { return err } + if err := g.copyCommandAllocators[g.frameIndex].Reset(); err != nil { + return err + } if err := g.copyCommandList.Reset(g.copyCommandAllocators[g.frameIndex], nil); err != nil { return err } @@ -705,10 +718,16 @@ func (g *Graphics) flushCommandList(commandList *iD3D12GraphicsCommandList) erro switch commandList { case g.drawCommandList: + if err := g.drawCommandAllocators[g.frameIndex].Reset(); err != nil { + return err + } if err := commandList.Reset(g.drawCommandAllocators[g.frameIndex], nil); err != nil { return err } case g.copyCommandList: + if err := g.copyCommandAllocators[g.frameIndex].Reset(); err != nil { + return err + } if err := commandList.Reset(g.copyCommandAllocators[g.frameIndex], nil); err != nil { return err }