|
1 | 1 | /*
|
2 |
| - * Copyright (C) 2018-2023 Intel Corporation |
| 2 | + * Copyright (C) 2018-2024 Intel Corporation |
3 | 3 | *
|
4 | 4 | * SPDX-License-Identifier: MIT
|
5 | 5 | *
|
@@ -1776,6 +1776,66 @@ HWTEST_F(KernelResidencyTest, givenKernelWithNoKernelArgLoadNorKernelArgStoreNor
|
1776 | 1776 | memoryManager->freeGraphicsMemory(pKernelInfo->kernelAllocation);
|
1777 | 1777 | }
|
1778 | 1778 |
|
| 1779 | +HWTEST_F(KernelResidencyTest, givenKernelWithExternalFunctionWithIndirectAccessAndDetectIndirectAccessInKernelEnabledThenKernelHasIndirectAccessIsSetToTrue) { |
| 1780 | + DebugManagerStateRestore restorer; |
| 1781 | + debugManager.flags.DetectIndirectAccessInKernel.set(1); |
| 1782 | + auto pKernelInfo = std::make_unique<KernelInfo>(); |
| 1783 | + pKernelInfo->kernelDescriptor.kernelAttributes.simdSize = 1; |
| 1784 | + pKernelInfo->kernelDescriptor.kernelAttributes.hasNonKernelArgLoad = false; |
| 1785 | + pKernelInfo->kernelDescriptor.kernelAttributes.hasNonKernelArgStore = false; |
| 1786 | + pKernelInfo->kernelDescriptor.kernelAttributes.hasNonKernelArgAtomic = false; |
| 1787 | + pKernelInfo->kernelDescriptor.kernelAttributes.hasIndirectStatelessAccess = false; |
| 1788 | + pKernelInfo->kernelDescriptor.kernelAttributes.flags.useStackCalls = true; |
| 1789 | + |
| 1790 | + auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>(); |
| 1791 | + commandStreamReceiver.storeMakeResidentAllocations = true; |
| 1792 | + |
| 1793 | + auto memoryManager = commandStreamReceiver.getMemoryManager(); |
| 1794 | + pKernelInfo->kernelAllocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{pDevice->getRootDeviceIndex(), MemoryConstants::pageSize}); |
| 1795 | + |
| 1796 | + MockProgram program(toClDeviceVector(*pClDevice)); |
| 1797 | + MockContext ctx; |
| 1798 | + program.setContext(&ctx); |
| 1799 | + program.buildInfos[pDevice->getRootDeviceIndex()].globalSurface = new MockGraphicsAllocation(); |
| 1800 | + program.functionPointerWithIndirectAccessExists = true; |
| 1801 | + std::unique_ptr<MockKernel> kernel(new MockKernel(&program, *pKernelInfo, *pClDevice)); |
| 1802 | + ASSERT_EQ(CL_SUCCESS, kernel->initialize()); |
| 1803 | + |
| 1804 | + EXPECT_TRUE(kernel->getHasIndirectAccess()); |
| 1805 | + |
| 1806 | + memoryManager->freeGraphicsMemory(pKernelInfo->kernelAllocation); |
| 1807 | +} |
| 1808 | + |
| 1809 | +HWTEST_F(KernelResidencyTest, givenKernelWithExternalFunctionWithIndirectAccessButNoUseStackCallsAndDetectIndirectAccessInKernelEnabledThenKernelHasIndirectAccessIsSetToFalse) { |
| 1810 | + DebugManagerStateRestore restorer; |
| 1811 | + debugManager.flags.DetectIndirectAccessInKernel.set(1); |
| 1812 | + auto pKernelInfo = std::make_unique<KernelInfo>(); |
| 1813 | + pKernelInfo->kernelDescriptor.kernelAttributes.simdSize = 1; |
| 1814 | + pKernelInfo->kernelDescriptor.kernelAttributes.hasNonKernelArgLoad = false; |
| 1815 | + pKernelInfo->kernelDescriptor.kernelAttributes.hasNonKernelArgStore = false; |
| 1816 | + pKernelInfo->kernelDescriptor.kernelAttributes.hasNonKernelArgAtomic = false; |
| 1817 | + pKernelInfo->kernelDescriptor.kernelAttributes.hasIndirectStatelessAccess = false; |
| 1818 | + pKernelInfo->kernelDescriptor.kernelAttributes.flags.useStackCalls = false; |
| 1819 | + |
| 1820 | + auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>(); |
| 1821 | + commandStreamReceiver.storeMakeResidentAllocations = true; |
| 1822 | + |
| 1823 | + auto memoryManager = commandStreamReceiver.getMemoryManager(); |
| 1824 | + pKernelInfo->kernelAllocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{pDevice->getRootDeviceIndex(), MemoryConstants::pageSize}); |
| 1825 | + |
| 1826 | + MockProgram program(toClDeviceVector(*pClDevice)); |
| 1827 | + MockContext ctx; |
| 1828 | + program.setContext(&ctx); |
| 1829 | + program.buildInfos[pDevice->getRootDeviceIndex()].globalSurface = new MockGraphicsAllocation(); |
| 1830 | + program.functionPointerWithIndirectAccessExists = true; |
| 1831 | + std::unique_ptr<MockKernel> kernel(new MockKernel(&program, *pKernelInfo, *pClDevice)); |
| 1832 | + ASSERT_EQ(CL_SUCCESS, kernel->initialize()); |
| 1833 | + |
| 1834 | + EXPECT_FALSE(kernel->getHasIndirectAccess()); |
| 1835 | + |
| 1836 | + memoryManager->freeGraphicsMemory(pKernelInfo->kernelAllocation); |
| 1837 | +} |
| 1838 | + |
1779 | 1839 | HWTEST_F(KernelResidencyTest, givenKernelWithPtrByValueArgumentAndDetectIndirectAccessInKernelEnabledThenKernelHasIndirectAccessIsSetToTrue) {
|
1780 | 1840 | DebugManagerStateRestore restorer;
|
1781 | 1841 | debugManager.flags.DetectIndirectAccessInKernel.set(1);
|
|
0 commit comments