Skip to content

Commit 3e41b76

Browse files
committed
Add vulkan renderer
Copied from vkQuake3 which is in turn based on Quake III Kenny Edition
1 parent c9697a0 commit 3e41b76

File tree

165 files changed

+110423
-1
lines changed

Some content is hidden

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

165 files changed

+110423
-1
lines changed

Makefile

+135-1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ endif
4646
ifndef BUILD_RENDERER_OPENGL2
4747
BUILD_RENDERER_OPENGL2=
4848
endif
49+
ifndef BUILD_RENDERER_VULKAN
50+
BUILD_RENDERER_VULKAN=
51+
endif
4952
ifndef BUILD_AUTOUPDATER # DON'T build unless you mean to!
5053
BUILD_AUTOUPDATER=0
5154
endif
@@ -264,6 +267,7 @@ SDIR=$(MOUNT_DIR)/server
264267
RCOMMONDIR=$(MOUNT_DIR)/renderercommon
265268
RGL1DIR=$(MOUNT_DIR)/renderergl1
266269
RGL2DIR=$(MOUNT_DIR)/renderergl2
270+
RVULKANDIR=$(MOUNT_DIR)/renderervk
267271
CMDIR=$(MOUNT_DIR)/qcommon
268272
SDLDIR=$(MOUNT_DIR)/sdl
269273
ASMDIR=$(MOUNT_DIR)/asm
@@ -1168,13 +1172,19 @@ ifneq ($(BUILD_CLIENT),0)
11681172
ifneq ($(BUILD_RENDERER_OPENGL2),0)
11691173
TARGETS += $(B)/renderer_opengl2_$(SHLIBNAME)
11701174
endif
1175+
ifneq ($(BUILD_RENDERER_VULKAN),0)
1176+
TARGETS += $(B)/renderer_vulkan_$(SHLIBNAME)
1177+
endif
11711178
else
11721179
ifneq ($(BUILD_RENDERER_OPENGL1),0)
11731180
TARGETS += $(B)/$(CLIENTBIN)$(FULLBINEXT)
11741181
endif
11751182
ifneq ($(BUILD_RENDERER_OPENGL2),0)
11761183
TARGETS += $(B)/$(CLIENTBIN)_opengl2$(FULLBINEXT)
11771184
endif
1185+
ifneq ($(BUILD_RENDERER_VULKAN),0)
1186+
TARGETS += $(B)/$(CLIENTBIN)_vulkan$(FULLBINEXT)
1187+
endif
11781188
endif
11791189
endif
11801190

@@ -1642,6 +1652,7 @@ makedirs:
16421652
@$(MKDIR) $(B)/renderergl1
16431653
@$(MKDIR) $(B)/renderergl2
16441654
@$(MKDIR) $(B)/renderergl2/glsl
1655+
@$(MKDIR) $(B)/renderervk
16451656
@$(MKDIR) $(B)/ded
16461657
@$(MKDIR) $(B)/$(BASEGAME)/cgame
16471658
@$(MKDIR) $(B)/$(BASEGAME)/game
@@ -1997,6 +2008,88 @@ else
19972008
endif
19982009
endif
19992010

