Closed chrisdonlan closed 3 years ago
I haven't tried on linux, but I guess the problem is showing on this line:
-o autogen/shaders/post.frag.h
The output does not have the full path and it is relative to where glslangValidator is executed.
I will make an update to the CMake to include the full path. Meanwhile you can copy the generated files or add the path /home/chris/ray-tracing/vk_raytrace/
or ${CMAKE_CURRENT_SOURCE_DIR}
Should be:
COMMAND ${GLSLANGVALIDATOR} -g -o ${CMAKE_CURRENT_SOURCE_DIR}/autogen/${_OUTPUT} -V ${_SOURCE} --vn ${VAR_NAME} --target-env ${VULKAN_TARGET_ENV}
I see it; I modified line 92 of CMakeLists.txt:
[ 63%] Generating ../autogen/shaders/pathtrace.rahit.h
[ 65%] Generating ../autogen/shaders/pathtraceShadow.rmiss.h
[ 68%] Generating ../autogen/shaders/pathtrace.rmiss.h
/usr/bin/glslangValidator -o autogen/shaders/pathtrace.rgen.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rgen --vn pathtrace_rgen --target-env vulkan1.2
/usr/bin/glslangValidator -o autogen/shaders/passthrough.vert.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/passthrough.vert --vn passthrough_vert --target-env vulkan1.2
/usr/bin/glslangValidator -o autogen/shaders/post.frag.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/post.frag --vn post_frag --target-env vulkan1.2
/usr/bin/glslangValidator -o autogen/shaders/pathtrace.rchit.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rchit --vn pathtrace_rchit --target-env vulkan1.2
/usr/bin/glslangValidator -o autogen/shaders/pathtrace.rahit.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rahit --vn pathtrace_rahit --target-env vulkan1.2
/usr/bin/glslangValidator -o autogen/shaders/pathtraceShadow.rmiss.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtraceShadow.rmiss --vn pathtraceShadow_rmiss --target-env vulkan1.2
/usr/bin/glslangValidator -o autogen/shaders/pathtrace.rmiss.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rmiss --vn pathtrace_rmiss --target-env vulkan1.2
/home/chris/lab/ray-tracing/vk_raytrace/shaders/post.frag
ERROR: Failed to open file: /home/chris/lab/ray-tracing/vk_raytrace/autogen/shaders/post.frag.h
/home/chris/lab/ray-tracing/vk_raytrace/shaders/passthrough.vert
ERROR: Failed to open file: /home/chris/lab/ray-tracing/vk_raytrace/autogen/shaders/passthrough.vert.h
/home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtraceShadow.rmiss
ERROR: Failed to open file: /home/chris/lab/ray-tracing/vk_raytrace/autogen/shaders/pathtraceShadow.rmiss.h
/home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rahit
ERROR: /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rahit:88: 'ignoreIntersectionEXT' : undeclared identifier
ERROR: /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rahit:88: '' : compilation terminated
ERROR: 2 compilation errors. No code generated.
The proj path has changed from /home/chris/ray-tracing/...
-> /home/chris/lab/ray-tracing/...
.
It seems like [ 63%] Generating ../autogen/shaders/pathtrace.rahit.h
now compiles correctly, but that there is still some issue.
Alright, narrowed it down:
[ 68%] Generating ../autogen/shaders/pathtraceShadow.rmiss.h
/usr/bin/glslangValidator -o /home/chris/lab/ray-tracing/vk_raytrace/autogen/shaders/pathtrace.rmiss.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rmiss --vn pathtrace_rmiss --target-env vulkan1.2
/usr/bin/glslangValidator -o /home/chris/lab/ray-tracing/vk_raytrace/autogen/shaders/pathtrace.rgen.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rgen --vn pathtrace_rgen --target-env vulkan1.2
/usr/bin/glslangValidator -o /home/chris/lab/ray-tracing/vk_raytrace/autogen/shaders/pathtraceShadow.rmiss.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtraceShadow.rmiss --vn pathtraceShadow_rmiss --target-env vulkan1.2
/home/chris/lab/ray-tracing/vk_raytrace/shaders/passthrough.vert
ERROR: Failed to open file: /home/chris/lab/ray-tracing/vk_raytrace/autogen/shaders/passthrough.vert.h
/home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rahit
ERROR: /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rahit:88: 'ignoreIntersectionEXT' : undeclared identifier
ERROR: /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rahit:88: '' : compilation terminated
ERROR: 2 compilation errors. No code generated.
lines modified so far: 91-92. I included line 90 below, but that is unmodified.
Changed to:
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/autogen/${_OUTPUT}
COMMAND echo ${GLSLANGVALIDATOR} -o ${OUTPUT} -V ${_SOURCE} --vn ${VAR_NAME} --target-env ${VULKAN_TARGET_ENV}
COMMAND ${GLSLANGVALIDATOR} -g -o ${OUTPUT} -V ${_SOURCE} --vn ${VAR_NAME} --target-env ${VULKAN_TARGET_ENV}
Yields the following new error (which may be a dependency issue on my part):
[ 68%] Generating ../autogen/shaders/pathtraceShadow.rmiss.h
/usr/bin/glslangValidator -o -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rchit --vn pathtrace_rchit --target-env vulkan1.2
/usr/bin/glslangValidator -o -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/passthrough.vert --vn passthrough_vert --target-env vulkan1.2
/usr/bin/glslangValidator -o -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rahit --vn pathtrace_rahit --target-env vulkan1.2
/usr/bin/glslangValidator -o -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rmiss --vn pathtrace_rmiss --target-env vulkan1.2
/usr/bin/glslangValidator -o -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rgen --vn pathtrace_rgen --target-env vulkan1.2
/usr/bin/glslangValidator -o -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtraceShadow.rmiss --vn pathtraceShadow_rmiss --target-env vulkan1.2
/home/chris/lab/ray-tracing/vk_raytrace/shaders/post.frag
/home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtraceShadow.rmiss
/home/chris/lab/ray-tracing/vk_raytrace/shaders/passthrough.vert
/home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rgen
/home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rmiss
/home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rahit
ERROR: /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rahit:88: 'ignoreIntersectionEXT' : undeclared identifier
ERROR: /home/chris/lab/ray-tracing/vk_raytrace/shaders/pathtrace.rahit:88: '' : compilation terminated
ERROR: 2 compilation errors. No code generated.
And I've corrected the dependency errors. In order to get everything working, I did have to disable the following extension in the shaders:
ignoreIntersectionEXT
I think this error may be getting emitted in Fedora 33 because I installed glsl
via yum
repositories rather than the Vulkan SDK
. So, I am not too worried about that.
However, the compilation ultimately fails at what looks like a build error:
[ 97%] Building CXX object CMakeFiles/vk_raytrace.dir/home/chris/lab/ray-tracing/shared_sources/imgui/imgui_camera_widget.cpp.o
[ 98%] Building CXX object CMakeFiles/vk_raytrace.dir/home/chris/lab/ray-tracing/shared_sources/imgui/imgui_impl_vk.cpp.o
/home/chris/lab/ray-tracing/vk_raytrace/offscreen.cpp:19:10: fatal error: autogen/shaders/passthrough.vert.h: No such file or directory
19 | #include "autogen/shaders/passthrough.vert.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The #include
does show up in Clion
as an error, so I am going to tinker with the CMakeLists.txt
file when I get a chance, and see if I can get the include to work.
I think the change in the Makefile had an issue.
This is not a valid Cmake command
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/autogen/${_OUTPUT}
That's why there is now an empty output in the log
/usr/bin/glslangValidator -o -V ...
Can you try modifying the lines as
COMMAND echo ${GLSLANGVALIDATOR} -o ${CMAKE_CURRENT_SOURCE_DIR}/autogen/${_OUTPUT} -V ${_SOURCE} --vn ${VAR_NAME} --target-env ${VULKAN_TARGET_ENV}
COMMAND ${GLSLANGVALIDATOR} -g -o ${CMAKE_CURRENT_SOURCE_DIR}/autogen/${_OUTPUT} -V ${_SOURCE} --vn ${VAR_NAME} --target-env ${VULKAN_TARGET_ENV}
or if you want to keep the OUTPUT, the variable need to be set
set(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/autogen/${_OUTPUT})
The output of glslValidator should have a full path. You can check where that file is. Later, when compiling the project, the include directive should find.
So I rebuilt with the macro defined as:
macro(_compile_GLSL_to_header _SOURCE _OUTPUT SOURCE_LIST OUTPUT_LIST FILE_NAME)
LIST(APPEND ${SOURCE_LIST} ${_SOURCE})
LIST(APPEND ${OUTPUT_LIST} autogen/${_OUTPUT})
STRING(REPLACE "." "_" VAR_NAME ${FILE_NAME})
if(GLSLANGVALIDATOR)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/autogen/${_OUTPUT}
COMMAND echo ${GLSLANGVALIDATOR} -o ${CMAKE_CURRENT_SOURCE_DIR}/autogen/${_OUTPUT} -V ${_SOURCE} --vn ${VAR_NAME} --target-env ${VULKAN_TARGET_ENV}
COMMAND ${GLSLANGVALIDATOR} -g -o ${CMAKE_CURRENT_SOURCE_DIR}/autogen/${_OUTPUT} -V ${_SOURCE} --vn ${VAR_NAME} --target-env ${VULKAN_TARGET_ENV}
MAIN_DEPENDENCY ${_SOURCE}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${GLSL_HEADER_FILES}
)
else(GLSLANGVALIDATOR)
MESSAGE(WARNING "could not find GLSLANGVALIDATOR to compile shaders")
endif(GLSLANGVALIDATOR)
endmacro()
But, I still wind up with the following error output:
98%] Building CXX object CMakeFiles/vk_raytrace.dir/home/chris/lab/ray-tracing/shared_sources/imgui/imgui_camera_widget.cpp.o
/home/chris/lab/ray-tracing/vk_raytrace/rtx_pipeline.cpp:20:10: fatal error: autogen/shaders/pathtrace.rahit.h: No such file or directory
20 | #include "autogen/shaders/pathtrace.rahit.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [CMakeFiles/vk_raytrace.dir/build.make:275: CMakeFiles/vk_raytrace.dir/rtx_pipeline.cpp.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
/home/chris/lab/ray-tracing/vk_raytrace/offscreen.cpp:19:10: fatal error: autogen/shaders/passthrough.vert.h: No such file or directory
19 | #include "autogen/shaders/passthrough.vert.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In order to fix this, I ran cmake
from the root directory:
cd /home/chris/lab/ray_tracing/vk_raytracing
cmake .
// Got the same error
// The failing command
/opt/vulkan-sdk/1.2.162.1/x86_64/bin/glslangValidator -o /home/chris/lab/ray-tracing/vk_raytrace/shaders/post.frag.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/post.frag --vn post_frag --target-env vulkan1.2
This was failing, so I tried the following:
mkdir -p autogen && /opt/vulkan-sdk/1.2.162.1/x86_64/bin/glslangValidator -o /home/chris/lab/ray-tracing/vk_raytrace/shaders/post.frag.h -V /home/chris/lab/ray-tracing/vk_raytrace/shaders/post.frag --vn post_frag --target-env vulkan1.2
And it worked... So I think the mistake must be that the autogen
directory is not getting created. Perhaps my build process is skipping a step?
mkdir -p build/autogen
cmake -B $(pwd)/build -S $(pwd)
Currently works. I wind up here:
[ 77%] Building CXX object CMakeFiles/vk_raytrace.dir/accelstruct.cpp.o
In file included from /home/chris/lab/ray-tracing/vk_raytrace/accelstruct.hpp:18,
from /home/chris/lab/ray-tracing/vk_raytrace/accelstruct.cpp:28:
/home/chris/lab/ray-tracing/shared_sources/nvvk/raytraceKHR_vk.hpp:592:2: error: #error This include requires VK_KHR_ray_tracing support in the Vulkan SDK.
592 | #error This include requires VK_KHR_ray_tracing support in the Vulkan SDK.
And follow google to this stack overflow question and this index of drivers.
Looking at these drivers, I am not sure whether they are "developer drivers" and have the RTX ray tracing enabled (meaning I download 460), or whether I need to download the latest feature branch, 455.
Either way, I am having some trouble installing both the a-la-carte developer driver, and Cuda + NV-ml (my preference is to use dnf/yum
when possible -- I was able to add the cuda repo file for my system to my /etc/yum.repos.d
from this index here).
Do you have any recommendations?
And want to say: once we debug this, I am happy to write up a step-by-step install script for everything it took to get the Quadro RTX 4000 working with everything installed on fedora33, and hand it off to you guys.
I fixed things by creating the following directory in the home folder of the project:
mkdir -p autogen/shaders
In addition to the recommended changes.
Ran into this error compiling the shaders:
GLSL
is installed:GLSL Lang is @11.0