/* * Copyright (C) 2018-2021 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "shared/source/command_stream/preemption_mode.h" #include "shared/test/common/helpers/debug_manager_state_restore.h" #include "test.h" #include "gtest/gtest.h" #include #include #include #include namespace iOpenCL { struct SPatchExecutionEnvironment; } namespace NEO { class MockCommandQueue; class MockContext; class MockDevice; class MockProgram; struct KernelInfo; struct WorkaroundTable; } // namespace NEO class DevicePreemptionTests : public ::testing::Test { public: void SetUp() override; void TearDown() override; DevicePreemptionTests(); ~DevicePreemptionTests() override; NEO::PreemptionMode preemptionMode; NEO::WorkaroundTable *waTable = nullptr; std::unique_ptr device; std::unique_ptr dbgRestore; std::unique_ptr executionEnvironment; }; struct PreemptionTestHwDetails { struct PreemptionModeHashT { auto operator()(const NEO::PreemptionMode &preemptionMode) const -> std::underlying_type::type { return static_cast::type>(preemptionMode); } }; bool supportsPreemptionProgramming() const { return modeToRegValueMap.size() > 0; } uint32_t regAddress = 0; std::unordered_map modeToRegValueMap; uint32_t defaultRegValue = 0; }; template PreemptionTestHwDetails GetPreemptionTestHwDetails();