diff --git a/wsi/extensions/image_compression_control.cpp b/wsi/extensions/image_compression_control.cpp index 2cbf7d8..a76aab3 100644 --- a/wsi/extensions/image_compression_control.cpp +++ b/wsi/extensions/image_compression_control.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024-2025 Arm Limited. + * Copyright (c) 2024-2026 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -38,11 +38,15 @@ namespace wsi { image_create_compression_control::image_create_compression_control(const VkImageCompressionControlEXT &extension) : m_compression_control{ VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT, nullptr, extension.flags, - extension.compressionControlPlaneCount, m_array_fixed_rate_flags } + extension.compressionControlPlaneCount, nullptr } { - for (uint32_t i = 0; i < extension.compressionControlPlaneCount; i++) + if ((extension.flags & VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT) != 0) { - m_compression_control.pFixedRateFlags[i] = extension.pFixedRateFlags[i]; + m_compression_control.pFixedRateFlags = m_array_fixed_rate_flags; + for (uint32_t i = 0; i < extension.compressionControlPlaneCount; i++) + { + m_compression_control.pFixedRateFlags[i] = extension.pFixedRateFlags[i]; + } } } diff --git a/wsi/extensions/image_compression_control.hpp b/wsi/extensions/image_compression_control.hpp index eab1f0f..5f93f72 100644 --- a/wsi/extensions/image_compression_control.hpp +++ b/wsi/extensions/image_compression_control.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2025 Arm Limited. + * Copyright (c) 2025-2026 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -32,7 +32,6 @@ #pragma once #include -#include #include #include @@ -71,10 +70,14 @@ public: } auto compression_control = image_create_compression_control(extension); - std::swap(m_compression_control, compression_control.m_compression_control); - for (uint32_t i = 0; i < compression_control.m_compression_control.compressionControlPlaneCount; i++) + m_compression_control = compression_control.m_compression_control; + if (compression_control.m_compression_control.pFixedRateFlags != nullptr) { - m_compression_control.pFixedRateFlags[i] = compression_control.m_compression_control.pFixedRateFlags[i]; + m_compression_control.pFixedRateFlags = m_array_fixed_rate_flags; + for (uint32_t i = 0; i < compression_control.m_compression_control.compressionControlPlaneCount; i++) + { + m_compression_control.pFixedRateFlags[i] = compression_control.m_compression_control.pFixedRateFlags[i]; + } } return *this;