From 646c8985e802c93a959b2f9ac95def0d8d43b762 Mon Sep 17 00:00:00 2001 From: Mateusz Hoppe Date: Wed, 7 Jun 2023 14:52:08 +0000 Subject: [PATCH] refactor: store number of stateful args in KernelDescriptor Signed-off-by: Mateusz Hoppe --- .../unit_tests/sources/kernel/test_kernel.cpp | 2 +- .../zebin/zeinfo_decoder.cpp | 2 + shared/source/kernel/kernel_descriptor.h | 1 + .../kernel_descriptor_from_patchtokens.cpp | 34 ++++++----- shared/test/common/mocks/mock_kernel_info.cpp | 8 +-- .../zebin_decoder_tests.cpp | 56 +++++++++++++++++++ ...rnel_descriptor_from_patchtokens_tests.cpp | 16 ++++++ 7 files changed, 100 insertions(+), 19 deletions(-) diff --git a/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp b/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp index 7ecfa4a6e7..a9f081eb71 100644 --- a/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp +++ b/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp @@ -42,7 +42,7 @@ #include "level_zero/core/test/unit_tests/mocks/mock_module.h" namespace NEO { -void populatePointerKernelArg(ArgDescPointer &dst, +void populatePointerKernelArg(KernelDescriptor &desc, ArgDescPointer &dst, CrossThreadDataOffset stateless, uint8_t pointerSize, SurfaceStateHeapOffset bindful, CrossThreadDataOffset bindless, KernelDescriptor::AddressingMode addressingMode); } diff --git a/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp b/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp index df1e6a4b86..9b983590e9 100644 --- a/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp +++ b/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp @@ -1165,6 +1165,7 @@ DecodeError populateKernelPayloadArgument(NEO::KernelDescriptor &dst, const Kern sampler.bindful = maxIndirectSamplerStateSize + maxSamplerStateSize * src.samplerIndex; dst.payloadMappings.samplerTable.numSamplers = std::max(dst.payloadMappings.samplerTable.numSamplers, static_cast(src.samplerIndex + 1)); } + dst.kernelAttributes.numArgsStateful++; break; case Types::Kernel::PayloadArgument::MemoryAddressingModeStateless: if (false == dst.payloadMappings.explicitArgs[src.argIndex].is()) { @@ -1183,6 +1184,7 @@ DecodeError populateKernelPayloadArgument(NEO::KernelDescriptor &dst, const Kern } else { dst.payloadMappings.explicitArgs[src.argIndex].as(false).bindless = src.offset; } + dst.kernelAttributes.numArgsStateful++; break; case Types::Kernel::PayloadArgument::MemoryAddressingModeSharedLocalMemory: dst.payloadMappings.explicitArgs[src.argIndex].as(false).slmOffset = src.offset; diff --git a/shared/source/kernel/kernel_descriptor.h b/shared/source/kernel/kernel_descriptor.h index b6ae34f5b3..bdc2f42cc4 100644 --- a/shared/source/kernel/kernel_descriptor.h +++ b/shared/source/kernel/kernel_descriptor.h @@ -53,6 +53,7 @@ struct KernelDescriptor { uint16_t perThreadDataSize = 0U; uint16_t numArgsToPatch = 0U; uint16_t numGrfRequired = GrfConfig::DefaultGrfNumber; + uint16_t numArgsStateful = 0U; uint8_t barrierCount = 0u; bool hasNonKernelArgLoad = false; bool hasNonKernelArgStore = false; diff --git a/shared/source/kernel/kernel_descriptor_from_patchtokens.cpp b/shared/source/kernel/kernel_descriptor_from_patchtokens.cpp index 76ab71b0d3..822c756858 100644 --- a/shared/source/kernel/kernel_descriptor_from_patchtokens.cpp +++ b/shared/source/kernel/kernel_descriptor_from_patchtokens.cpp @@ -126,7 +126,7 @@ void populateKernelDescriptor(KernelDescriptor &dst, const SPatchKernelAttribute dst.kernelAttributes.flags.isInvalid = (attributes.find(invalidKernelAttrBeg.data()) != std::string::npos); } -void populatePointerKernelArg(ArgDescPointer &dst, +void populatePointerKernelArg(KernelDescriptor &kernelDesc, ArgDescPointer &dst, CrossThreadDataOffset stateless, uint8_t pointerSize, SurfaceStateHeapOffset bindful, CrossThreadDataOffset bindless, KernelDescriptor::AddressingMode addressingMode) { switch (addressingMode) { @@ -142,6 +142,7 @@ void populatePointerKernelArg(ArgDescPointer &dst, dst.stateless = stateless; dst.bindless = undefined; dst.pointerSize = pointerSize; + kernelDesc.kernelAttributes.numArgsStateful++; break; case KernelDescriptor::BindlessAndStateless: @@ -149,41 +150,42 @@ void populatePointerKernelArg(ArgDescPointer &dst, dst.stateless = stateless; dst.bindless = bindless; dst.pointerSize = pointerSize; + kernelDesc.kernelAttributes.numArgsStateful++; break; } } template -void populatePointerKernelArg(ArgDescPointer &dst, const TokenT &src, KernelDescriptor::AddressingMode addressingMode) { - populatePointerKernelArg(dst, src.DataParamOffset, src.DataParamSize, src.SurfaceStateHeapOffset, src.SurfaceStateHeapOffset, addressingMode); +void populatePointerKernelArg(KernelDescriptor &kernelDesc, ArgDescPointer &dst, const TokenT &src, KernelDescriptor::AddressingMode addressingMode) { + populatePointerKernelArg(kernelDesc, dst, src.DataParamOffset, src.DataParamSize, src.SurfaceStateHeapOffset, src.SurfaceStateHeapOffset, addressingMode); } void populateKernelDescriptor(KernelDescriptor &dst, const SPatchAllocateStatelessPrivateSurface &token) { dst.kernelAttributes.flags.usesPrivateMemory = true; dst.kernelAttributes.perHwThreadPrivateMemorySize = static_cast(PatchTokenBinary::getPerHwThreadPrivateSurfaceSize(token, dst.kernelAttributes.simdSize)); - populatePointerKernelArg(dst.payloadMappings.implicitArgs.privateMemoryAddress, token, dst.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(dst, dst.payloadMappings.implicitArgs.privateMemoryAddress, token, dst.kernelAttributes.bufferAddressingMode); } void populateKernelDescriptor(KernelDescriptor &dst, const SPatchAllocateStatelessConstantMemorySurfaceWithInitialization &token) { - populatePointerKernelArg(dst.payloadMappings.implicitArgs.globalConstantsSurfaceAddress, token, dst.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(dst, dst.payloadMappings.implicitArgs.globalConstantsSurfaceAddress, token, dst.kernelAttributes.bufferAddressingMode); } void populateKernelDescriptor(KernelDescriptor &dst, const SPatchAllocateStatelessGlobalMemorySurfaceWithInitialization &token) { - populatePointerKernelArg(dst.payloadMappings.implicitArgs.globalVariablesSurfaceAddress, token, dst.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(dst, dst.payloadMappings.implicitArgs.globalVariablesSurfaceAddress, token, dst.kernelAttributes.bufferAddressingMode); } void populateKernelDescriptor(KernelDescriptor &dst, const SPatchAllocateStatelessPrintfSurface &token) { dst.kernelAttributes.flags.usesPrintf = true; dst.kernelAttributes.flags.usesStringMapForPrintf = true; - populatePointerKernelArg(dst.payloadMappings.implicitArgs.printfSurfaceAddress, token, dst.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(dst, dst.payloadMappings.implicitArgs.printfSurfaceAddress, token, dst.kernelAttributes.bufferAddressingMode); } void populateKernelDescriptor(KernelDescriptor &dst, const SPatchAllocateStatelessEventPoolSurface &token) { - populatePointerKernelArg(dst.payloadMappings.implicitArgs.deviceSideEnqueueEventPoolSurfaceAddress, token, dst.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(dst, dst.payloadMappings.implicitArgs.deviceSideEnqueueEventPoolSurfaceAddress, token, dst.kernelAttributes.bufferAddressingMode); } void populateKernelDescriptor(KernelDescriptor &dst, const SPatchAllocateStatelessDefaultDeviceQueueSurface &token) { - populatePointerKernelArg(dst.payloadMappings.implicitArgs.deviceSideEnqueueDefaultQueueSurfaceAddress, token, dst.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(dst, dst.payloadMappings.implicitArgs.deviceSideEnqueueDefaultQueueSurfaceAddress, token, dst.kernelAttributes.bufferAddressingMode); } void populateKernelDescriptor(KernelDescriptor &dst, const SPatchAllocateSystemThreadSurface &token) { @@ -193,11 +195,11 @@ void populateKernelDescriptor(KernelDescriptor &dst, const SPatchAllocateSystemT void populateKernelDescriptor(KernelDescriptor &dst, const SPatchAllocateSyncBuffer &token) { dst.kernelAttributes.flags.usesSyncBuffer = true; - populatePointerKernelArg(dst.payloadMappings.implicitArgs.syncBufferAddress, token, dst.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(dst, dst.payloadMappings.implicitArgs.syncBufferAddress, token, dst.kernelAttributes.bufferAddressingMode); } void populateKernelDescriptor(KernelDescriptor &dst, const SPatchAllocateRTGlobalBuffer &token) { - populatePointerKernelArg(dst.payloadMappings.implicitArgs.rtDispatchGlobals, token, dst.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(dst, dst.payloadMappings.implicitArgs.rtDispatchGlobals, token, dst.kernelAttributes.bufferAddressingMode); } void populateKernelDescriptor(KernelDescriptor &dst, const SPatchString &token) { @@ -227,9 +229,11 @@ void populateKernelArgDescriptor(KernelDescriptor &dst, size_t argNum, const SPa auto &argImage = dst.payloadMappings.explicitArgs[argNum].as(true); if (KernelDescriptor::Bindful == dst.kernelAttributes.imageAddressingMode) { argImage.bindful = token.Offset; + dst.kernelAttributes.numArgsStateful++; } if (KernelDescriptor::Bindless == dst.kernelAttributes.imageAddressingMode) { argImage.bindless = token.Offset; + dst.kernelAttributes.numArgsStateful++; } if (token.Type == iOpenCL::IMAGE_MEMORY_OBJECT_2D_MEDIA) { @@ -273,9 +277,11 @@ void populateKernelArgDescriptor(KernelDescriptor &dst, size_t argNum, const SPa if (dst.kernelAttributes.bufferAddressingMode == KernelDescriptor::BindlessAndStateless) { argPointer.bindless = token.Offset; argPointer.bindful = undefined; + dst.kernelAttributes.numArgsStateful++; } else { argPointer.bindful = token.Offset; argPointer.bindless = undefined; + dst.kernelAttributes.numArgsStateful++; } argPointer.stateless = undefined; @@ -288,7 +294,7 @@ void populateKernelArgDescriptor(KernelDescriptor &dst, size_t argNum, const SPa auto &argPointer = dst.payloadMappings.explicitArgs[argNum].as(true); dst.payloadMappings.explicitArgs[argNum].getTraits().addressQualifier = KernelArgMetadata::AddrGlobal; - populatePointerKernelArg(argPointer, token, dst.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(dst, argPointer, token, dst.kernelAttributes.bufferAddressingMode); } void populateKernelArgDescriptor(KernelDescriptor &dst, size_t argNum, const SPatchStatelessConstantMemoryObjectKernelArgument &token) { @@ -297,7 +303,7 @@ void populateKernelArgDescriptor(KernelDescriptor &dst, size_t argNum, const SPa auto &argPointer = dst.payloadMappings.explicitArgs[argNum].as(true); dst.payloadMappings.explicitArgs[argNum].getTraits().addressQualifier = KernelArgMetadata::AddrConstant; - populatePointerKernelArg(argPointer, token, dst.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(dst, argPointer, token, dst.kernelAttributes.bufferAddressingMode); } void populateKernelArgDescriptor(KernelDescriptor &dst, size_t argNum, const SPatchStatelessDeviceQueueKernelArgument &token) { @@ -308,7 +314,7 @@ void populateKernelArgDescriptor(KernelDescriptor &dst, size_t argNum, const SPa dst.payloadMappings.explicitArgs[argNum].getExtendedTypeInfo().isDeviceQueue = true; - populatePointerKernelArg(argPointer, token, dst.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(dst, argPointer, token, dst.kernelAttributes.bufferAddressingMode); } void populateKernelArgDescriptor(KernelDescriptor &dst, size_t argNum, const SPatchDataParameterBuffer &token) { diff --git a/shared/test/common/mocks/mock_kernel_info.cpp b/shared/test/common/mocks/mock_kernel_info.cpp index f425ee6458..d6ddff8754 100644 --- a/shared/test/common/mocks/mock_kernel_info.cpp +++ b/shared/test/common/mocks/mock_kernel_info.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2022 Intel Corporation + * Copyright (C) 2021-2023 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -11,7 +11,7 @@ using namespace NEO; namespace NEO { -void populatePointerKernelArg(ArgDescPointer &dst, +void populatePointerKernelArg(KernelDescriptor &kernelDesc, ArgDescPointer &dst, CrossThreadDataOffset stateless, uint8_t pointerSize, SurfaceStateHeapOffset bindful, CrossThreadDataOffset bindless, KernelDescriptor::AddressingMode addressingMode); } @@ -29,7 +29,7 @@ void MockKernelInfo::addArgAccelerator(uint32_t index, SurfaceStateHeapOffset bi void MockKernelInfo::addArgBuffer(uint32_t index, CrossThreadDataOffset stateless, uint8_t pointerSize, SurfaceStateHeapOffset bindful, CrossThreadDataOffset bindless) { resizeArgsIfIndexTooBig(index); - populatePointerKernelArg(argAt(index).as(true), stateless, pointerSize, bindful, bindless, kernelDescriptor.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(kernelDescriptor, argAt(index).as(true), stateless, pointerSize, bindful, bindless, kernelDescriptor.kernelAttributes.bufferAddressingMode); } void MockKernelInfo::addArgDevQueue(uint32_t index, CrossThreadDataOffset stateless, uint8_t pointerSize, SurfaceStateHeapOffset bindful) { @@ -126,7 +126,7 @@ void MockKernelInfo::addExtendedVmeDescriptor(uint32_t index, CrossThreadDataOff } void MockKernelInfo::populatePointerArg(ArgDescPointer &arg, uint8_t pointerSize, CrossThreadDataOffset stateless, SurfaceStateHeapOffset bindful) { - populatePointerKernelArg(arg, stateless, pointerSize, bindful, bindful, kernelDescriptor.kernelAttributes.bufferAddressingMode); + populatePointerKernelArg(kernelDescriptor, arg, stateless, pointerSize, bindful, bindful, kernelDescriptor.kernelAttributes.bufferAddressingMode); } void MockKernelInfo::setPrintfSurface(uint8_t dataParamSize, CrossThreadDataOffset crossThreadDataOffset, SurfaceStateHeapOffset sshOffset) { diff --git a/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp b/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp index 0a027c3f25..f326c58ab2 100644 --- a/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp +++ b/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp @@ -1530,6 +1530,62 @@ kernels: EXPECT_EQ(KernelDescriptor::BindlessAndStateless, kernelDescriptor->kernelAttributes.bufferAddressingMode); } +TEST_F(decodeZeInfoKernelEntryTest, GivenStatefulArgsWhenDecodingZeInfoThenNumberOfStatefulArgsIsCorrect) { + ConstStringRef zeinfo = R"===( +kernels: + - name : some_kernel + execution_env: + simd_size: 8 + payload_arguments: + - arg_type: arg_bypointer + offset: 0 + size: 4 + arg_index: 0 + addrmode: bindless + addrspace: global + access_type: readwrite + - arg_type: arg_bypointer + offset: 8 + size: 4 + arg_index: 1 + addrmode: bindless + addrspace: global + access_type: readwrite +... +)==="; + auto err = decodeZeInfoKernelEntry(zeinfo); + EXPECT_EQ(NEO::DecodeError::Success, err); + + EXPECT_EQ(2u, kernelDescriptor->kernelAttributes.numArgsStateful); + + ConstStringRef zeinfo2 = R"===( +kernels: + - name : some_kernel + execution_env: + simd_size: 8 + payload_arguments: + - arg_type: arg_bypointer + offset: 0 + size: 4 + arg_index: 0 + addrmode: stateful + addrspace: global + access_type: readwrite + - arg_type: arg_bypointer + offset: 8 + size: 4 + arg_index: 1 + addrmode: stateful + addrspace: global + access_type: readwrite +... +)==="; + err = decodeZeInfoKernelEntry(zeinfo2); + EXPECT_EQ(NEO::DecodeError::Success, err); + + EXPECT_EQ(2u, kernelDescriptor->kernelAttributes.numArgsStateful); +} + TEST_F(decodeZeInfoKernelEntryTest, GivenBindlessImageAddressingWhenDecodingZeInfoThenImageAddressingModeIsBindless) { ConstStringRef zeinfo = R"===( kernels: diff --git a/shared/test/unit_test/kernel/kernel_descriptor_from_patchtokens_tests.cpp b/shared/test/unit_test/kernel/kernel_descriptor_from_patchtokens_tests.cpp index 977105a772..82fa28bc5b 100644 --- a/shared/test/unit_test/kernel/kernel_descriptor_from_patchtokens_tests.cpp +++ b/shared/test/unit_test/kernel/kernel_descriptor_from_patchtokens_tests.cpp @@ -272,6 +272,8 @@ TEST(KernelDescriptorFromPatchtokens, GivenImplicitArgsThenSetsProperPartsOfDesc EXPECT_EQ(privateSurface.DataParamSize, kernelDescriptor.payloadMappings.implicitArgs.privateMemoryAddress.pointerSize); EXPECT_EQ(privateSurface.SurfaceStateHeapOffset, kernelDescriptor.payloadMappings.implicitArgs.privateMemoryAddress.bindful); EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.privateMemoryAddress.bindless)); + EXPECT_EQ(1u, kernelDescriptor.kernelAttributes.numArgsStateful); + kernelDescriptor.kernelAttributes.numArgsStateful = 0; kernelTokens.tokens.allocateStatelessPrivateSurface = nullptr; EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.stateless)); @@ -288,6 +290,8 @@ TEST(KernelDescriptorFromPatchtokens, GivenImplicitArgsThenSetsProperPartsOfDesc EXPECT_EQ(constantSurface.DataParamSize, kernelDescriptor.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.pointerSize); EXPECT_EQ(constantSurface.SurfaceStateHeapOffset, kernelDescriptor.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.bindful); EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.bindless)); + EXPECT_EQ(1u, kernelDescriptor.kernelAttributes.numArgsStateful); + kernelDescriptor.kernelAttributes.numArgsStateful = 0; kernelTokens.tokens.allocateStatelessConstantMemorySurfaceWithInitialization = nullptr; EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.stateless)); @@ -304,6 +308,8 @@ TEST(KernelDescriptorFromPatchtokens, GivenImplicitArgsThenSetsProperPartsOfDesc EXPECT_EQ(globalsSurface.DataParamSize, kernelDescriptor.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.pointerSize); EXPECT_EQ(globalsSurface.SurfaceStateHeapOffset, kernelDescriptor.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.bindful); EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.bindless)); + EXPECT_EQ(1u, kernelDescriptor.kernelAttributes.numArgsStateful); + kernelDescriptor.kernelAttributes.numArgsStateful = 0; kernelTokens.tokens.allocateStatelessGlobalMemorySurfaceWithInitialization = nullptr; EXPECT_FALSE(kernelDescriptor.kernelAttributes.flags.usesPrintf); @@ -322,6 +328,8 @@ TEST(KernelDescriptorFromPatchtokens, GivenImplicitArgsThenSetsProperPartsOfDesc EXPECT_EQ(printfSurface.DataParamSize, kernelDescriptor.payloadMappings.implicitArgs.printfSurfaceAddress.pointerSize); EXPECT_EQ(printfSurface.SurfaceStateHeapOffset, kernelDescriptor.payloadMappings.implicitArgs.printfSurfaceAddress.bindful); EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.printfSurfaceAddress.bindless)); + EXPECT_EQ(1u, kernelDescriptor.kernelAttributes.numArgsStateful); + kernelDescriptor.kernelAttributes.numArgsStateful = 0; kernelTokens.tokens.allocateStatelessPrintfSurface = nullptr; EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.deviceSideEnqueueEventPoolSurfaceAddress.stateless)); @@ -338,6 +346,8 @@ TEST(KernelDescriptorFromPatchtokens, GivenImplicitArgsThenSetsProperPartsOfDesc EXPECT_EQ(eventPoolSurface.DataParamSize, kernelDescriptor.payloadMappings.implicitArgs.deviceSideEnqueueEventPoolSurfaceAddress.pointerSize); EXPECT_EQ(eventPoolSurface.SurfaceStateHeapOffset, kernelDescriptor.payloadMappings.implicitArgs.deviceSideEnqueueEventPoolSurfaceAddress.bindful); EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.deviceSideEnqueueEventPoolSurfaceAddress.bindless)); + EXPECT_EQ(1u, kernelDescriptor.kernelAttributes.numArgsStateful); + kernelDescriptor.kernelAttributes.numArgsStateful = 0; kernelTokens.tokens.allocateStatelessEventPoolSurface = nullptr; EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.deviceSideEnqueueDefaultQueueSurfaceAddress.stateless)); @@ -354,6 +364,8 @@ TEST(KernelDescriptorFromPatchtokens, GivenImplicitArgsThenSetsProperPartsOfDesc EXPECT_EQ(defaultDeviceQueueSurface.DataParamSize, kernelDescriptor.payloadMappings.implicitArgs.deviceSideEnqueueDefaultQueueSurfaceAddress.pointerSize); EXPECT_EQ(defaultDeviceQueueSurface.SurfaceStateHeapOffset, kernelDescriptor.payloadMappings.implicitArgs.deviceSideEnqueueDefaultQueueSurfaceAddress.bindful); EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.deviceSideEnqueueDefaultQueueSurfaceAddress.bindless)); + EXPECT_EQ(1u, kernelDescriptor.kernelAttributes.numArgsStateful); + kernelDescriptor.kernelAttributes.numArgsStateful = 0; kernelTokens.tokens.allocateStatelessDefaultDeviceQueueSurface = nullptr; EXPECT_EQ(0U, kernelDescriptor.kernelAttributes.perThreadSystemThreadSurfaceSize); @@ -371,6 +383,8 @@ TEST(KernelDescriptorFromPatchtokens, GivenImplicitArgsThenSetsProperPartsOfDesc EXPECT_EQ(0U, kernelDescriptor.payloadMappings.implicitArgs.systemThreadSurfaceAddress.pointerSize); EXPECT_EQ(systemThreadSurface.Offset, kernelDescriptor.payloadMappings.implicitArgs.systemThreadSurfaceAddress.bindful); EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.systemThreadSurfaceAddress.bindless)); + EXPECT_EQ(0u, kernelDescriptor.kernelAttributes.numArgsStateful); + kernelDescriptor.kernelAttributes.numArgsStateful = 0; kernelTokens.tokens.allocateSystemThreadSurface = nullptr; EXPECT_FALSE(kernelDescriptor.kernelAttributes.flags.usesSyncBuffer); @@ -389,6 +403,8 @@ TEST(KernelDescriptorFromPatchtokens, GivenImplicitArgsThenSetsProperPartsOfDesc EXPECT_EQ(defaultDeviceQueueSurface.DataParamSize, kernelDescriptor.payloadMappings.implicitArgs.syncBufferAddress.pointerSize); EXPECT_EQ(defaultDeviceQueueSurface.SurfaceStateHeapOffset, kernelDescriptor.payloadMappings.implicitArgs.syncBufferAddress.bindful); EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.syncBufferAddress.bindless)); + EXPECT_EQ(1u, kernelDescriptor.kernelAttributes.numArgsStateful); + kernelDescriptor.kernelAttributes.numArgsStateful = 0; kernelTokens.tokens.allocateSyncBuffer = nullptr; }