diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2017-04-26 16:02:17 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2017-05-03 15:10:57 +0100 |
commit | 6728f45aa06c70503ef93d71c3e228381d939ac2 (patch) | |
tree | 45c97ec96d236a6fea7173593c72929510404387 /gsk | |
parent | c1965150c72cc11d51febd4fec0e4334601f947c (diff) | |
download | gtk+-6728f45aa06c70503ef93d71c3e228381d939ac2.tar.gz |
build: Ensure that Vulkan shaders are rebuilt if glslc is found
If glslc is found, rebuild the shaders from GLSL to SPIR-V; otherwise,
we're just going to use the built files we have committed in the source
repository.
Diffstat (limited to 'gsk')
-rw-r--r-- | gsk/meson.build | 91 |
1 files changed, 51 insertions, 40 deletions
diff --git a/gsk/meson.build b/gsk/meson.build index 6fc681b5e5..d6a9aa150b 100644 --- a/gsk/meson.build +++ b/gsk/meson.build @@ -40,7 +40,7 @@ gsk_public_headers = files([ 'gsktypes.h', ]) -install_headers(gsk_public_headers, 'gsk.h', subdir : 'gtk-4.0/gsk') +install_headers(gsk_public_headers, 'gsk.h', subdir: 'gtk-4.0/gsk') gsk_private_vulkan_shaders = [] gsk_private_vulkan_compiled_shaders = [] @@ -97,53 +97,61 @@ if have_vulkan gsk_private_vulkan_shaders += gsk_private_vulkan_fragment_shaders gsk_private_vulkan_shaders += gsk_private_vulkan_vertex_shaders - foreach shader : gsk_private_vulkan_shaders + glslc = find_program('glslc', required: false) + foreach shader: gsk_private_vulkan_shaders basefn = shader.split('.').get(0) suffix = shader.split('.').get(1) - # FIXME: the compiled shaders seem to exist in the srcdir already, do we - # want to or need to add a target to create them with glslc? Do we need to - # check for glslc at all then? - # - # stage_arg = suffix == 'frag' ? '-fshader-stage=fragment' : '-fshader-stage=vertex' - # compiled_shader = custom_target('xyz', input : shader, - # output : '@0@.@1@.spv'.format(basefn, suffix), - # command: [glslc, stage_arg, '-DCLIP_NONE', '-o', '@OUTPUT@']) - - gsk_private_vulkan_compiled_shaders += '@0@.@1@.spv'.format(basefn, suffix) + stage_arg = suffix == 'frag' ? '-fshader-stage=fragment' : '-fshader-stage=vertex' + spv_shader = '@0@.@1@.spv'.format(basefn, suffix) + + if glslc.found() + compiled_shader = custom_target(spv_shader, + input: shader, + output: spv_shader, + command: [ + glslc, + stage_arg, + '-DCLIP_NONE', + '-o', '@OUTPUT@' + ]) + endif + gsk_private_vulkan_compiled_shaders += spv_shader gsk_private_vulkan_compiled_shaders += '@0@-clip.@1@.spv'.format(basefn, suffix) gsk_private_vulkan_compiled_shaders += '@0@-clip-rounded.@1@.spv'.format(basefn, suffix) endforeach endif # have_vulkan -gsk_resources_xml = configure_file(output : 'gsk.resources.xml', - input : 'gen-gsk-gresources-xml.py', - command : [find_program('gen-gsk-gresources-xml.py'), - '@OUTPUT@', - gsk_private_source_shaders, - gsk_private_vulkan_compiled_shaders, - gsk_private_vulkan_shaders]) +gsk_resources_xml = configure_file(output: 'gsk.resources.xml', + input: 'gen-gsk-gresources-xml.py', + command: [ + find_program('gen-gsk-gresources-xml.py'), + '@OUTPUT@', + gsk_private_source_shaders, + gsk_private_vulkan_compiled_shaders, + gsk_private_vulkan_shaders + ]) # FIXME: do we need this variable? gsk_sources = gsk_public_sources + gsk_private_sources gsk_enums = gnome.mkenums('gskenumtypes', - sources: gsk_public_headers, - c_template : 'gskenumtypes.c.template', - h_template : 'gskenumtypes.h.template', - install_dir : 'include/gtk-4.0/gsk', - install_header : true) + sources: gsk_public_headers, + c_template: 'gskenumtypes.c.template', + h_template: 'gskenumtypes.h.template', + install_dir: join_paths(gtk_includedir, 'gtk-4.0/gsk'), + install_header: true) gskenum_h = gsk_enums[1] gskresources = gnome.compile_resources('gskresources', - gsk_resources_xml, - source_dir: '.', - c_name: '_gsk', - extra_args: '--manual-register') + gsk_resources_xml, + source_dir: '.', + c_name: '_gsk', + extra_args: [ '--manual-register', ]) -gsk_gen_headers = [gskenum_h] +gsk_gen_headers = [ gskenum_h, ] gsk_deps = [ graphene_dep, @@ -154,18 +162,21 @@ gsk_deps = [ ] libgsk = static_library('gsk', - sources: [gsk_sources, gsk_enums, gskresources], - dependencies: gsk_deps, - include_directories: [confinc], - c_args: ['-DGSK_COMPILATION', '-DG_LOG_DOMAIN="Gsk"'] + common_cflags, - link_with: libgdk, - link_args: common_ldflags) + sources: [ gsk_sources, gsk_enums, gskresources, ], + dependencies: gsk_deps, + include_directories: [ confinc, ], + c_args: [ + '-DGSK_COMPILATION', + '-DG_LOG_DOMAIN="Gsk"', + '-DG_LOG_STRUCTURED=1', + ] + common_cflags, + link_with: libgdk, + link_args: common_ldflags) # We don't have link_with: to internal static libs here on purpose, just # list the dependencies and generated headers and such, for use in the # "public" libgtk_dep used by internal executables. -libgsk_dep = declare_dependency( - depends: gsk_sources, - include_directories: [confinc], - sources: [gskenum_h, gskresources], - dependencies: libgdk_dep) +libgsk_dep = declare_dependency(depends: gsk_sources, + include_directories: [ confinc, ], + sources: [ gskenum_h, gskresources, ], + dependencies: libgdk_dep) |