|
11 | 11 | #include "runtime/built_ins/built_ins.h" |
12 | 12 | #include "runtime/built_ins/builtins_dispatch_builder.h" |
13 | 13 | #include "runtime/built_ins/vme_dispatch_builder.h" |
| 14 | +#include "runtime/gmm_helper/gmm.h" |
14 | 15 | #include "runtime/helpers/dispatch_info_builder.h" |
15 | 16 | #include "runtime/helpers/file_io.h" |
16 | 17 | #include "runtime/helpers/hash.h" |
@@ -286,10 +287,8 @@ HWTEST_F(BuiltInTests, givenInputBufferWhenBuildingNonAuxDispatchInfoForAuxTrans |
286 | 287 | memObjsForAuxTranslation.erase(buffer); |
287 | 288 |
|
288 | 289 | cl_mem clMem = buffer; |
289 | | - void *gpuAddress = reinterpret_cast<void *>(buffer->getGraphicsAllocation()->getGpuAddress()); |
290 | 290 | EXPECT_EQ(clMem, kernel->getKernelArguments().at(0).object); |
291 | | - EXPECT_EQ(gpuAddress, kernel->getKernelArguments().at(1).value); |
292 | | - EXPECT_EQ(nullptr, kernel->getKernelArguments().at(1).object); |
| 291 | + EXPECT_EQ(clMem, kernel->getKernelArguments().at(1).object); |
293 | 292 |
|
294 | 293 | EXPECT_EQ(1u, dispatchInfo.getDim()); |
295 | 294 | size_t xGws = alignUp(buffer->getSize(), 512) / 16; |
@@ -335,9 +334,7 @@ HWTEST_F(BuiltInTests, givenInputBufferWhenBuildingAuxDispatchInfoForAuxTranslat |
335 | 334 | memObjsForAuxTranslation.erase(buffer); |
336 | 335 |
|
337 | 336 | cl_mem clMem = buffer; |
338 | | - void *gpuAddress = reinterpret_cast<void *>(buffer->getGraphicsAllocation()->getGpuAddress()); |
339 | | - EXPECT_EQ(gpuAddress, kernel->getKernelArguments().at(0).value); |
340 | | - EXPECT_EQ(nullptr, kernel->getKernelArguments().at(0).object); |
| 337 | + EXPECT_EQ(clMem, kernel->getKernelArguments().at(0).object); |
341 | 338 | EXPECT_EQ(clMem, kernel->getKernelArguments().at(1).object); |
342 | 339 |
|
343 | 340 | EXPECT_EQ(1u, dispatchInfo.getDim()); |
@@ -495,6 +492,142 @@ HWTEST_F(BuiltInTests, givenKernelWithAuxTranslationRequiredWhenEnqueueCalledThe |
495 | 492 | EXPECT_EQ(1u, mockBuiltinKernel->releaseOwnershipCalls); |
496 | 493 | } |
497 | 494 |
|
| 495 | +HWTEST_F(BuiltInTests, givenAuxTranslationKernelWhenSettingKernelArgsThenSetValidMocs) { |
| 496 | + using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; |
| 497 | + |
| 498 | + MockAuxBuilInOp mockAuxBuiltInOp(*pBuiltIns, *pContext, *pDevice); |
| 499 | + MultiDispatchInfo multiDispatchInfo; |
| 500 | + MemObjsForAuxTranslation memObjsForAuxTranslation; |
| 501 | + |
| 502 | + BuiltinOpParams builtinOpParamsToAux; |
| 503 | + builtinOpParamsToAux.memObjsForAuxTranslation = &memObjsForAuxTranslation; |
| 504 | + builtinOpParamsToAux.auxTranslationDirection = AuxTranslationDirection::NonAuxToAux; |
| 505 | + |
| 506 | + BuiltinOpParams builtinOpParamsToNonAux; |
| 507 | + builtinOpParamsToNonAux.memObjsForAuxTranslation = &memObjsForAuxTranslation; |
| 508 | + builtinOpParamsToNonAux.auxTranslationDirection = AuxTranslationDirection::AuxToNonAux; |
| 509 | + |
| 510 | + cl_int retVal = CL_SUCCESS; |
| 511 | + auto buffer = std::unique_ptr<Buffer>(Buffer::create(pContext, 0, MemoryConstants::pageSize, nullptr, retVal)); |
| 512 | + memObjsForAuxTranslation.insert(buffer.get()); |
| 513 | + |
| 514 | + mockAuxBuiltInOp.buildDispatchInfosForAuxTranslation<FamilyType>(multiDispatchInfo, builtinOpParamsToAux); |
| 515 | + mockAuxBuiltInOp.buildDispatchInfosForAuxTranslation<FamilyType>(multiDispatchInfo, builtinOpParamsToNonAux); |
| 516 | + |
| 517 | + { |
| 518 | + // read args |
| 519 | + auto argNum = 0; |
| 520 | + auto expectedMocs = pDevice->getExecutionEnvironment()->getGmmHelper()->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED); |
| 521 | + auto sshBase = mockAuxBuiltInOp.convertToAuxKernel[0]->getSurfaceStateHeap(); |
| 522 | + auto sshOffset = mockAuxBuiltInOp.convertToAuxKernel[0]->getKernelInfo().kernelArgInfo[argNum].offsetHeap; |
| 523 | + auto surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset)); |
| 524 | + EXPECT_EQ(expectedMocs, surfaceState->getMemoryObjectControlState()); |
| 525 | + |
| 526 | + sshBase = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getSurfaceStateHeap(); |
| 527 | + sshOffset = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getKernelInfo().kernelArgInfo[argNum].offsetHeap; |
| 528 | + surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset)); |
| 529 | + EXPECT_EQ(expectedMocs, surfaceState->getMemoryObjectControlState()); |
| 530 | + } |
| 531 | + |
| 532 | + { |
| 533 | + // write args |
| 534 | + auto argNum = 1; |
| 535 | + auto expectedMocs = pDevice->getExecutionEnvironment()->getGmmHelper()->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER); |
| 536 | + auto sshBase = mockAuxBuiltInOp.convertToAuxKernel[0]->getSurfaceStateHeap(); |
| 537 | + auto sshOffset = mockAuxBuiltInOp.convertToAuxKernel[0]->getKernelInfo().kernelArgInfo[argNum].offsetHeap; |
| 538 | + auto surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset)); |
| 539 | + EXPECT_EQ(expectedMocs, surfaceState->getMemoryObjectControlState()); |
| 540 | + |
| 541 | + sshBase = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getSurfaceStateHeap(); |
| 542 | + sshOffset = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getKernelInfo().kernelArgInfo[argNum].offsetHeap; |
| 543 | + surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset)); |
| 544 | + EXPECT_EQ(expectedMocs, surfaceState->getMemoryObjectControlState()); |
| 545 | + } |
| 546 | +} |
| 547 | + |
| 548 | +HWTEST_F(BuiltInTests, givenAuxToNonAuxTranslationWhenSettingSurfaceStateThenSetValidAuxMode) { |
| 549 | + using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; |
| 550 | + using AUXILIARY_SURFACE_MODE = typename RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE; |
| 551 | + |
| 552 | + MockAuxBuilInOp mockAuxBuiltInOp(*pBuiltIns, *pContext, *pDevice); |
| 553 | + MultiDispatchInfo multiDispatchInfo; |
| 554 | + MemObjsForAuxTranslation memObjsForAuxTranslation; |
| 555 | + |
| 556 | + BuiltinOpParams builtinOpParams; |
| 557 | + builtinOpParams.memObjsForAuxTranslation = &memObjsForAuxTranslation; |
| 558 | + builtinOpParams.auxTranslationDirection = AuxTranslationDirection::AuxToNonAux; |
| 559 | + |
| 560 | + cl_int retVal = CL_SUCCESS; |
| 561 | + auto buffer = std::unique_ptr<Buffer>(Buffer::create(pContext, 0, MemoryConstants::pageSize, nullptr, retVal)); |
| 562 | + buffer->getGraphicsAllocation()->setAllocationType(GraphicsAllocation::AllocationType::BUFFER_COMPRESSED); |
| 563 | + auto gmm = new Gmm(nullptr, 1, false); |
| 564 | + gmm->isRenderCompressed = true; |
| 565 | + buffer->getGraphicsAllocation()->setDefaultGmm(gmm); |
| 566 | + |
| 567 | + memObjsForAuxTranslation.insert(buffer.get()); |
| 568 | + |
| 569 | + mockAuxBuiltInOp.buildDispatchInfosForAuxTranslation<FamilyType>(multiDispatchInfo, builtinOpParams); |
| 570 | + |
| 571 | + { |
| 572 | + // read arg |
| 573 | + auto argNum = 0; |
| 574 | + auto sshBase = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getSurfaceStateHeap(); |
| 575 | + auto sshOffset = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getKernelInfo().kernelArgInfo[argNum].offsetHeap; |
| 576 | + auto surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset)); |
| 577 | + EXPECT_EQ(AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_CCS_E, surfaceState->getAuxiliarySurfaceMode()); |
| 578 | + } |
| 579 | + |
| 580 | + { |
| 581 | + // write arg |
| 582 | + auto argNum = 1; |
| 583 | + auto sshBase = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getSurfaceStateHeap(); |
| 584 | + auto sshOffset = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getKernelInfo().kernelArgInfo[argNum].offsetHeap; |
| 585 | + auto surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset)); |
| 586 | + EXPECT_EQ(AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_NONE, surfaceState->getAuxiliarySurfaceMode()); |
| 587 | + } |
| 588 | +} |
| 589 | + |
| 590 | +HWTEST_F(BuiltInTests, givenNonAuxToAuxTranslationWhenSettingSurfaceStateThenSetValidAuxMode) { |
| 591 | + using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; |
| 592 | + using AUXILIARY_SURFACE_MODE = typename RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE; |
| 593 | + |
| 594 | + MockAuxBuilInOp mockAuxBuiltInOp(*pBuiltIns, *pContext, *pDevice); |
| 595 | + MultiDispatchInfo multiDispatchInfo; |
| 596 | + MemObjsForAuxTranslation memObjsForAuxTranslation; |
| 597 | + |
| 598 | + BuiltinOpParams builtinOpParams; |
| 599 | + builtinOpParams.memObjsForAuxTranslation = &memObjsForAuxTranslation; |
| 600 | + builtinOpParams.auxTranslationDirection = AuxTranslationDirection::NonAuxToAux; |
| 601 | + |
| 602 | + cl_int retVal = CL_SUCCESS; |
| 603 | + auto buffer = std::unique_ptr<Buffer>(Buffer::create(pContext, 0, MemoryConstants::pageSize, nullptr, retVal)); |
| 604 | + buffer->getGraphicsAllocation()->setAllocationType(GraphicsAllocation::AllocationType::BUFFER_COMPRESSED); |
| 605 | + auto gmm = new Gmm(nullptr, 1, false); |
| 606 | + gmm->isRenderCompressed = true; |
| 607 | + buffer->getGraphicsAllocation()->setDefaultGmm(gmm); |
| 608 | + memObjsForAuxTranslation.insert(buffer.get()); |
| 609 | + |
| 610 | + mockAuxBuiltInOp.buildDispatchInfosForAuxTranslation<FamilyType>(multiDispatchInfo, builtinOpParams); |
| 611 | + |
| 612 | + { |
| 613 | + // read arg |
| 614 | + auto argNum = 0; |
| 615 | + auto sshBase = mockAuxBuiltInOp.convertToAuxKernel[0]->getSurfaceStateHeap(); |
| 616 | + auto sshOffset = mockAuxBuiltInOp.convertToAuxKernel[0]->getKernelInfo().kernelArgInfo[argNum].offsetHeap; |
| 617 | + auto surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset)); |
| 618 | + EXPECT_EQ(AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_NONE, surfaceState->getAuxiliarySurfaceMode()); |
| 619 | + } |
| 620 | + |
| 621 | + { |
| 622 | + // write arg |
| 623 | + auto argNum = 1; |
| 624 | + auto sshBase = mockAuxBuiltInOp.convertToAuxKernel[0]->getSurfaceStateHeap(); |
| 625 | + auto sshOffset = mockAuxBuiltInOp.convertToAuxKernel[0]->getKernelInfo().kernelArgInfo[argNum].offsetHeap; |
| 626 | + auto surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset)); |
| 627 | + EXPECT_EQ(AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_CCS_E, surfaceState->getAuxiliarySurfaceMode()); |
| 628 | + } |
| 629 | +} |
| 630 | + |
498 | 631 | TEST_F(BuiltInTests, BuiltinDispatchInfoBuilderCopyBufferToBufferAligned) { |
499 | 632 | BuiltinDispatchInfoBuilder &builder = pBuiltIns->getBuiltinDispatchInfoBuilder(EBuiltInOps::CopyBufferToBuffer, *pContext, *pDevice); |
500 | 633 |
|
|
0 commit comments