mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 23:03:02 +08:00
refactor: add new parameter to use dedicated memory to initialize surface state
Related-To: NEO-15374 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
74f04acb88
commit
71659807c4
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Intel Corporation
|
||||
* Copyright (C) 2021-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -18,6 +18,7 @@ struct EncodeSurfaceStateArgsBase {
|
||||
size_t size = 0u;
|
||||
|
||||
void *outMemory = nullptr;
|
||||
void *inTemplateMemory = nullptr;
|
||||
|
||||
GraphicsAllocation *allocation = nullptr;
|
||||
GmmHelper *gmmHelper = nullptr;
|
||||
|
||||
@@ -684,7 +684,11 @@ template <typename GfxFamily>
|
||||
void GfxCoreHelperHw<GfxFamily>::encodeBufferSurfaceState(EncodeSurfaceStateArgs &args) const {
|
||||
using RENDER_SURFACE_STATE = typename GfxFamily::RENDER_SURFACE_STATE;
|
||||
auto surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(args.outMemory);
|
||||
*surfaceState = GfxFamily::cmdInitRenderSurfaceState;
|
||||
if (args.inTemplateMemory != nullptr) {
|
||||
*surfaceState = *reinterpret_cast<RENDER_SURFACE_STATE *>(args.inTemplateMemory);
|
||||
} else {
|
||||
*surfaceState = GfxFamily::cmdInitRenderSurfaceState;
|
||||
}
|
||||
|
||||
EncodeSurfaceState<GfxFamily>::encodeBuffer(args);
|
||||
}
|
||||
|
||||
@@ -365,6 +365,50 @@ HWTEST2_F(CommandEncodeStatesTest, givenCreatedSurfaceStateBufferWhenGpuCoherenc
|
||||
alignedFree(stateBuffer);
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandEncodeStatesTest, givenTemplateSurfaceStateBufferWhenEncodingSurfaceStateAndTemplatePointerSetThenUseTemplateMemory, MatchAny) {
|
||||
using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE;
|
||||
|
||||
void *templateStateBuffer = alignedMalloc(sizeof(RENDER_SURFACE_STATE), sizeof(RENDER_SURFACE_STATE));
|
||||
ASSERT_NE(nullptr, templateStateBuffer);
|
||||
RENDER_SURFACE_STATE *templateState = reinterpret_cast<RENDER_SURFACE_STATE *>(templateStateBuffer);
|
||||
|
||||
// set unique field not used in encoder
|
||||
constexpr uint32_t pitch = 4;
|
||||
templateState->setSurfacePitch(pitch);
|
||||
|
||||
void *stateBuffer = alignedMalloc(sizeof(RENDER_SURFACE_STATE), sizeof(RENDER_SURFACE_STATE));
|
||||
ASSERT_NE(nullptr, stateBuffer);
|
||||
RENDER_SURFACE_STATE *state = reinterpret_cast<RENDER_SURFACE_STATE *>(stateBuffer);
|
||||
|
||||
memset(stateBuffer, 0, sizeof(RENDER_SURFACE_STATE));
|
||||
|
||||
size_t size = 0x1000;
|
||||
uint64_t gpuAddr = 0;
|
||||
|
||||
NEO::EncodeSurfaceStateArgs args;
|
||||
args.outMemory = stateBuffer;
|
||||
args.inTemplateMemory = templateStateBuffer;
|
||||
args.graphicsAddress = gpuAddr;
|
||||
args.size = size;
|
||||
args.mocs = 1;
|
||||
args.cpuCoherent = false;
|
||||
args.numAvailableDevices = 1;
|
||||
args.gmmHelper = pDevice->getGmmHelper();
|
||||
args.areMultipleSubDevicesInContext = false;
|
||||
|
||||
pDevice->getGfxCoreHelper().encodeBufferSurfaceState(args);
|
||||
EXPECT_EQ(pitch, state->getSurfacePitch());
|
||||
|
||||
memset(stateBuffer, 0, sizeof(RENDER_SURFACE_STATE));
|
||||
args.inTemplateMemory = nullptr;
|
||||
|
||||
pDevice->getGfxCoreHelper().encodeBufferSurfaceState(args);
|
||||
EXPECT_EQ(1u, state->getSurfacePitch()); // getter adds 1 to default value 0
|
||||
|
||||
alignedFree(stateBuffer);
|
||||
alignedFree(templateStateBuffer);
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandEncodeStatesTest, givenCommandContainerWithDirtyHeapsWhenSetStateBaseAddressCalledThenStateBaseAddressAreNotSet, IsHeapfulSupported) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
cmdContainer->dirtyHeaps = 0;
|
||||
|
||||
Reference in New Issue
Block a user