Skip to content

Commit c752a64

Browse files
Merge pull request #110 from GPUOpen-LibrariesAndSDKs/update_wk40_2
Add support for the following extensions: * VK_AMD_buffer_marker * VK_AMD_mixed_attachment_samples * VK_EXT_depth_range_unrestricted * VK_EXT_external_memory_host * VK_EXT_hdr_metadata * VK_EXT_sample_locations * VK_EXT_sampler_filter_minmax * VK_EXT_shader_viewport_index_layer * VK_EXT_swapchain_colorspace * VK_KHR_8bit_storage * VK_KHR_image_format_list * VK_KHR_multiview * VK_KHR_relaxed_block_layout * VK_KHR_sampler_mirror_clamp_to_edge * VK_KHR_variable_pointers Address the following tickets: #105: Why does PipelineCache::get_data take a void** parameter for data? #103: Invalid iterator accessed in GraphicsPipelineManager::bake() #96: Remove unnecessary null pointer checks #86: Debug names for BasePipelineInfo? #49: Don't ship vulkan.h in the source code Anvil now exposes CMake options to: * Optionally dynamically link with a Vulkan implementation DLL of user's choice (specified via another CMake option) * Optionally grab Vulkan headers from SDK location, instead of using the ones that come with the library. Other minor bug-fixes and improvements.
2 parents decc6e3 + ba8ddf0 commit c752a64

84 files changed

Lines changed: 4755 additions & 1879 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,4 @@ install:
2929
script:
3030
- mkdir build
3131
- cd build
32-
- ${DEPS_DIR}/cmake/bin/cmake -G "Unix Makefiles" .. && make
32+
- ${DEPS_DIR}/cmake/bin/cmake -DCONTINUOUS_INTEGRATION_RUN=ON -G "Unix Makefiles" .. && make

CMakeLists.txt

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,55 @@ project (Anvil)
33

44
option(ANVIL_INCLUDE_WIN3264_WINDOW_SYSTEM_SUPPORT "Includes 32-/64-bit Windows window system support (Windows builds only)" ON)
55
option(ANVIL_INCLUDE_XCB_WINDOW_SYSTEM_SUPPORT "Includes XCB window system support (Linux builds only)" ON)
6-
option(ANVIL_LINK_WITH_GLSLANG "Links with glslang, instead of spawning a new process whenever GLSL->SPIR-V conversion is required" ON)
76
option(ANVIL_LINK_EXAMPLES "Build examples showing how to use Anvil" OFF)
7+
option(ANVIL_LINK_STATICALLY_WITH_VULKAN_LIB "Link statically with Vulkan loader. If disabled, Anvil will load the func ptrs from ANVIL_VULKAN_DYNAMIC_DLL_DEPENDENCY at VK instance creation time" ON)
8+
option(ANVIL_LINK_WITH_GLSLANG "Links with glslang, instead of spawning a new process whenever GLSL->SPIR-V conversion is required" ON)
9+
option(ANVIL_USE_BUILT_IN_VULKAN_HEADERS "Use built-in Vulkan headers. If disabled, VK_SDK_PATH and VULKAN_SDK env vars will be assumed to hold the location where the headers can be found." ON)
810

911

12+
if (MSVC)
13+
set (DEFAULT_DYNAMIC_VK_DLL "vulkan-1.dll")
14+
else()
15+
set (DEFAULT_DYNAMIC_VK_DLL "libvulkan.so")
16+
endif()
17+
18+
if (NOT ANVIL_LINK_STATICALLY_WITH_VULKAN_LIB)
19+
set(ANVIL_VULKAN_DYNAMIC_DLL "${DEFAULT_DYNAMIC_VK_DLL}"
20+
CACHE STRING "DLL to load Vulkan entrypoints from at Vulkan instance creation time. Only used if ANVIL_LINK_STATICALLY_WITH_VULKAN_LIB is disabled. Only occurs at first Vulkan instance creation time")
21+
endif()
22+
1023
# Do not modify anything after this line, unless you know what you're doing.
1124
configure_file("include/config.h.in" "include/config.h")
1225

