// TODO(umar): Check linkage capabilities for function declarations // TODO(umar): Better error messages // NOTE: This function does not handle CFG related validation // Performs logical layout validation. See Section 2.4 spv_result_t ModuleLayoutPass(ValidationState_t& _, const spv_parsed_instruction_t* inst) { if (_.is_enabled(SPV_VALIDATE_LAYOUT_BIT)) { SpvOp opcode = inst->opcode; switch (_.getLayoutSection()) { case kLayoutCapabilities: case kLayoutExtensions: case kLayoutExtInstImport: case kLayoutMemoryModel: case kLayoutEntryPoint: case kLayoutExecutionMode: case kLayoutDebug1: case kLayoutDebug2: case kLayoutAnnotations: case kLayoutTypes: spvCheckReturn(ModuleScopedInstructions(_, inst, opcode)); break; case kLayoutFunctionDeclarations: case kLayoutFunctionDefinitions: spvCheckReturn(FunctionScopedInstructions(_, inst, opcode)); break; } // switch(getLayoutSection()) } return SPV_SUCCESS; }
// TODO(umar): Check linkage capabilities for function declarations // TODO(umar): Better error messages // NOTE: This function does not handle CFG related validation // Performs logical layout validation. See Section 2.4 spv_result_t ModuleLayoutPass(ValidationState_t& _, const Instruction* inst) { const SpvOp opcode = inst->opcode(); switch (_.current_layout_section()) { case kLayoutCapabilities: case kLayoutExtensions: case kLayoutExtInstImport: case kLayoutMemoryModel: case kLayoutEntryPoint: case kLayoutExecutionMode: case kLayoutDebug1: case kLayoutDebug2: case kLayoutDebug3: case kLayoutAnnotations: case kLayoutTypes: if (auto error = ModuleScopedInstructions(_, inst, opcode)) return error; break; case kLayoutFunctionDeclarations: case kLayoutFunctionDefinitions: if (auto error = FunctionScopedInstructions(_, inst, opcode)) { return error; } break; } return SPV_SUCCESS; }