Setup BindlessSurfaceStateBaseAddress in SBA

Related-To: NEO-4767

Change-Id: I056c26835a169eba8fa71708c50335dd839c50af
Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
Mateusz Hoppe
2020-07-29 16:04:23 +02:00
committed by sys_ocldev
parent 7dfe4be225
commit 8de1314cda
5 changed files with 37 additions and 19 deletions

View File

@ -18,7 +18,7 @@ void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
GmmHelper *gmmHelper,
bool isMultiOsContextCapable) {
if (DebugManager.flags.UseBindlessBuffers.get() != 0 || DebugManager.flags.UseBindlessImages.get() != 0) {
if (ssh) {
stateBaseAddress->setBindlessSurfaceStateBaseAddressModifyEnable(true);
stateBaseAddress->setBindlessSurfaceStateBaseAddress(ssh->getHeapGpuBase());
uint32_t size = uint32_t(ssh->getMaxAvailableSpace() / 64) - 1;

View File

@ -9,7 +9,6 @@ if(TESTS_GEN8)
set(NEO_CORE_TESTS_GEN8
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/simd_helper_tests_gen8.cpp
${CMAKE_CURRENT_SOURCE_DIR}/state_base_address_tests_gen8.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_preamble_gen8.cpp
)
set_property(GLOBAL PROPERTY NEO_CORE_TESTS_GEN8 ${NEO_CORE_TESTS_GEN8})
@ -18,6 +17,7 @@ if(TESTS_GEN8)
target_sources(${TARGET_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/image_surface_state_tests_gen8.cpp
${CMAKE_CURRENT_SOURCE_DIR}/state_base_address_tests_gen8.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_preemption_gen8.cpp
${COMPUTE_RUNTIME_ULT_GEN8}
${NEO_SOURCE_DIR}/opencl/test/unit_test/gen8/unit_test_helper_gen8.cpp

View File

@ -5,6 +5,7 @@
#
set(NEO_CORE_HELPERS_TESTS
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/blit_commands_helper_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/blit_commands_helper_tests.inl
${CMAKE_CURRENT_SOURCE_DIR}/blit_commands_helper_tests_gen12lp.cpp
@ -20,8 +21,6 @@ set(NEO_CORE_HELPERS_TESTS
${CMAKE_CURRENT_SOURCE_DIR}/memory_leak_listener.h
${CMAKE_CURRENT_SOURCE_DIR}/memory_management.h
${CMAKE_CURRENT_SOURCE_DIR}/simd_helper_tests.inl
${CMAKE_CURRENT_SOURCE_DIR}/state_base_address_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/state_base_address_tests.h
${CMAKE_CURRENT_SOURCE_DIR}/string_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/string_to_hash_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/ult_hw_config.h
@ -32,3 +31,9 @@ set(NEO_CORE_HELPERS_TESTS
set_property(GLOBAL PROPERTY NEO_CORE_HELPERS_TESTS ${NEO_CORE_HELPERS_TESTS})
add_subdirectories()
target_sources(${TARGET_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/state_base_address_tests.h
${CMAKE_CURRENT_SOURCE_DIR}/state_base_address_tests.cpp
)

View File

@ -9,13 +9,11 @@
using IsBetweenSklAndTgllp = IsWithinProducts<IGFX_SKYLAKE, IGFX_TIGERLAKE_LP>;
HWTEST2_F(SBATest, givenUsedBindlessBuffersWhenAppendStateBaseAddressParametersIsCalledThenSBACmdHasBindingSurfaceStateProgrammed, IsBetweenSklAndTgllp) {
HWTEST2_F(SBATest, WhenAppendStateBaseAddressParametersIsCalledThenSBACmdHasBindingSurfaceStateProgrammed, IsBetweenSklAndTgllp) {
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
EXPECT_NE(IGFX_BROADWELL, ::productFamily);
DebugManager.flags.UseBindlessBuffers.set(1);
STATE_BASE_ADDRESS stateBaseAddress;
stateBaseAddress.setBindlessSurfaceStateSize(0);
stateBaseAddress.setBindlessSurfaceStateBaseAddress(0);
@ -34,27 +32,34 @@ HWTEST2_F(SBATest, givenUsedBindlessBuffersWhenAppendStateBaseAddressParametersI
EXPECT_TRUE(stateBaseAddress.getBindlessSurfaceStateBaseAddressModifyEnable());
}
HWTEST2_F(SBATest, givenUsedBindlessImagesWhenAppendStateBaseAddressParametersIsCalledThenSBACmdHasBindingSurfaceStateProgrammed, IsBetweenSklAndTgllp) {
using IsSklOrAbove = IsAtLeastProduct<IGFX_SKYLAKE>;
HWTEST2_F(SBATest, WhenProgramStateBaseAddressParametersIsCalledThenSBACmdHasBindingSurfaceStateProgrammed, IsSklOrAbove) {
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
EXPECT_NE(IGFX_BROADWELL, ::productFamily);
DebugManager.flags.UseBindlessImages.set(1);
STATE_BASE_ADDRESS stateBaseAddress;
stateBaseAddress.setBindlessSurfaceStateSize(0);
stateBaseAddress.setBindlessSurfaceStateBaseAddress(0);
stateBaseAddress.setBindlessSurfaceStateBaseAddressModifyEnable(false);
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(
&stateBaseAddress,
STATE_BASE_ADDRESS *cmd = reinterpret_cast<STATE_BASE_ADDRESS *>(commandStream.getSpace(0));
*cmd = stateBaseAddress;
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(
commandStream,
nullptr,
nullptr,
&ssh,
0,
false,
0,
nullptr,
false);
0,
false,
pDevice->getGmmHelper(),
true);
EXPECT_EQ(ssh.getMaxAvailableSpace() / 64 - 1, stateBaseAddress.getBindlessSurfaceStateSize());
EXPECT_EQ(ssh.getHeapGpuBase(), stateBaseAddress.getBindlessSurfaceStateBaseAddress());
EXPECT_TRUE(stateBaseAddress.getBindlessSurfaceStateBaseAddressModifyEnable());
EXPECT_EQ(ssh.getMaxAvailableSpace() / 64 - 1, cmd->getBindlessSurfaceStateSize());
EXPECT_EQ(ssh.getHeapGpuBase(), cmd->getBindlessSurfaceStateBaseAddress());
EXPECT_TRUE(cmd->getBindlessSurfaceStateBaseAddressModifyEnable());
}

View File

@ -8,29 +8,37 @@
#include "shared/source/command_stream/linear_stream.h"
#include "shared/source/helpers/state_base_address.h"
#include "shared/source/indirect_heap/indirect_heap.h"
#include "shared/test/unit_test/fixtures/device_fixture.h"
#include "shared/test/unit_test/helpers/debug_manager_state_restore.h"
#include "opencl/test/unit_test/mocks/mock_graphics_allocation.h"
#include "test.h"
struct SBATest : ::testing::Test {
struct SBATest : public NEO::DeviceFixture, public ::testing::Test {
void SetUp() override {
NEO::DeviceFixture::SetUp();
size_t sizeStream = 512;
size_t alignmentStream = 0x1000;
sshBuffer = alignedMalloc(sizeStream, alignmentStream);
ASSERT_NE(nullptr, sshBuffer);
ssh.replaceBuffer(sshBuffer, sizeStream);
auto graphicsAllocation = new MockGraphicsAllocation(sshBuffer, sizeStream);
ssh.replaceGraphicsAllocation(graphicsAllocation);
linearStreamBuffer = alignedMalloc(sizeStream, alignmentStream);
commandStream.replaceBuffer(linearStreamBuffer, alignmentStream);
}
void TearDown() override {
alignedFree(linearStreamBuffer);
delete ssh.getGraphicsAllocation();
alignedFree(sshBuffer);
NEO::DeviceFixture::TearDown();
}
IndirectHeap ssh = {nullptr};
void *sshBuffer = nullptr;
void *linearStreamBuffer = nullptr;
DebugManagerStateRestore restorer;
LinearStream commandStream;
};