internal static unsafe ReflectBlockVariable[] ToManaged(SpirvReflectNative.SpvReflectBlockVariable **push_consts, uint var_count) { ReflectBlockVariable[] blockVars = new ReflectBlockVariable[var_count]; for (int i = 0; i < var_count; i++) { var blockVarNative = push_consts[i]; var block = *blockVarNative; ReflectBlockVariable variable = new ReflectBlockVariable(); PopulateReflectBlockVariable(ref block, ref variable); variable.Members = ToManagedArray(block.members, block.member_count); blockVars[i] = variable; } return(blockVars); }
public unsafe ReflectBlockVariable[] EnumeratePushConstants() { fixed(SpirvReflectNative.SpvReflectShaderModule *inmodule = &NativeShaderModule) { uint var_count = 0; var result = SpirvReflectNative.spvReflectEnumeratePushConstants(inmodule, &var_count, null); SpirvReflectUtils.Assert(result == SpirvReflectNative.SpvReflectResult.SPV_REFLECT_RESULT_SUCCESS); SpirvReflectNative.SpvReflectBlockVariable **push_consts = stackalloc SpirvReflectNative.SpvReflectBlockVariable *[(int)(var_count * sizeof(SpirvReflectNative.SpvReflectBlockVariable))]; result = SpirvReflectNative.spvReflectEnumeratePushConstants(inmodule, &var_count, push_consts); SpirvReflectUtils.Assert(result == SpirvReflectNative.SpvReflectResult.SPV_REFLECT_RESULT_SUCCESS); // Convert to managed return(ReflectBlockVariable.ToManaged(push_consts, var_count)); } }