Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
1271068
Vulkan: Add vulkan renderer
JKSunny Jun 22, 2022
f5cef91
Vulkan: If the level has a global fog and fastsky is not enabled,
JKSunny Jun 23, 2022
2110ff2
Vulkan: Fix skybox images being compressed even when noTC is in the s…
JKSunny Jun 23, 2022
4882743
Merge remote-tracking branch 'rend2/rend2'
JKSunny Mar 29, 2023
1d13398
Vulkan: Update to latest beta branch
JKSunny Mar 29, 2023
a710cc3
Vulkan: Restructure model_t to use union
JKSunny Mar 25, 2023
f83fd00
Vulkan: model_t union causes some artifacts, use struct
JKSunny Mar 29, 2023
68f719d
Vulkan: Fix newly introduced x86 compiler error
JKSunny Mar 29, 2023
e7a811a
Merge branch 'heads/rend2'
JKSunny Mar 30, 2023
58d4f5e
Merge branch 'heads/rend2'
JKSunny Apr 6, 2023
1b53fd3
Merge branch 'heads/rend2'
JKSunny Apr 19, 2023
992a39f
Merge branch 'heads/rend2'
JKSunny Apr 30, 2023
f3a9bb1
Merge branch 'heads/rend2'
JKSunny May 14, 2023
69166cb
Merge branch 'heads/rend2'
JKSunny May 21, 2023
36de129
Merge branch 'heads/rend2'
JKSunny Jun 7, 2023
a6924c2
Merge branch 'heads/rend2'
JKSunny Jul 3, 2023
49c827e
Vulkan: Fix inaccurate descriptorset layout bindings
JKSunny Mar 31, 2023
3c50667
Vulkan: Refactor glsl compiler and restructure md3 to mdv struct
JKSunny May 2, 2023
343f973
Vulkan: Fix undefined store operation warning
JKSunny May 12, 2023
d07cc95
Vulkan: Use vanilla method of shaded flares
JKSunny May 16, 2023
0029cbc
Vulkan: Remove flare fade out and modify distance test bias
JKSunny May 29, 2023
748265b
Vulkan: Merge latest changes from beta
JKSunny Sep 14, 2023
f0cb3b5
Vulkan: Merge latest changes from beta
JKSunny Dec 24, 2023
f31afa1
Vulkan: Insignificant refactoring & define guarding
JKSunny Dec 26, 2023
6c0d257
Merge remote-tracking branch 'master/master'
JKSunny Dec 26, 2023
f0587cf
Vulkan: Merge latest changes from beta
JKSunny Feb 6, 2024
96ad3e6
Merge remote-tracking branch 'master/master'
JKSunny Feb 13, 2024
ededf24
Vulkan: Merge latest changes from beta
JKSunny Feb 13, 2024
f128f1e
Merge remote-tracking branch 'master/master'
JKSunny Apr 15, 2024
a108402
Vulkan: Merge latest changes from beta
JKSunny Apr 15, 2024
8f987de
Merge remote-tracking branch 'master/master'
JKSunny Aug 5, 2024
574ad47
Vulkan: Merge latest changes from beta
JKSunny Oct 20, 2024
2ea56cc
Merge remote-tracking branch 'master/master'
JKSunny Oct 20, 2024
15cc247
Merge remote-tracking branch 'master/master'
JKSunny Dec 22, 2024
92eef09
Vulkan: Merge latest changes from master
JKSunny Jul 19, 2025
709fb37
Merge remote-tracking branch 'master/master'
JKSunny Jul 19, 2025
d729ce9
Vulkan: Merge latest changes from beta
JKSunny Aug 20, 2025
f3ec6fc
Merge remote-tracking branch 'master/master'
JKSunny Oct 11, 2025
e6f3983
Vulkan: Disable vbo model caching by default
JKSunny Oct 11, 2025
5f1f2dd
Merge remote-tracking branch 'master/master'
JKSunny Jan 18, 2026
5d04dce
Vulkan: Merge latest changes from master
JKSunny Jan 18, 2026
312018e
CICD: Update macos runners
JKSunny Jan 18, 2026
9d9c4dc
Vulkan: Merge latest changes from master
JKSunny Jan 18, 2026
0211315
Vulkan: Merge latest changes from master
JKSunny May 3, 2026
7fdaf3d
Vulkan: Merge latest changes from master
JKSunny May 3, 2026
d6d6bb7
Apply fix from https://github.com/pnggroup/libpng/commit/893b8113f04d…
taysta Dec 12, 2025
b31da7d
Vulkan: Fix potential invalid memory access in tess.xstages
JKSunny May 4, 2026
20fa0b7
Vulkan: Move contribution notice section to rd-vulkan README.md
JKSunny May 9, 2026
2e9feb8
Vulkan: Rework renderer memory management
JKSunny May 24, 2026
2892ae3
Vulkan: Disable VK_OBJECT_TRACKER and cleanup commented API calls
JKSunny May 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -191,13 +191,13 @@ jobs:
strategy:
fail-fast: false
matrix:
runner: [macos-13, macos-14]
runner: [macos-15-intel, macos-15]
build_type: [Debug, Release]
portable: [Non-Portable]
include:
- runner: macos-13
- runner: macos-15-intel
arch: x86_64
- runner: macos-14
- runner: macos-15
arch: arm64