1326
include_directories("${Anvil_BINARY_DIR}/include"
1427
"${Anvil_SOURCE_DIR}"
1528
"${Anvil_SOURCE_DIR}/deps"
1629
"${Anvil_SOURCE_DIR}/include")
17-
18-
if (WIN32)
30+
31+
# Include the Vulkan header.
32+
if (ANVIL_USE_BUILT_IN_VULKAN_HEADERS)
33+
include_directories("${Anvil_SOURCE_DIR}/include")
34+
else()
35+
if (WIN32)
36+
include_directories($ENV{VK_SDK_PATH}/Include
37+
$ENV{VULKAN_SDK}/Include)
38+
else()
39+
include_directories($ENV{VK_SDK_PATH}/x86_64/include
40+
$ENV{VULKAN_SDK}/include
41+
$ENV{VULKAN_SDK}/x86_64/include)
42+
endif()
43+
endif()
44+
45+
if (ANVIL_LINK_STATICALLY_WITH_VULKAN_LIB AND NOT CONTINUOUS_INTEGRATION_RUN)
1946
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
20-
link_directories ($ENV{VK_SDK_PATH}/Bin
21-
$ENV{VK_SDK_PATH}/Lib
22-
$ENV{VULKAN_SDK}/Bin
23-
$ENV{VULKAN_SDK}/Lib)
47+
find_library(VULKAN_LIBRARY
48+
NAMES vulkan-1 vulkan
49+
PATHS "$ENV{VK_SDK_PATH}/Lib" "$ENV{VK_SDK_PATH}/Bin" "$ENV{VULKAN_SDK}/Lib" "$ENV{VULKAN_SDK}/Bin" "$ENV{VULKAN_SDK}/lib")
2450
else()
25-
link_directories ($ENV{VK_SDK_PATH}/Bin32
26-
$ENV{VK_SDK_PATH}/Lib32
27-
$ENV{VULKAN_SDK}/Bin32
28-
$ENV{VULKAN_SDK}/Lib32)
51+
find_library(VULKAN_LIBRARY
52+
NAMES vulkan-1 vulkan
53+
PATHS "$ENV{VK_SDK_PATH}/Lib32" "$ENV{VK_SDK_PATH}/Bin32" "$ENV{VULKAN_SDK}/Lib32" "$ENV{VULKAN_SDK}/Bin32" "$ENV{VULKAN_SDK}/lib")
2954
endif()
30-
else()
31-
link_directories ($ENV{VK_SDK_PATH}/x86_64/lib
32-
$ENV{VULKAN_SDK}/lib
33-
$ENV{VULKAN_SDK}/x86_64/lib)
3455
endif()
3556

