From 15c513fecf7024e357b4219041f46ff61afc9165 Mon Sep 17 00:00:00 2001 From: Artem Kharytoniuk Date: Wed, 29 Jan 2025 12:17:52 +0100 Subject: [PATCH] sync: Wip --- layers/sync/sync_commandbuffer.h | 5 ++--- layers/sync/sync_reporting.cpp | 5 ----- tests/unit/sync_val.cpp | 30 ++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/layers/sync/sync_commandbuffer.h b/layers/sync/sync_commandbuffer.h index 92ab325bc62..3e2e22a2cfb 100644 --- a/layers/sync/sync_commandbuffer.h +++ b/layers/sync/sync_commandbuffer.h @@ -1,6 +1,6 @@ /* - * Copyright (c) 2019-2024 Valve Corporation - * Copyright (c) 2019-2024 LunarG, Inc. + * Copyright (c) 2019-2025 Valve Corporation + * Copyright (c) 2019-2025 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -214,7 +214,6 @@ class CommandExecutionContext { virtual void AddUsageRecordExtraProperties(ResourceUsageTag tag, ReportKeyValues &extra_properties) const = 0; std::string FormatHazard(const HazardResult &hazard, ReportKeyValues &key_values) const; - std::string FormatHazard(const HazardResult &hazard) const; bool ValidForSyncOps() const; const SyncValidator &GetSyncState() const { return sync_state_; } diff --git a/layers/sync/sync_reporting.cpp b/layers/sync/sync_reporting.cpp index 8fbdeea91d9..ca09ab01485 100644 --- a/layers/sync/sync_reporting.cpp +++ b/layers/sync/sync_reporting.cpp @@ -403,11 +403,6 @@ std::string CommandExecutionContext::FormatHazard(const HazardResult &hazard, Re return out.str(); } -std::string CommandExecutionContext::FormatHazard(const HazardResult &hazard) const { - ReportKeyValues key_values; - return FormatHazard(hazard, key_values); -} - std::string CommandBufferAccessContext::FormatUsage(ResourceUsageTagEx tag_ex) const { if (tag_ex.tag >= access_log_->size()) return std::string(); diff --git a/tests/unit/sync_val.cpp b/tests/unit/sync_val.cpp index 22cb089cdcd..394f35dab5b 100644 --- a/tests/unit/sync_val.cpp +++ b/tests/unit/sync_val.cpp @@ -76,6 +76,36 @@ TEST_F(NegativeSyncVal, BufferCopy) { m_command_buffer.End(); } +TEST_F(NegativeSyncVal, BufferCopyWrongBarrier) { + TEST_DESCRIPTION("Buffer barrier does not specify proper dst stage/access"); + SetTargetApiVersion(VK_API_VERSION_1_3); + AddRequiredFeature(vkt::Feature::synchronization2); + RETURN_IF_SKIP(InitSyncVal()); + + vkt::Buffer buffer_a(*m_device, 256, VK_BUFFER_USAGE_TRANSFER_SRC_BIT); + vkt::Buffer buffer_b(*m_device, 256, VK_BUFFER_USAGE_TRANSFER_DST_BIT); + + VkBufferMemoryBarrier2 barrier = vku::InitStructHelper(); + barrier.srcStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT; + barrier.srcAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT; + barrier.dstStageMask = VK_PIPELINE_STAGE_2_CLEAR_BIT; + barrier.dstAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT; + barrier.buffer = buffer_b; + barrier.size = 256; + + VkDependencyInfo dep_info = vku::InitStructHelper(); + dep_info.bufferMemoryBarrierCount = 1; + dep_info.pBufferMemoryBarriers = &barrier; + + m_command_buffer.Begin(); + m_command_buffer.Copy(buffer_a, buffer_b); + vk::CmdPipelineBarrier2(m_command_buffer, &dep_info); + m_errorMonitor->SetDesiredError("SYNC-HAZARD-WRITE-AFTER-WRITE"); + m_command_buffer.Copy(buffer_a, buffer_b); + m_errorMonitor->VerifyFound(); + m_command_buffer.End(); +} + TEST_F(NegativeSyncVal, BufferCopySecondary) { TEST_DESCRIPTION("Record buffer copy commands in secondary command buffers"); RETURN_IF_SKIP(InitSyncVal());