2011+
Q3VKOBJ = \
2012+
$(B)/renderervk/matrix_multiplication.o \
2013+
$(B)/renderervk/tr_globals.o \
2014+
$(B)/renderervk/tr_cvar.o \
2015+
$(B)/renderervk/tr_animation.o \
2016+
$(B)/renderervk/tr_bsp.o \
2017+
$(B)/renderervk/tr_cmds.o \
2018+
$(B)/renderervk/tr_curve.o \
2019+
$(B)/renderervk/tr_fonts.o \
2020+
$(B)/renderervk/tr_image.o \
2021+
$(B)/renderervk/R_FindShader.o \
2022+
$(B)/renderervk/R_ListShader.o \
2023+
$(B)/renderervk/R_ImageProcess.o \
2024+
$(B)/renderervk/tr_init.o \
2025+
$(B)/renderervk/tr_light.o \
2026+
$(B)/renderervk/tr_main.o \
2027+
$(B)/renderervk/tr_marks.o \
2028+
$(B)/renderervk/tr_mesh.o \
2029+
$(B)/renderervk/tr_model.o \
2030+
$(B)/renderervk/tr_model_iqm.o \
2031+
$(B)/renderervk/RE_RegisterModel.o \
2032+
$(B)/renderervk/R_ModelBounds.o \
2033+
$(B)/renderervk/R_LoadMD3.o \
2034+
$(B)/renderervk/R_LoadMDR.o \
2035+
$(B)/renderervk/R_LerpTag.o \
2036+
$(B)/renderervk/tr_noise.o \
2037+
$(B)/renderervk/tr_scene.o \
2038+
$(B)/renderervk/tr_shade.o \
2039+
$(B)/renderervk/tr_shade_calc.o \
2040+
$(B)/renderervk/tr_shader.o \
2041+
$(B)/renderervk/tr_shadows.o \
2042+
$(B)/renderervk/tr_sky.o \
2043+
$(B)/renderervk/tr_surface.o \
2044+
$(B)/renderervk/tr_flares.o \
2045+
$(B)/renderervk/tr_fog.o \
2046+
$(B)/renderervk/tr_world.o \
2047+
$(B)/renderervk/vk_instance.o \
2048+
$(B)/renderervk/vk_init.o \
2049+
$(B)/renderervk/vk_cmd.o \
2050+
$(B)/renderervk/vk_image.o \
2051+
$(B)/renderervk/vk_image_sampler2.o \
2052+
$(B)/renderervk/vk_pipelines.o \
2053+
$(B)/renderervk/vk_frame.o \
2054+
$(B)/renderervk/vk_swapchain.o \
2055+
$(B)/renderervk/vk_screenshot.o \
2056+
$(B)/renderervk/vk_shade_geometry.o \
2057+
$(B)/renderervk/vk_depth_attachment.o \
2058+
\
2059+
$(B)/renderervk/vk_shaders.o \
2060+
$(B)/renderervk/multi_texture_clipping_plane_vert.o \
2061+
$(B)/renderervk/multi_texture_frag.o \
2062+
$(B)/renderervk/multi_texture_vert.o \
2063+
$(B)/renderervk/single_texture_clipping_plane_vert.o \
2064+
$(B)/renderervk/single_texture_frag.o \
2065+
$(B)/renderervk/single_texture_vert.o \
2066+
\
2067+
$(B)/renderervk/R_StretchRaw.o \
2068+
$(B)/renderervk/R_DebugGraphics.o \
2069+
$(B)/renderervk/RB_ShowImages.o \
2070+
$(B)/renderervk/RB_DrawNormals.o \
2071+
$(B)/renderervk/RB_DrawTris.o \
2072+
$(B)/renderervk/RB_SurfaceAnim.o \
2073+
$(B)/renderervk/tr_backend.o \
2074+
$(B)/renderervk/tr_Cull.o \
2075+
$(B)/renderervk/glConfig.o \
2076+
$(B)/renderervk/R_Parser.o \
2077+
$(B)/renderervk/R_PortalPlane.o \
2078+
$(B)/renderervk/R_PrintMat.o \
2079+
\
2080+
$(B)/renderervk/R_LoadImage2.o \
2081+
$(B)/renderervk/R_LoadImage.o \
2082+
$(B)/renderervk/R_ImageJPG.o \
2083+
$(B)/renderervk/R_ImageTGA.o \
2084+
$(B)/renderervk/R_ImagePNG.o \
2085+
$(B)/renderervk/R_ImageBMP.o \
2086+
$(B)/renderervk/R_ImagePCX.o \
2087+
\
2088+
$(B)/renderervk/ref_import.o \
2089+
$(B)/renderervk/render_export.o \
2090+
\
2091+
$(B)/renderervk/vk_create_window_SDL.o
2092+
20002093
Q3R2OBJ = \
20012094
$(B)/renderergl2/tr_animation.o \
20022095
$(B)/renderergl2/tr_backend.o \
@@ -2116,6 +2209,11 @@ ifneq ($(USE_RENDERER_DLOPEN), 0)
21162209
$(B)/renderergl1/puff.o \
21172210
$(B)/renderergl1/q_math.o \
21182211
$(B)/renderergl1/tr_subs.o
2212+
2213+
Q3VKOBJ += \
2214+
$(B)/renderergl1/q_shared.o \
2215+
$(B)/renderergl1/puff.o \
2216+
$(B)/renderergl1/q_math.o
21192217
endif
21202218

