• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# vk - Vulkan utilites
2# Split into two libraries - one that depends on spirv/glslang libraries
3# which have long build times, and one that can build in parallel with those.
4
5include(CheckIncludeFileCXX)
6check_include_file_cxx(
7	${CMAKE_SOURCE_DIR}/external/renderdoc/src/renderdoc_app.h
8	HAVE_RENDERDOC_APP_H)
9if(HAVE_RENDERDOC_APP_H)
10	set(VKRENDERDOC_SRC vkRenderDocUtil.cpp)
11else()
12	set(VKRENDERDOC_SRC vkNoRenderDocUtil.cpp)
13endif(HAVE_RENDERDOC_APP_H)
14
15
16# Build inl files
17set(DEQP_VULKAN_INL_GEN_INPUT ${PROJECT_SOURCE_DIR}/external/vulkan-docs/src/xml/vk.xml)
18set(DEQP_VULKAN_INL_GEN_OUTPUTS_DIR ${PROJECT_SOURCE_DIR}/external/vulkancts/framework/vulkan)
19set(DEQP_VULKAN_INL_GEN_OUTPUTS
20	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkApiExtensionDependencyInfo.inl
21	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkBasicTypes.inl
22	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkConcreteDeviceInterface.inl
23	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkConcreteInstanceInterface.inl
24	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkConcretePlatformInterface.inl
25	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkCoreFunctionalities.inl
26	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceDriverImpl.inl
27	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceExtensions.inl
28	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeatures.inl
29	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeatures2.inl
30	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeaturesForContextDecl.inl
31	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeaturesForContextDefs.inl
32	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeaturesForDefaultDeviceDefs.inl
33	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFunctionPointers.inl
34	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceProperties.inl
35	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDevicePropertiesForContextDecl.inl
36	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDevicePropertiesForContextDefs.inl
37	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDevicePropertiesForDefaultDeviceDefs.inl
38	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkExtensionFunctions.inl
39	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkFunctionPointerTypes.inl
40	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkGetDeviceProcAddr.inl
41	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkGetStructureTypeImpl.inl
42	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkHandleType.inl
43	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInitDeviceFunctionPointers.inl
44	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInitInstanceFunctionPointers.inl
45	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInitPlatformFunctionPointers.inl
46	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInstanceDriverImpl.inl
47	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInstanceExtensions.inl
48	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInstanceFunctionPointers.inl
49	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkKnownDriverIds.inl
50	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkMandatoryFeatures.inl
51	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkNullDriverImpl.inl
52	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkObjTypeImpl.inl
53	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkPlatformDriverImpl.inl
54	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkPlatformFunctionPointers.inl
55	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkRefUtil.inl
56	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkRefUtilImpl.inl
57	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkStrUtil.inl
58	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkStrUtilImpl.inl
59	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkStructTypes.inl
60	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkSupportedExtensions.inl
61	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkTypeUtil.inl
62	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVirtualDeviceInterface.inl
63	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVirtualInstanceInterface.inl
64	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVirtualPlatformInterface.inl
65	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkEntryPointValidation.inl
66	# NOTE: when new file is generated by gen_framework it should be added to this list.
67	${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVulkan_c.inl)
68
69# If .inl files are generated to build directory add custom command that will build them.
70if (DEQP_VULKAN_INL_GEN_OUTPUTS_DIR MATCHES ^${PROJECT_BINARY_DIR})
71	add_custom_command(
72		# Remove all outputs to help detect missing outputs.
73		COMMAND cmake -E remove ${DEQP_VULKAN_INL_GEN_OUTPUTS}
74
75		# Generate all inl files.
76		COMMAND ${PYTHON_EXECUTABLE} ARGS ${PROJECT_SOURCE_DIR}/external/vulkancts/scripts/gen_framework.py -o ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}
77		COMMAND ${PYTHON_EXECUTABLE} ARGS ${PROJECT_SOURCE_DIR}/external/vulkancts/scripts/gen_framework_c.py -o ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}
78
79		# Check all outputs exist, as CMake does not do this.
80		COMMAND cmake -E md5sum ${DEQP_VULKAN_INL_GEN_OUTPUTS}
81
82		DEPENDS ${DEQP_VULKAN_INL_GEN_INPUT}
83		OUTPUT ${DEQP_VULKAN_INL_GEN_OUTPUTS})
84
85	add_custom_target(
86		deqp-vk-inl ALL
87		DEPENDS ${DEQP_VULKAN_INL_GEN_OUTPUTS})
88else()
89	add_custom_target(deqp-vk-inl)
90endif()
91
92set(VKUTILNOSHADER_SRCS
93	vkApiVersion.cpp
94	vkApiVersion.hpp
95	vkAppParamsUtil.cpp
96	vkAppParamsUtil.hpp
97	vkBuilderUtil.cpp
98	vkBuilderUtil.hpp
99	vkBarrierUtil.cpp
100	vkBarrierUtil.hpp
101	vkCmdUtil.cpp
102	vkCmdUtil.hpp
103	vkDefs.cpp
104	vkDefs.hpp
105	vkRef.cpp
106	vkRef.hpp
107	vkRefUtil.cpp
108	vkRefUtil.hpp
109	vkPlatform.cpp
110	vkPlatform.hpp
111	vkStrUtil.cpp
112	vkStrUtil.hpp
113	vkQueryUtil.cpp
114	vkQueryUtil.hpp
115	vkMemUtil.cpp
116	vkMemUtil.hpp
117	vkDeviceUtil.cpp
118	vkDeviceUtil.hpp
119	vkBinaryRegistry.cpp
120	vkBinaryRegistry.hpp
121	vkNullDriver.cpp
122	vkNullDriver.hpp
123	vkImageUtil.cpp
124	vkImageUtil.hpp
125	vkTypeUtil.cpp
126	vkTypeUtil.hpp
127	vkAllocationCallbackUtil.cpp
128	vkAllocationCallbackUtil.hpp
129	vkWsiPlatform.cpp
130	vkWsiPlatform.hpp
131	vkWsiUtil.cpp
132	vkWsiUtil.hpp
133	vkDebugReportUtil.cpp
134	vkDebugReportUtil.hpp
135	vkBufferWithMemory.cpp
136	vkBufferWithMemory.hpp
137	vkImageWithMemory.cpp
138	vkImageWithMemory.hpp
139	vkImageWithMemory.cpp
140	vkImageWithMemory.hpp
141	vkShaderProgram.cpp
142	vkShaderProgram.hpp
143	vkValidatorOptions.hpp
144	vkYCbCrImageWithMemory.cpp
145	vkYCbCrImageWithMemory.hpp
146	vkObjUtil.cpp
147	vkObjUtil.hpp
148	${VKRENDERDOC_SRC}
149	vkRenderDocUtil.hpp
150	vkDeviceFeatures.hpp
151	vkDeviceFeatures.cpp
152	vkDeviceProperties.hpp
153	vkDeviceProperties.cpp
154	vkRayTracingUtil.hpp
155	vkRayTracingUtil.cpp
156	vkPipelineConstructionUtil.hpp
157	vkPipelineConstructionUtil.cpp
158	vkSafetyCriticalUtil.hpp
159	vkSafetyCriticalUtil.cpp
160	vkResourceInterface.hpp
161	vkResourceInterface.cpp
162	vkMd5Sum.hpp
163	vkMd5Sum.cpp
164	vkComputePipelineConstructionUtil.hpp
165	vkComputePipelineConstructionUtil.cpp
166	vkShaderObjectUtil.hpp
167	vkShaderObjectUtil.cpp
168	)
169
170set(VKUTILNOSHADER_INLS
171	generated/vulkan/vkDeviceFeatures.inl
172	generated/vulkan/vkDeviceFeatureTest.inl
173	generated/vulkan/vkDeviceProperties.inl
174	)
175
176set(VKSCUTILNOSHADER_INLS
177	generated/vulkansc/vkDeviceFeatures.inl
178	generated/vulkansc/vkDeviceFeatureTest.inl
179	generated/vulkansc/vkDeviceProperties.inl
180	generated/vulkansc/vulkan_json_data.hpp
181	generated/vulkansc/vulkan_json_parser.hpp
182	)
183
184set(VKUTIL_SRCS
185	vkPrograms.cpp
186	vkPrograms.hpp
187	vkShaderToSpirV.cpp
188	vkShaderToSpirV.hpp
189	vkSpirVAsm.hpp
190	vkSpirVAsm.cpp
191	vkSpirVProgram.hpp
192	vkSpirVProgram.cpp
193	)
194
195set(VKUTILNOSHADER_LIBS
196	glutil
197	tcutil
198	)
199
200include_directories(${GLSLANG_INCLUDE_PATH})
201include_directories(${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR})
202
203# \note Code interfacing with glslang needs to include third-party headers
204#       that cause all sorts of warnings to appear.
205if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG)
206	set_source_files_properties(
207		FILES vkShaderToSpirV.cpp
208		PROPERTIES COMPILE_FLAGS "${DE_3RD_PARTY_CXX_FLAGS}")
209endif ()
210
211
212# \note Code interfacing with spirv-opt needs to include third-party headers
213#       that cause all sorts of warnings to appear.
214if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG)
215	set_source_files_properties(
216		FILES vkPrograms.cpp
217		PROPERTIES COMPILE_FLAGS "${DE_3RD_PARTY_CXX_FLAGS}")
218endif ()
219
220if(DEQP_HAVE_RENDERDOC_HEADER)
221	add_definitions(-DDEQP_HAVE_RENDERDOC_HEADER=1)
222endif()
223
224add_definitions(-DDISABLE_SHADERCACHE_IPC)
225
226PCH(VKUTILNOSHADER_SRCS ../../modules/vulkan/pch.cpp)
227PCH(VKUTIL_SRCS ../../modules/vulkan/pch.cpp)
228PCH(VKUTILNOSHADER_INLS ../../modules/vulkan/pch.cpp)
229PCH(VKSCUTILNOSHADER_INLS ../../modules/vulkan/pch.cpp)
230
231add_library(vkutilnoshader STATIC ${VKUTILNOSHADER_SRCS} ${VKUTILNOSHADER_INLS})
232target_compile_definitions(vkutilnoshader PUBLIC CTS_USES_VULKAN)
233target_include_directories(vkutilnoshader PUBLIC generated/vulkan)
234target_link_libraries(vkutilnoshader PUBLIC ${VKUTILNOSHADER_LIBS})
235add_dependencies(vkutilnoshader deqp-vk-inl)
236
237add_library(vkscutilnoshader STATIC ${VKUTILNOSHADER_SRCS} ${VKSCUTILNOSHADER_INLS})
238target_compile_definitions(vkscutilnoshader PUBLIC CTS_USES_VULKANSC)
239target_include_directories(vkscutilnoshader BEFORE PUBLIC generated/vulkansc)
240target_include_directories(vkscutilnoshader BEFORE PUBLIC ${PROJECT_SOURCE_DIR}/external/vulkancts/vkscserver)
241target_link_libraries(vkscutilnoshader PUBLIC ${VKUTILNOSHADER_LIBS} jsoncpp_static vksc-server-util)
242
243if (DEQP_USE_X11)
244	find_package(X11 REQUIRED)
245
246	target_compile_definitions(vkutilnoshader PUBLIC DEQP_SUPPORT_X11=1)
247	target_link_libraries(vkutilnoshader PUBLIC ${X11_LIBRARIES})
248
249	target_compile_definitions(vkscutilnoshader PUBLIC DEQP_SUPPORT_X11=1)
250	target_link_libraries(vkscutilnoshader PUBLIC ${X11_LIBRARIES})
251
252	if (DEQP_USE_XCB)
253		find_package(XCB REQUIRED)
254
255		target_compile_definitions(vkutilnoshader PUBLIC DEQP_SUPPORT_XCB=1)
256		target_link_libraries(vkutilnoshader PUBLIC ${XCB_LIBRARIES})
257
258		target_compile_definitions(vkscutilnoshader PUBLIC DEQP_SUPPORT_XCB=1)
259		target_link_libraries(vkscutilnoshader PUBLIC ${XCB_LIBRARIES})
260
261	endif ()
262endif()
263
264add_library(vkutil STATIC ${VKUTIL_SRCS})
265target_include_directories(vkutil PUBLIC ${GLSLANG_INCLUDE_PATH} ${spirv-tools_SOURCE_DIR}/include ${spirv-tools_SOURCE_DIR}/external/include )
266target_link_libraries(vkutil PUBLIC vkutilnoshader ${GLSLANG_LIBRARIES} SPIRV-Tools SPIRV-Tools-opt)
267
268add_library(vkscutil STATIC ${VKUTIL_SRCS})
269target_include_directories(vkscutil PUBLIC ${GLSLANG_INCLUDE_PATH} ${spirv-tools_SOURCE_DIR}/include ${spirv-tools_SOURCE_DIR}/external/include )
270target_link_libraries(vkscutil PUBLIC vkscutilnoshader ${GLSLANG_LIBRARIES} SPIRV-Tools SPIRV-Tools-opt)
271