Source Level Debugger device debugger active flag

- device flag indicating if debugger is active
- when active, proper sip kernels must be used

Change-Id: I678367cdf8fab5d4b5770e3f471246ff6d6bd112
This commit is contained in:
Hoppe, Mateusz
2018-04-06 14:25:22 +02:00
committed by sys_ocldev
parent 6bf4135def
commit 9a86f86a24
15 changed files with 72 additions and 4 deletions

View File

@ -22,6 +22,7 @@
#include "runtime/built_ins/sip.h"
#include "runtime/device/device.h"
#include "runtime/helpers/hw_helper.h"
#include "runtime/helpers/ptr_math.h"
#include "runtime/program/program.h"
#include "runtime/helpers/debug_helpers.h"
@ -94,4 +95,9 @@ size_t SipKernel::getBinarySize() const {
auto kernelInfo = program->getKernelInfo(size_t{0});
return kernelInfo->heapInfo.pKernelHeader->KernelHeapSize - kernelInfo->systemKernelOffset;
}
SipKernelType SipKernel::getSipKernelType(GFXCORE_FAMILY family, bool debuggingActive) {
auto &hwHelper = HwHelper::get(family);
return hwHelper.getSipKernelType(debuggingActive);
}
}

View File

@ -21,6 +21,7 @@
*/
#pragma once
#include "runtime/helpers/hw_info.h"
#include <cinttypes>
#include <memory>
@ -61,6 +62,7 @@ class SipKernel {
static const size_t maxDbgSurfaceSize;
GraphicsAllocation *getSipAllocation() const;
static SipKernelType getSipKernelType(GFXCORE_FAMILY family, bool debuggingActive);
protected:
SipKernelType type = SipKernelType::COUNT;

View File

@ -313,7 +313,8 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
makeResident(*preemptionCsrAllocation);
if (dispatchFlags.preemptionMode == PreemptionMode::MidThread) {
makeResident(*BuiltIns::getInstance().getSipKernel(SipKernelType::Csr, *device).getSipAllocation());
auto sipType = SipKernel::getSipKernelType(device->getHardwareInfo().pPlatform->eRenderCoreFamily, device->isSourceLevelDebuggerActive());
makeResident(*BuiltIns::getInstance().getSipKernel(sipType, *device).getSipAllocation());
}
// If the CSR has work in its CS, flush it before the task

View File

@ -90,7 +90,8 @@ void PreemptionHelper::programPreamble(LinearStream &preambleCmdStream, Device &
auto sip = reinterpret_cast<STATE_SIP *>(preambleCmdStream.getSpace(sizeof(STATE_SIP)));
sip->init();
sip->setSystemInstructionPointer(BuiltIns::getInstance().getSipKernel(SipKernelType::Csr, device).getSipAllocation()->getGpuAddressToPatch());
auto sipType = SipKernel::getSipKernelType(device.getHardwareInfo().pPlatform->eRenderCoreFamily, device.isSourceLevelDebuggerActive());
sip->setSystemInstructionPointer(BuiltIns::getInstance().getSipKernel(sipType, device).getSipAllocation()->getGpuAddressToPatch());
}
template <typename GfxFamily>

View File

@ -254,4 +254,8 @@ double Device::getPlatformHostTimerResolution() const {
GFXCORE_FAMILY Device::getRenderCoreFamily() const {
return this->getHardwareInfo().pPlatform->eRenderCoreFamily;
}
bool Device::isSourceLevelDebuggerActive() {
return deviceInfo.sourceLevelDebuggerActive;
}
} // namespace OCLRT

View File

@ -133,6 +133,7 @@ class Device : public BaseObject<_cl_device_id> {
std::vector<unsigned int> simultaneousInterops;
std::string deviceExtensions;
bool getEnabled64kbPages();
bool isSourceLevelDebuggerActive();
protected:
Device() = delete;

View File

@ -352,5 +352,7 @@ void Device::initializeCaps() {
deviceInfo.preferredGlobalAtomicAlignment = MemoryConstants::cacheLineSize;
deviceInfo.preferredLocalAtomicAlignment = MemoryConstants::cacheLineSize;
deviceInfo.preferredPlatformAtomicAlignment = MemoryConstants::cacheLineSize;
deviceInfo.sourceLevelDebuggerActive = false;
}
} // namespace OCLRT

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2017, Intel Corporation
* Copyright (c) 2017 - 2018, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@ -150,5 +150,6 @@ struct DeviceInfo {
bool packedYuvExtension;
cl_uint internalDriverVersion;
bool enabled64kbPages;
bool sourceLevelDebuggerActive;
};
// clang-format on

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2017, Intel Corporation
* Copyright (c) 2017 - 2018, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@ -37,5 +37,13 @@ bool HwHelperHw<Family>::setupPreemptionRegisters(HardwareInfo *pHwInfo, bool en
return pHwInfo->capabilityTable.whitelistedRegisters.csChicken1_0x2580;
}
template <>
SipKernelType HwHelperHw<Family>::getSipKernelType(bool debuggingActive) {
if (!debuggingActive) {
return SipKernelType::Csr;
}
return SipKernelType::DbgCsrLocal;
}
template class HwHelperHw<Family>;
} // namespace OCLRT

