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