From ea5a14d33159cadd207beca7f37ed589afb6178e Mon Sep 17 00:00:00 2001 From: turanszkij Date: Sat, 9 Sep 2017 20:04:56 +0200 Subject: [PATCH] fixed thread contention hazard --- WickedEngine/DeferredRenderableComponent.cpp | 24 ++++++++------ WickedEngine/ForwardRenderableComponent.cpp | 29 ++++++++++------ WickedEngine/MainComponent.cpp | 2 ++ WickedEngine/RendererWindow.cpp | 2 -- WickedEngine/wiGraphicsDevice.h | 2 -- WickedEngine/wiGraphicsDevice_DX11.cpp | 35 +------------------- WickedEngine/wiGraphicsDevice_DX11.h | 2 -- WickedEngine/wiImage.cpp | 10 ------ WickedEngine/wiRenderer.cpp | 20 +---------- WickedEngine/wiRenderer.h | 1 - WickedEngine/wiVersion.cpp | 2 +- 11 files changed, 38 insertions(+), 91 deletions(-) diff --git a/WickedEngine/DeferredRenderableComponent.cpp b/WickedEngine/DeferredRenderableComponent.cpp index 853abf48a..aaf486377 100644 --- a/WickedEngine/DeferredRenderableComponent.cpp +++ b/WickedEngine/DeferredRenderableComponent.cpp @@ -307,7 +307,8 @@ void DeferredRenderableComponent::setPreferredThreadingCount(unsigned short valu switch (value){ case 0: case 1: - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_IMMEDIATE); + wiRenderer::BindPersistentState(GRAPHICSTHREAD_IMMEDIATE); + wiImage::BindPersistentState(GRAPHICSTHREAD_IMMEDIATE); break; case 2: workerThreads.push_back(new wiTaskThread([&] @@ -318,6 +319,8 @@ void DeferredRenderableComponent::setPreferredThreadingCount(unsigned short valu })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_SCENE); + wiImage::BindPersistentState(GRAPHICSTHREAD_SCENE); RenderShadows(GRAPHICSTHREAD_SCENE); RenderScene(GRAPHICSTHREAD_SCENE); RenderSecondaryScene(rtGBuffer, GetFinalRT(), GRAPHICSTHREAD_SCENE); @@ -325,9 +328,7 @@ void DeferredRenderableComponent::setPreferredThreadingCount(unsigned short valu wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); })); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_REFLECTIONS); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_REFLECTIONS); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->ExecuteDeferredContexts(); break; @@ -340,12 +341,16 @@ void DeferredRenderableComponent::setPreferredThreadingCount(unsigned short valu })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_SCENE); + wiImage::BindPersistentState(GRAPHICSTHREAD_SCENE); RenderShadows(GRAPHICSTHREAD_SCENE); RenderScene(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_MISC1); + wiImage::BindPersistentState(GRAPHICSTHREAD_MISC1); wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC1); wiRenderer::UpdateGBuffer(rtGBuffer.GetTexture(0), rtGBuffer.GetTexture(1), rtGBuffer.GetTexture(2), nullptr, nullptr, GRAPHICSTHREAD_MISC1); RenderSecondaryScene(rtGBuffer, GetFinalRT(), GRAPHICSTHREAD_MISC1); @@ -353,11 +358,8 @@ void DeferredRenderableComponent::setPreferredThreadingCount(unsigned short valu wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC1); })); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_REFLECTIONS); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_REFLECTIONS); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->ExecuteDeferredContexts(); break; @@ -371,12 +373,16 @@ void DeferredRenderableComponent::setPreferredThreadingCount(unsigned short valu })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_SCENE); + wiImage::BindPersistentState(GRAPHICSTHREAD_SCENE); RenderShadows(GRAPHICSTHREAD_SCENE); RenderScene(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_MISC1); + wiImage::BindPersistentState(GRAPHICSTHREAD_MISC1); wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC1); wiRenderer::UpdateGBuffer(rtGBuffer.GetTexture(0), rtGBuffer.GetTexture(1), rtGBuffer.GetTexture(2), nullptr, nullptr, GRAPHICSTHREAD_MISC1); RenderSecondaryScene(rtGBuffer, GetFinalRT(), GRAPHICSTHREAD_MISC1); @@ -384,19 +390,17 @@ void DeferredRenderableComponent::setPreferredThreadingCount(unsigned short valu })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_MISC2); + wiImage::BindPersistentState(GRAPHICSTHREAD_MISC2); wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC2); wiRenderer::UpdateGBuffer(rtGBuffer.GetTexture(0), rtGBuffer.GetTexture(1), rtGBuffer.GetTexture(2), nullptr, nullptr, GRAPHICSTHREAD_MISC2); RenderComposition(GetFinalRT(), rtGBuffer, GRAPHICSTHREAD_MISC2); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC2); })); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_REFLECTIONS); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_REFLECTIONS); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC1); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_MISC2); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC2); wiRenderer::GetDevice()->ExecuteDeferredContexts(); break; diff --git a/WickedEngine/ForwardRenderableComponent.cpp b/WickedEngine/ForwardRenderableComponent.cpp index 03813875b..cd41d4cfd 100644 --- a/WickedEngine/ForwardRenderableComponent.cpp +++ b/WickedEngine/ForwardRenderableComponent.cpp @@ -143,10 +143,12 @@ void ForwardRenderableComponent::setPreferredThreadingCount(unsigned short value return; } + switch (value) { case 0: case 1: - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_IMMEDIATE); + wiRenderer::BindPersistentState(GRAPHICSTHREAD_IMMEDIATE); + wiImage::BindPersistentState(GRAPHICSTHREAD_IMMEDIATE); break; case 2: workerThreads.push_back(new wiTaskThread([&] @@ -157,6 +159,8 @@ void ForwardRenderableComponent::setPreferredThreadingCount(unsigned short value })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_SCENE); + wiImage::BindPersistentState(GRAPHICSTHREAD_SCENE); RenderShadows(GRAPHICSTHREAD_SCENE); RenderScene(GRAPHICSTHREAD_SCENE); RenderSecondaryScene(rtMain, rtMain, GRAPHICSTHREAD_SCENE); @@ -164,9 +168,7 @@ void ForwardRenderableComponent::setPreferredThreadingCount(unsigned short value wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); })); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_REFLECTIONS); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_REFLECTIONS); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->ExecuteDeferredContexts(); break; @@ -179,23 +181,25 @@ void ForwardRenderableComponent::setPreferredThreadingCount(unsigned short value })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_SCENE); + wiImage::BindPersistentState(GRAPHICSTHREAD_SCENE); RenderShadows(GRAPHICSTHREAD_SCENE); RenderScene(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_MISC1); + wiImage::BindPersistentState(GRAPHICSTHREAD_MISC1); wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC1); + wiRenderer::UpdateGBuffer(rtMain.GetTexture(0), rtMain.GetTexture(1), rtMain.GetTexture(2), nullptr, nullptr, GRAPHICSTHREAD_MISC1); RenderSecondaryScene(rtMain, rtMain, GRAPHICSTHREAD_MISC1); RenderComposition(rtMain, rtMain, GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC1); })); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_REFLECTIONS); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_REFLECTIONS); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->ExecuteDeferredContexts(); break; @@ -209,32 +213,37 @@ void ForwardRenderableComponent::setPreferredThreadingCount(unsigned short value })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_SCENE); + wiImage::BindPersistentState(GRAPHICSTHREAD_SCENE); RenderShadows(GRAPHICSTHREAD_SCENE); RenderScene(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_MISC1); + wiImage::BindPersistentState(GRAPHICSTHREAD_MISC1); wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC1); + wiRenderer::UpdateGBuffer(rtMain.GetTexture(0), rtMain.GetTexture(1), rtMain.GetTexture(2), nullptr, nullptr, GRAPHICSTHREAD_MISC1); RenderSecondaryScene(rtMain, rtMain, GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC1); })); workerThreads.push_back(new wiTaskThread([&] { + wiRenderer::BindPersistentState(GRAPHICSTHREAD_MISC2); + wiImage::BindPersistentState(GRAPHICSTHREAD_MISC2); wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC2); + wiRenderer::UpdateGBuffer(rtMain.GetTexture(0), rtMain.GetTexture(1), rtMain.GetTexture(2), nullptr, nullptr, GRAPHICSTHREAD_MISC2); RenderComposition(rtMain, rtMain, GRAPHICSTHREAD_MISC2); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC2); })); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_REFLECTIONS); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_REFLECTIONS); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC1); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_MISC2); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC2); wiRenderer::GetDevice()->ExecuteDeferredContexts(); break; }; + } diff --git a/WickedEngine/MainComponent.cpp b/WickedEngine/MainComponent.cpp index 40e8b913b..b82934a97 100644 --- a/WickedEngine/MainComponent.cpp +++ b/WickedEngine/MainComponent.cpp @@ -161,6 +161,8 @@ void MainComponent::Render() wiLua::GetGlobal()->Render(); wiProfiler::GetInstance().BeginRange("GPU Frame", wiProfiler::DOMAIN_GPU, GRAPHICSTHREAD_IMMEDIATE); + wiRenderer::BindPersistentState(GRAPHICSTHREAD_IMMEDIATE); + wiImage::BindPersistentState(GRAPHICSTHREAD_IMMEDIATE); getActiveComponent()->Render(); wiProfiler::GetInstance().EndRange(GRAPHICSTHREAD_IMMEDIATE); // GPU Frame } diff --git a/WickedEngine/RendererWindow.cpp b/WickedEngine/RendererWindow.cpp index 728aa383c..0591758cd 100644 --- a/WickedEngine/RendererWindow.cpp +++ b/WickedEngine/RendererWindow.cpp @@ -418,7 +418,6 @@ RendererWindow::RendererWindow(wiGUI* gui, Renderable3DComponent* component) : G wiRenderer::samplers[SSLOT_OBJECTSHADER] = new wiGraphicsTypes::Sampler; wiRenderer::GetDevice()->CreateSamplerState(&desc, wiRenderer::samplers[SSLOT_OBJECTSHADER]); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_IMMEDIATE); }); textureQualityComboBox->SetSelected(3); textureQualityComboBox->SetEnabled(true); @@ -435,7 +434,6 @@ RendererWindow::RendererWindow(wiGUI* gui, Renderable3DComponent* component) : G desc.MipLODBias = args.fValue; wiRenderer::samplers[SSLOT_OBJECTSHADER] = new wiGraphicsTypes::Sampler; wiRenderer::GetDevice()->CreateSamplerState(&desc, wiRenderer::samplers[SSLOT_OBJECTSHADER]); - wiRenderer::RebindPersistentState(GRAPHICSTHREAD_IMMEDIATE); }); rendererWindow->AddWidget(mipLodBiasSlider); diff --git a/WickedEngine/wiGraphicsDevice.h b/WickedEngine/wiGraphicsDevice.h index 93316ad62..35d507a98 100644 --- a/WickedEngine/wiGraphicsDevice.h +++ b/WickedEngine/wiGraphicsDevice.h @@ -146,8 +146,6 @@ namespace wiGraphicsTypes virtual void MSAAResolve(Texture2D* pDst, const Texture2D* pSrc, GRAPHICSTHREAD threadID) = 0; virtual void UpdateBuffer(GPUBuffer* buffer, const void* data, GRAPHICSTHREAD threadID, int dataSize = -1) = 0; virtual GPUBuffer* DownloadBuffer(GPUBuffer* buffer, GRAPHICSTHREAD threadID) = 0; - virtual void Map(GPUBuffer* resource, UINT subResource, MAP mapType, UINT mapFlags, MappedSubresource* mappedResource, GRAPHICSTHREAD threadID) = 0; - virtual void Unmap(GPUBuffer* resource, UINT subResource, GRAPHICSTHREAD threadID) = 0; virtual void SetScissorRects(UINT numRects, const Rect* rects, GRAPHICSTHREAD threadID) = 0; virtual void QueryBegin(GPUQuery *query, GRAPHICSTHREAD threadID) = 0; virtual void QueryEnd(GPUQuery *query, GRAPHICSTHREAD threadID) = 0; diff --git a/WickedEngine/wiGraphicsDevice_DX11.cpp b/WickedEngine/wiGraphicsDevice_DX11.cpp index d0388b3d3..00d3e3411 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.cpp +++ b/WickedEngine/wiGraphicsDevice_DX11.cpp @@ -2653,7 +2653,7 @@ void GraphicsDevice_DX11::PresentEnd() deviceContexts[GRAPHICSTHREAD_IMMEDIATE]->OMSetRenderTargets(0, nullptr, nullptr); - UnBindResources(0, TEXSLOT_COUNT, GRAPHICSTHREAD_IMMEDIATE); + deviceContexts[GRAPHICSTHREAD_IMMEDIATE]->ClearState(); FRAMECOUNT++; @@ -3238,39 +3238,6 @@ GPUBuffer* GraphicsDevice_DX11::DownloadBuffer(GPUBuffer* buffer, GRAPHICSTHREAD return debugbuf; } -void GraphicsDevice_DX11::Map(GPUBuffer* resource, UINT subResource, MAP mapType, UINT mapFlags, MappedSubresource* mappedResource, GRAPHICSTHREAD threadID) { - assert(mapFlags == 0 && "MapFlags not implemented!"); - D3D11_MAPPED_SUBRESOURCE d3dMappedResource; - D3D11_MAP d3dMapType = D3D11_MAP_WRITE_DISCARD; - switch (mapType) - { - case wiGraphicsTypes::MAP_READ: - d3dMapType = D3D11_MAP_READ; - break; - case wiGraphicsTypes::MAP_WRITE: - d3dMapType = D3D11_MAP_WRITE; - break; - case wiGraphicsTypes::MAP_READ_WRITE: - d3dMapType = D3D11_MAP_READ_WRITE; - break; - case wiGraphicsTypes::MAP_WRITE_DISCARD: - d3dMapType = D3D11_MAP_WRITE_DISCARD; - break; - case wiGraphicsTypes::MAP_WRITE_NO_OVERWRITE: - d3dMapType = D3D11_MAP_WRITE_NO_OVERWRITE; - break; - default: - break; - } - HRESULT hr = deviceContexts[threadID]->Map(resource->resource_DX11, subResource, d3dMapType, mapFlags, &d3dMappedResource); - mappedResource->pData = d3dMappedResource.pData; - mappedResource->DepthPitch = d3dMappedResource.DepthPitch; - mappedResource->RowPitch = d3dMappedResource.RowPitch; -} -void GraphicsDevice_DX11::Unmap(GPUBuffer* resource, UINT subResource, GRAPHICSTHREAD threadID) -{ - deviceContexts[threadID]->Unmap(resource->resource_DX11, subResource); -} void GraphicsDevice_DX11::SetScissorRects(UINT numRects, const Rect* rects, GRAPHICSTHREAD threadID) { if (rects != nullptr) diff --git a/WickedEngine/wiGraphicsDevice_DX11.h b/WickedEngine/wiGraphicsDevice_DX11.h index 2607e80b6..d8dbd7591 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.h +++ b/WickedEngine/wiGraphicsDevice_DX11.h @@ -127,8 +127,6 @@ namespace wiGraphicsTypes virtual void MSAAResolve(Texture2D* pDst, const Texture2D* pSrc, GRAPHICSTHREAD threadID) override; virtual void UpdateBuffer(GPUBuffer* buffer, const void* data, GRAPHICSTHREAD threadID, int dataSize = -1) override; virtual GPUBuffer* DownloadBuffer(GPUBuffer* buffer, GRAPHICSTHREAD threadID) override; - virtual void Map(GPUBuffer* resource, UINT subResource, MAP mapType, UINT mapFlags, MappedSubresource* mappedResource, GRAPHICSTHREAD threadID) override; - virtual void Unmap(GPUBuffer* resource, UINT subResource, GRAPHICSTHREAD threadID) override; virtual void SetScissorRects(UINT numRects, const Rect* rects, GRAPHICSTHREAD threadID) override; virtual void QueryBegin(GPUQuery *query, GRAPHICSTHREAD threadID) override; virtual void QueryEnd(GPUQuery *query, GRAPHICSTHREAD threadID) override; diff --git a/WickedEngine/wiImage.cpp b/WickedEngine/wiImage.cpp index d647db04e..1393e1f57 100644 --- a/WickedEngine/wiImage.cpp +++ b/WickedEngine/wiImage.cpp @@ -223,20 +223,10 @@ void wiImage::SetUpStates() void wiImage::BindPersistentState(GRAPHICSTHREAD threadID) { - if (threadID == GRAPHICSTHREAD_IMMEDIATE) - { - wiRenderer::GetDevice()->LOCK(); - } - wiRenderer::GetDevice()->BindConstantBufferVS(constantBuffer, CB_GETBINDSLOT(ImageCB), threadID); wiRenderer::GetDevice()->BindConstantBufferPS(constantBuffer, CB_GETBINDSLOT(ImageCB), threadID); wiRenderer::GetDevice()->BindConstantBufferPS(processCb, CB_GETBINDSLOT(PostProcessCB), threadID); - - if (threadID == GRAPHICSTHREAD_IMMEDIATE) - { - wiRenderer::GetDevice()->UNLOCK(); - } } void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHREAD threadID) diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index ab75d6a67..a3aba0329 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -257,9 +257,6 @@ void wiRenderer::SetUpStaticComponents() SetShadowProps2D(SHADOWRES_2D, SHADOWCOUNT_2D, SOFTSHADOWQUALITY_2D); SetShadowPropsCube(SHADOWRES_CUBE, SHADOWCOUNT_CUBE); - BindPersistentState(GRAPHICSTHREAD_IMMEDIATE); - UpdateWorldCB(GRAPHICSTHREAD_IMMEDIATE); - Material::CreateImpostorMaterialCB(); } void wiRenderer::CleanUpStatic() @@ -1349,11 +1346,6 @@ void wiRenderer::SetUpStates() void wiRenderer::BindPersistentState(GRAPHICSTHREAD threadID) { - if (threadID == GRAPHICSTHREAD_IMMEDIATE) - { - GetDevice()->LOCK(); - } - for (int i = 0; i < SSLOT_COUNT; ++i) { GetDevice()->BindSamplerPS(samplers[i], i, threadID); @@ -1398,17 +1390,6 @@ void wiRenderer::BindPersistentState(GRAPHICSTHREAD threadID) GetDevice()->BindResourcePS(resourceBuffers[RBTYPE_LIGHTARRAY], STRUCTUREDBUFFER_GETBINDSLOT(LightArrayType), threadID); GetDevice()->BindResourceCS(resourceBuffers[RBTYPE_LIGHTARRAY], STRUCTUREDBUFFER_GETBINDSLOT(LightArrayType), threadID); - - if (threadID == GRAPHICSTHREAD_IMMEDIATE) - { - GetDevice()->UNLOCK(); - } -} -void wiRenderer::RebindPersistentState(GRAPHICSTHREAD threadID) -{ - BindPersistentState(threadID); - - wiImage::BindPersistentState(threadID); } Transform* wiRenderer::getTransformByName(const std::string& get) @@ -1778,6 +1759,7 @@ void wiRenderer::UpdateRenderData(GRAPHICSTHREAD threadID) { UpdateWorldCB(threadID); // only commits when parameters are changed UpdateFrameCB(threadID); + BindPersistentState(threadID); wiProfiler::GetInstance().BeginRange("Skinning", wiProfiler::DOMAIN_GPU, threadID); GetDevice()->EventBegin("Skinning", threadID); diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h index 8fc566cbc..cf9c98dfa 100644 --- a/WickedEngine/wiRenderer.h +++ b/WickedEngine/wiRenderer.h @@ -400,7 +400,6 @@ public: static void ReloadShaders(const std::string& path = ""); static void BindPersistentState(GRAPHICSTHREAD threadID); - static void RebindPersistentState(GRAPHICSTHREAD threadID); static Vertex TransformVertex(const Mesh* mesh, int vertexI, const XMMATRIX& mat = XMMatrixIdentity()); diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 85b0c0062..12de3964a 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wiVersion // minor features, major updates const int minor = 13; // minor bug fixes, alterations, refactors, updates - const int revision = 4; + const int revision = 5; long GetVersion()