1 /*
2  * Copyright (C) 2018-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #pragma once
9 #include <cstddef>
10 #include <cstdint>
11 
12 namespace NEO {
13 
14 enum class MemoryCompressionState;
15 class GmmHelper;
16 class IndirectHeap;
17 class LinearStream;
18 struct DispatchFlags;
19 
20 template <typename GfxFamily>
21 struct StateBaseAddressHelper {
22     using STATE_BASE_ADDRESS = typename GfxFamily::STATE_BASE_ADDRESS;
23 
24     static void programStateBaseAddress(
25         STATE_BASE_ADDRESS *stateBaseAddress,
26         const IndirectHeap *dsh,
27         const IndirectHeap *ioh,
28         const IndirectHeap *ssh,
29         uint64_t generalStateBase,
30         bool setGeneralStateBaseAddress,
31         uint32_t statelessMocsIndex,
32         uint64_t indirectObjectHeapBaseAddress,
33         uint64_t instructionHeapBaseAddress,
34         uint64_t globalHeapsBaseAddress,
35         bool setInstructionStateBaseAddress,
36         bool useGlobalHeapsBaseAddress,
37         GmmHelper *gmmHelper,
38         bool isMultiOsContextCapable,
39         MemoryCompressionState memoryCompressionState,
40         bool useGlobalAtomics,
41         bool areMultipleSubDevicesInContext);
42 
43     static void appendIohParameters(STATE_BASE_ADDRESS *stateBaseAddress, const IndirectHeap *ioh, bool useGlobalHeapsBaseAddress, uint64_t indirectObjectHeapBaseAddress);
44 
45     static void appendStateBaseAddressParameters(
46         STATE_BASE_ADDRESS *stateBaseAddress,
47         const IndirectHeap *ssh,
48         bool setGeneralStateBaseAddress,
49         uint64_t indirectObjectHeapBaseAddress,
50         GmmHelper *gmmHelper,
51         bool isMultiOsContextCapable,
52         MemoryCompressionState memoryCompressionState,
53         bool overrideBindlessSurfaceStateBase,
54         bool useGlobalAtomics,
55         bool areMultipleSubDevicesInContext);
56 
57     static void appendExtraCacheSettings(STATE_BASE_ADDRESS *stateBaseAddress, GmmHelper *gmmHelper);
58 
59     static void programBindingTableBaseAddress(LinearStream &commandStream, const IndirectHeap &ssh, GmmHelper *gmmHelper);
60 
61     static uint32_t getMaxBindlessSurfaceStates();
62 };
63 } // namespace NEO
64