2023-03-08 00:39:25 +08:00
|
|
|
/*
|
2025-02-17 19:26:17 +08:00
|
|
|
* Copyright (C) 2023-2025 Intel Corporation
|
2023-03-08 00:39:25 +08:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
#include "shared/source/helpers/constants.h"
|
2023-10-05 19:21:51 +08:00
|
|
|
#include "shared/source/helpers/non_copyable_or_moveable.h"
|
2023-03-08 00:39:25 +08:00
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
#include <mutex>
|
|
|
|
namespace NEO {
|
|
|
|
class Device;
|
|
|
|
class GraphicsAllocation;
|
|
|
|
|
|
|
|
#pragma pack(1)
|
|
|
|
|
|
|
|
struct AssertBufferHeader {
|
|
|
|
uint32_t size = 0;
|
|
|
|
uint32_t flags = 0;
|
|
|
|
uint32_t begin = 0;
|
|
|
|
};
|
|
|
|
|
|
|
|
static_assert(sizeof(AssertBufferHeader) == 3u * sizeof(uint32_t));
|
|
|
|
|
|
|
|
#pragma pack()
|
|
|
|
|
2025-02-17 19:26:17 +08:00
|
|
|
class AssertHandler : NonCopyableAndNonMovableClass {
|
2023-03-08 00:39:25 +08:00
|
|
|
public:
|
|
|
|
AssertHandler(Device *device);
|
|
|
|
MOCKABLE_VIRTUAL ~AssertHandler();
|
|
|
|
|
|
|
|
GraphicsAllocation *getAssertBuffer() const {
|
|
|
|
return assertBuffer;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool checkAssert() const;
|
2023-03-13 22:14:35 +08:00
|
|
|
MOCKABLE_VIRTUAL void printAssertAndAbort();
|
2023-03-08 00:39:25 +08:00
|
|
|
|
|
|
|
protected:
|
|
|
|
static constexpr size_t assertBufferSize = MemoryConstants::pageSize64k;
|
|
|
|
void printMessage() const;
|
|
|
|
|
|
|
|
std::mutex mtx;
|
|
|
|
const Device *device = nullptr;
|
|
|
|
GraphicsAllocation *assertBuffer = nullptr;
|
|
|
|
};
|
|
|
|
} // namespace NEO
|