View File

@ -23,6 +23,7 @@
#pragma once
#include "runtime/gen_common/hw_cmds.h"
#include "runtime/command_stream/linear_stream.h"
#include "runtime/built_ins/sip.h"
#include <cstdint>
#include <type_traits>
@ -42,6 +43,7 @@ class HwHelper {
virtual bool setupPreemptionRegisters(HardwareInfo *pHwInfo, bool enable) = 0;
virtual void adjustDefaultEngineType(HardwareInfo *pHwInfo) = 0;
virtual void setupHardwareCapabilities(HardwareCapabilities *caps) = 0;
virtual SipKernelType getSipKernelType(bool debuggingActive) = 0;
protected:
HwHelper(){};
@ -87,6 +89,8 @@ class HwHelperHw : public HwHelper {
void setupHardwareCapabilities(HardwareCapabilities *caps) override;
SipKernelType getSipKernelType(bool debuggingActive) override;
private:
HwHelperHw(){};
};

View File

@ -39,4 +39,11 @@ void HwHelperHw<Family>::setupHardwareCapabilities(HardwareCapabilities *caps) {
caps->image3DMaxWidth = 16384;
}
template <typename Family>
SipKernelType HwHelperHw<Family>::getSipKernelType(bool debuggingActive) {
if (!debuggingActive) {
return SipKernelType::Csr;
}
return SipKernelType::DbgCsr;
}
} // namespace OCLRT

View File

@ -25,6 +25,7 @@
#include "runtime/built_ins/built_ins.h"
#include "runtime/built_ins/sip.h"
#include "runtime/helpers/options.h"
#include "unit_tests/global_environment.h"
#include "unit_tests/helpers/test_files.h"
#include "unit_tests/mocks/mock_device.h"
@ -114,6 +115,16 @@ TEST(Sip, givenSipKernelClassWhenAskedForMaxDebugSurfaceSizeThenCorrectValueIsRe
EXPECT_EQ(0x49c000u, SipKernel::maxDbgSurfaceSize);
}
TEST(Sip, givenDebuggingInactiveWhenSipTypeIsQueriedThenCsrSipTypeIsReturned) {
auto sipType = SipKernel::getSipKernelType(renderCoreFamily, false);
EXPECT_EQ(SipKernelType::Csr, sipType);
}
TEST(DebugSip, givenDebuggingActiveWhenSipTypeIsQueriedThenDbgCsrSipTypeIsReturned) {
auto sipType = SipKernel::getSipKernelType(renderCoreFamily, true);
EXPECT_LE(SipKernelType::DbgCsr, sipType);
}
TEST(DebugSip, WhenRequestingDbgCsrSipKernelThenProperCompilerInternalOptionsAreReturned) {
const char *opt = getSipKernelCompilerInternalOptions(SipKernelType::DbgCsr);
ASSERT_NE(nullptr, opt);

View File

@ -64,3 +64,10 @@ GEN9TEST_F(HwHelperTestSkl, givenGen9PlatformWhenSetupHardwareCapabilitiesIsCall
// Test default method implementation
testDefaultImplementationOfSetupHardwareCapabilities(helper);
}
GEN9TEST_F(HwHelperTestSkl, givenDebuggingActiveWhenSipKernelTypeIsQueriedThenDbgCsrLocalTypeIsReturned) {
auto &helper = HwHelper::get(renderCoreFamily);
auto sipType = helper.getSipKernelType(true);
EXPECT_EQ(SipKernelType::DbgCsrLocal, sipType);
}

View File

@ -58,4 +58,9 @@ GEN9TEST_F(gen9SipTests, DISABLED_givenDebugCsrSipKernelWithLocalMemoryWhenAsked
gEnvironment->igcPopDebugVars();
}
GEN9TEST_F(gen9SipTests, givenDebuggingActiveWhenSipTypeIsQueriedThenDbgCsrLocalIsReturned) {
auto sipType = SipKernel::getSipKernelType(renderCoreFamily, true);
EXPECT_EQ(SipKernelType::DbgCsrLocal, sipType);
}
} // namespace SipKernelTests

View File

@ -75,6 +75,14 @@ HWTEST_F(HwHelperTest, getInterfaceDescriptorDataSizeReturnsCorrectSize) {
EXPECT_EQ(sizeof(INTERFACE_DESCRIPTOR_DATA), helper.getInterfaceDescriptorDataSize());
}
HWTEST_F(HwHelperTest, givenDebuggingInactiveWhenSipKernelTypeIsQueriedThenCsrTypeIsReturned) {
auto &helper = HwHelper::get(renderCoreFamily);
EXPECT_NE(nullptr, &helper);
auto sipType = helper.getSipKernelType(false);
EXPECT_EQ(SipKernelType::Csr, sipType);
}
TEST(DwordBuilderTest, setNonMaskedBits) {
uint32_t dword = 0;