public IntPtr GetInlineUniformMember(string name, out InlineUniformBlock inlineUniformBlock) { if (inlineUniformBlocks != null) { foreach (var block in inlineUniformBlocks) { foreach (var member in block.resourceInfo.members) { if (member.name == name) { inlineUniformBlock = block; return(block.data + member.offset); } } } } inlineUniformBlock = null; return(IntPtr.Zero); }
public void Init(PipelineLayout pipelineLayout) { this.pipelineLayout = pipelineLayout; int count = pipelineLayout.ResourceLayout.Length; ResourceSet = new DescriptorSet[count]; if (count <= 0) { return; } for (int i = 0; i < count; i++) { ResourceSet[i] = new DescriptorSet(pipelineLayout.ResourceLayout[i]); var resLayout = pipelineLayout.ResourceLayout[i]; foreach (var binding in resLayout.Bindings) { if (binding.IsInlineUniformBlock && binding.resourceInfo != null) { if (inlineUniformBlocks == null) { inlineUniformBlocks = new List <InlineUniformBlock>(); } var inlineUniformBlock = new InlineUniformBlock(binding.resourceInfo); inlineUniformBlock.descriptorSet = ResourceSet[i]; ResourceSet[i].Bind(binding.binding, inlineUniformBlock); inlineUniformBlocks.Add(inlineUniformBlock); } } } if (pipelineLayout.PushConstantNames != null) { for (int i = 0; i < pipelineLayout.PushConstantNames.Count; i++) { var constName = pipelineLayout.PushConstantNames[i]; if (constName.StartsWith("g_")) { continue; } var pushConst = pipelineLayout.PushConstant[i]; if (pushConst.offset + pushConst.size > Device.MaxPushConstantsSize) { Log.Error("PushConst out of range" + constName); continue; } if (pushConst.offset < minPushConstRange) { minPushConstRange = pushConst.offset; } if (pushConst.offset + pushConst.size > maxPushConstRange) { maxPushConstRange = pushConst.offset + pushConst.size; } } } }