Example #1
0
        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);
        }
Example #2
0
        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));
            }
        }