3657
SET (SRC_LIST "${Anvil_SOURCE_DIR}/include/misc/memalloc_backends/backend_oneshot.h"
@@ -56,6 +77,7 @@ SET (SRC_LIST "${Anvil_SOURCE_DIR}/include/misc/memalloc_backends/backend_onesho
5677
"${Anvil_SOURCE_DIR}/include/misc/image_create_info.h"
5778
"${Anvil_SOURCE_DIR}/include/misc/image_view_create_info.h"
5879
"${Anvil_SOURCE_DIR}/include/misc/io.h"
80+
"${Anvil_SOURCE_DIR}/include/misc/library.h"
5981
"${Anvil_SOURCE_DIR}/include/misc/memory_allocator.h"
6082
"${Anvil_SOURCE_DIR}/include/misc/memory_block_create_info.h"
6183
"${Anvil_SOURCE_DIR}/include/misc/mt_safety.h"
@@ -76,6 +98,7 @@ SET (SRC_LIST "${Anvil_SOURCE_DIR}/include/misc/memalloc_backends/backend_onesho
7698
"${Anvil_SOURCE_DIR}/include/misc/types_macro.h"
7799
"${Anvil_SOURCE_DIR}/include/misc/types_struct.h"
78100
"${Anvil_SOURCE_DIR}/include/misc/types_utils.h"
101+
"${Anvil_SOURCE_DIR}/include/misc/vulkan.h"
79102
"${Anvil_SOURCE_DIR}/include/misc/window.h"
80103
"${Anvil_SOURCE_DIR}/include/misc/window_factory.h"
81104
"${Anvil_SOURCE_DIR}/include/wrappers/buffer.h"
@@ -132,6 +155,7 @@ SET (SRC_LIST "${Anvil_SOURCE_DIR}/include/misc/memalloc_backends/backend_onesho
132155
"${Anvil_SOURCE_DIR}/src/misc/image_create_info.cpp"
133156
"${Anvil_SOURCE_DIR}/src/misc/image_view_create_info.cpp"
134157
"${Anvil_SOURCE_DIR}/src/misc/io.cpp"
158+
"${Anvil_SOURCE_DIR}/src/misc/library.cpp"
135159
"${Anvil_SOURCE_DIR}/src/misc/memory_allocator.cpp"
136160
"${Anvil_SOURCE_DIR}/src/misc/memory_block_create_info.cpp"
137161
"${Anvil_SOURCE_DIR}/src/misc/object_tracker.cpp"
@@ -147,6 +171,7 @@ SET (SRC_LIST "${Anvil_SOURCE_DIR}/include/misc/memalloc_backends/backend_onesho
147171
"${Anvil_SOURCE_DIR}/src/misc/types_classes.cpp"
148172
"${Anvil_SOURCE_DIR}/src/misc/types_struct.cpp"
149173
"${Anvil_SOURCE_DIR}/src/misc/types_utils.cpp"
174+
"${Anvil_SOURCE_DIR}/src/misc/vulkan.cpp"
150175
"${Anvil_SOURCE_DIR}/src/misc/window.cpp"
151176
"${Anvil_SOURCE_DIR}/src/misc/window_factory.cpp"
152177
"${Anvil_SOURCE_DIR}/src/wrappers/buffer.cpp"
@@ -212,15 +237,15 @@ add_library(Anvil STATIC ${SRC_LIST})
212237

213238
if (WIN32)
214239
if (ANVIL_LINK_WITH_GLSLANG)
215-
target_link_libraries(Anvil glslang HLSL OGLCompiler OSDependent SPIRV vulkan-1.lib)
240+
target_link_libraries(Anvil glslang HLSL OGLCompiler OSDependent SPIRV ${VULKAN_LIBRARY})
216241
else()
217-
target_link_libraries(Anvil vulkan-1.lib)
242+
target_link_libraries(Anvil ${VULKAN_LIBRARY})
218243
endif()
219244
else()
220245
if (ANVIL_LINK_WITH_GLSLANG)
221-
target_link_libraries(Anvil glslang HLSL OGLCompiler OSDependent SPIRV vulkan pthread)
246+
target_link_libraries(Anvil glslang HLSL OGLCompiler OSDependent SPIRV ${VULKAN_LIBRARY} pthread)
222247
else()
223-
target_link_libraries(Anvil vulkan pthread)
248+
target_link_libraries(Anvil ${VULKAN_LIBRARY} pthread)
224249
endif()
225250
endif()
226251

@@ -259,6 +284,3 @@ endif (CMAKE_COMPILER_IS_GNUCC)
259284
if (MSVC)
260285
target_compile_options(Anvil PRIVATE "/W4" "/WX" "/wd4191" "/wd4350" "/wd4668" "/wd4820" "/wd4514" "/wd4061" "/wd4710" "/wd4711" "/wd4548" "/wd4555")
261286
endif (MSVC)
262-
263-
# Add all demo sub-projects
264-
MESSAGE(STATUS "Using Vulkan SDK at either " $ENV{VK_SDK_PATH} " or " $ENV{VULKAN_SDK})

examples/DynamicBuffers/CMakeLists.txt

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,6 @@ target_include_directories(Anvil PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/anvil/inclu
2525
include_directories(${Anvil_SOURCE_DIR}/include
2626
${DynamicBuffers_SOURCE_DIR}/include)
2727

28-
# Include the Vulkan header.
29-
if (WIN32)
30-
include_directories($ENV{VK_SDK_PATH}/Include
31-
$ENV{VULKAN_SDK}/Include)
32-
33-
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
34-
link_directories ($ENV{VK_SDK_PATH}/Bin
35-
$ENV{VK_SDK_PATH}/Lib
36-
$ENV{VULKAN_SDK}/Bin
37-
$ENV{VULKAN_SDK}/Lib)
38-
else()
39-
link_directories ($ENV{VK_SDK_PATH}/Bin32
40-
$ENV{VK_SDK_PATH}/Lib32
41-
$ENV{VULKAN_SDK}/Bin32
42-
$ENV{VULKAN_SDK}/Lib32)
43-
endif()
44-
else()
45-
include_directories($ENV{VK_SDK_PATH}/x86_64/include
46-
$ENV{VULKAN_SDK}/include
47-
$ENV{VULKAN_SDK}/x86_64/include)
48-
link_directories ($ENV{VK_SDK_PATH}/x86_64/lib
49-
$ENV{VULKAN_SDK}/lib
50-
$ENV{VULKAN_SDK}/x86_64/lib)
51-
endif()
52-
5328
# Create the DynamicBuffers project.
5429
add_executable (DynamicBuffers include/app.h
5530
include/app.h

examples/DynamicBuffers/src/app.cpp

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ void App::deinit()
206206
auto compute_pipeline_manager_ptr = m_device_ptr->get_compute_pipeline_manager ();
207207
auto gfx_pipeline_manager_ptr = m_device_ptr->get_graphics_pipeline_manager();
208208

209-
vkDeviceWaitIdle(m_device_ptr->get_device_vk() );
209+
Anvil::Vulkan::vkDeviceWaitIdle(m_device_ptr->get_device_vk() );
210210

211211
if (m_consumer_pipeline_id != UINT32_MAX)
212212
{
@@ -811,9 +811,8 @@ void App::init_compute_pipelines()
811811
bool result;
812812

813813
/* Create & configure the compute pipeline */
814-
auto producer_pipeline_info_ptr = Anvil::ComputePipelineCreateInfo::create_regular(false, /* in_disable_optimizations */
815-
false, /* in_allow_derivatives */
816-
*m_producer_cs_ptr);
814+
auto producer_pipeline_info_ptr = Anvil::ComputePipelineCreateInfo::create(Anvil::PipelineCreateFlagBits::NONE,
815+
*m_producer_cs_ptr);
817816

818817
producer_pipeline_info_ptr->attach_push_constant_range (0, /* offset */
819818
4, /* size */
@@ -992,15 +991,14 @@ void App::init_gfx_pipelines()
992991

993992

994993
/* Set up the graphics pipeline for the main subpass */
995-
auto consumer_pipeline_info_ptr = Anvil::GraphicsPipelineCreateInfo::create_regular(false, /* in_disable_optimizations */
996-
false, /* in_allow_derivatives */
997-
m_consumer_render_pass_ptr.get(),
998-
render_pass_subpass_id,
999-
*m_consumer_fs_ptr,
1000-
Anvil::ShaderModuleStageEntryPoint(), /* geometry_shader */
1001-
Anvil::ShaderModuleStageEntryPoint(), /* tess_control_shader */
1002-
Anvil::ShaderModuleStageEntryPoint(), /* tess_evaluation_shader */
1003-
*m_consumer_vs_ptr);
994+
auto consumer_pipeline_info_ptr = Anvil::GraphicsPipelineCreateInfo::create(Anvil::PipelineCreateFlagBits::NONE,
995+
m_consumer_render_pass_ptr.get(),
996+
render_pass_subpass_id,
997+
*m_consumer_fs_ptr,
998+
Anvil::ShaderModuleStageEntryPoint(), /* geometry_shader */
999+
Anvil::ShaderModuleStageEntryPoint(), /* tess_control_shader */
1000+
Anvil::ShaderModuleStageEntryPoint(), /* tess_evaluation_shader */
1001+
*m_consumer_vs_ptr);
10041002

10051003
consumer_pipeline_info_ptr->add_vertex_attribute (0, /* location */
10061004
Anvil::Format::R8G8_UNORM,
@@ -1179,6 +1177,7 @@ void App::init_swapchain()
11791177
m_swapchain_ptr = reinterpret_cast<Anvil::SGPUDevice*>(m_device_ptr.get())->create_swapchain(m_rendering_surface_ptr.get(),
11801178
m_window_ptr.get (),
11811179
Anvil::Format::B8G8R8A8_UNORM,
1180+
Anvil::ColorSpaceKHR::SRGB_NONLINEAR_KHR,
11821181
Anvil::PresentModeKHR::FIFO_KHR,
11831182
Anvil::ImageUsageFlagBits::COLOR_ATTACHMENT_BIT,
11841183
m_n_swapchain_images);

examples/MultiViewport/CMakeLists.txt

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -22,33 +22,6 @@ endif()
2222

2323
target_include_directories(Anvil PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/anvil/include")
2424

25-
include_directories(${Anvil_SOURCE_DIR}/include
26-
${MultiViewport_SOURCE_DIR}/include)
27-
28-
if (WIN32)
29-
include_directories($ENV{VK_SDK_PATH}/Include
30-
$ENV{VULKAN_SDK}/Include)
31-
32-
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
33-
link_directories ($ENV{VK_SDK_PATH}/Bin
34-
$ENV{VK_SDK_PATH}/Lib
35-
$ENV{VULKAN_SDK}/Bin
36-
$ENV{VULKAN_SDK}/Lib)
37-
else()
38-
link_directories ($ENV{VK_SDK_PATH}/Bin32
39-
$ENV{VK_SDK_PATH}/Lib32
40-
$ENV{VULKAN_SDK}/Bin32
41-
$ENV{VULKAN_SDK}/Lib32)
42-
endif()
43-
else()
44-
include_directories($ENV{VK_SDK_PATH}/x86_64/include
45-
$ENV{VULKAN_SDK}/include
46-
$ENV{VULKAN_SDK}/x86_64/include)
47-
link_directories ($ENV{VK_SDK_PATH}/x86_64/lib
48-
$ENV{VULKAN_SDK}/lib
49-
$ENV{VULKAN_SDK}/x86_64/lib)
50-
endif()
51-
5225
include_directories(${Anvil_SOURCE_DIR}/include
5326
${MultiViewport_SOURCE_DIR}/include)
5427

@@ -58,7 +31,7 @@ add_executable (MultiViewport include/app.h
5831
src/app.cpp)
5932

6033
# Add linking dependencies for the example projects
61-
add_dependencies (MultiViewport Anvil)
34+
add_dependencies(MultiViewport Anvil)
6235

6336
if (WIN32)
6437
target_link_libraries(MultiViewport Anvil)

examples/MultiViewport/src/app.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ App::~App()
190190

191191
void App::deinit()
192192
{
193-
vkDeviceWaitIdle(m_device_ptr->get_device_vk() );
193+
Anvil::Vulkan::vkDeviceWaitIdle(m_device_ptr->get_device_vk() );
194194

195195
m_frame_signal_semaphores.clear();
196196
m_frame_wait_semaphores.clear();
@@ -700,15 +700,14 @@ void App::init_gfx_pipelines()
700700
m_renderpass_ptr->set_name("Main renderpass");
701701

702702
/* Configure the graphics pipeline */
703-
gfx_pipeline_create_info_ptr = Anvil::GraphicsPipelineCreateInfo::create_regular(false, /* in_disable_optimizations */
704-
false, /* in_allow_derivatives */
705-
m_renderpass_ptr.get(),
706-
render_pass_subpass_id,
707-
*m_fs_ptr,
708-
*m_gs_ptr,
709-
Anvil::ShaderModuleStageEntryPoint(),
710-
Anvil::ShaderModuleStageEntryPoint(),
711-
*m_vs_ptr);
703+
gfx_pipeline_create_info_ptr = Anvil::GraphicsPipelineCreateInfo::create(Anvil::PipelineCreateFlagBits::NONE,
704+
m_renderpass_ptr.get(),
705+
render_pass_subpass_id,
706+
*m_fs_ptr,
707+
*m_gs_ptr,
708+
Anvil::ShaderModuleStageEntryPoint(),
709+
Anvil::ShaderModuleStageEntryPoint(),
710+
*m_vs_ptr);
712711

713712
gfx_pipeline_create_info_ptr->set_n_dynamic_viewports (sizeof(scissors) / sizeof(scissors[0]) );
714713
gfx_pipeline_create_info_ptr->set_primitive_topology (Anvil::PrimitiveTopology::TRIANGLE_FAN);
@@ -862,6 +861,7 @@ void App::init_swapchain()
862861
m_swapchain_ptr = dynamic_cast<Anvil::SGPUDevice*>(m_device_ptr.get() )->create_swapchain(m_rendering_surface_ptr.get(),
863862
m_window_ptr.get (),
864863
Anvil::Format::B8G8R8A8_UNORM,
864+
Anvil::ColorSpaceKHR::SRGB_NONLINEAR_KHR,
865865
Anvil::PresentModeKHR::FIFO_KHR,
866866
Anvil::ImageUsageFlagBits::COLOR_ATTACHMENT_BIT,
867867
m_n_swapchain_images);

examples/OcclusionQuery/CMakeLists.txt

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,34 +25,6 @@ target_include_directories(Anvil PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/anvil/inclu
2525
include_directories(${Anvil_SOURCE_DIR}/include
2626
${OcclusionQuery_SOURCE_DIR}/include)
2727

28-
# Include the Vulkan header.
29-
if (WIN32)
30-
include_directories($ENV{VK_SDK_PATH}/Include
31-
$ENV{VULKAN_SDK}/Include)
32-
33-
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
34-
link_directories ($ENV{VK_SDK_PATH}/Bin
35-
$ENV{VK_SDK_PATH}/Lib
36-
$ENV{VULKAN_SDK}/Bin
37-
$ENV{VULKAN_SDK}/Lib)
38-
else()
39-
link_directories ($ENV{VK_SDK_PATH}/Bin32
40-
$ENV{VK_SDK_PATH}/Lib32
41-
$ENV{VULKAN_SDK}/Bin32
42-
$ENV{VULKAN_SDK}/Lib32)
43-
endif()
44-
else()
45-
include_directories($ENV{VK_SDK_PATH}/x86_64/include
46-
$ENV{VULKAN_SDK}/include
47-
$ENV{VULKAN_SDK}/x86_64/include)
48-
link_directories ($ENV{VK_SDK_PATH}/x86_64/lib
49-
$ENV{VULKAN_SDK}/lib
50-
$ENV{VULKAN_SDK}/x86_64/lib)
51-
endif()
52-
53-
include_directories(${Anvil_SOURCE_DIR}/include
54-
${OcclusionQuery_SOURCE_DIR}/include)
55-
5628
# Create the OcclusionQuery project.
5729
add_executable (OcclusionQuery include/app.h
5830
include/app.h

0 commit comments

Comments
 (0)