Skip to content

Commit

Permalink
src: Add vk_format_utils.h to UtilityHeaders
Browse files Browse the repository at this point in the history
The library originates from Vulkan-ValidationLayers, but is being moved
into this repo to make it easier for others to use it.

The library has also been modified to be header only and C compatible,
which allows more developers to be able to use it. This does require some
changes, but only affects the FormatElementSize and FormatTexelSize functions
which used default parameters. Two new functions, FormatElementSizeWithAspect
and FormatTexelSizeWithAspect have been added to handle the non-default
image aspect case (the default was COLOR_BIT).

Minor renaming of enums was done to ensure that naming conflicts do not occur.
  • Loading branch information
charles-lunarg committed Sep 5, 2023
1 parent 87801a6 commit bd36e90
Show file tree
Hide file tree
Showing 12 changed files with 3,645 additions and 3 deletions.
2 changes: 2 additions & 0 deletions include/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.19")
target_sources(VulkanUtilityHeaders PRIVATE
vulkan/utility/vul_dispatch_table.h
vulkan/vk_enum_string_helper.h
vulkan/utility/vk_format_utils.h
)
endif()

Expand All @@ -24,3 +25,4 @@ endif()
target_link_Libraries(VulkanUtilityHeaders INTERFACE Vulkan::Headers)

target_include_directories(VulkanUtilityHeaders INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)

2,264 changes: 2,264 additions & 0 deletions include/vulkan/utility/vk_format_utils.h

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions scripts/generate_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ def RunGenerators(api: str, registry: str, targetFilter: str) -> None:
from generators.base_generator import BaseGeneratorOptions
from generators.dispatch_table_generator import DispatchTableOutputGenerator
from generators.enum_string_helper_generator import EnumStringHelperOutputGenerator
from generators.format_utils_generator import FormatUtilsOutputGenerator

# Build up a list of all generators and custom options
generators = {
Expand All @@ -35,6 +36,10 @@ def RunGenerators(api: str, registry: str, targetFilter: str) -> None:
'generator' : EnumStringHelperOutputGenerator,
'directory' : 'include/vulkan',
},
'vk_format_utils.h' : {
'generator' : FormatUtilsOutputGenerator,
'directory' : 'include/vulkan/utility',
},
}

if (targetFilter and targetFilter not in generators.keys()):
Expand Down
662 changes: 662 additions & 0 deletions scripts/generators/format_utils_generator.py

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@
add_subdirectory(layer)
add_subdirectory(generated)
add_subdirectory(vul_dispatch_table)
add_subdirectory(format_utils)
2 changes: 2 additions & 0 deletions tests/add_subdirectory/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ target_sources(add_subdirectory_example PRIVATE
client.c
vk_enum_string_helper.c
vul_dispatch_table.c
vk_format_utils.c
vk_format_utils_2.c # Need two translation units to test if header file behaves correctly.
)

# NOTE: Because VulkanHeaders is a PUBLIC dependency it needs to be found prior to VulkanUtilityLibraries
Expand Down
13 changes: 13 additions & 0 deletions tests/add_subdirectory/vk_format_utils.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Copyright 2023 The Khronos Group Inc.
// Copyright 2023 Valve Corporation
// Copyright 2023 LunarG, Inc.
//
// SPDX-License-Identifier: Apache-2.0
#include <vulkan/utility/vk_format_utils.h>

void check_format_utils() {
GetPlaneIndex(VK_IMAGE_ASPECT_PLANE_1_BIT);
FormatHasGreen(VK_FORMAT_R8G8B8A8_UNORM);
FormatElementSizeWithAspect(VK_FORMAT_ASTC_5x4_SRGB_BLOCK, VK_IMAGE_ASPECT_STENCIL_BIT);
struct FORMAT_UTILS_FORMAT_INFO f = GetFormatInfo(VK_FORMAT_R8G8B8A8_SRGB);
}
14 changes: 14 additions & 0 deletions tests/add_subdirectory/vk_format_utils_2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// Copyright 2023 The Khronos Group Inc.
// Copyright 2023 Valve Corporation
// Copyright 2023 LunarG, Inc.
//
// SPDX-License-Identifier: Apache-2.0
#include <vulkan/utility/vk_format_utils.h>

// Need two translation units to test if header file behaves correctly.
void check_format_utils_2() {
GetPlaneIndex(VK_IMAGE_ASPECT_PLANE_1_BIT);
FormatHasGreen(VK_FORMAT_R8G8B8A8_UNORM);
FormatElementSizeWithAspect(VK_FORMAT_ASTC_5x4_SRGB_BLOCK, VK_IMAGE_ASPECT_STENCIL_BIT);
struct FORMAT_UTILS_FORMAT_INFO f = GetFormatInfo(VK_FORMAT_R8G8B8A8_SRGB);
}
1 change: 1 addition & 0 deletions tests/find_package/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ target_sources(find_package_example PRIVATE
${CMAKE_CURRENT_LIST_DIR}/../add_subdirectory/client.c
${CMAKE_CURRENT_LIST_DIR}/../add_subdirectory/vk_enum_string_helper.c
${CMAKE_CURRENT_LIST_DIR}/../add_subdirectory/vul_dispatch_table.c
${CMAKE_CURRENT_LIST_DIR}/../add_subdirectory/vk_format_utils.c
)

# NOTE: Because VulkanHeaders is a PUBLIC dependency it needs to be found prior to VulkanUtilityLibraries
Expand Down
25 changes: 25 additions & 0 deletions tests/format_utils/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Copyright 2023 The Khronos Group Inc.
# Copyright 2023 Valve Corporation
# Copyright 2023 LunarG, Inc.
#
# SPDX-License-Identifier: Apache-2.0

find_package(GTest REQUIRED CONFIG)
find_package(magic_enum REQUIRED CONFIG)

include(GoogleTest)

add_executable(test_format_utils test_formats.cpp)

target_link_libraries(test_format_utils PRIVATE
GTest::gtest
GTest::gtest_main
magic_enum::magic_enum
Vulkan::UtilityHeaders
)

if(${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)")
add_compile_options(-Wpedantic -Wall -Wextra -Werror)
endif()

gtest_discover_tests(test_format_utils)
Loading

0 comments on commit bd36e90

Please sign in to comment.