From de315db95334f621cf18bbbe27b65ef40ed19f01 Mon Sep 17 00:00:00 2001 From: "Mrozek, Michal" Date: Thu, 29 Mar 2018 15:01:59 +0200 Subject: [PATCH] [24/n] Internal 4GB allocator. - Refactor tests for better maintenance - Remove duplicated code. Change-Id: I154cad43610497d2e1cabf99217820735d3868cd --- .../command_queue/enqueue_copy_buffer_rect.h | 2 +- .../enqueue_copy_buffer_rect_tests.cpp | 84 +++---------------- .../enqueue_copy_buffer_tests.cpp | 39 +-------- .../enqueue_copy_buffer_to_image_tests.cpp | 43 ++-------- .../enqueue_copy_image_tests.cpp | 43 ++-------- .../enqueue_copy_image_to_buffer_tests.cpp | 43 ++-------- .../enqueue_fill_buffer_tests.cpp | 39 +-------- .../enqueue_fill_image_tests.cpp | 43 ++-------- .../command_queue/enqueue_kernel_tests.cpp | 49 ++--------- .../enqueue_read_buffer_rect_tests.cpp | 44 ++-------- .../enqueue_read_buffer_tests.cpp | 42 +--------- .../enqueue_read_image_tests.cpp | 41 ++------- .../enqueue_write_buffer_rect_tests.cpp | 42 +--------- .../enqueue_write_buffer_tests.cpp | 41 +-------- .../enqueue_write_image_tests.cpp | 45 ++-------- unit_tests/gen_common/CMakeLists.txt | 1 + .../gen_commands_common_validation.h | 76 +++++++++++++++++ 17 files changed, 154 insertions(+), 563 deletions(-) create mode 100644 unit_tests/gen_common/gen_commands_common_validation.h diff --git a/runtime/command_queue/enqueue_copy_buffer_rect.h b/runtime/command_queue/enqueue_copy_buffer_rect.h index 808f08249c..a120258861 100644 --- a/runtime/command_queue/enqueue_copy_buffer_rect.h +++ b/runtime/command_queue/enqueue_copy_buffer_rect.h @@ -21,12 +21,12 @@ */ #pragma once +#include "runtime/built_ins/built_ins.h" #include "runtime/command_queue/command_queue_hw.h" #include "runtime/command_stream/command_stream_receiver.h" #include "runtime/helpers/kernel_commands.h" #include "runtime/mem_obj/buffer.h" #include "runtime/memory_manager/surface.h" -#include "runtime/built_ins/built_ins.h" #include namespace OCLRT { diff --git a/unit_tests/command_queue/enqueue_copy_buffer_rect_tests.cpp b/unit_tests/command_queue/enqueue_copy_buffer_rect_tests.cpp index 09b4f6c632..ac0057b854 100644 --- a/unit_tests/command_queue/enqueue_copy_buffer_rect_tests.cpp +++ b/unit_tests/command_queue/enqueue_copy_buffer_rect_tests.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Intel Corporation + * Copyright (c) 2017 - 2018, Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -21,10 +21,11 @@ */ #include "runtime/built_ins/built_ins.h" -#include "unit_tests/command_queue/enqueue_copy_buffer_rect_fixture.h" -#include "runtime/memory_manager/memory_constants.h" #include "runtime/gen_common/reg_configs.h" #include "runtime/helpers/dispatch_info.h" +#include "runtime/memory_manager/memory_constants.h" +#include "unit_tests/command_queue/enqueue_copy_buffer_rect_fixture.h" +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "test.h" using namespace OCLRT; @@ -217,43 +218,10 @@ HWTEST_F(EnqueueCopyBufferRectTest, 2D_LoadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueCopyBufferRectTest, 2D_StateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueCopyBufferRectTest, When2DEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueCopyBufferRect2D(); - - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - auto *cmd = (STATE_BASE_ADDRESS *)cmdStateBaseAddress; - ASSERT_NE(nullptr, cmd); - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorStateBaseAddress); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueCopyBufferRectTest, 2D_MediaInterfaceDescriptorLoad) { @@ -399,42 +367,10 @@ HWTEST_F(EnqueueCopyBufferRectTest, 3D_LoadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueCopyBufferRectTest, 3D_StateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueCopyBufferRectTest, When3DEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueCopyBufferRect3D(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - auto *cmd = (STATE_BASE_ADDRESS *)cmdStateBaseAddress; - ASSERT_NE(nullptr, cmd); - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorStateBaseAddress); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueCopyBufferRectTest, 3D_MediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_copy_buffer_tests.cpp b/unit_tests/command_queue/enqueue_copy_buffer_tests.cpp index f62f2141d2..c509e9c10d 100644 --- a/unit_tests/command_queue/enqueue_copy_buffer_tests.cpp +++ b/unit_tests/command_queue/enqueue_copy_buffer_tests.cpp @@ -27,6 +27,7 @@ #include "runtime/helpers/dispatch_info.h" #include "unit_tests/command_queue/enqueue_fixture.h" #include "unit_tests/command_queue/enqueue_copy_buffer_fixture.h" +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "test.h" #include @@ -185,42 +186,10 @@ HWTEST_F(EnqueueCopyBufferTest, LoadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueCopyBufferTest, StateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueCopyBufferTest, WhenEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueCopyBuffer(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - auto *cmd = (STATE_BASE_ADDRESS *)cmdStateBaseAddress; - ASSERT_NE(nullptr, cmd); - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorStateBaseAddress); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueCopyBufferTest, MediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_copy_buffer_to_image_tests.cpp b/unit_tests/command_queue/enqueue_copy_buffer_to_image_tests.cpp index 5761d3287e..6fe9652127 100644 --- a/unit_tests/command_queue/enqueue_copy_buffer_to_image_tests.cpp +++ b/unit_tests/command_queue/enqueue_copy_buffer_to_image_tests.cpp @@ -20,11 +20,12 @@ * OTHER DEALINGS IN THE SOFTWARE. */ +#include #include "runtime/gen_common/reg_configs.h" #include "unit_tests/command_queue/enqueue_copy_buffer_to_image_fixture.h" -#include "test.h" -#include +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "unit_tests/mocks/mock_builtin_dispatch_info_builder.h" +#include "test.h" using namespace OCLRT; @@ -116,42 +117,10 @@ HWTEST_F(EnqueueCopyBufferToImageTest, loadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueCopyBufferToImageTest, stateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueCopyBufferToImageTest, WhenEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueCopyBufferToImage(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - // All state should be programmed before walker - auto *cmd = getCommand(itorPipelineSelect, itorWalker); - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorStateBaseAddress); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueCopyBufferToImageTest, mediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_copy_image_tests.cpp b/unit_tests/command_queue/enqueue_copy_image_tests.cpp index 1d7516ed0b..c1c93ccac0 100644 --- a/unit_tests/command_queue/enqueue_copy_image_tests.cpp +++ b/unit_tests/command_queue/enqueue_copy_image_tests.cpp @@ -20,11 +20,12 @@ * OTHER DEALINGS IN THE SOFTWARE. */ +#include #include "runtime/gen_common/reg_configs.h" #include "unit_tests/command_queue/enqueue_copy_image_fixture.h" -#include "test.h" -#include +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "unit_tests/mocks/mock_builtin_dispatch_info_builder.h" +#include "test.h" using namespace OCLRT; @@ -119,42 +120,10 @@ HWTEST_F(EnqueueCopyImageTest, loadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueCopyImageTest, stateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueCopyImageTest, WhenEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueCopyImage(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - // All state should be programmed before walker - auto *cmd = getCommand(itorPipelineSelect, itorWalker); - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorStateBaseAddress); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueCopyImageTest, mediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_copy_image_to_buffer_tests.cpp b/unit_tests/command_queue/enqueue_copy_image_to_buffer_tests.cpp index 527df5aa75..8524946e99 100644 --- a/unit_tests/command_queue/enqueue_copy_image_to_buffer_tests.cpp +++ b/unit_tests/command_queue/enqueue_copy_image_to_buffer_tests.cpp @@ -20,11 +20,12 @@ * OTHER DEALINGS IN THE SOFTWARE. */ +#include #include "runtime/gen_common/reg_configs.h" #include "unit_tests/command_queue/enqueue_copy_image_to_buffer_fixture.h" -#include "test.h" -#include +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "unit_tests/mocks/mock_builtin_dispatch_info_builder.h" +#include "test.h" using namespace OCLRT; @@ -117,42 +118,10 @@ HWTEST_F(EnqueueCopyImageToBufferTest, loadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueCopyImageToBufferTest, stateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueCopyImageToBufferTest, WhenEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueCopyImageToBuffer(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - // All state should be programmed before walker - auto *cmd = getCommand(itorPipelineSelect, itorWalker); - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorStateBaseAddress); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueCopyImageToBufferTest, mediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_fill_buffer_tests.cpp b/unit_tests/command_queue/enqueue_fill_buffer_tests.cpp index 5127cced63..d6993fabf3 100644 --- a/unit_tests/command_queue/enqueue_fill_buffer_tests.cpp +++ b/unit_tests/command_queue/enqueue_fill_buffer_tests.cpp @@ -29,6 +29,7 @@ #include "runtime/helpers/dispatch_info.h" #include "unit_tests/command_queue/enqueue_fixture.h" #include "unit_tests/command_queue/enqueue_fill_buffer_fixture.h" +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "runtime/memory_manager/memory_manager.h" #include "test.h" @@ -236,42 +237,10 @@ HWTEST_F(EnqueueFillBufferCmdTests, LoadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueFillBufferCmdTests, StateBaseAddress) { - typedef typename FamilyType::PARSE PARSE; - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; +HWTEST_F(EnqueueFillBufferCmdTests, WhenEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueFillBuffer(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - auto *cmd = (STATE_BASE_ADDRESS *)cmdStateBaseAddress; - ASSERT_NE(nullptr, cmd); - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorStateBaseAddress); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueFillBufferCmdTests, MediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_fill_image_tests.cpp b/unit_tests/command_queue/enqueue_fill_image_tests.cpp index c01b643f85..483454a247 100644 --- a/unit_tests/command_queue/enqueue_fill_image_tests.cpp +++ b/unit_tests/command_queue/enqueue_fill_image_tests.cpp @@ -20,11 +20,12 @@ * OTHER DEALINGS IN THE SOFTWARE. */ +#include #include "runtime/gen_common/reg_configs.h" #include "unit_tests/command_queue/enqueue_fill_image_fixture.h" -#include "test.h" -#include +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "runtime/helpers/convert_color.h" +#include "test.h" using namespace OCLRT; @@ -127,42 +128,10 @@ HWTEST_F(EnqueueFillImageTest, loadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueFillImageTest, stateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueFillImageTest, WhenEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueFillImage(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - // All state should be programmed before walker - auto *cmd = getCommand(itorPipelineSelect, itorWalker); - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorStateBaseAddress); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueFillImageTest, mediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_kernel_tests.cpp b/unit_tests/command_queue/enqueue_kernel_tests.cpp index 5409df6826..3858a06b97 100644 --- a/unit_tests/command_queue/enqueue_kernel_tests.cpp +++ b/unit_tests/command_queue/enqueue_kernel_tests.cpp @@ -29,6 +29,7 @@ #include "unit_tests/command_queue/enqueue_fixture.h" #include "unit_tests/fixtures/hello_world_fixture.h" #include "unit_tests/fixtures/memory_management_fixture.h" +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "unit_tests/helpers/hw_parse.h" #include "unit_tests/helpers/debug_manager_state_restore.h" #include "unit_tests/mocks/mock_csr.h" @@ -442,51 +443,11 @@ HWTEST_P(EnqueueWorkItemTests, LoadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_P(EnqueueWorkItemTests, StateBaseAddress) { - typedef typename FamilyType::PARSE PARSE; - typedef typename PARSE::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; +HWTEST_P(EnqueueWorkItemTests, WhenEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueKernel(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - // All state should be programmed before walker - auto itorCmd = find(itorPipelineSelect, itorWalker); - ASSERT_NE(itorWalker, itorCmd); - - auto *cmd = (STATE_BASE_ADDRESS *)*itorCmd; - - bool force32BitAddressing = context->getMemoryManager()->peekForce32BitAllocations(); - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - if (force32BitAddressing) { - EXPECT_EQ(context->getMemoryManager()->allocator32Bit->getBase(), cmd->getGeneralStateBaseAddress()); - } else { - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - } - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - PARSE::template validateCommand(cmdList.begin(), itorCmd); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, + context->getMemoryManager()->peekForce32BitAllocations() ? context->getMemoryManager()->allocator32Bit->getBase() : 0llu); } HWTEST_P(EnqueueWorkItemTests, MediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_read_buffer_rect_tests.cpp b/unit_tests/command_queue/enqueue_read_buffer_rect_tests.cpp index bff092b1ca..991f615402 100644 --- a/unit_tests/command_queue/enqueue_read_buffer_rect_tests.cpp +++ b/unit_tests/command_queue/enqueue_read_buffer_rect_tests.cpp @@ -20,11 +20,12 @@ * OTHER DEALINGS IN THE SOFTWARE. */ -#include "unit_tests/command_queue/enqueue_read_buffer_rect_fixture.h" #include "runtime/built_ins/built_ins.h" #include "runtime/gen_common/reg_configs.h" #include "runtime/helpers/dispatch_info.h" #include "runtime/memory_manager/memory_constants.h" +#include "unit_tests/command_queue/enqueue_read_buffer_rect_fixture.h" +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "test.h" using namespace OCLRT; @@ -229,45 +230,10 @@ HWTEST_F(EnqueueReadBufferRectTest, 2D_LoadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueReadBufferRectTest, 2D_StateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueReadBufferRectTest, When2DEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueReadBufferRect2D(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - // All state should be programmed before walker - auto itorCmd = find(itorPipelineSelect, itorWalker); - ASSERT_NE(itorWalker, itorCmd); - - auto *cmd = (STATE_BASE_ADDRESS *)*itorCmd; - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorCmd); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueReadBufferRectTest, 2D_MediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_read_buffer_tests.cpp b/unit_tests/command_queue/enqueue_read_buffer_tests.cpp index 7d0a9bf7e5..dff90c07a2 100644 --- a/unit_tests/command_queue/enqueue_read_buffer_tests.cpp +++ b/unit_tests/command_queue/enqueue_read_buffer_tests.cpp @@ -25,6 +25,7 @@ #include "runtime/helpers/cache_policy.h" #include "runtime/helpers/dispatch_info.h" #include "unit_tests/command_queue/enqueue_fixture.h" +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "unit_tests/command_queue/enqueue_read_buffer_fixture.h" #include "unit_tests/helpers/debug_manager_state_restore.h" #include "test.h" @@ -193,46 +194,11 @@ HWTEST_F(EnqueueReadBufferTypeTest, LoadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueReadBufferTypeTest, StateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueReadBufferTypeTest, WhenEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { srcBuffer->forceDisallowCPUCopy = true; enqueueReadBuffer(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - // All state should be programmed before walker - auto itorCmd = find(itorPipelineSelect, itorWalker); - ASSERT_NE(itorWalker, itorCmd); - - auto *cmd = (STATE_BASE_ADDRESS *)*itorCmd; - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorCmd); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueReadBufferTypeTest, MediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_read_image_tests.cpp b/unit_tests/command_queue/enqueue_read_image_tests.cpp index 167d50356e..70d686b66e 100644 --- a/unit_tests/command_queue/enqueue_read_image_tests.cpp +++ b/unit_tests/command_queue/enqueue_read_image_tests.cpp @@ -22,8 +22,9 @@ #include "runtime/gen_common/reg_configs.h" #include "unit_tests/command_queue/enqueue_read_image_fixture.h" -#include "test.h" +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "unit_tests/mocks/mock_builtin_dispatch_info_builder.h" +#include "test.h" using namespace OCLRT; @@ -127,42 +128,10 @@ HWTEST_F(EnqueueReadImageTest, loadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueReadImageTest, stateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueReadImageTest, WhenEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueReadImage(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - // All state should be programmed before walker - auto *cmd = getCommand(itorPipelineSelect, itorWalker); - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorStateBaseAddress); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueReadImageTest, mediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_write_buffer_rect_tests.cpp b/unit_tests/command_queue/enqueue_write_buffer_rect_tests.cpp index 9151902cf0..8a27b55688 100644 --- a/unit_tests/command_queue/enqueue_write_buffer_rect_tests.cpp +++ b/unit_tests/command_queue/enqueue_write_buffer_rect_tests.cpp @@ -25,6 +25,7 @@ #include "runtime/helpers/dispatch_info.h" #include "unit_tests/command_queue/enqueue_write_buffer_rect_fixture.h" #include "unit_tests/fixtures/buffer_fixture.h" +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "test.h" using namespace OCLRT; @@ -203,45 +204,10 @@ HWTEST_F(EnqueueWriteBufferRectTest, 2D_LoadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueWriteBufferRectTest, 2D_StateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueWriteBufferRectTest, When2DEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueWriteBufferRect2D(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - // All state should be programmed before walker - auto itorCmd = find(itorPipelineSelect, itorWalker); - ASSERT_NE(itorWalker, itorCmd); - - auto *cmd = (STATE_BASE_ADDRESS *)*itorCmd; - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorCmd); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueWriteBufferRectTest, 2D_MediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_write_buffer_tests.cpp b/unit_tests/command_queue/enqueue_write_buffer_tests.cpp index 56c064fa99..f403f7ead5 100644 --- a/unit_tests/command_queue/enqueue_write_buffer_tests.cpp +++ b/unit_tests/command_queue/enqueue_write_buffer_tests.cpp @@ -25,6 +25,7 @@ #include "runtime/gen_common/reg_configs.h" #include "runtime/helpers/dispatch_info.h" #include "unit_tests/command_queue/enqueue_fixture.h" +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "unit_tests/helpers/debug_manager_state_restore.h" #include "test.h" @@ -188,46 +189,12 @@ HWTEST_F(EnqueueWriteBufferTypeTest, LoadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueWriteBufferTypeTest, StateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueWriteBufferTypeTest, WhenEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { srcBuffer->forceDisallowCPUCopy = true; enqueueWriteBuffer(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - // All state should be programmed before walker - auto itorCmd = find(itorPipelineSelect, itorWalker); - ASSERT_NE(itorWalker, itorCmd); - - auto *cmd = (STATE_BASE_ADDRESS *)*itorCmd; - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorCmd); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueWriteBufferTypeTest, MediaInterfaceDescriptorLoad) { diff --git a/unit_tests/command_queue/enqueue_write_image_tests.cpp b/unit_tests/command_queue/enqueue_write_image_tests.cpp index 4d1aac7e3f..837e7f6909 100644 --- a/unit_tests/command_queue/enqueue_write_image_tests.cpp +++ b/unit_tests/command_queue/enqueue_write_image_tests.cpp @@ -20,11 +20,12 @@ * OTHER DEALINGS IN THE SOFTWARE. */ -#include "unit_tests/command_queue/enqueue_write_image_fixture.h" -#include "runtime/memory_manager/memory_manager.h" -#include "test.h" #include "runtime/gen_common/reg_configs.h" +#include "runtime/memory_manager/memory_manager.h" +#include "unit_tests/command_queue/enqueue_write_image_fixture.h" +#include "unit_tests/gen_common/gen_commands_common_validation.h" #include "unit_tests/mocks/mock_builtin_dispatch_info_builder.h" +#include "test.h" using namespace OCLRT; @@ -128,42 +129,10 @@ HWTEST_F(EnqueueWriteImageTest, loadRegisterImmediateL3CNTLREG) { EXPECT_NE(0u, L3ClientPool); } -HWTEST_F(EnqueueWriteImageTest, stateBaseAddress) { - typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; - +HWTEST_F(EnqueueWriteImageTest, WhenEnqueueIsDoneThenStateBaseAddressIsProperlyProgrammed) { enqueueWriteImage(); - auto internalHeapBase = this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(); - - // All state should be programmed before walker - auto *cmd = getCommand(itorPipelineSelect, itorWalker); - - // Verify all addresses are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); - - EXPECT_EQ((uintptr_t)pDSH->getCpuBase(), cmd->getDynamicStateBaseAddress()); - // Stateless accesses require GSH.base to be 0. - EXPECT_EQ(0u, cmd->getGeneralStateBaseAddress()); - EXPECT_EQ((uintptr_t)pSSH->getCpuBase(), cmd->getSurfaceStateBaseAddress()); - EXPECT_EQ((uintptr_t)pIOH->getCpuBase(), cmd->getIndirectObjectBaseAddress()); - EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); - - // Verify all sizes are getting programmed - EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); - EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); - - EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); - EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); - EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); - EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); - - // Generically validate this command - FamilyType::PARSE::template validateCommand(cmdList.begin(), itorStateBaseAddress); + validateStateBaseAddress(this->pDevice->getCommandStreamReceiver().getMemoryManager()->getInternalHeapBaseAddress(), + pDSH, pIOH, pSSH, itorPipelineSelect, itorWalker, cmdList, 0llu); } HWTEST_F(EnqueueWriteImageTest, mediaInterfaceDescriptorLoad) { diff --git a/unit_tests/gen_common/CMakeLists.txt b/unit_tests/gen_common/CMakeLists.txt index 7a86f47007..e4b4fe3820 100644 --- a/unit_tests/gen_common/CMakeLists.txt +++ b/unit_tests/gen_common/CMakeLists.txt @@ -22,6 +22,7 @@ set(IGDRCL_SRCS_tests_gen_common ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/gen_cmd_parse.h ${CMAKE_CURRENT_SOURCE_DIR}/gen_cmd_parse_base.h + ${CMAKE_CURRENT_SOURCE_DIR}/gen_commands_common_validation.h ${CMAKE_CURRENT_SOURCE_DIR}/matchers.h ${CMAKE_CURRENT_SOURCE_DIR}/test.h ) diff --git a/unit_tests/gen_common/gen_commands_common_validation.h b/unit_tests/gen_common/gen_commands_common_validation.h new file mode 100644 index 0000000000..3b14f54415 --- /dev/null +++ b/unit_tests/gen_common/gen_commands_common_validation.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2018, Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#pragma once + +#include +#include "runtime/memory_manager/memory_constants.h" +#include "runtime/indirect_heap/indirect_heap.h" +#include "unit_tests/gen_common/gen_cmd_parse.h" +#include "unit_tests/gen_common/gen_commands_common_validation.h" +#include "test.h" + +namespace OCLRT { +template +void validateStateBaseAddress(uint64_t internalHeapBase, IndirectHeap *pDSH, + IndirectHeap *pIOH, + IndirectHeap *pSSH, + GenCmdList::iterator &startCommand, + GenCmdList::iterator &endCommand, + GenCmdList &cmdList, + uint64_t expectedGeneralStateHeapBaseAddress) { + typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; + // All state should be programmed before walker + auto itorCmd = find(startCommand, endCommand); + ASSERT_NE(endCommand, itorCmd); + + auto *cmd = (STATE_BASE_ADDRESS *)*itorCmd; + + // Verify all addresses are getting programmed + EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable()); + EXPECT_TRUE(cmd->getGeneralStateBaseAddressModifyEnable()); + EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable()); + EXPECT_TRUE(cmd->getIndirectObjectBaseAddressModifyEnable()); + EXPECT_TRUE(cmd->getInstructionBaseAddressModifyEnable()); + + EXPECT_EQ(static_cast(reinterpret_cast(pDSH->getCpuBase())), cmd->getDynamicStateBaseAddress()); + // Stateless accesses require GSH.base to be 0. + EXPECT_EQ(expectedGeneralStateHeapBaseAddress, cmd->getGeneralStateBaseAddress()); + EXPECT_EQ(static_cast(reinterpret_cast(pSSH->getCpuBase())), cmd->getSurfaceStateBaseAddress()); + EXPECT_EQ(static_cast(reinterpret_cast(pIOH->getCpuBase())), cmd->getIndirectObjectBaseAddress()); + EXPECT_EQ(internalHeapBase, cmd->getInstructionBaseAddress()); + + // Verify all sizes are getting programmed + EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable()); + EXPECT_TRUE(cmd->getGeneralStateBufferSizeModifyEnable()); + EXPECT_TRUE(cmd->getIndirectObjectBufferSizeModifyEnable()); + EXPECT_TRUE(cmd->getInstructionBufferSizeModifyEnable()); + + EXPECT_EQ(pDSH->getMaxAvailableSpace(), cmd->getDynamicStateBufferSize() * MemoryConstants::pageSize); + EXPECT_NE(0u, cmd->getGeneralStateBufferSize()); + EXPECT_EQ(pIOH->getMaxAvailableSpace(), cmd->getIndirectObjectBufferSize() * MemoryConstants::pageSize); + EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, cmd->getInstructionBufferSize()); + + // Generically validate this command + FamilyType::PARSE::template validateCommand(cmdList.begin(), itorCmd); +} +} // namespace OCLRT