steps:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -194,3 +194,4 @@ compile_commands.json
#############
[Bb]uild*/
cmake-build-*
codemp/rd-vulkan/shaders/tools/compile_threaded.exe
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Huh, where does this come from?
Should this be in the project gitignore, or your local?
Compiled versions of bin2hex and bindshader have been committed. All or nothing?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for reviewing,

When developers want to compile GLSL->SPIR-V, compile_threaded.bat uses cl.exe to compile it.
Same for the other two.

I added it to .gitignore cus Windows Firewall/Github Desktop was whining about something.
The other compiled executables are tiny, thats why I left them.

I can add a .gitignore to the tools folder and remove it from the root one.
or a global *.exe, w/e you prefer, let me know :)

2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ option(BuildPortableVersion "Build portable version (does not read or write file

option(BuildMPEngine "Whether to create projects for the MP client (openjk.exe)" ON)
option(BuildMPRdVanilla "Whether to create projects for the MP default renderer (rd-vanilla_x86.dll)" ON)
option(BuildMPRdVulkan "Whether to create projects for the MP vulkan renderer (rd-vulkan_x86.dll)" ON)
option(BuildMPDed "Whether to create projects for the MP dedicated server (openjkded.exe)" ON)
option(BuildMPGame "Whether to create projects for the MP server-side gamecode (jampgamex86.dll)" ON)
option(BuildMPCGame "Whether to create projects for the MP clientside gamecode (cgamex86.dll)" ON)
Expand Down Expand Up @@ -168,6 +169,7 @@ set(SPGame "jagame${Architecture}")
set(SPRDVanillaRenderer "rdsp-vanilla_${Architecture}")
set(MPEngine "openjk.${Architecture}")
set(MPVanillaRenderer "rd-vanilla_${Architecture}")
set(MPVulkanRenderer "rd-vulkan_${Architecture}")
set(MPDed "openjkded.${Architecture}")
set(MPGame "jampgame${Architecture}")
set(MPCGame "cgame${Architecture}")
Expand Down
5 changes: 5 additions & 0 deletions codemp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ if(BuildMPRdVanilla)
add_subdirectory("${MPDir}/rd-vanilla")
endif(BuildMPRdVanilla)

# Add Vulkan JKA Renderer Project
if(BuildMPRdVulkan)
add_subdirectory("${MPDir}/rd-vulkan")
endif(BuildMPRdVulkan)

# Add rend2 JKA Renderer Project
if(BuildMPRend2)
add_subdirectory("${MPDir}/rd-rend2")
Expand Down
6 changes: 6 additions & 0 deletions codemp/client/cl_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2529,6 +2529,12 @@ void CL_InitRef( void ) {
ri.PD_Store = PD_Store;
ri.PD_Load = PD_Load;

// Vulkan
ri.VK_IsMinimized = WIN_VK_IsMinimized;
ri.VK_GetInstanceProcAddress = WIN_VK_GetInstanceProcAddress;
ri.VK_createSurfaceImpl = WIN_VK_createSurfaceImpl;
ri.VK_destroyWindow = WIN_VK_destroyWindow;

ret = GetRefAPI( REF_API_VERSION, &ri );

// Com_Printf( "-------------------------------\n");
Expand Down
6 changes: 6 additions & 0 deletions codemp/rd-common/tr_public.h
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,12 @@ typedef struct refimport_s {
// Persistent data store
bool (*PD_Store) ( const char *name, const void *data, size_t size );
const void * (*PD_Load) ( const char *name, size_t *size );

// Vulkan
qboolean (*VK_IsMinimized) ( void );
void *(*VK_GetInstanceProcAddress) ( void );
qboolean (*VK_createSurfaceImpl) ( void *instance, void **surface );
void (*VK_destroyWindow) ( void);
} refimport_t;

// this is the only function actually exported at the linker level
Expand Down
203 changes: 203 additions & 0 deletions codemp/rd-vulkan/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
#============================================================================
# Copyright (C) 2013 - 2018, OpenJK contributors
#
# This file is part of the OpenJK source code.
#
# OpenJK is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#============================================================================

# Make sure the user is not executing this script directly
if(NOT InOpenJK)
message(FATAL_ERROR "Use the top-level cmake script!")
endif(NOT InOpenJK)

# Check for dependencies first

set(MPVulkanRendererIncludeDirectories ${MPDir})
set(MPVulkanRendererIncludeDirectories
${MPVulkanRendererIncludeDirectories}
${SharedDir}
${MPDir}
"${MPDir}/rd-vulkan"
"${GSLIncludeDirectory}"
)

set(MPVulkanRendererFiles
"${MPDir}/rd-vulkan/G2_API.cpp"
"${MPDir}/rd-vulkan/G2_bolts.cpp"
"${MPDir}/rd-vulkan/G2_bones.cpp"
"${MPDir}/rd-vulkan/G2_gore_r2.cpp"
"${MPDir}/rd-vulkan/G2_gore_r2.h"
"${MPDir}/rd-vulkan/G2_misc.cpp"
"${MPDir}/rd-vulkan/G2_surfaces.cpp"
"${MPDir}/rd-vulkan/tr_backend.cpp"
"${MPDir}/rd-vulkan/tr_bsp.cpp"
"${MPDir}/rd-vulkan/tr_cache.h"
"${MPDir}/rd-vulkan/tr_cache.cpp"
"${MPDir}/rd-vulkan/tr_cmds.cpp"
"${MPDir}/rd-vulkan/tr_curve.cpp"
"${MPDir}/rd-vulkan/tr_decals.cpp"
"${MPDir}/rd-vulkan/tr_ghoul2.cpp"
"${MPDir}/rd-vulkan/tr_image.cpp"
"${MPDir}/rd-vulkan/tr_init.cpp"
"${MPDir}/rd-vulkan/tr_light.cpp"
"${MPDir}/rd-vulkan/tr_local.h"
"${MPDir}/rd-vulkan/tr_main.cpp"
"${MPDir}/rd-vulkan/tr_marks.cpp"
"${MPDir}/rd-vulkan/tr_mesh.cpp"
"${MPDir}/rd-vulkan/tr_model.cpp"
"${MPDir}/rd-vulkan/tr_quicksprite.cpp"
"${MPDir}/rd-vulkan/tr_quicksprite.h"
"${MPDir}/rd-vulkan/tr_scene.cpp"
"${MPDir}/rd-vulkan/tr_shade.cpp"
"${MPDir}/rd-vulkan/tr_shader.cpp"
"${MPDir}/rd-vulkan/tr_shade_calc.cpp"
"${MPDir}/rd-vulkan/tr_shadows.cpp"
"${MPDir}/rd-vulkan/tr_skin.cpp"
"${MPDir}/rd-vulkan/tr_sky.cpp"
"${MPDir}/rd-vulkan/tr_subs.cpp"
"${MPDir}/rd-vulkan/tr_surface.cpp"
"${MPDir}/rd-vulkan/tr_surfacesprites.cpp"
"${MPDir}/rd-vulkan/tr_world.cpp"
"${MPDir}/rd-vulkan/tr_WorldEffects.cpp"
"${MPDir}/rd-vulkan/tr_WorldEffects.h"
"${MPDir}/rd-vulkan/vk_attachments.cpp"
"${MPDir}/rd-vulkan/vk_bloom.cpp"
"${MPDir}/rd-vulkan/vk_cmd.cpp"
"${MPDir}/rd-vulkan/vk_debug.cpp"
"${MPDir}/rd-vulkan/vk_dynamic_glow.cpp"
"${MPDir}/rd-vulkan/vk_flares.cpp"
"${MPDir}/rd-vulkan/vk_frame.cpp"
"${MPDir}/rd-vulkan/vk_image.cpp"
"${MPDir}/rd-vulkan/vk_image_process.cpp"
"${MPDir}/rd-vulkan/vk_info.cpp"
"${MPDir}/rd-vulkan/vk_init.cpp"
"${MPDir}/rd-vulkan/vk_instance.cpp"
"${MPDir}/rd-vulkan/vk_local.h"
"${MPDir}/rd-vulkan/vk_pipelines.cpp"
"${MPDir}/rd-vulkan/vk_shaders.cpp"
"${MPDir}/rd-vulkan/vk_shade_geometry.cpp"
"${MPDir}/rd-vulkan/vk_swapchain.cpp"
"${MPDir}/rd-vulkan/vk_vbo.cpp"
"${MPDir}/rd-vulkan/vk_vbo_surfacesprites.cpp"
)
source_group("renderer" FILES ${MPVulkanRendererFiles})

set(MPVulkanRendererGhoul2Files
"${MPDir}/ghoul2/g2_local.h"
"${MPDir}/ghoul2/ghoul2_shared.h"
"${MPDir}/ghoul2/G2_gore.cpp"
"${MPDir}/ghoul2/G2_gore.h")
source_group("ghoul2" FILES ${MPVulkanRendererGhoul2Files})
set(MPVulkanRendererFiles ${MPVulkanRendererFiles} ${MPVulkanRendererGhoul2Files})

set(MPVulkanRendererRdCommonFiles
"${MPDir}/rd-common/mdx_format.h"
"${MPDir}/rd-common/tr_common.h"
"${MPDir}/rd-common/tr_font.cpp"
"${MPDir}/rd-common/tr_font.h"
"${MPDir}/rd-common/tr_image_load.cpp"
"${MPDir}/rd-common/tr_image_jpg.cpp"
"${MPDir}/rd-common/tr_image_tga.cpp"
"${MPDir}/rd-common/tr_image_png.cpp"
"${MPDir}/rd-common/tr_noise.cpp"
"${MPDir}/rd-common/tr_public.h"
"${MPDir}/rd-common/tr_types.h")
source_group("rd-common" FILES ${MPVulkanRendererRdCommonFiles})
set(MPVulkanRendererFiles ${MPVulkanRendererFiles} ${MPVulkanRendererRdCommonFiles})

set(MPVulkanRendererVulkanAssets
"${MPDir}/rd-vulkan/vulkan/vk_platform.h"
"${MPDir}/rd-vulkan/vulkan/vulkan.h"
"${MPDir}/rd-vulkan/vulkan/vulkan_core.h"
"${MPDir}/rd-vulkan/vulkan/vulkan_win32.h"
"${MPDir}/rd-vulkan/vulkan/vulkan_xlib.h"
"${MPDir}/rd-vulkan/vulkan/vulkan_xlib_xrandr.h")
source_group("renderer\\vulkan" FILES ${MPVulkanRendererVulkanAssets})
set(MPVulkanRendererFiles ${MPVulkanRendererFiles} ${MPVulkanRendererVulkanAssets})

set(MPVulkanRendererUtils
"${MPDir}/rd-vulkan/utils/stb_dxt.h")
source_group("renderer\\utils" FILES ${MPVulkanRendererUtils})
set(MPVulkanRendererFiles ${MPVulkanRendererFiles} ${MPVulkanRendererUtils})

set(MPVulkanRendererCommonFiles
"${MPDir}/qcommon/matcomp.cpp"
"${MPDir}/qcommon/q_shared.cpp"

${SharedCommonFiles})
source_group("common" FILES ${MPVulkanRendererCommonFiles})
set(MPVulkanRendererFiles ${MPVulkanRendererFiles} ${MPVulkanRendererCommonFiles})

set(MPVulkanRendererCommonSafeFiles
${SharedCommonSafeFiles}
)
source_group("common/safe" FILES ${MPVulkanRendererCommonSafeFiles})
set(MPVulkanRendererFiles ${MPVulkanRendererFiles} ${MPVulkanRendererCommonSafeFiles})

# Transparently use either bundled or system libjpeg.
list(APPEND MPVulkanRendererIncludeDirectories ${JPEG_INCLUDE_DIR})
list(APPEND MPVulkanRendererLibraries ${JPEG_LIBRARIES})

# Transparently use either bundled or system libpng. Order is important --
# libpng used zlib, so it must come before it on the linker command line.
list(APPEND MPVulkanRendererIncludeDirectories ${PNG_INCLUDE_DIRS})
list(APPEND MPVulkanRendererLibraries ${PNG_LIBRARIES})

# Transparently use either bundled or system zlib.
list(APPEND MPVulkanRendererIncludeDirectories ${ZLIB_INCLUDE_DIR})
list(APPEND MPVulkanRendererLibraries ${ZLIB_LIBRARIES})

# Transparently use our bundled minizip.
list(APPEND MPVulkanRendererIncludeDirectories ${MINIZIP_INCLUDE_DIRS})
list(APPEND MPVulkanRendererLibraries ${MINIZIP_LIBRARIES})

#find_package(OpenGL REQUIRED)
#set(MPVulkanRendererIncludeDirectories ${MPVulkanRendererIncludeDirectories} ${OPENGL_INCLUDE_DIR})
#set(MPVulkanRendererLibraries ${MPVulkanRendererLibraries} ${OPENGL_LIBRARIES})

set(MPVulkanRendererIncludeDirectories ${MPVulkanRendererIncludeDirectories} ${OpenJKLibDir})
add_library(${MPVulkanRenderer} SHARED ${MPVulkanRendererFiles})

if(NOT MSVC)
# remove "lib" prefix for .so/.dylib files
set_target_properties(${MPVulkanRenderer} PROPERTIES PREFIX "")
endif()

if(WIN32)
install(TARGETS ${MPVulkanRenderer}
RUNTIME
DESTINATION ${JKAInstallDir}
COMPONENT ${JKAMPClientComponent})
else(WIN32)
if(MakeApplicationBundles AND BuildMPEngine)
install(TARGETS ${MPVulkanRenderer}
LIBRARY
DESTINATION "${JKAInstallDir}/${MPEngine}.app/Contents/MacOS/"
COMPONENT ${JKAMPClientComponent})
else()
install(TARGETS ${MPVulkanRenderer}
LIBRARY
DESTINATION ${JKAInstallDir}
COMPONENT ${JKAMPClientComponent})
endif()
endif()

set_target_properties(${MPVulkanRenderer} PROPERTIES COMPILE_DEFINITIONS "${SharedDefines}")

# Hide symbols not explicitly marked public.
set_property(TARGET ${MPVulkanRenderer} APPEND PROPERTY COMPILE_OPTIONS ${OPENJK_VISIBILITY_FLAGS})

set_target_properties(${MPVulkanRenderer} PROPERTIES INCLUDE_DIRECTORIES "${MPVulkanRendererIncludeDirectories}")
set_target_properties(${MPVulkanRenderer} PROPERTIES PROJECT_LABEL "MP Vulkan Renderer")
target_link_libraries(${MPVulkanRenderer} ${MPVulkanRendererLibraries})
Loading