1 /*
2  * Copyright (C) 2018-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #pragma once
9 #include "CL/cl_ext_intel.h"
10 
11 namespace NEO {
12 
13 enum PerformanceHints {
14     CL_BUFFER_DOESNT_MEET_ALIGNMENT_RESTRICTIONS,
15     CL_BUFFER_MEETS_ALIGNMENT_RESTRICTIONS,
16     CL_BUFFER_NEEDS_ALLOCATE_MEMORY,
17     CL_IMAGE_MEETS_ALIGNMENT_RESTRICTIONS,
18     DRIVER_CALLS_INTERNAL_CL_FLUSH,
19     PROFILING_ENABLED,
20     PROFILING_ENABLED_WITH_DISABLED_PREEMPTION,
21     SUBBUFFER_SHARES_MEMORY,
22     CL_SVM_ALLOC_MEETS_ALIGNMENT_RESTRICTIONS,
23     CL_ENQUEUE_READ_BUFFER_REQUIRES_COPY_DATA,
24     CL_ENQUEUE_READ_BUFFER_DOESNT_REQUIRE_COPY_DATA,
25     CL_ENQUEUE_READ_BUFFER_DOESNT_MEET_ALIGNMENT_RESTRICTIONS,
26     CL_ENQUEUE_READ_BUFFER_RECT_REQUIRES_COPY_DATA,
27     CL_ENQUEUE_READ_BUFFER_RECT_DOESNT_REQUIRES_COPY_DATA,
28     CL_ENQUEUE_READ_BUFFER_RECT_DOESNT_MEET_ALIGNMENT_RESTRICTIONS,
29     CL_ENQUEUE_WRITE_BUFFER_REQUIRES_COPY_DATA,
30     CL_ENQUEUE_WRITE_BUFFER_DOESNT_REQUIRE_COPY_DATA,
31     CL_ENQUEUE_WRITE_BUFFER_RECT_REQUIRES_COPY_DATA,
32     CL_ENQUEUE_WRITE_BUFFER_RECT_DOESNT_REQUIRE_COPY_DATA,
33     CL_ENQUEUE_READ_IMAGE_DOESNT_MEET_ALIGNMENT_RESTRICTIONS,
34     CL_ENQUEUE_READ_IMAGE_DOESNT_REQUIRES_COPY_DATA,
35     CL_ENQUEUE_WRITE_IMAGE_REQUIRES_COPY_DATA,
36     CL_ENQUEUE_WRITE_IMAGE_DOESNT_REQUIRES_COPY_DATA,
37     CL_ENQUEUE_MAP_BUFFER_REQUIRES_COPY_DATA,
38     CL_ENQUEUE_MAP_BUFFER_DOESNT_REQUIRE_COPY_DATA,
39     CL_ENQUEUE_MAP_IMAGE_REQUIRES_COPY_DATA,
40     CL_ENQUEUE_MAP_IMAGE_DOESNT_REQUIRE_COPY_DATA,
41     CL_ENQUEUE_UNMAP_MEM_OBJ_DOESNT_REQUIRE_COPY_DATA,
42     CL_ENQUEUE_UNMAP_MEM_OBJ_REQUIRES_COPY_DATA,
43     CL_ENQUEUE_SVM_MAP_DOESNT_REQUIRE_COPY_DATA,
44     PRINTF_DETECTED_IN_KERNEL,
45     NULL_LOCAL_WORKGROUP_SIZE,
46     BAD_LOCAL_WORKGROUP_SIZE,
47     REGISTER_PRESSURE_TOO_HIGH,
48     PRIVATE_MEMORY_USAGE_TOO_HIGH,
49     KERNEL_REQUIRES_COHERENCY,
50     KERNEL_ARGUMENT_AUX_TRANSLATION,
51     KERNEL_ALLOCATION_AUX_TRANSLATION,
52     BUFFER_IS_COMPRESSED,
53     BUFFER_IS_NOT_COMPRESSED,
54     IMAGE_IS_COMPRESSED,
55     IMAGE_IS_NOT_COMPRESSED
56 };
57 
58 class DriverDiagnostics {
59   public:
60     DriverDiagnostics(cl_diagnostics_verbose_level level);
61     bool validFlags(cl_diagnostics_verbose_level flags) const;
62     ~DriverDiagnostics() = default;
63     static const char *const hintFormat[];
64     static const cl_int maxHintStringSize = 1024;
65     PerformanceHints obtainHintForTransferOperation(cl_command_type commandType, bool transferRequired);
66 
67   protected:
68     cl_diagnostics_verbose_level verboseLevel;
69 };
70 } // namespace NEO
71