Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions icd/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# ~~~
# Copyright (c) 2024-2025 The Khronos Group Inc.
# Copyright (c) 2024-2025 RasterGrid Kft.
# Copyright (c) 2024-2026 The Khronos Group Inc.
# Copyright (c) 2024-2026 RasterGrid Kft.
#
# SPDX-License-Identifier: Apache-2.0
# ~~~
Expand Down Expand Up @@ -54,16 +54,23 @@ target_sources(icd PRIVATE
vksc_command_buffer.cpp
vksc_command_pool.h
vksc_command_pool.cpp
vksc_descriptor_pool.h
vksc_descriptor_pool.cpp
vksc_descriptor_set_layout.h
vksc_device.h
vksc_device.cpp
vksc_display_emulation.h
vksc_display_emulation.cpp
vksc_global.h
vksc_global.cpp
vksc_image.h
vksc_image_view.h
vksc_instance.h
vksc_instance.cpp
vksc_physical_device.h
vksc_physical_device.cpp
vksc_pipeline.h
vksc_render_pass.h
vksc_queue.h
vksc_queue.cpp
)
Expand Down
6 changes: 3 additions & 3 deletions icd/icd_env_helper.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2024-2025 The Khronos Group Inc.
* Copyright (c) 2024-2025 RasterGrid Kft.
* Copyright (c) 2024-2026 The Khronos Group Inc.
* Copyright (c) 2024-2026 RasterGrid Kft.
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand Down Expand Up @@ -53,7 +53,7 @@ class EnvironmentOverride {
~EnvironmentOverride();

private:
std::lock_guard<std::mutex> lock_;
std::unique_lock<std::mutex> lock_;
const EnvironmentHelper& env_;
};

Expand Down
17 changes: 9 additions & 8 deletions icd/icd_fault_handler.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2024-2025 The Khronos Group Inc.
* Copyright (c) 2024-2025 RasterGrid Kft.
* Copyright (c) 2024-2026 The Khronos Group Inc.
* Copyright (c) 2024-2026 RasterGrid Kft.
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand All @@ -18,31 +18,32 @@ FaultHandler::FaultHandler(uint32_t max_fault_count, const VkFaultCallbackInfo*
}

void FaultHandler::ReportFault(VkFaultLevel level, VkFaultType type) {
std::unique_lock lock(faults_mutex_);

VkFaultData fault_data = {VK_STRUCTURE_TYPE_FAULT_DATA, nullptr, level, type};

if (fault_callback_) {
fault_callback_.value().pfnFaultCallback(unrecorded_faults_.load(), 1, &fault_data);
fault_callback_.value().pfnFaultCallback(unrecorded_faults_, 1, &fault_data);
}

if (max_fault_count_ != 0) {
std::lock_guard<std::mutex> lock{faults_mutex_};

if (faults_.size() < max_fault_count_) {
faults_.push_back(fault_data);
} else {
unrecorded_faults_.store(true);
unrecorded_faults_ = true;
}
}
}

VkResult FaultHandler::GetFaultData(VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, uint32_t* pFaultCount,
VkFaultData* pFaults) {
std::lock_guard<std::mutex> lock{faults_mutex_};
std::unique_lock lock(faults_mutex_);

switch (faultQueryBehavior) {
case VkFaultQueryBehavior::VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS:
if (pUnrecordedFaults != nullptr) {
*pUnrecordedFaults = unrecorded_faults_.exchange(false);
*pUnrecordedFaults = unrecorded_faults_;
unrecorded_faults_ = false;
}

if (pFaults == nullptr) {
Expand Down
7 changes: 3 additions & 4 deletions icd/icd_fault_handler.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2024-2025 The Khronos Group Inc.
* Copyright (c) 2024-2025 RasterGrid Kft.
* Copyright (c) 2024-2026 The Khronos Group Inc.
* Copyright (c) 2024-2026 RasterGrid Kft.
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand All @@ -13,7 +13,6 @@
#include <vector>
#include <optional>
#include <utility>
#include <atomic>

namespace icd {

Expand Down Expand Up @@ -42,7 +41,7 @@ class FaultHandler {
const std::optional<FaultCallbackInfo> fault_callback_{std::nullopt};
std::mutex faults_mutex_{};
std::vector<VkFaultData> faults_{};
std::atomic_bool unrecorded_faults_{false};
bool unrecorded_faults_{false};
};

} // namespace icd
16 changes: 8 additions & 8 deletions icd/icd_log.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2024-2025 The Khronos Group Inc.
* Copyright (c) 2024-2025 RasterGrid Kft.
* Copyright (c) 2024-2026 The Khronos Group Inc.
* Copyright (c) 2024-2026 RasterGrid Kft.
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand Down Expand Up @@ -78,37 +78,37 @@ class Logger {
}

template <typename... ARGS>
void Fatal(const char* msg_id, const char* format, ARGS... args) const {
void Fatal(const char* msg_id, const char* format, ARGS&&... args) const {
Log(true, VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, msg_id, format,
std::forward<ARGS>(args)...);
}

template <typename... ARGS>
void Error(const char* msg_id, const char* format, ARGS... args) const {
void Error(const char* msg_id, const char* format, ARGS&&... args) const {
Log(false, VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, msg_id, format,
std::forward<ARGS>(args)...);
}

template <typename... ARGS>
void Warning(const char* msg_id, const char* format, ARGS... args) const {
void Warning(const char* msg_id, const char* format, ARGS&&... args) const {
Log(false, VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, msg_id, format,
std::forward<ARGS>(args)...);
}

template <typename... ARGS>
void Info(const char* msg_id, const char* format, ARGS... args) const {
void Info(const char* msg_id, const char* format, ARGS&&... args) const {
Log(false, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, msg_id, format,
std::forward<ARGS>(args)...);
}

template <typename... ARGS>
void Debug(const char* msg_id, const char* format, ARGS... args) const {
void Debug(const char* msg_id, const char* format, ARGS&&... args) const {
Log(false, VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, msg_id, format,
std::forward<ARGS>(args)...);
}

template <typename... ARGS>
void ValidationError(const char* msg_id, const char* format, ARGS... args) const {
void ValidationError(const char* msg_id, const char* format, ARGS&&... args) const {
Log(false, VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, msg_id, format,
std::forward<ARGS>(args)...);
}
Expand Down
Loading
Loading