internal static unsafe ReflectInterfaceVariable[] ToManaged(SpirvReflectNative.SpvReflectInterfaceVariable **input_vars, uint var_count) { ReflectInterfaceVariable[] intf_vars = new ReflectInterfaceVariable[var_count]; for (int i = 0; i < var_count; i++) { var interfaceVarNative = input_vars[i]; var intf = *interfaceVarNative; ReflectInterfaceVariable variable = new ReflectInterfaceVariable(); PopulateReflectInterfaceVariable(ref intf, ref variable); variable.Members = ToManagedArray(intf.members, intf.member_count); intf_vars[i] = variable; } return(intf_vars); }
public unsafe ReflectInterfaceVariable[] EnumerateInterfaceVariables() { fixed(SpirvReflectNative.SpvReflectShaderModule *inmodule = &NativeShaderModule) { uint var_count = 0; var result = SpirvReflectNative.spvReflectEnumerateInterfaceVariables(inmodule, &var_count, null); SpirvReflectUtils.Assert(result == SpirvReflectNative.SpvReflectResult.SPV_REFLECT_RESULT_SUCCESS); SpirvReflectNative.SpvReflectInterfaceVariable **interface_vars = stackalloc SpirvReflectNative.SpvReflectInterfaceVariable *[(int)(var_count * sizeof(SpirvReflectNative.SpvReflectInterfaceVariable))]; result = SpirvReflectNative.spvReflectEnumerateInterfaceVariables(inmodule, &var_count, interface_vars); SpirvReflectUtils.Assert(result == SpirvReflectNative.SpvReflectResult.SPV_REFLECT_RESULT_SUCCESS); // Convert to managed return(ReflectInterfaceVariable.ToManaged(interface_vars, var_count)); } }