diff --git a/examples/common/entry/dialog.cpp b/examples/common/entry/dialog.cpp index e9e15fc21..a3250be8f 100644 --- a/examples/common/entry/dialog.cpp +++ b/examples/common/entry/dialog.cpp @@ -67,7 +67,7 @@ void openUrl(const bx::StringView& _url) #if BX_PLATFORM_WINDOWS void* result = ShellExecuteA(NULL, NULL, tmp, NULL, NULL, false); BX_UNUSED(result); -#else +#elif !defined(BX_PLATFORM_IOS) int32_t result = system(tmp); BX_UNUSED(result); #endif // BX_PLATFORM_* diff --git a/examples/runtime/shaders/metal/cs_indirect.bin b/examples/runtime/shaders/metal/cs_indirect.bin index 89d1021ca..ae6629794 100644 Binary files a/examples/runtime/shaders/metal/cs_indirect.bin and b/examples/runtime/shaders/metal/cs_indirect.bin differ diff --git a/examples/runtime/shaders/metal/cs_terrain_init.bin b/examples/runtime/shaders/metal/cs_terrain_init.bin index d36244802..e7a1b5862 100644 Binary files a/examples/runtime/shaders/metal/cs_terrain_init.bin and b/examples/runtime/shaders/metal/cs_terrain_init.bin differ diff --git a/examples/runtime/shaders/metal/cs_terrain_lod.bin b/examples/runtime/shaders/metal/cs_terrain_lod.bin index 50db4652a..426e21002 100644 Binary files a/examples/runtime/shaders/metal/cs_terrain_lod.bin and b/examples/runtime/shaders/metal/cs_terrain_lod.bin differ diff --git a/examples/runtime/shaders/metal/cs_terrain_update_draw.bin b/examples/runtime/shaders/metal/cs_terrain_update_draw.bin index a4f98908b..31f80e2cd 100644 Binary files a/examples/runtime/shaders/metal/cs_terrain_update_draw.bin and b/examples/runtime/shaders/metal/cs_terrain_update_draw.bin differ diff --git a/examples/runtime/shaders/metal/cs_terrain_update_indirect.bin b/examples/runtime/shaders/metal/cs_terrain_update_indirect.bin index 6a6485b0d..c8e591ba5 100644 Binary files a/examples/runtime/shaders/metal/cs_terrain_update_indirect.bin and b/examples/runtime/shaders/metal/cs_terrain_update_indirect.bin differ diff --git a/examples/runtime/shaders/metal/fs_deferred_clear_uav.bin b/examples/runtime/shaders/metal/fs_deferred_clear_uav.bin new file mode 100644 index 000000000..2a0878873 Binary files /dev/null and b/examples/runtime/shaders/metal/fs_deferred_clear_uav.bin differ diff --git a/examples/runtime/shaders/metal/fs_deferred_combine.bin b/examples/runtime/shaders/metal/fs_deferred_combine.bin index fadac8e46..6aeae196e 100644 Binary files a/examples/runtime/shaders/metal/fs_deferred_combine.bin and b/examples/runtime/shaders/metal/fs_deferred_combine.bin differ diff --git a/examples/runtime/shaders/metal/fs_deferred_debug.bin b/examples/runtime/shaders/metal/fs_deferred_debug.bin index 244b6b775..86f3358c9 100644 Binary files a/examples/runtime/shaders/metal/fs_deferred_debug.bin and b/examples/runtime/shaders/metal/fs_deferred_debug.bin differ diff --git a/examples/runtime/shaders/metal/fs_deferred_geom.bin b/examples/runtime/shaders/metal/fs_deferred_geom.bin index 6ef4212c5..db124efc7 100644 Binary files a/examples/runtime/shaders/metal/fs_deferred_geom.bin and b/examples/runtime/shaders/metal/fs_deferred_geom.bin differ diff --git a/examples/runtime/shaders/metal/fs_deferred_light.bin b/examples/runtime/shaders/metal/fs_deferred_light.bin index a89b8a96f..3ee93c5e9 100644 Binary files a/examples/runtime/shaders/metal/fs_deferred_light.bin and b/examples/runtime/shaders/metal/fs_deferred_light.bin differ diff --git a/examples/runtime/shaders/metal/fs_deferred_light_ta.bin b/examples/runtime/shaders/metal/fs_deferred_light_ta.bin index 30b113de5..5352786b7 100644 Binary files a/examples/runtime/shaders/metal/fs_deferred_light_ta.bin and b/examples/runtime/shaders/metal/fs_deferred_light_ta.bin differ diff --git a/examples/runtime/shaders/metal/fs_deferred_light_uav.bin b/examples/runtime/shaders/metal/fs_deferred_light_uav.bin new file mode 100644 index 000000000..5a2573a1c Binary files /dev/null and b/examples/runtime/shaders/metal/fs_deferred_light_uav.bin differ diff --git a/examples/runtime/shaders/metal/fs_rsm_combine.bin b/examples/runtime/shaders/metal/fs_rsm_combine.bin index ea72059d1..eb8a9535f 100644 Binary files a/examples/runtime/shaders/metal/fs_rsm_combine.bin and b/examples/runtime/shaders/metal/fs_rsm_combine.bin differ diff --git a/examples/runtime/shaders/metal/fs_rsm_lbuffer.bin b/examples/runtime/shaders/metal/fs_rsm_lbuffer.bin index 91dbcb9f1..7a5932ad7 100644 Binary files a/examples/runtime/shaders/metal/fs_rsm_lbuffer.bin and b/examples/runtime/shaders/metal/fs_rsm_lbuffer.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin index 9cc59ef1c..aeed87b3e 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin index 03d4c2f8f..13fcd58c9 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin index 92ad948fe..c3bb35aa0 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin index 46426b8c7..8a86b4cbb 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin index ab81de69f..1454b95c5 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin index fb383f097..b4120384e 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin index f41b8a992..68e90ce4d 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin index fd48866ec..0d534fa00 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin index ecc5b0f69..06ea27ed0 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin index 8c6d10989..1694d81eb 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin index 80705c6fc..9b48a80b6 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin index 4f62c7c30..c4ec3f35d 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin index 37a7d12fc..4db71f796 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin index 98d8b7384..b7e686a13 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin index 2a0837aa5..13c726212 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin index 1b994f616..43ffff9f7 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin index 84fa67241..d6f7a869d 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin index 8623df3f3..932379d32 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin index 706a92ab4..682cbc18c 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin index 64a46560e..cfcd411cc 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin index 8854be9df..b5a970097 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin index ebf71dfc6..4e0099cf6 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin index 3d37c4bbd..8f64cbd9f 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin index 1c34b218f..9d6daf355 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin b/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin index ec803364d..aadfde6d4 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin b/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin index 7fb9efcde..197ebd2cd 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin index acce7887e..b632211e7 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin b/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin index 0f97c1fbe..86f3358c9 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin b/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin index 54086dbec..fd1777f13 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin index 08f37927b..f1c17c162 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin b/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin index 7fb9efcde..197ebd2cd 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin differ diff --git a/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin b/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin index acce7887e..b632211e7 100644 Binary files a/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin and b/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin differ diff --git a/examples/runtime/shaders/metal/fs_terrain_render.bin b/examples/runtime/shaders/metal/fs_terrain_render.bin index b0319fa77..53e19c93d 100644 Binary files a/examples/runtime/shaders/metal/fs_terrain_render.bin and b/examples/runtime/shaders/metal/fs_terrain_render.bin differ diff --git a/examples/runtime/shaders/metal/fs_terrain_render_normal.bin b/examples/runtime/shaders/metal/fs_terrain_render_normal.bin index df6fd804b..9cd9e1649 100644 Binary files a/examples/runtime/shaders/metal/fs_terrain_render_normal.bin and b/examples/runtime/shaders/metal/fs_terrain_render_normal.bin differ diff --git a/examples/runtime/shaders/metal/vs_rsm_gbuffer.bin b/examples/runtime/shaders/metal/vs_rsm_gbuffer.bin index 061fc28cb..d6b7ad984 100644 Binary files a/examples/runtime/shaders/metal/vs_rsm_gbuffer.bin and b/examples/runtime/shaders/metal/vs_rsm_gbuffer.bin differ diff --git a/examples/runtime/shaders/metal/vs_rsm_lbuffer.bin b/examples/runtime/shaders/metal/vs_rsm_lbuffer.bin index 3926f6111..fc84925d3 100644 Binary files a/examples/runtime/shaders/metal/vs_rsm_lbuffer.bin and b/examples/runtime/shaders/metal/vs_rsm_lbuffer.bin differ diff --git a/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_csm.bin b/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_csm.bin index 5e27849cf..4cd647bf9 100644 Binary files a/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_csm.bin and b/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_csm.bin differ diff --git a/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_csm.bin b/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_csm.bin index 3071bf442..fb9e5bf38 100644 Binary files a/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_csm.bin and b/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_csm.bin differ diff --git a/examples/runtime/shaders/metal/vs_terrain_render.bin b/examples/runtime/shaders/metal/vs_terrain_render.bin index 64e484cf2..5a3b247fb 100644 Binary files a/examples/runtime/shaders/metal/vs_terrain_render.bin and b/examples/runtime/shaders/metal/vs_terrain_render.bin differ diff --git a/src/renderer_mtl.h b/src/renderer_mtl.h index 1c1ca5724..a4eb63edc 100644 --- a/src/renderer_mtl.h +++ b/src/renderer_mtl.h @@ -847,13 +847,6 @@ namespace bgfx { namespace mtl uint16_t m_numThreads[3]; }; - struct SamplerInfo - { - uint32_t m_index; - UniformHandle m_uniform; - bool m_fragment; - }; - struct PipelineStateMtl; struct ProgramMtl @@ -887,7 +880,6 @@ namespace bgfx { namespace mtl , m_vshConstantBufferAlignmentMask(0) , m_fshConstantBufferSize(0) , m_fshConstantBufferAlignmentMask(0) - , m_samplerCount(0) , m_numPredefined(0) , m_rps(NULL) , m_cps(NULL) @@ -895,6 +887,8 @@ namespace bgfx { namespace mtl m_numThreads[0] = 1; m_numThreads[1] = 1; m_numThreads[2] = 1; + for(uint32_t i=0; i 0 && NULL != arg.bufferStructType) + { + const char* name = utf8String(arg.name); + + if (arg.index >= BGFX_CONFIG_MAX_TEXTURE_SAMPLERS) + { + BX_WARN(false, "Binding index is too large %d max is %d. User defined uniform '%s' won't be set.", int(arg.index - 1), BGFX_CONFIG_MAX_TEXTURE_SAMPLERS - 1, name); + } + else + { + ps->m_bindingTypes[arg.index-1] = fragmentBit ? PipelineStateMtl::BindToFragmentShader : PipelineStateMtl::BindToVertexShader; + BX_TRACE("buffer %s index:%d", name, uint32_t(arg.index-1) ); + } + } else if (arg.type == MTLArgumentTypeTexture) { const char* name = utf8String(arg.name); @@ -1861,16 +1875,13 @@ namespace bgfx { namespace mtl if (NULL != info) { - if (ps->m_samplerCount >= BGFX_CONFIG_MAX_TEXTURE_SAMPLERS) + if (arg.index >= BGFX_CONFIG_MAX_TEXTURE_SAMPLERS) { - BX_WARN(NULL != info, "Too many samplers in shader(only %d is supported). User defined uniform '%s' won't be set.", BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, name); + BX_WARN(false, "Binding index is too large %d max is %d. User defined uniform '%s' won't be set.", int(arg.index), BGFX_CONFIG_MAX_TEXTURE_SAMPLERS - 1, name); } else { - ps->m_samplers[ps->m_samplerCount].m_index = uint32_t(arg.index); - ps->m_samplers[ps->m_samplerCount].m_uniform = info->m_handle; - ps->m_samplers[ps->m_samplerCount].m_fragment = fragmentBit ? 1 : 0; - ++ps->m_samplerCount; + ps->m_bindingTypes[arg.index] = fragmentBit ? PipelineStateMtl::BindToFragmentShader : PipelineStateMtl::BindToVertexShader; BX_TRACE("texture %s %d index:%d", name, info->m_handle, uint32_t(arg.index) ); } } @@ -3696,6 +3707,7 @@ namespace bgfx { namespace mtl uint8_t primIndex = uint8_t(primType>>BGFX_STATE_PT_SHIFT); PrimInfo prim = s_primInfo[primIndex]; const uint32_t maxComputeBindings = g_caps.limits.maxComputeBindings; + const uint32_t maxTextureSamplers = g_caps.limits.maxTextureSamplers; RenderCommandEncoder rce; PipelineStateMtl* currentPso = NULL; @@ -4379,28 +4391,46 @@ namespace bgfx { namespace mtl if (isValid(currentProgram) ) { - for (uint32_t sampler = 0, numSamplers = currentPso->m_samplerCount; sampler < numSamplers; ++sampler) + uint8_t* bindingTypes = currentPso->m_bindingTypes; + for (uint8_t stage = 0; stage < maxTextureSamplers; ++stage) { - const SamplerInfo& samplerInfo = currentPso->m_samplers[sampler]; - - UniformHandle handle = samplerInfo.m_uniform; - int stage = *( (int*)m_uniforms[handle.idx]); - const Binding& bind = renderBind.m_bind[stage]; Binding& current = currentBind.m_bind[stage]; - if (current.m_idx != bind.m_idx - || current.m_samplerFlags != bind.m_samplerFlags - || programChanged) + || current.m_type != bind.m_type + || current.m_samplerFlags != bind.m_samplerFlags + || programChanged) { if (kInvalidHandle != bind.m_idx) { - TextureMtl& texture = m_textures[bind.m_idx]; - texture.commit(samplerInfo.m_index - , !samplerInfo.m_fragment - , samplerInfo.m_fragment - , bind.m_samplerFlags - ); + switch (bind.m_type) + { + case Binding::Texture: + { + TextureMtl& texture = m_textures[bind.m_idx]; + texture.commit(stage + , 0 != (bindingTypes[stage] & PipelineStateMtl::BindToVertexShader) + , 0 != (bindingTypes[stage] & PipelineStateMtl::BindToFragmentShader) + , bind.m_samplerFlags + ); + } + break; + + case Binding::IndexBuffer: + case Binding::VertexBuffer: + { + const BufferMtl& buffer = Binding::IndexBuffer == bind.m_type + ? m_indexBuffers[bind.m_idx] + : m_vertexBuffers[bind.m_idx] + ; + + if (0 != (bindingTypes[stage] & PipelineStateMtl::BindToVertexShader)) + rce.setVertexBuffer(buffer.m_ptr, 0, stage + 1); + if (0 != (bindingTypes[stage] & PipelineStateMtl::BindToFragmentShader)) + rce.setFragmentBuffer(buffer.m_ptr, 0, stage + 1); + } + break; + } } }