mesa/src/intel/vulkan/meson.build
Jason Ekstrand 9baa33cef0 anv: Rework push constant handling
This substantially reworks both the state setup side of push constant
handling and the pipeline compile side.  The fundamental change here is
that we're no longer respecting the prog_data::param array and instead
are just instructing the back-end compiler to leave the array alone.
This makes the state setup side substantially simpler because we can now
just memcpy the whole block of push constants and don't have to
upload one DWORD at a time.

This also means that we can compute the full push constant layout
up-front and just trust the back-end compiler to not mess with it.
Maybe one day we'll decide that the back-end compiler can do useful
things there again but for now, this is functionally no different from
what we had before this commit and makes the NIR handling cleaner.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
2019-11-18 18:35:14 +00:00

260 lines
7.2 KiB
Meson

# Copyright © 2017-2019 Intel Corporation
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
anv_extensions_py = files('anv_extensions.py')
anv_entrypoints = custom_target(
'anv_entrypoints.[ch]',
input : ['anv_entrypoints_gen.py', vk_api_xml],
output : ['anv_entrypoints.h', 'anv_entrypoints.c'],
command : [
prog_python, '@INPUT0@', '--xml', '@INPUT1@',
'--outdir', meson.current_build_dir(),
],
depend_files : anv_extensions_py,
)
anv_extensions_c = custom_target(
'anv_extensions.c',
input : ['anv_extensions_gen.py', vk_api_xml],
output : 'anv_extensions.c',
command : [
prog_python, '@INPUT0@', '--xml', '@INPUT1@',
'--out-c', '@OUTPUT@',
],
depend_files : anv_extensions_py,
)
anv_extensions_h = custom_target(
'anv_extensions.h',
input : ['anv_extensions_gen.py', vk_api_xml],
output : 'anv_extensions.h',
command : [
prog_python, '@INPUT0@', '--xml', '@INPUT1@',
'--out-h', '@OUTPUT@',
],
depend_files : anv_extensions_py,
)
intel_icd = custom_target(
'intel_icd',
input : 'anv_icd.py',
output : 'intel_icd.@0@.json'.format(host_machine.cpu()),
command : [
prog_python, '@INPUT@',
'--lib-path', join_paths(get_option('prefix'), get_option('libdir')),
'--out', '@OUTPUT@',
],
depend_files : anv_extensions_py,
build_by_default : true,
install_dir : with_vulkan_icd_dir,
install : true,
)
libanv_gen_libs = []
anv_gen_files = files(
'genX_blorp_exec.c',
'genX_cmd_buffer.c',
'genX_gpu_memcpy.c',
'genX_pipeline.c',
'genX_query.c',
'genX_state.c',
)
foreach g : [['70', ['gen7_cmd_buffer.c']], ['75', ['gen7_cmd_buffer.c']],
['80', ['gen8_cmd_buffer.c']], ['90', ['gen8_cmd_buffer.c']],
['100', ['gen8_cmd_buffer.c']], ['110', ['gen8_cmd_buffer.c']],
['120', ['gen8_cmd_buffer.c']]]
_gen = g[0]
libanv_gen_libs += static_library(
'anv_gen@0@'.format(_gen),
[anv_gen_files, g[1], anv_entrypoints[0], anv_extensions_h],
include_directories : [
inc_common, inc_compiler, inc_include, inc_intel, inc_vulkan_wsi,
],
c_args : [
c_vis_args, no_override_init_args, c_sse2_args,
'-DGEN_VERSIONx10=@0@'.format(_gen),
],
dependencies : [
dep_libdrm, dep_valgrind, idep_nir_headers, idep_genxml, idep_vulkan_util_headers,
],
)
endforeach
libanv_files = files(
'anv_allocator.c',
'anv_android.h',
'anv_batch_chain.c',
'anv_blorp.c',
'anv_cmd_buffer.c',
'anv_descriptor_set.c',
'anv_device.c',
'anv_dump.c',
'anv_formats.c',
'anv_genX.h',
'anv_image.c',
'anv_intel.c',
'anv_nir.h',
'anv_nir_add_base_work_group_id.c',
'anv_nir_apply_pipeline_layout.c',
'anv_nir_compute_push_layout.c',
'anv_nir_lower_multiview.c',
'anv_nir_lower_ycbcr_textures.c',
'anv_pass.c',
'anv_perf.c',
'anv_pipeline.c',
'anv_pipeline_cache.c',
'anv_private.h',
'anv_queue.c',
'anv_util.c',
'anv_wsi.c',
'vk_format_info.h',
)
anv_deps = [
dep_libdrm,
dep_valgrind,
idep_nir_headers,
idep_vulkan_util_headers,
idep_xmlconfig_headers,
]
anv_flags = [
c_vis_args,
no_override_init_args,
c_sse2_args,
]
if with_platform_x11
anv_deps += dep_xcb_dri3
anv_flags += [
'-DVK_USE_PLATFORM_XCB_KHR',
'-DVK_USE_PLATFORM_XLIB_KHR',
]
libanv_files += files('anv_wsi_x11.c')
endif
if with_platform_wayland
anv_deps += dep_wayland_client
anv_flags += '-DVK_USE_PLATFORM_WAYLAND_KHR'
libanv_files += files('anv_wsi_wayland.c')
endif
if with_platform_drm
anv_flags += '-DVK_USE_PLATFORM_DISPLAY_KHR'
libanv_files += files('anv_wsi_display.c')
endif
if with_xlib_lease
anv_deps += [dep_xcb_xrandr, dep_xlib_xrandr]
anv_flags += '-DVK_USE_PLATFORM_XLIB_XRANDR_EXT'
endif
if with_platform_android
anv_flags += '-DVK_USE_PLATFORM_ANDROID_KHR'
libanv_files += files('anv_android.c')
else
libanv_files += files('anv_android_stubs.c')
endif
libanv_common = static_library(
'anv_common',
[
libanv_files, anv_entrypoints, anv_extensions_c, anv_extensions_h, sha1_h,
gen_xml_pack,
],
include_directories : [
inc_common, inc_intel, inc_compiler, inc_include,
inc_vulkan_wsi, inc_util,
],
c_args : anv_flags,
dependencies : anv_deps,
)
libvulkan_intel = shared_library(
'vulkan_intel',
[files('anv_gem.c'), anv_entrypoints[0], anv_extensions_h],
include_directories : [
inc_common, inc_intel, inc_compiler, inc_include, inc_vulkan_wsi,
],
link_whole : [libanv_common, libanv_gen_libs],
link_with : [
libintel_compiler, libintel_dev, libisl, libblorp, libvulkan_wsi,
libintel_perf,
],
dependencies : [
dep_thread, dep_dl, dep_m, anv_deps, idep_libintel_common,
idep_nir, idep_genxml, idep_vulkan_util, idep_mesautil, idep_xmlconfig,
],
c_args : anv_flags,
link_args : ['-Wl,--build-id=sha1', ld_args_bsymbolic, ld_args_gc_sections],
install : true,
)
if with_symbols_check
test(
'anv symbols check',
symbols_check,
args : [
'--lib', libvulkan_intel,
'--symbols-file', vulkan_icd_symbols,
symbols_check_args,
],
suite : ['intel'],
)
endif
if with_tests
libvulkan_intel_test = static_library(
'vulkan_intel_test',
[files('anv_gem_stubs.c'), anv_entrypoints[0], anv_extensions_h],
include_directories : [
inc_common, inc_intel, inc_compiler, inc_include, inc_vulkan_wsi,
],
link_whole : libanv_common,
link_with : [
libanv_gen_libs, libintel_compiler, libintel_common, libintel_dev,
libisl, libblorp, libvulkan_wsi, libintel_perf,
],
dependencies : [
dep_thread, dep_dl, dep_m, anv_deps,
idep_nir, idep_vulkan_util, idep_mesautil,
],
c_args : anv_flags,
)
foreach t : ['block_pool_no_free', 'block_pool_grow_first',
'state_pool_no_free', 'state_pool_free_list_only',
'state_pool', 'state_pool_padding']
test(
'anv_@0@'.format(t),
executable(
t,
['tests/@0@.c'.format(t), anv_entrypoints[0], anv_extensions_h],
c_args : [ c_sse2_args ],
link_with : libvulkan_intel_test,
dependencies : [dep_libdrm, dep_thread, dep_m, dep_valgrind, idep_vulkan_util, ],
include_directories : [
inc_common, inc_intel, inc_compiler, inc_vulkan_wsi,
],
),
suite : ['intel'],
)
endforeach
endif