File: zel_certification_checker.cpp

package info (click to toggle)
level-zero 1.26.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,468 kB
  • sloc: cpp: 130,327; ansic: 16,197; python: 9,824; makefile: 4
file content (68 lines) | stat: -rw-r--r-- 2,740 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
 * Copyright (C) 2025 Intel Corporation
 *
 * SPDX-License-Identifier: MIT
 *
 * @file zel_certification_checker.cpp
 *
 */
#include "zel_certification_checker.h"
#include "ze_api.h"

namespace validation_layer {
class certificationChecker certification_checker;
using ze_checker = certificationChecker::ZEcertificationChecker;

certificationChecker::certificationChecker() {
  enablecertification = getenv_tobool("ZEL_ENABLE_CERTIFICATION_CHECKER");
  if (enablecertification) {
    certificationChecker::ZEcertificationChecker *zeChecker =
        new certificationChecker::ZEcertificationChecker;
    certificationChecker::ZEScertificationChecker *zesChecker =
        new certificationChecker::ZEScertificationChecker;
    certificationChecker::ZETcertificationChecker *zetChecker =
        new certificationChecker::ZETcertificationChecker;
    certificationChecker::ZERcertificationChecker *zerChecker =
        new certificationChecker::ZERcertificationChecker;
    ze_api_version_t certification_version = ZE_API_VERSION_CURRENT;
    const auto certification_version_string =
        getenv_string("ZEL_CERTIFICATION_CHECKER_VERSION");
    if (!certification_version_string.empty()) {
      const auto major = certification_version_string.substr(
          0, certification_version_string.find('.'));
      const auto minor = certification_version_string.substr(
          certification_version_string.find('.') + 1);
      certification_version = static_cast<ze_api_version_t>(
          ZE_MAKE_VERSION(std::stoi(major), std::stoi(minor)));
      globalCertificationState.default_mode = false;
    }
    globalCertificationState.certification_version = certification_version;
    certification_checker.zeValidation = zeChecker;
    certification_checker.zetValidation = zetChecker;
    certification_checker.zesValidation = zesChecker;
    certification_checker.zerValidation = zerChecker;
    validation_layer::context.getInstance().validationHandlers.push_back(
        &certification_checker);
  }
}

certificationChecker::~certificationChecker() {
  if (enablecertification) {
    delete certification_checker.zeValidation;
    delete certification_checker.zetValidation;
    delete certification_checker.zesValidation;
    delete certification_checker.zerValidation;
  }
}

ze_result_t ze_checker::zeDriverGetApiVersionEpilogue(
    ze_driver_handle_t hDriver, ze_api_version_t *version, ze_result_t result) {
  auto &globalCertificationState = GlobalCertificationState::getInstance();
  if (result == ZE_RESULT_SUCCESS && version != nullptr &&
      globalCertificationState.default_mode) {
    globalCertificationState.certification_version = *version;
  }
  return ZE_RESULT_SUCCESS;
}

} // namespace validation_layer