Skip to content

Commit 6922df6

Browse files
committed
Triangle, million triangle and compute tests on local
1 parent 5f86165 commit 6922df6

25 files changed

Lines changed: 2064 additions & 564 deletions
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# build outputs
21
out/
32
build/
43
cmake-build-*/
@@ -10,17 +9,15 @@ compile_commands.json
109
Testing/
1110
CTestTestfile.cmake
1211

13-
# git + editor stuff
1412
.git/
1513
.gitignore
1614
.vscode/
1715
.idea/
16+
.vs/
1817

19-
# OS junk
2018
.DS_Store
2119
Thumbs.db
2220

23-
# optional: large artifacts
2421
*.tar
2522
*.tar.gz
26-
results/
23+
results/

.gitignore

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@ results/*.txt
44
results/*.qdrep
55
results/*.nsys-rep
66
results/*.sqlite
7-
<<<<<<< ours
8-
<<<<<<< ours
97
/.vs
108
/out
11-
=======
12-
>>>>>>> theirs
13-
=======
14-
>>>>>>> theirs
9+
/results

AGENTS.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# AGENTS.md
2+
3+
## Purpose
4+
5+
Guidance for coding agents working in this repository.
6+
7+
## Project summary
8+
9+
- Project: `vk-bench` Vulkan micro-benchmark.
10+
- Language: C++ (single primary source file: `src/main.cpp`).
11+
- Build: CMake.
12+
- Runtime: Linux Docker workflow with NVIDIA GPU (`--gpus all`) is the default path.
13+
14+
## What to optimize for
15+
16+
- Keep benchmark behavior deterministic and easy to compare run-to-run.
17+
- Prefer small, reviewable changes over broad refactors.
18+
- Preserve JSON output compatibility unless a change is explicitly requested.
19+
20+
## Editing rules
21+
22+
- Avoid changing benchmark semantics (scene workloads, frame loops, timing region boundaries) unless requested.
23+
- Add comments only where logic is non-obvious (timing, synchronization, resource lifetime).
24+
- Keep code style consistent with existing file formatting and naming.
25+
- Do not add dependencies unless they are necessary and justified.
26+
27+
## Verification checklist
28+
29+
When changing code, run what is feasible in the environment:
30+
31+
1. Configure/build with CMake.
32+
2. Run a short headless benchmark (`--frames` small) and verify JSON output is written.
33+
3. Confirm no obvious regressions in CLI arguments or scene dispatch.
34+
35+
If GPU execution is not available, state what could not be validated.
36+
37+
## Key files
38+
39+
- `src/main.cpp`: Vulkan setup, scene execution, timing collection, JSON output.
40+
- `CMakeLists.txt`: targets, shader compilation/install, window mode options.
41+
- `scripts/run_bench.sh`: scripted benchmark runs in Docker.
42+
- `scripts/nsight_capture.sh`: Nsight Systems capture helper.
43+
- `scripts/collect_system_info.sh`: host/container environment capture.
44+
- `README.md`: user-facing usage and run instructions.
45+
46+
## Common pitfalls
47+
48+
- Do not assume window mode is available; respect `VK_BENCH_HAS_WINDOW`.
49+
- Keep shader lookup behavior intact (`VK_BENCH_SHADER_DIR`, executable-local shaders, fallback paths).
50+
- Ensure Vulkan objects are destroyed in reverse-lifetime order on every exit path.

CMakeLists.txt

Lines changed: 48 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,56 +6,62 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
66
set(CMAKE_CXX_EXTENSIONS OFF)
77

88
find_package(Vulkan REQUIRED)
9-
<<<<<<< ours
10-
<<<<<<< ours
119
include(cmake/compile_shaders.cmake)
1210

13-
set(SHADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/shaders")
14-
set(SPIRV_DIR "${CMAKE_CURRENT_BINARY_DIR}/shaders")
11+
option(VK_BENCH_ENABLE_WINDOW "Enable window mode support (requires GLFW)" ON)
12+
option(VK_BENCH_FETCH_GLFW
13+
"Download and build GLFW if it is not available on the system" ON)
14+
15+
set(VK_BENCH_HAS_WINDOW OFF)
16+
set(VK_BENCH_GLFW_TARGET "")
17+
18+
if (VK_BENCH_ENABLE_WINDOW)
19+
find_package(glfw3 QUIET)
20+
21+
if (glfw3_FOUND)
22+
set(VK_BENCH_HAS_WINDOW ON)
23+
set(VK_BENCH_GLFW_TARGET glfw)
24+
message(STATUS "Using system glfw3 package")
25+
elseif (VK_BENCH_FETCH_GLFW)
26+
include(FetchContent)
27+
FetchContent_Declare(
28+
glfw
29+
GIT_REPOSITORY https://github.com/glfw/glfw.git
30+
GIT_TAG 3.4
31+
)
32+
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
33+
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
34+
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
35+
set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
36+
FetchContent_MakeAvailable(glfw)
37+
set(VK_BENCH_HAS_WINDOW ON)
38+
set(VK_BENCH_GLFW_TARGET glfw)
39+
message(STATUS "Using fetched GLFW (3.4)")
40+
else()
41+
message(STATUS
42+
"glfw3 not found and VK_BENCH_FETCH_GLFW=OFF: windowed rendering disabled, use --headless")
43+
endif()
44+
else()
45+
message(STATUS "VK_BENCH_ENABLE_WINDOW=OFF: windowed rendering disabled, use --headless")
46+
endif()
47+
48+
set(SHADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/shaders")
49+
set(SPIRV_DIR "${CMAKE_CURRENT_BINARY_DIR}/shaders")
50+
file(TO_CMAKE_PATH "${SPIRV_DIR}" SPIRV_DIR_CMAKE)
1551
vk_compile_slang_shaders(SHADER_OUTPUTS vk-bench-shaders "${SHADER_DIR}" "${SPIRV_DIR}")
52+
1653
add_executable(vk-bench src/main.cpp)
1754
target_include_directories(vk-bench PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include")
55+
target_compile_definitions(vk-bench PRIVATE VK_BENCH_SHADER_DIR="${SPIRV_DIR_CMAKE}")
1856
target_link_libraries(vk-bench PRIVATE Vulkan::Vulkan)
57+
if (VK_BENCH_HAS_WINDOW)
58+
target_link_libraries(vk-bench PRIVATE ${VK_BENCH_GLFW_TARGET})
59+
target_compile_definitions(vk-bench PRIVATE VK_BENCH_HAS_WINDOW=1)
60+
else()
61+
target_compile_definitions(vk-bench PRIVATE VK_BENCH_HAS_WINDOW=0)
62+
endif()
1963

2064
add_dependencies(vk-bench vk-bench-shaders)
2165

2266
install(TARGETS vk-bench RUNTIME DESTINATION bin)
2367
install(FILES ${SHADER_OUTPUTS} DESTINATION bin/shaders)
24-
=======
25-
=======
26-
>>>>>>> theirs
27-
find_program(SLANGC slangc REQUIRED)
28-
29-
set(SHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shaders)
30-
set(SPIRV_DIR ${CMAKE_CURRENT_BINARY_DIR}/shaders)
31-
file(MAKE_DIRECTORY ${SPIRV_DIR})
32-
33-
set(SHADER_OUTPUTS
34-
${SPIRV_DIR}/triangle.vert.spv
35-
${SPIRV_DIR}/triangle.frag.spv
36-
)
37-
38-
add_custom_command(
39-
OUTPUT ${SPIRV_DIR}/triangle.vert.spv
40-
COMMAND ${SLANGC} -target spirv -profile glsl_460 -entry main -stage vertex ${SHADER_DIR}/triangle.vert.slang -o ${SPIRV_DIR}/triangle.vert.spv
41-
DEPENDS ${SHADER_DIR}/triangle.vert.slang
42-
)
43-
44-
add_custom_command(
45-
OUTPUT ${SPIRV_DIR}/triangle.frag.spv
46-
COMMAND ${SLANGC} -target spirv -profile glsl_460 -entry main -stage fragment ${SHADER_DIR}/triangle.frag.slang -o ${SPIRV_DIR}/triangle.frag.spv
47-
DEPENDS ${SHADER_DIR}/triangle.frag.slang
48-
)
49-
50-
add_custom_target(vk-bench-shaders DEPENDS ${SHADER_OUTPUTS})
51-
52-
add_executable(vk-bench src/main.cpp)
53-
add_dependencies(vk-bench vk-bench-shaders)
54-
target_include_directories(vk-bench PRIVATE include)
55-
target_link_libraries(vk-bench PRIVATE Vulkan::Vulkan)
56-
install(TARGETS vk-bench RUNTIME DESTINATION bin)
57-
install(FILES ${SHADER_OUTPUTS} DESTINATION bin/shaders)
58-
<<<<<<< ours
59-
>>>>>>> theirs
60-
=======
61-
>>>>>>> theirs

Dockerfile

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,43 @@
1-
FROM nvidia/vulkan:1.3.280-ubuntu22.04
1+
FROM nvidia/cuda:13.1.1-cudnn-devel-ubuntu24.04
22

33
RUN apt-get update && apt-get install -y --no-install-recommends \
44
build-essential \
55
cmake \
66
pkg-config \
7+
libvulkan1 \
8+
libvulkan-dev \
79
vulkan-tools \
10+
mesa-vulkan-drivers \
811
curl \
912
ca-certificates \
1013
&& rm -rf /var/lib/apt/lists/*
1114

12-
ARG SLANG_VERSION=2024.17.2
13-
RUN curl -fsSL -o /tmp/slang.tar.gz https://github.com/shader-slang/slang/releases/download/v${SLANG_VERSION}/slang-${SLANG_VERSION}-linux-x86_64.tar.gz \
14-
&& tar -xzf /tmp/slang.tar.gz -C /tmp \
15-
&& install -m 0755 /tmp/slang-${SLANG_VERSION}/bin/slangc /usr/local/bin/slangc \
16-
&& rm -rf /tmp/slang.tar.gz /tmp/slang-${SLANG_VERSION}
15+
ARG SLANG_VERSION=2026.3.1
16+
RUN set -eux; \
17+
mkdir -p /opt/slang; \
18+
curl -fsSL -o /tmp/slang.tar.gz \
19+
"https://github.com/shader-slang/slang/releases/download/v${SLANG_VERSION}/slang-${SLANG_VERSION}-linux-x86_64.tar.gz"; \
20+
tar -xzf /tmp/slang.tar.gz -C /opt/slang; \
21+
rm -f /tmp/slang.tar.gz; \
22+
SLANGC_PATH="$(find /opt/slang -type f -name slangc -perm -111 | head -n 1)"; \
23+
test -n "$SLANGC_PATH"; \
24+
install -m 0755 "$SLANGC_PATH" /usr/local/bin/slangc; \
25+
SLANG_LIB_DIR="$(dirname "$(find /opt/slang -type f -name 'libslang-compiler.so*' | head -n 1)")"; \
26+
test -n "$SLANG_LIB_DIR"; \
27+
echo "$SLANG_LIB_DIR" > /etc/ld.so.conf.d/slang.conf; \
28+
ldconfig; \
29+
slangc -version
1730

1831
WORKDIR /workspace
1932
COPY CMakeLists.txt /workspace/CMakeLists.txt
33+
COPY cmake /workspace/cmake
2034
COPY src /workspace/src
2135
COPY include /workspace/include
2236
COPY shaders /workspace/shaders
2337
RUN cmake -S /workspace -B /workspace/build -DCMAKE_BUILD_TYPE=Release \
38+
-DVK_BENCH_ENABLE_WINDOW=OFF \
39+
-DVK_BENCH_FETCH_GLFW=OFF \
40+
-DSLANGC=/usr/local/bin/slangc \
2441
&& cmake --build /workspace/build --config Release -j"$(nproc)" \
2542
&& install -m 0755 /workspace/build/vk-bench /usr/local/bin/vk-bench \
2643
&& install -d /usr/local/bin/shaders \

0 commit comments

Comments
 (0)