New patch token for pure stateful buffer access

Change-Id: I90589a1cc3c3fa3608e7a5da438660ed85efcffa
This commit is contained in:
Dunajski, Bartosz
2018-07-17 14:41:24 +02:00
committed by sys_ocldev
parent d2e820aac8
commit 4a6be207cd
3 changed files with 37 additions and 6 deletions

View File

@ -49,6 +49,7 @@ struct KernelArgInfo {
bool isAccelerator = false;
bool isDeviceQueue = false;
bool isBuffer = false;
bool pureStatefulBufferAccess = false;
uint32_t samplerArgumentType = 0;
uint32_t offsetImgWidth = undefinedOffset;
uint32_t offsetImgHeight = undefinedOffset;

View File

@ -20,17 +20,17 @@
* OTHER DEALINGS IN THE SOFTWARE.
*/
#include "patch_list.h"
#include "patch_shared.h"
#include "program.h"
#include "program_debug_data.h"
#include "runtime/helpers/aligned_memory.h"
#include "runtime/helpers/debug_helpers.h"
#include "runtime/helpers/hash.h"
#include "runtime/helpers/ptr_math.h"
#include "runtime/helpers/string.h"
#include "runtime/memory_manager/memory_manager.h"
#include "patch_list.h"
#include "patch_shared.h"
#include "program_debug_data.h"
#include "program.h"
#include "runtime/kernel/kernel.h"
#include "runtime/memory_manager/memory_manager.h"
#include <algorithm>
@ -436,6 +436,11 @@ cl_int Program::parsePatchList(KernelInfo &kernelInfo) {
kernelInfo.kernelArgInfo[argNum].offsetNumMipLevels = pDataParameterBuffer->Offset;
DEBUG_BREAK_IF(pDataParameterBuffer->DataSize != sizeof(uint32_t));
break;
case DATA_PARAMETER_BUFFER_STATEFUL:
DBG_LOG(LogPatchTokens, "\n .Type", "BUFFER_STATEFUL");
kernelInfo.resizeKernelArgInfoAndRegisterParameter(argNum);
kernelInfo.kernelArgInfo[argNum].pureStatefulBufferAccess = true;
break;
case DATA_PARAMETER_IMAGE_SRGB_CHANNEL_ORDER:
case DATA_PARAMETER_STAGE_IN_GRID_ORIGIN:
case DATA_PARAMETER_STAGE_IN_GRID_SIZE:

View File

@ -23,8 +23,8 @@
#include "runtime/helpers/string.h"
#include "runtime/platform/platform.h"
#include "runtime/program/program.h"
#include "unit_tests/helpers/gtest_helpers.h"
#include "unit_tests/fixtures/kernel_data_fixture.h"
#include "unit_tests/helpers/gtest_helpers.h"
TEST_F(KernelDataTest, KernelInfo_Name) {
kernelName = "myTestKernel";
@ -463,6 +463,13 @@ TEST_P(DataParameterTest, DataParameterTests) {
if (pKernelInfo->patchInfo.dataParameterBuffers.size() > 0) {
EXPECT_EQ_CONST(PATCH_TOKEN_DATA_PARAMETER_BUFFER, pKernelInfo->patchInfo.dataParameterBuffers[0]->Token);
EXPECT_EQ_VAL(GetParam(), pKernelInfo->patchInfo.dataParameterBuffers[0]->Type);
if (pKernelInfo->kernelArgInfo.size() == dataParameterToken.ArgumentNumber + 1) {
if (GetParam() == DATA_PARAMETER_BUFFER_STATEFUL) {
EXPECT_TRUE(pKernelInfo->kernelArgInfo[dataParameterToken.ArgumentNumber].pureStatefulBufferAccess);
} else {
EXPECT_FALSE(pKernelInfo->kernelArgInfo[dataParameterToken.ArgumentNumber].pureStatefulBufferAccess);
}
} // no else - some params are skipped
}
}
@ -494,6 +501,24 @@ TEST_F(KernelDataParameterTest, DataParameterTestsDataPatameterBufferOffset) {
EXPECT_EQ_VAL(DATA_PARAMETER_BUFFER_OFFSET, pKernelInfo->patchInfo.dataParameterBuffers[0]->Type);
}
TEST_F(KernelDataParameterTest, givenDataParameterBufferStatefulWhenDecodingThenSetArgAsPureStateful) {
SPatchDataParameterBuffer dataParameterToken = {};
dataParameterToken.Token = PATCH_TOKEN_DATA_PARAMETER_BUFFER;
dataParameterToken.Size = sizeof(SPatchDataParameterBuffer);
dataParameterToken.Type = DATA_PARAMETER_BUFFER_STATEFUL;
dataParameterToken.ArgumentNumber = 1;
pPatchList = &dataParameterToken;
patchListSize = dataParameterToken.Size;
buildAndDecode();
ASSERT_EQ(1u, pKernelInfo->patchInfo.dataParameterBuffers.size());
EXPECT_EQ_CONST(PATCH_TOKEN_DATA_PARAMETER_BUFFER, pKernelInfo->patchInfo.dataParameterBuffers[0]->Token);
EXPECT_EQ_VAL(DATA_PARAMETER_BUFFER_STATEFUL, pKernelInfo->patchInfo.dataParameterBuffers[0]->Type);
EXPECT_TRUE(pKernelInfo->kernelArgInfo[dataParameterToken.ArgumentNumber].pureStatefulBufferAccess);
}
TEST_F(KernelDataParameterTest, givenUnknownDataParameterWhenDecodedThenParameterIsIgnored) {
SPatchDataParameterBuffer dataParameterToken;
dataParameterToken.Token = PATCH_TOKEN_DATA_PARAMETER_BUFFER;