/* * Copyright (C) 2021-2022 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "shared/source/kernel/kernel_arg_descriptor_extended_vme.h" #include "shared/source/program/kernel_info.h" #include "patch_g7.h" #include "patch_list.h" #include namespace NEO { class MockKernelInfo : public KernelInfo { public: void addArgAccelerator(uint32_t index, SurfaceStateHeapOffset bindful = undefined, CrossThreadDataOffset mbBlockType = undefined, CrossThreadDataOffset sadAdjustMode = undefined, CrossThreadDataOffset searchPathType = undefined, CrossThreadDataOffset subpixelMode = undefined); void addArgBuffer(uint32_t index, CrossThreadDataOffset stateless = undefined, uint8_t pointerSize = 0, SurfaceStateHeapOffset bindful = undefined, CrossThreadDataOffset bindless = undefined); void addArgDevQueue(uint32_t index, CrossThreadDataOffset stateless = undefined, uint8_t pointerSize = 0, SurfaceStateHeapOffset bindful = undefined); void addArgImage(uint32_t index, SurfaceStateHeapOffset offset = undefined, uint32_t type = iOpenCL::IMAGE_MEMORY_OBJECT_2D, bool isTransformable = false); void addArgImmediate(uint32_t index, uint16_t size = 0, CrossThreadDataOffset offset = undefined, uint16_t sourceOffset = 0, bool isDataParameterKernelArgument = false); void addArgLocal(uint32_t index, CrossThreadDataOffset slmOffset, uint8_t requiredSlmAlignment); void addArgPipe(uint32_t index, CrossThreadDataOffset stateless = undefined, uint8_t pointerSize = 0, SurfaceStateHeapOffset bindful = undefined); void addArgSampler(uint32_t index, SurfaceStateHeapOffset bindful = undefined, CrossThreadDataOffset addressingMode = undefined, CrossThreadDataOffset normalizedCoords = undefined, CrossThreadDataOffset snapWa = undefined); inline ArgDescriptor &argAt(uint32_t index) { return kernelDescriptor.payloadMappings.explicitArgs[index]; } inline ArgDescPointer &argAsPtr(uint32_t index) { return argAt(index).as(); } inline ArgDescImage &argAsImg(uint32_t index) { return argAt(index).as(); } inline ArgDescSampler &argAsSmp(uint32_t index) { return argAt(index).as(); } inline ArgDescValue &argAsVal(uint32_t index) { return argAt(index).as(); } inline void setAddressQualifier(uint32_t index, uint8_t addressQualifier) { argAt(index).getTraits().addressQualifier = addressQualifier; } inline void setAccessQualifier(uint32_t index, uint8_t accessQualifier) { argAt(index).getTraits().accessQualifier = accessQualifier; } inline void setArgByValSize(uint32_t index, uint16_t argByValSize) { argAt(index).getTraits().argByValSize = argByValSize; } inline void setTypeQualifier(uint32_t index, KernelArgMetadata::TypeQualifiers typeQualifiers) { argAt(index).getTraits().typeQualifiers = typeQualifiers; } inline void setBufferStateful(uint32_t index, bool stateful = true) { argAsPtr(index).accessedUsingStatelessAddressingMode = !stateful; } inline void setBufferAddressingMode(KernelDescriptor::AddressingMode addresingMode) { kernelDescriptor.kernelAttributes.bufferAddressingMode = addresingMode; } inline void setImageAddressingMode(KernelDescriptor::AddressingMode addressingMode) { kernelDescriptor.kernelAttributes.imageAddressingMode = addressingMode; } inline void setCrossThreadDataSize(uint16_t crossThreadDataSize) { kernelDescriptor.kernelAttributes.crossThreadDataSize = crossThreadDataSize; } void addExtendedMetadata(uint32_t index, const std::string &argName = "", const std::string &type = "", const std::string &accessQualifier = "", const std::string &addressQualifier = "", const std::string &typeQualifiers = ""); inline void addToPrintfStringsMap(uint32_t index, const std::string &string) { kernelDescriptor.kernelAttributes.flags.usesStringMapForPrintf = true; kernelDescriptor.kernelMetadata.printfStringsMap.insert(std::make_pair(index, string)); } void setPrintfSurface(uint8_t dataParamSize = sizeof(uintptr_t), CrossThreadDataOffset crossThreadDataOffset = undefined, SurfaceStateHeapOffset sshOffset = undefined); void setBindingTable(SurfaceStateHeapOffset tableOffset, uint8_t numEntries); void setGlobalVariablesSurface(uint8_t pointerSize, CrossThreadDataOffset stateless, SurfaceStateHeapOffset bindful = undefined); void setDeviceSideEnqueueEventPoolSurface(uint8_t pointerSize, CrossThreadDataOffset stateless, SurfaceStateHeapOffset bindful = undefined); void setDeviceSideEnqueueDefaultQueueSurface(uint8_t pointerSize, CrossThreadDataOffset stateless, SurfaceStateHeapOffset bindful = undefined); void setGlobalConstantsSurface(uint8_t pointerSize, CrossThreadDataOffset stateless, SurfaceStateHeapOffset bindful = undefined); void setSyncBuffer(uint8_t pointerSize, CrossThreadDataOffset stateless, SurfaceStateHeapOffset bindful = undefined); void setPrivateMemory(uint32_t perThreadPrivateMemorySize, bool isSimtThread, uint8_t pointerSize, CrossThreadDataOffset stateless, SurfaceStateHeapOffset bindful = undefined); void setSamplerTable(DynamicStateHeapOffset borderColor, uint8_t numSamplers, DynamicStateHeapOffset tableOffset); void setPerThreadScratchSize(uint32_t perThreadScratchSize, uint32_t slot); void setLocalIds(const std::array &localIds); private: void addExtendedVmeDescriptor(uint32_t index, CrossThreadDataOffset mbBlockType, CrossThreadDataOffset sadAdjustMode, CrossThreadDataOffset searchPathType, CrossThreadDataOffset subpixelMode); void populatePointerArg(ArgDescPointer &arg, uint8_t pointerSize, CrossThreadDataOffset stateless, SurfaceStateHeapOffset bindful); void resizeArgsIfIndexTooBig(uint32_t index); }; } // namespace NEO