FLAT_IMAGE patch tokens support

Change-Id: I9f4ea389871113842311de9ef4ac7bf74f7a46fa
Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
Dunajski, Bartosz 2019-12-09 08:09:53 +01:00
parent 3014b304ca
commit 8c604a6e16
5 changed files with 93 additions and 1 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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";

View File

@ -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));

View File

@ -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;
}
}
}
}