From e2efaf56de1a346fc5dfdc9c9dae946bec4a70b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Thu, 6 Apr 2017 20:39:06 -0700 Subject: [PATCH] Fixed Metal. --- src/renderer_mtl.mm | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/renderer_mtl.mm b/src/renderer_mtl.mm index cdd114661..2d749de45 100644 --- a/src/renderer_mtl.mm +++ b/src/renderer_mtl.mm @@ -3057,6 +3057,9 @@ namespace bgfx { namespace mtl currentState.m_stateFlags = BGFX_STATE_NONE; currentState.m_stencil = packStencil(BGFX_STENCIL_NONE, BGFX_STENCIL_NONE); + RenderBind currentBind; + currentBind.clear(); + _render->m_hmdInitialized = false; const bool hmdEnabled = false; @@ -3115,7 +3118,10 @@ namespace bgfx { namespace mtl || key.m_view != view || item == numItems ; - const RenderItem& renderItem = _render->m_renderItem[_render->m_sortValues[item] ]; + + const uint32_t itemIdx = _render->m_sortValues[item]; + const RenderItem& renderItem = _render->m_renderItem[itemIdx]; + const RenderBind& renderBind = _render->m_renderItemBind[itemIdx]; ++item; if (viewChanged) @@ -3415,6 +3421,8 @@ namespace bgfx { namespace mtl currentState.m_stateFlags = newFlags; currentState.m_stencil = newStencil; + currentBind.clear(); + programIdx = invalidHandle; setDepthStencilState(newFlags, packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT)); @@ -3621,24 +3629,25 @@ namespace bgfx { namespace mtl for (uint8_t stage = 0; stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++stage) { - const Binding& sampler = draw.m_bind[stage]; - Binding& current = currentState.m_bind[stage]; - BX_CHECK(Binding::Texture == current.m_type - , "Buffer binding is not supported on Metal."); - if (current.m_idx != sampler.m_idx - || current.m_un.m_draw.m_textureFlags != sampler.m_un.m_draw.m_textureFlags + const Binding& bind = renderBind.m_bind[stage]; + Binding& current = currentBind.m_bind[stage]; + + if (current.m_idx != bind.m_idx + || current.m_un.m_draw.m_textureFlags != bind.m_un.m_draw.m_textureFlags || programChanged) { - if (invalidHandle != sampler.m_idx) + if (invalidHandle != bind.m_idx) { - TextureMtl& texture = m_textures[sampler.m_idx]; - texture.commit(stage, (usedVertexSamplerStages&(1<