From 8c604a6e168c5badce0de0bb09faeb1eb2bcf633 Mon Sep 17 00:00:00 2001 From: "Dunajski, Bartosz" Date: Mon, 9 Dec 2019 08:09:53 +0100 Subject: [PATCH] FLAT_IMAGE patch tokens support Change-Id: I9f4ea389871113842311de9ef4ac7bf74f7a46fa Signed-off-by: Dunajski, Bartosz --- .../patchtokens_decoder.cpp | 12 ++++ .../compiler_interface/patchtokens_decoder.h | 4 ++ .../compiler_interface/patchtokens_dumper.cpp | 8 +++ .../patchtokens_decoder_tests.cpp | 8 +++ .../patchtokens_dumper_tests.cpp | 62 ++++++++++++++++++- 5 files changed, 93 insertions(+), 1 deletion(-) diff --git a/runtime/compiler_interface/patchtokens_decoder.cpp b/runtime/compiler_interface/patchtokens_decoder.cpp index dc6b666fa0..5bfa13e41d 100644 --- a/runtime/compiler_interface/patchtokens_decoder.cpp +++ b/runtime/compiler_interface/patchtokens_decoder.cpp @@ -245,6 +245,18 @@ inline void decodeKernelDataParameterToken(const SPatchDataParameterBuffer *toke case DATA_PARAMETER_IMAGE_NUM_MIP_LEVELS: getKernelArg(out, argNum, ArgObjectType::Image).metadata.image.numMipLevels = token; break; + case DATA_PARAMETER_FLAT_IMAGE_BASEOFFSET: + getKernelArg(out, argNum, ArgObjectType::Image).metadata.image.flatBaseOffset = token; + break; + case DATA_PARAMETER_FLAT_IMAGE_WIDTH: + getKernelArg(out, argNum, ArgObjectType::Image).metadata.image.flatWidth = token; + break; + case DATA_PARAMETER_FLAT_IMAGE_HEIGHT: + getKernelArg(out, argNum, ArgObjectType::Image).metadata.image.flatHeight = token; + break; + case DATA_PARAMETER_FLAT_IMAGE_PITCH: + getKernelArg(out, argNum, ArgObjectType::Image).metadata.image.flatPitch = token; + break; case DATA_PARAMETER_SAMPLER_COORDINATE_SNAP_WA_REQUIRED: getKernelArg(out, argNum, ArgObjectType::Sampler).metadata.sampler.coordinateSnapWaRequired = token; diff --git a/runtime/compiler_interface/patchtokens_decoder.h b/runtime/compiler_interface/patchtokens_decoder.h index 501b8c4e95..cc1e6c1ad5 100644 --- a/runtime/compiler_interface/patchtokens_decoder.h +++ b/runtime/compiler_interface/patchtokens_decoder.h @@ -65,6 +65,10 @@ struct KernelArgFromPatchtokens { const SPatchDataParameterBuffer *arraySize; const SPatchDataParameterBuffer *numSamples; const SPatchDataParameterBuffer *numMipLevels; + const SPatchDataParameterBuffer *flatBaseOffset; + const SPatchDataParameterBuffer *flatWidth; + const SPatchDataParameterBuffer *flatHeight; + const SPatchDataParameterBuffer *flatPitch; } image; struct { const SPatchDataParameterBuffer *bufferOffset; diff --git a/runtime/compiler_interface/patchtokens_dumper.cpp b/runtime/compiler_interface/patchtokens_dumper.cpp index 18a0dca142..e39045fd99 100644 --- a/runtime/compiler_interface/patchtokens_dumper.cpp +++ b/runtime/compiler_interface/patchtokens_dumper.cpp @@ -101,6 +101,10 @@ std::string asString(DATA_PARAMETER_TOKEN dataParameter) { CASE_TOK_STR(DATA_PARAMETER_IMAGE_DEPTH); CASE_TOK_STR(DATA_PARAMETER_IMAGE_CHANNEL_DATA_TYPE); CASE_TOK_STR(DATA_PARAMETER_IMAGE_CHANNEL_ORDER); + CASE_TOK_STR(DATA_PARAMETER_FLAT_IMAGE_BASEOFFSET); + CASE_TOK_STR(DATA_PARAMETER_FLAT_IMAGE_WIDTH); + CASE_TOK_STR(DATA_PARAMETER_FLAT_IMAGE_HEIGHT); + CASE_TOK_STR(DATA_PARAMETER_FLAT_IMAGE_PITCH); CASE_TOK_STR(DATA_PARAMETER_SAMPLER_ADDRESS_MODE); CASE_TOK_STR(DATA_PARAMETER_SAMPLER_NORMALIZED_COORDS); CASE_TOK_STR(DATA_PARAMETER_GLOBAL_WORK_OFFSET); @@ -856,6 +860,10 @@ std::string asString(const KernelArgFromPatchtokens &arg, const std::string &ind dumpOrNull(arg.metadata.image.arraySize, "", stream, indentLevel2); dumpOrNull(arg.metadata.image.numSamples, "", stream, indentLevel2); dumpOrNull(arg.metadata.image.numMipLevels, "", stream, indentLevel2); + dumpOrNull(arg.metadata.image.flatBaseOffset, "", stream, indentLevel2); + dumpOrNull(arg.metadata.image.flatWidth, "", stream, indentLevel2); + dumpOrNull(arg.metadata.image.flatHeight, "", stream, indentLevel2); + dumpOrNull(arg.metadata.image.flatPitch, "", stream, indentLevel2); break; case ArgObjectType::Sampler: stream << indentLevel1 << "Sampler Metadata:\n"; diff --git a/unit_tests/compiler_interface/patchtokens_decoder_tests.cpp b/unit_tests/compiler_interface/patchtokens_decoder_tests.cpp index f932755108..386bc9c157 100644 --- a/unit_tests/compiler_interface/patchtokens_decoder_tests.cpp +++ b/unit_tests/compiler_interface/patchtokens_decoder_tests.cpp @@ -691,6 +691,10 @@ TEST(KernelDecoder, GivenKernelWithValidObjectArgMetadataPatchtokensThenDecoding auto arg1ImageArraySizeOff = pushBackDataParameterToken(iOpenCL::DATA_PARAMETER_IMAGE_ARRAY_SIZE, storage, 0U, 1U); auto arg1ImageNumSamplesOff = pushBackDataParameterToken(iOpenCL::DATA_PARAMETER_IMAGE_NUM_SAMPLES, storage, 0U, 1U); auto arg1ImageNumMipLevelOff = pushBackDataParameterToken(iOpenCL::DATA_PARAMETER_IMAGE_NUM_MIP_LEVELS, storage, 0U, 1U); + auto arg1FlatImageBaseOffsetOff = pushBackDataParameterToken(iOpenCL::DATA_PARAMETER_FLAT_IMAGE_BASEOFFSET, storage, 0U, 1U); + auto arg1FlatImageWidthOff = pushBackDataParameterToken(iOpenCL::DATA_PARAMETER_FLAT_IMAGE_WIDTH, storage, 0U, 1U); + auto arg1FlatImageHeightOff = pushBackDataParameterToken(iOpenCL::DATA_PARAMETER_FLAT_IMAGE_HEIGHT, storage, 0U, 1U); + auto arg1FlatImagePitchOff = pushBackDataParameterToken(iOpenCL::DATA_PARAMETER_FLAT_IMAGE_PITCH, storage, 0U, 1U); auto arg2SamplerCoordinateSnapWaRequiredOff = pushBackDataParameterToken(iOpenCL::DATA_PARAMETER_SAMPLER_COORDINATE_SNAP_WA_REQUIRED, storage, 0U, 2U); auto arg2SamplerAddressModeOff = pushBackDataParameterToken(iOpenCL::DATA_PARAMETER_SAMPLER_ADDRESS_MODE, storage, 0U, 2U); @@ -733,6 +737,10 @@ TEST(KernelDecoder, GivenKernelWithValidObjectArgMetadataPatchtokensThenDecoding EXPECT_TRUE(tokenOffsetMatched(base, arg1ImageArraySizeOff, decodedKernel.tokens.kernelArgs[1].metadata.image.arraySize)); EXPECT_TRUE(tokenOffsetMatched(base, arg1ImageNumSamplesOff, decodedKernel.tokens.kernelArgs[1].metadata.image.numSamples)); EXPECT_TRUE(tokenOffsetMatched(base, arg1ImageNumMipLevelOff, decodedKernel.tokens.kernelArgs[1].metadata.image.numMipLevels)); + EXPECT_TRUE(tokenOffsetMatched(base, arg1FlatImageBaseOffsetOff, decodedKernel.tokens.kernelArgs[1].metadata.image.flatBaseOffset)); + EXPECT_TRUE(tokenOffsetMatched(base, arg1FlatImageWidthOff, decodedKernel.tokens.kernelArgs[1].metadata.image.flatWidth)); + EXPECT_TRUE(tokenOffsetMatched(base, arg1FlatImageHeightOff, decodedKernel.tokens.kernelArgs[1].metadata.image.flatHeight)); + EXPECT_TRUE(tokenOffsetMatched(base, arg1FlatImagePitchOff, decodedKernel.tokens.kernelArgs[1].metadata.image.flatPitch)); EXPECT_TRUE(tokenOffsetMatched(base, arg2SamplerCoordinateSnapWaRequiredOff, decodedKernel.tokens.kernelArgs[2].metadata.sampler.coordinateSnapWaRequired)); EXPECT_TRUE(tokenOffsetMatched(base, arg2SamplerAddressModeOff, decodedKernel.tokens.kernelArgs[2].metadata.sampler.addressMode)); diff --git a/unit_tests/compiler_interface/patchtokens_dumper_tests.cpp b/unit_tests/compiler_interface/patchtokens_dumper_tests.cpp index 8b2d60f14b..39d47bc915 100644 --- a/unit_tests/compiler_interface/patchtokens_dumper_tests.cpp +++ b/unit_tests/compiler_interface/patchtokens_dumper_tests.cpp @@ -1476,6 +1476,10 @@ TEST(KernelArgDumper, GivenImageKernelArgWithMetadataTokensThenProperlyCreatesDu auto arraySize = PatchTokensTestData::initDataParameterBufferToken(iOpenCL::DATA_PARAMETER_IMAGE_ARRAY_SIZE); auto numSamples = PatchTokensTestData::initDataParameterBufferToken(iOpenCL::DATA_PARAMETER_IMAGE_NUM_SAMPLES); auto numMipLevels = PatchTokensTestData::initDataParameterBufferToken(iOpenCL::DATA_PARAMETER_IMAGE_NUM_MIP_LEVELS); + auto flatBaseOffset = PatchTokensTestData::initDataParameterBufferToken(iOpenCL::DATA_PARAMETER_FLAT_IMAGE_BASEOFFSET); + auto flatWidth = PatchTokensTestData::initDataParameterBufferToken(iOpenCL::DATA_PARAMETER_FLAT_IMAGE_WIDTH); + auto flatHeight = PatchTokensTestData::initDataParameterBufferToken(iOpenCL::DATA_PARAMETER_FLAT_IMAGE_HEIGHT); + auto flatPitch = PatchTokensTestData::initDataParameterBufferToken(iOpenCL::DATA_PARAMETER_FLAT_IMAGE_PITCH); kernelArg.metadata.image.width = &width; kernelArg.metadata.image.height = &height; @@ -1485,6 +1489,10 @@ TEST(KernelArgDumper, GivenImageKernelArgWithMetadataTokensThenProperlyCreatesDu kernelArg.metadata.image.arraySize = &arraySize; kernelArg.metadata.image.numSamples = &numSamples; kernelArg.metadata.image.numMipLevels = &numMipLevels; + kernelArg.metadata.image.flatBaseOffset = &flatBaseOffset; + kernelArg.metadata.image.flatWidth = &flatWidth; + kernelArg.metadata.image.flatHeight = &flatHeight; + kernelArg.metadata.image.flatPitch = &flatPitch; auto generated = NEO::PatchTokenBinary::asString(kernelArg, " | "); std::stringstream expected; expected << R"===( | Kernel argument of type IMAGE @@ -1593,6 +1601,58 @@ TEST(KernelArgDumper, GivenImageKernelArgWithMetadataTokensThenProperlyCreatesDu | uint32_t LocationIndex2;// = 0 | uint32_t IsEmulationArgument;// = 0 | } + | struct SPatchDataParameterBuffer : + | SPatchItemHeader (Token=17(PATCH_TOKEN_DATA_PARAMETER_BUFFER), Size=)===" + << sizeof(iOpenCL::SPatchDataParameterBuffer) << R"===() + | { + | uint32_t Type;// = 44(DATA_PARAMETER_FLAT_IMAGE_BASEOFFSET) + | uint32_t ArgumentNumber;// = 0 + | uint32_t Offset;// = 0 + | uint32_t DataSize;// = 0 + | uint32_t SourceOffset;// = 0 + | uint32_t LocationIndex;// = 0 + | uint32_t LocationIndex2;// = 0 + | uint32_t IsEmulationArgument;// = 0 + | } + | struct SPatchDataParameterBuffer : + | SPatchItemHeader (Token=17(PATCH_TOKEN_DATA_PARAMETER_BUFFER), Size=)===" + << sizeof(iOpenCL::SPatchDataParameterBuffer) << R"===() + | { + | uint32_t Type;// = 45(DATA_PARAMETER_FLAT_IMAGE_WIDTH) + | uint32_t ArgumentNumber;// = 0 + | uint32_t Offset;// = 0 + | uint32_t DataSize;// = 0 + | uint32_t SourceOffset;// = 0 + | uint32_t LocationIndex;// = 0 + | uint32_t LocationIndex2;// = 0 + | uint32_t IsEmulationArgument;// = 0 + | } + | struct SPatchDataParameterBuffer : + | SPatchItemHeader (Token=17(PATCH_TOKEN_DATA_PARAMETER_BUFFER), Size=)===" + << sizeof(iOpenCL::SPatchDataParameterBuffer) << R"===() + | { + | uint32_t Type;// = 46(DATA_PARAMETER_FLAT_IMAGE_HEIGHT) + | uint32_t ArgumentNumber;// = 0 + | uint32_t Offset;// = 0 + | uint32_t DataSize;// = 0 + | uint32_t SourceOffset;// = 0 + | uint32_t LocationIndex;// = 0 + | uint32_t LocationIndex2;// = 0 + | uint32_t IsEmulationArgument;// = 0 + | } + | struct SPatchDataParameterBuffer : + | SPatchItemHeader (Token=17(PATCH_TOKEN_DATA_PARAMETER_BUFFER), Size=)===" + << sizeof(iOpenCL::SPatchDataParameterBuffer) << R"===() + | { + | uint32_t Type;// = 47(DATA_PARAMETER_FLAT_IMAGE_PITCH) + | uint32_t ArgumentNumber;// = 0 + | uint32_t Offset;// = 0 + | uint32_t DataSize;// = 0 + | uint32_t SourceOffset;// = 0 + | uint32_t LocationIndex;// = 0 + | uint32_t LocationIndex2;// = 0 + | uint32_t IsEmulationArgument;// = 0 + | } )==="; EXPECT_STREQ(expected.str().c_str(), generated.c_str()); } @@ -1828,4 +1888,4 @@ TEST(PatchTokenDumper, GivenAnyTokenThenDumpingIsHandled) { EXPECT_NE(std::string::npos, dump.find("Type;// = " + std::to_string(i) + "(")) << "Update patchtokens_dumper.cpp with definition of SPatchDataParameterBuffer with type :" << i; } } -} \ No newline at end of file +}