21212219
ifneq ($(USE_INTERNAL_JPEG),0)
@@ -2426,6 +2524,11 @@ $(B)/renderer_opengl2_$(SHLIBNAME): $(Q3R2OBJ) $(Q3R2STRINGOBJ) $(JPGOBJ)
24262524
$(echo_cmd) "LD $@"
24272525
$(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3R2OBJ) $(Q3R2STRINGOBJ) $(JPGOBJ) \
24282526
$(THREAD_LIBS) $(LIBSDLMAIN) $(RENDERER_LIBS) $(LIBS)
2527+
2528+
$(B)/renderer_vulkan_$(SHLIBNAME): $(Q3VKOBJ) $(JPGOBJ)
2529+
$(echo_cmd) "LD $@"
2530+
$(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3VKOBJ) $(JPGOBJ) \
2531+
$(THREAD_LIBS) $(LIBSDLMAIN) $(RENDERER_LIBS) $(LIBS)
24292532
else
24302533
$(B)/$(CLIENTBIN)$(FULLBINEXT): $(Q3OBJ) $(Q3ROBJ) $(JPGOBJ) $(LIBSDLMAIN)
24312534
$(echo_cmd) "LD $@"
@@ -2438,6 +2541,12 @@ $(B)/$(CLIENTBIN)_opengl2$(FULLBINEXT): $(Q3OBJ) $(Q3R2OBJ) $(Q3R2STRINGOBJ) $(J
24382541
$(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) $(NOTSHLIBLDFLAGS) \
24392542
-o $@ $(Q3OBJ) $(Q3R2OBJ) $(Q3R2STRINGOBJ) $(JPGOBJ) \
24402543
$(LIBSDLMAIN) $(CLIENT_LIBS) $(RENDERER_LIBS) $(LIBS)
2544+
2545+
$(B)/$(CLIENTBIN)_vulkan$(FULLBINEXT): $(Q3OBJ) $(Q3VKOBJ) $(JPGOBJ) $(LIBSDLMAIN)
2546+
$(echo_cmd) "LD $@"
2547+
$(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) $(NOTSHLIBLDFLAGS) \
2548+
-o $@ $(Q3OBJ) $(Q3VKOBJ) $(JPGOBJ) \
2549+
$(LIBSDLMAIN) $(CLIENT_LIBS) $(RENDERER_LIBS) $(LIBS)
24412550
endif
24422551

24432552
ifneq ($(strip $(LIBSDLMAIN)),)
@@ -2967,6 +3076,24 @@ $(B)/renderergl2/%.o: $(RCOMMONDIR)/%.c
29673076
$(B)/renderergl2/%.o: $(RGL2DIR)/%.c
29683077
$(DO_REF_CC)
29693078

3079+
$(B)/renderervk/%.o: $(CMDIR)/%.c
3080+
$(DO_REF_CC)
3081+
3082+
$(B)/renderervk/%.o: $(SDLDIR)/%.c
3083+
$(DO_REF_CC)
3084+
3085+
$(B)/renderervk/%.o: $(JPDIR)/%.c
3086+
$(DO_REF_CC)
3087+
3088+
$(B)/renderervk/%.o: $(RCOMMONDIR)/%.c
3089+
$(DO_REF_CC)
3090+
3091+
$(B)/renderervk/%.o: $(RVULKANDIR)/%.c
3092+
$(DO_REF_CC)
3093+
3094+
$(B)/renderervk/%.o: $(MOUNT_DIR)/renderervk/shaders/Compiled/%.c
3095+
$(DO_REF_CC)
3096+
29703097

29713098
$(B)/ded/%.o: $(ASMDIR)/%.s
29723099
$(DO_AS)
@@ -3104,7 +3231,7 @@ $(B)/$(CLIENTBIN)-config.json: $(WEBDIR)/client-config.json
31043231
# MISC
31053232
#############################################################################
31063233

3107-
OBJ = $(Q3OBJ) $(Q3ROBJ) $(Q3R2OBJ) $(Q3DOBJ) $(JPGOBJ) \
3234+
OBJ = $(Q3OBJ) $(Q3ROBJ) $(Q3R2OBJ) $(Q3VKOBJ) $(Q3DOBJ) $(JPGOBJ) \
31083235
$(MPGOBJ) $(Q3GOBJ) $(Q3CGOBJ) $(MPCGOBJ) $(Q3UIOBJ) $(MPUIOBJ) \
31093236
$(MPGVMOBJ) $(Q3GVMOBJ) $(Q3CGVMOBJ) $(MPCGVMOBJ) $(Q3UIVMOBJ) $(MPUIVMOBJ)
31103237
TOOLSOBJ = $(LBURGOBJ) $(Q3CPPOBJ) $(Q3RCCOBJ) $(Q3LCCOBJ) $(Q3ASMOBJ)
@@ -3131,13 +3258,19 @@ ifneq ($(BUILD_CLIENT),0)
31313258
ifneq ($(BUILD_RENDERER_OPENGL2),0)
31323259
$(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/renderer_opengl2_$(SHLIBNAME) $(COPYBINDIR)/renderer_opengl2_$(SHLIBNAME)
31333260
endif
3261+
ifneq ($(BUILD_RENDERER_VULKAN),0)
3262+
$(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/renderer_vulkan_$(SHLIBNAME) $(COPYBINDIR)/renderer_vulkan_$(SHLIBNAME)
3263+
endif
31343264
else
31353265
ifneq ($(BUILD_RENDERER_OPENGL1),0)
31363266
$(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/$(CLIENTBIN)$(FULLBINEXT) $(COPYBINDIR)/$(CLIENTBIN)$(FULLBINEXT)
31373267
endif
31383268
ifneq ($(BUILD_RENDERER_OPENGL2),0)
31393269
$(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/$(CLIENTBIN)_opengl2$(FULLBINEXT) $(COPYBINDIR)/$(CLIENTBIN)_opengl2$(FULLBINEXT)
31403270
endif
3271+
ifneq ($(BUILD_RENDERER_VULKAN),0)
3272+
$(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/$(CLIENTBIN)_vulkan$(FULLBINEXT) $(COPYBINDIR)/$(CLIENTBIN)_vulkan$(FULLBINEXT)
3273+
endif
31413274
endif
31423275
endif
31433276

@@ -3185,6 +3318,7 @@ clean2:
31853318
@rm -f $(OBJ_D_FILES)
31863319
@rm -f $(STRINGOBJ)
31873320
@rm -f $(TARGETS)
3321+
@rm -rf $(Q3VKOBJ)
31883322
@rm -f $(GENERATEDTARGETS)
31893323

31903324
toolsclean: toolsclean-debug toolsclean-release

README.md

+7
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ Makefile.local:
147147
USE_RENDERER_DLOPEN - build and use the renderer in a library
148148
BUILD_RENDERER_OPENGL1 build the opengl1 client / renderer library
149149
BUILD_RENDERER_OPENGL2 build the opengl2 client / renderer library
150+
BUILD_RENDERER_VULKAN build the vulkan client / renderer library
150151
USE_YACC - use yacc to update code/tools/lcc/lburg/gram.c
151152
BASEGAME - rename 'baseq3'
152153
BASEGAME_CFLAGS - custom CFLAGS for basegame
@@ -199,6 +200,12 @@ set using command line arguments:
199200
ioquake3 +set cl_renderer opengl2 +set r_preferOpenGLES 1
200201

201202

203+
# Vulkan support
204+
205+
The vulkan rendender can be enabled by:
206+
207+
ioquake3 +set cl_renderer vulkan
208+
202209
# Console
203210

204211
## New cvars

code/renderervk/RB_DrawNormals.c

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#include "tr_backend.h"
2+
#include "vk_shade_geometry.h"
3+
#include "tr_globals.h"
4+
#include "vk_pipelines.h"
5+
6+
/*
7+
================
8+
Draws vertex normals for debugging
9+
================
10+
*/
11+
void RB_DrawNormals (shaderCommands_t* pTess, int numVertexes )
12+
{
13+
// VULKAN
14+
// int numVertexes = tess.numVertexes;
15+
vec4_t xyz[SHADER_MAX_VERTEXES];
16+
memcpy(xyz, pTess->xyz, numVertexes * sizeof(vec4_t));
17+
18+
memset(pTess->svars.colors, tr.identityLightByte, SHADER_MAX_VERTEXES * sizeof(color4ub_t));
19+
20+
int i = 0;
21+
while (i < numVertexes)
22+
{
23+
int count = numVertexes - i;
24+
if (count >= SHADER_MAX_VERTEXES/2 - 1)
25+
count = SHADER_MAX_VERTEXES/2 - 1;
26+
27+
int k;
28+
for (k = 0; k < count; k++)
29+
{
30+
VectorCopy(xyz[i + k], pTess->xyz[2*k]);
31+
VectorMA(xyz[i + k], 2, pTess->normal[i + k], pTess->xyz[2*k + 1]);
32+
}
33+
pTess->numVertexes = 2 * count;
34+
pTess->numIndexes = 0;
35+
36+
vk_UploadXYZI(pTess->xyz, pTess->numVertexes, NULL, 0);
37+
38+
updateMVP(backEnd.viewParms.isPortal, backEnd.projection2D, getptr_modelview_matrix());
39+
vk_shade_geometry(g_stdPipelines.normals_debug_pipeline, VK_FALSE, DEPTH_RANGE_ZERO, VK_FALSE);
40+
41+
i += count;
42+
}
43+
}

code/renderervk/RB_DrawNormals.h

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#ifndef RB_SHOW_NORMALS_H_
2+
#define RB_SHOW_NORMALS_H_
3+
4+
struct shaderCommands_s;
5+
6+
void RB_DrawNormals (struct shaderCommands_s* input , int numVertexes );
7+
8+
#endif

code/renderervk/RB_DrawTris.c

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include "RB_DrawTris.h"
2+
#include "tr_globals.h"
3+
#include "vk_shade_geometry.h"
4+
#include "vk_pipelines.h"
5+
#include "tr_backend.h"
6+
/*
7+
================
8+
Draws triangle outlines for debugging
9+
================
10+
*/
11+
void RB_DrawTris (shaderCommands_t * pInput)
12+
{
13+
if (vk.features.fillModeNonSolid == VK_FALSE) {
14+
static qboolean printed = qfalse;
15+
if (!printed) {
16+
ri.Printf(PRINT_WARNING, "RB_ShowTris: fillModeNonSolid not supported.\n");
17+
printed = qtrue;
18+
}
19+
return;
20+
}
21+
22+
23+
updateCurDescriptor( tr.whiteImage->descriptor_set, 0);
24+
25+
// VULKAN
26+
27+
memset(pInput->svars.colors, 255, pInput->numVertexes * 4 );
28+
VkPipeline pipeline = backEnd.viewParms.isMirror ? g_stdPipelines.tris_mirror_debug_pipeline : g_stdPipelines.tris_debug_pipeline;
29+
vk_shade_geometry(pipeline, VK_FALSE, DEPTH_RANGE_ZERO, VK_TRUE);
30+
}

code/renderervk/RB_DrawTris.h

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#ifndef RB_DRAWTRIS_H_
2+
#define RB_DRAWTRIS_H_
3+
struct shaderCommands_s;
4+
5+
void RB_DrawTris (struct shaderCommands_s *input);
6+
7+
#endif

0 commit comments

Comments
 (0)