1 /*
2  * Copyright (C) 2020-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #pragma once
9 
10 #include "level_zero/core/source/cmdlist/cmdlist_hw.h"
11 
12 namespace L0 {
13 
14 struct EventPool;
15 struct Event;
16 constexpr size_t maxImmediateCommandSize = 4 * MemoryConstants::kiloByte;
17 
18 template <GFXCORE_FAMILY gfxCoreFamily>
19 struct CommandListCoreFamilyImmediate : public CommandListCoreFamily<gfxCoreFamily> {
20     using BaseClass = CommandListCoreFamily<gfxCoreFamily>;
21     using BaseClass::executeCommandListImmediate;
22 
23     using BaseClass::BaseClass;
24 
25     ze_result_t appendLaunchKernel(ze_kernel_handle_t hKernel,
26                                    const ze_group_count_t *pThreadGroupDimensions,
27                                    ze_event_handle_t hEvent, uint32_t numWaitEvents,
28                                    ze_event_handle_t *phWaitEvents) override;
29 
30     ze_result_t appendLaunchKernelIndirect(ze_kernel_handle_t hKernel,
31                                            const ze_group_count_t *pDispatchArgumentsBuffer,
32                                            ze_event_handle_t hEvent, uint32_t numWaitEvents,
33                                            ze_event_handle_t *phWaitEvents) override;
34 
35     ze_result_t appendBarrier(ze_event_handle_t hSignalEvent,
36                               uint32_t numWaitEvents,
37                               ze_event_handle_t *phWaitEvents) override;
38 
39     ze_result_t appendMemoryCopy(void *dstptr,
40                                  const void *srcptr,
41                                  size_t size,
42                                  ze_event_handle_t hSignalEvent,
43                                  uint32_t numWaitEvents,
44                                  ze_event_handle_t *phWaitEvents) override;
45 
46     ze_result_t appendMemoryCopyRegion(void *dstPtr,
47                                        const ze_copy_region_t *dstRegion,
48                                        uint32_t dstPitch,
49                                        uint32_t dstSlicePitch,
50                                        const void *srcPtr,
51                                        const ze_copy_region_t *srcRegion,
52                                        uint32_t srcPitch,
53                                        uint32_t srcSlicePitch,
54                                        ze_event_handle_t hSignalEvent,
55                                        uint32_t numWaitEvents,
56                                        ze_event_handle_t *phWaitEvents) override;
57 
58     ze_result_t appendMemoryFill(void *ptr, const void *pattern,
59                                  size_t patternSize, size_t size,
60                                  ze_event_handle_t hSignalEvent,
61                                  uint32_t numWaitEvents,
62                                  ze_event_handle_t *phWaitEvents) override;
63 
64     ze_result_t appendSignalEvent(ze_event_handle_t hEvent) override;
65 
66     ze_result_t appendEventReset(ze_event_handle_t hEvent) override;
67 
68     ze_result_t appendPageFaultCopy(NEO::GraphicsAllocation *dstAllocation,
69                                     NEO::GraphicsAllocation *srcAllocation,
70                                     size_t size, bool flushHost) override;
71 
72     ze_result_t appendWaitOnEvents(uint32_t numEvents, ze_event_handle_t *phEvent) override;
73 
74     ze_result_t appendWriteGlobalTimestamp(uint64_t *dstptr, ze_event_handle_t hSignalEvent,
75                                            uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents) override;
76 
77     ze_result_t appendMemoryCopyFromContext(void *dstptr, ze_context_handle_t hContextSrc, const void *srcptr,
78                                             size_t size, ze_event_handle_t hSignalEvent,
79                                             uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents) override;
80 
81     ze_result_t appendImageCopyFromMemory(ze_image_handle_t hDstImage,
82                                           const void *srcPtr,
83                                           const ze_image_region_t *pDstRegion,
84                                           ze_event_handle_t hEvent,
85                                           uint32_t numWaitEvents,
86                                           ze_event_handle_t *phWaitEvents) override;
87 
88     ze_result_t appendImageCopyToMemory(void *dstPtr,
89                                         ze_image_handle_t hSrcImage,
90                                         const ze_image_region_t *pSrcRegion,
91                                         ze_event_handle_t hEvent,
92                                         uint32_t numWaitEvents,
93                                         ze_event_handle_t *phWaitEvents) override;
94 
95     ze_result_t appendImageCopy(
96         ze_image_handle_t dst, ze_image_handle_t src,
97         ze_event_handle_t hEvent,
98         uint32_t numWaitEvents,
99         ze_event_handle_t *phWaitEvents) override;
100 
101     ze_result_t appendImageCopyRegion(ze_image_handle_t hDstImage,
102                                       ze_image_handle_t hSrcImage,
103                                       const ze_image_region_t *pDstRegion,
104                                       const ze_image_region_t *pSrcRegion,
105                                       ze_event_handle_t hEvent,
106                                       uint32_t numWaitEvents,
107                                       ze_event_handle_t *phWaitEvents) override;
108 
109     ze_result_t executeCommandListImmediateWithFlushTask(bool performMigration);
110 
111     void checkAvailableSpace();
112 
113   protected:
114     size_t cmdListBBEndOffset = 0;
115 };
116 
117 template <PRODUCT_FAMILY gfxProductFamily>
118 struct CommandListImmediateProductFamily;
119 
120 } // namespace L0
121