mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-23 03:33:13 +08:00
feature: force stateless for copy image to buffer
Related-to: NEO-6075 Signed-off-by: Damian Tomczak <damian.tomczak@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
0b8fab0713
commit
a9278e1799
@@ -22,6 +22,7 @@
|
||||
#include "opencl/test/unit_test/command_queue/command_queue_fixture.h"
|
||||
#include "opencl/test/unit_test/fixtures/buffer_fixture.h"
|
||||
#include "opencl/test/unit_test/fixtures/image_fixture.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_builder.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_cl_device.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_cl_execution_environment.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_command_queue.h"
|
||||
@@ -31,51 +32,6 @@
|
||||
|
||||
using namespace NEO;
|
||||
|
||||
void cloneMdi(MultiDispatchInfo &dst, const MultiDispatchInfo &src) {
|
||||
for (auto &srcDi : src) {
|
||||
dst.push(srcDi);
|
||||
}
|
||||
dst.setBuiltinOpParams(src.peekBuiltinOpParams());
|
||||
}
|
||||
|
||||
struct MockBuilder : BuiltinDispatchInfoBuilder {
|
||||
using BuiltinDispatchInfoBuilder::BuiltinDispatchInfoBuilder;
|
||||
bool buildDispatchInfos(MultiDispatchInfo &d) const override {
|
||||
wasBuildDispatchInfosWithBuiltinOpParamsCalled = true;
|
||||
paramsReceived.multiDispatchInfo.setBuiltinOpParams(d.peekBuiltinOpParams());
|
||||
return true;
|
||||
}
|
||||
bool buildDispatchInfos(MultiDispatchInfo &d, Kernel *kernel,
|
||||
const uint32_t dim, const Vec3<size_t> &gws, const Vec3<size_t> &elws, const Vec3<size_t> &offset) const override {
|
||||
paramsReceived.kernel = kernel;
|
||||
paramsReceived.gws = gws;
|
||||
paramsReceived.elws = elws;
|
||||
paramsReceived.offset = offset;
|
||||
wasBuildDispatchInfosWithKernelParamsCalled = true;
|
||||
|
||||
DispatchInfoBuilder<NEO::SplitDispatch::Dim::d3D, NEO::SplitDispatch::SplitMode::noSplit> dispatchInfoBuilder(clDevice);
|
||||
dispatchInfoBuilder.setKernel(paramsToUse.kernel);
|
||||
dispatchInfoBuilder.setDispatchGeometry(dim, paramsToUse.gws, paramsToUse.elws, paramsToUse.offset);
|
||||
dispatchInfoBuilder.bake(d);
|
||||
|
||||
cloneMdi(paramsReceived.multiDispatchInfo, d);
|
||||
return true;
|
||||
}
|
||||
|
||||
mutable bool wasBuildDispatchInfosWithBuiltinOpParamsCalled = false;
|
||||
mutable bool wasBuildDispatchInfosWithKernelParamsCalled = false;
|
||||
struct Params {
|
||||
MultiDispatchInfo multiDispatchInfo;
|
||||
Kernel *kernel = nullptr;
|
||||
Vec3<size_t> gws = Vec3<size_t>{0, 0, 0};
|
||||
Vec3<size_t> elws = Vec3<size_t>{0, 0, 0};
|
||||
Vec3<size_t> offset = Vec3<size_t>{0, 0, 0};
|
||||
};
|
||||
|
||||
mutable Params paramsReceived;
|
||||
Params paramsToUse;
|
||||
};
|
||||
|
||||
using MultiIoqCmdQSynchronizationTest = CommandQueueHwBlitTest<false>;
|
||||
|
||||
HWTEST_F(MultiIoqCmdQSynchronizationTest, givenTwoIoqCmdQsWhenEnqueuesSynchronizedWithMarkersThenCorrectSynchronizationIsApplied) {
|
||||
@@ -270,9 +226,10 @@ HWTEST_F(BuiltinParamsCommandQueueHwTests, givenEnqueueWriteImageCallWhenBuiltin
|
||||
}
|
||||
|
||||
HWTEST_F(BuiltinParamsCommandQueueHwTests, givenEnqueueReadImageCallWhenBuiltinParamsArePassedThenCheckValuesCorectness) {
|
||||
|
||||
REQUIRE_IMAGES_OR_SKIP(defaultHwInfo);
|
||||
setUpImpl(EBuiltInOps::adjustBuiltinType<EBuiltInOps::copyImage3dToBuffer>(false, pCmdQ->getHeaplessModeEnabled()));
|
||||
|
||||
const bool useStateless = pDevice->getCompilerProductHelper().isForceToStatelessRequired();
|
||||
setUpImpl(EBuiltInOps::adjustBuiltinType<EBuiltInOps::copyImage3dToBuffer>(useStateless, pCmdQ->getHeaplessModeEnabled()));
|
||||
|
||||
std::unique_ptr<Image> dstImage(ImageHelperUlt<ImageUseHostPtr<Image2dDefaults>>::create(context));
|
||||
|
||||
|
||||
@@ -20,9 +20,11 @@
|
||||
#include "opencl/test/unit_test/command_queue/enqueue_read_image_fixture.h"
|
||||
#include "opencl/test/unit_test/fixtures/one_mip_level_image_fixture.h"
|
||||
#include "opencl/test/unit_test/gen_common/gen_commands_common_validation.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_builder.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_builtin_dispatch_info_builder.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_cl_execution_environment.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_command_queue.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_image.h"
|
||||
|
||||
using namespace NEO;
|
||||
|
||||
@@ -725,7 +727,9 @@ HWTEST_F(EnqueueReadImageTest, GivenImage1DarrayWhenReadImageIsCalledThenHostPtr
|
||||
HWTEST_F(EnqueueReadImageTest, GivenImage1DarrayWhenReadImageIsCalledThenRowPitchIsSetToSlicePitch) {
|
||||
auto builtIns = new MockBuiltins();
|
||||
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
|
||||
EBuiltInOps::Type copyBuiltIn = EBuiltInOps::adjustBuiltinType<EBuiltInOps::copyImage3dToBuffer>(false, pCmdQ->getHeaplessModeEnabled());
|
||||
|
||||
const bool useStateless = pDevice->getCompilerProductHelper().isForceToStatelessRequired();
|
||||
EBuiltInOps::Type copyBuiltIn = EBuiltInOps::adjustBuiltinType<EBuiltInOps::copyImage3dToBuffer>(useStateless, pCmdQ->getHeaplessModeEnabled());
|
||||
auto &origBuilder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(
|
||||
copyBuiltIn,
|
||||
pCmdQ->getClDevice());
|
||||
@@ -940,7 +944,9 @@ typedef EnqueueReadImageMipMapTest MipMapReadImageTest;
|
||||
HWTEST_P(MipMapReadImageTest, GivenImageWithMipLevelNonZeroWhenReadImageIsCalledThenProperMipLevelIsSet) {
|
||||
auto builtIns = new MockBuiltins();
|
||||
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
|
||||
EBuiltInOps::Type eBuiltInOp = EBuiltInOps::adjustBuiltinType<EBuiltInOps::copyImage3dToBuffer>(false, pCmdQ->getHeaplessModeEnabled());
|
||||
|
||||
const bool useStateless = pDevice->getCompilerProductHelper().isForceToStatelessRequired();
|
||||
EBuiltInOps::Type eBuiltInOp = EBuiltInOps::adjustBuiltinType<EBuiltInOps::copyImage3dToBuffer>(useStateless, pCmdQ->getHeaplessModeEnabled());
|
||||
auto imageType = (cl_mem_object_type)GetParam();
|
||||
auto &origBuilder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(
|
||||
eBuiltInOp,
|
||||
@@ -1243,4 +1249,62 @@ HWTEST_F(ReadImageStagingBufferTest, whenEnqueueStagingReadImageCalledFor3DImage
|
||||
EXPECT_EQ(2ul, mockCommandQueueHw.enqueueReadImageCounter);
|
||||
auto &csr = pDevice->getUltCommandStreamReceiver<FamilyType>();
|
||||
EXPECT_EQ(0u, csr.createAllocationForHostSurfaceCalled);
|
||||
}
|
||||
|
||||
HWTEST_F(EnqueueReadImageTest, given4gbImageAndIsForceStatelessIsFalseWhenEnqueueReadImageCallThenSuccessIsReturned) {
|
||||
struct FourGbMockImage : MockImageBase {
|
||||
size_t getSize() const override { return static_cast<size_t>(4ull * MemoryConstants::gigaByte); }
|
||||
};
|
||||
|
||||
REQUIRE_IMAGES_OR_SKIP(defaultHwInfo);
|
||||
if (is32bit) {
|
||||
GTEST_SKIP();
|
||||
}
|
||||
|
||||
auto mockCmdQ = static_cast<MockCommandQueueHw<FamilyType> *>(pCmdQ);
|
||||
mockCmdQ->isForceStateless = false;
|
||||
|
||||
EBuiltInOps::Type copyBuiltIn = EBuiltInOps::adjustBuiltinType<EBuiltInOps::copyImage3dToBuffer>(true, pCmdQ->getHeaplessModeEnabled());
|
||||
|
||||
auto builtIns = new MockBuiltins();
|
||||
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
|
||||
|
||||
// substitute original builder with mock builder
|
||||
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
|
||||
rootDeviceIndex,
|
||||
copyBuiltIn,
|
||||
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, pCmdQ->getClDevice())));
|
||||
|
||||
FourGbMockImage srcImage;
|
||||
auto imageDesc = srcImage.getImageDesc();
|
||||
size_t origin[] = {0, 0, 0};
|
||||
size_t region[] = {imageDesc.image_width, imageDesc.image_height, 0};
|
||||
char ptr[1] = {};
|
||||
|
||||
auto mockBuilder = static_cast<MockBuilder *>(&BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(
|
||||
copyBuiltIn,
|
||||
*pClDevice));
|
||||
|
||||
EXPECT_FALSE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
|
||||
|
||||
auto status = mockCmdQ->enqueueReadImage(&srcImage,
|
||||
CL_FALSE,
|
||||
origin,
|
||||
region,
|
||||
0,
|
||||
0,
|
||||
ptr,
|
||||
nullptr,
|
||||
0,
|
||||
0,
|
||||
nullptr);
|
||||
EXPECT_EQ(CL_SUCCESS, status);
|
||||
EXPECT_TRUE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
|
||||
|
||||
// restore original builder and retrieve mock builder
|
||||
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
|
||||
rootDeviceIndex,
|
||||
copyBuiltIn,
|
||||
std::move(oldBuilder));
|
||||
EXPECT_EQ(mockBuilder, newBuilder.get());
|
||||
}
|
||||
Reference in New Issue
Block a user