From 2c7a6c8a877ad3d43bc05b6e3a38873d33f6a521 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Mon, 3 Feb 2025 20:47:10 +0900 Subject: [PATCH] [vulkan] Switch to qfcc for the vertex shaders Things aren't quite working yet (currently due to buffer blocks not getting marked NonWritable (or maybe they should be BufferBlock)), but this gets shader compilation via qfcc working at all, including automatic dependencies. --- Makefile.am | 23 ++++++++++++-- libs/video/renderer/Makemodule.am | 52 +++++++++++++++++-------------- 2 files changed, 50 insertions(+), 25 deletions(-) diff --git a/Makefile.am b/Makefile.am index 6e8dd096f..1b754e336 100644 --- a/Makefile.am +++ b/Makefile.am @@ -99,6 +99,7 @@ QCFLAGS=-qq -O -g -Werror -Wall -Wno-integer-divide QCPPFLAGS=$(QCSYSTEM) QCLINKFLAGS=--no-default-paths -Lruamoko/lib QCOMPILE=$(QFCC) $(QCFLAGS) $(QCPPFLAGS) +QSPIRV=$(QFCC) -q -Cc-array,target=spir-v -O QLINK=$(QFCC) $(QCFLAGS) $(QCLINKFLAGS) MKDIR_P = @MKDIR_P@ @@ -108,6 +109,12 @@ qfcc_compile=\ sed -i -e '1s@:@: $(QFCC_DEP)@' $$depbase.Tqo &&\ $(am__mv) $$depbase.Tqo $$depbase.Qo +qfcc_spirv=\ + $(V_QFCC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ + $(QSPIRV) $(1) -MT $@ -MD -MP -MF $$depbase.Tqo -c -o $@ $< &&\ + sed -i -e '1s@:@: $(QFCC_DEP)@' $$depbase.Tqo &&\ + $(am__mv) $$depbase.Tqo $$depbase.Qo + am__mv = mv -f SUFFIXES=.o .r .pas @@ -117,8 +124,11 @@ SUFFIXES=.o .r .pas $(qfcc_compile) qcautodep = $(join $(addsuffix $(DEPDIR)/,$(dir $(basename $(1)))),$(addsuffix $(2).Qo,$(notdir $(basename $(basename $(1)))))) +spvcautodep = $(join $(addsuffix $(DEPDIR)/,$(dir $(basename $(1)))),$(addsuffix $(2).Qo,$(notdir $(1)))) +spvautoc = $(addsuffix $(2).spvc,$(1)) r_depfiles_remade= pas_depfiles_remade= +spvc_depfiles_remade= V_PY = $(V_PY_@AM_V@) V_PY_ = $(V_PY_@AM_DEFAULT_V@) @@ -153,6 +163,10 @@ SUFFICES += .plist .plc @$(mkdir_p) $(builddir)/`dirname $@` $(V_GLSLANG)(((($(GLSLANGVALIDATOR) --vn `basename $< | tr . _` -V $< -o $@; echo $$? >&3) | sed -e '1d' 1>&2) 3>&1) | (read xs; exit $$xs)) +%.vert.spvc: %.vert + @$(mkdir_p) $(builddir)/`dirname $@` + $(V_QFCC)$(QFCC) -q -c -O -Cc-array,target=spir-v -o $@ $< + sharepath = @sharepath@ shaderdir = @shaderdir@ shader_DATA = @@ -171,7 +185,7 @@ include qw/Makemodule.am include tools/Makemodule.am include ruamoko/Makemodule.am -DISTCLEANFILES += $(r_depfiles_remade) $(pas_depfiles_remade) +DISTCLEANFILES += $(r_depfiles_remade) $(pas_depfiles_remade) $(spvc_depfiles_remade) CLEANFILES += $(shader_DATA) $(r_depfiles_remade): @@ -182,7 +196,12 @@ $(pas_depfiles_remade): $(MKDIR_P) $(@D) echo '$@' | sed -e 's@\$(DEPDIR)/@@' -e 's@\(.*\)\.Qo$$@\1.o: $(top_srcdir)/\1.pas $(QFCC)@' >$@-t && $(am__mv) $@-t $@ -am--depfiles: $(am__depfiles_remade) $(r_depfiles_remade) $(pas_depfiles_remade) +$(spvc_depfiles_remade): + $(MKDIR_P) $(@D) + echo '$@' | sed -e 's@\$(DEPDIR)/@@' -e 's@\(.*\)\.Qo$$@\1.spvc: $(top_srcdir)/\1 $(QFCC)@' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) $(r_depfiles_remade) \ + $(pas_depfiles_remade) $(spvc_depfiles_remade) echo findme $(ruamoko_gui_libgui_a_dep) changelog: ChangeLog diff --git a/libs/video/renderer/Makemodule.am b/libs/video/renderer/Makemodule.am index 73e112087..eb7b8864a 100644 --- a/libs/video/renderer/Makemodule.am +++ b/libs/video/renderer/Makemodule.am @@ -507,37 +507,52 @@ $(fisheye_c): $(fisheye_src) $(matrices_h) $(waterwarp_c): $(waterwarp_src) $(matrices_h) -vkshader_c = \ - $(slice_c) \ - $(linev_c) \ +vkshader_src_vert = \ + $(slice_src) \ + $(linev_src) \ + $(particlev_src) \ + $(sprite_gbufv_src) \ + $(sprite_depthv_src) \ + $(twodv_src) \ + $(quakebspv_src) \ + $(bsp_depth_src) \ + $(bsp_gbufv_src) \ + $(bsp_shadow_src) \ + $(light_entid_src) \ + $(light_flat_src) \ + $(light_splatv_src) \ + $(aliasv_src) \ + $(alias_depth_src) \ + $(alias_shadow_src) \ + $(iqmv_src) \ + $(iqm_shadow_src) \ + $(passthrough_src) \ + $(fstriangle_src) \ + $(fstrianglest_src) + +vkshader_c_vert=$(call spvautoc,$(vkshader_src_vert)) +vkshader_dep = $(call spvcautodep,$(vkshader_src_vert)) +include $(vkshader_dep) # am--include-marker +spvc_depfiles_remade += $(vkshader_dep) + +vkshader_c = $(vkshader_c_vert) \ $(linef_c) \ $(partphysicsc_c) \ $(partupdatec_c) \ - $(particlev_c) \ $(particleg_c) \ $(particlef_c) \ $(spritef_c) \ - $(sprite_gbufv_c) \ $(sprite_gbuff_c) \ - $(sprite_depthv_c) \ $(sprite_depthf_c) \ - $(twodv_c) \ $(twodf_c) \ $(twod_depthf_c) \ - $(quakebspv_c) \ $(quakebspf_c) \ - $(bsp_depth_c) \ - $(bsp_gbufv_c) \ $(bsp_gbufg_c) \ $(bsp_gbuff_c) \ - $(bsp_shadow_c) \ $(bsp_skyf_c) \ $(bsp_turbf_c) \ $(debug_c) \ $(entid_c) \ - $(light_entid_c) \ - $(light_flat_c) \ - $(light_splatv_c) \ $(light_splatf_c) \ $(light_debug_c) \ $(light_oit_c) \ @@ -547,20 +562,11 @@ vkshader_c = \ $(lighting_planef_c) \ $(composef_c) \ $(compose_fwdf_c) \ - $(aliasv_c) \ - $(alias_depth_c) \ $(qskin_fwdf_c) \ $(qskin_gbuf_c) \ - $(alias_shadow_c) \ - $(iqmv_c) \ - $(iqm_shadow_c) \ $(output_c) \ - $(passthrough_c) \ - $(fstriangle_c) \ - $(fstrianglest_c) \ $(gridplane_c) \ $(pushcolor_c) \ - $(shadow_c) \ $(fisheye_c) \ $(waterwarp_c)