mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
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:

committed by
sys_ocldev

parent
7dfe4be225
commit
8de1314cda
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
)
|
@ -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());
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
Reference in New Issue
Block a user