Skip to content

Commit

Permalink
CI: vulkan tests have synchronization validation enabled
Browse files Browse the repository at this point in the history
  • Loading branch information
slime73 committed Jun 30, 2024
1 parent 6ccffec commit d387fb9
Show file tree
Hide file tree
Showing 2 changed files with 325 additions and 0 deletions.
1 change: 1 addition & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ jobs:
pull-requests: write
env:
ALSOFT_CONF: love2d-${{ github.sha }}/testing/resources/alsoft.conf
VK_LAYER_SETTINGS_PATH: love2d-${{ github.sha }}/testing/resources/vk_layer_settings.txt
DISPLAY: :99
steps:
- name: Update APT
Expand Down
324 changes: 324 additions & 0 deletions testing/resources/vk_layer_settings.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,324 @@

# VK_LAYER_KHRONOS_validation

# Fine Grained Locking
# =====================
# <LayerIdentifier>.fine_grained_locking
# Enable fine grained locking for Core Validation, which should improve
# performance in multithreaded applications. This setting allows the
# optimization to be disabled for debugging.
khronos_validation.fine_grained_locking = true

# Core
# =====================
# <LayerIdentifier>.validate_core
# The main, heavy-duty validation checks. This may be valuable early in the
# development cycle to reduce validation output while correcting
# parameter/object usage errors.
khronos_validation.validate_core = true

# Image Layout
# =====================
# <LayerIdentifier>.check_image_layout
# Check that the layout of each image subresource is correct whenever it is used
# by a command buffer. These checks are very CPU intensive for some
# applications.
khronos_validation.check_image_layout = true

# Command Buffer State
# =====================
# <LayerIdentifier>.check_command_buffer
# Check that all Vulkan objects used by a command buffer have not been
# destroyed. These checks can be CPU intensive for some applications.
khronos_validation.check_command_buffer = true

# Object in Use
# =====================
# <LayerIdentifier>.check_object_in_use
# Check that Vulkan objects are not in use by a command buffer when they are
# destroyed.
khronos_validation.check_object_in_use = true

# Query
# =====================
# <LayerIdentifier>.check_query
# Checks for commands that use VkQueryPool objects.
khronos_validation.check_query = true

# Shader
# =====================
# <LayerIdentifier>.check_shaders
# Shader checks. These checks can be CPU intensive during application start up,
# especially if Shader Validation Caching is also disabled.
khronos_validation.check_shaders = true

# Caching
# =====================
# <LayerIdentifier>.check_shaders_caching
# Enable caching of shader validation results.
khronos_validation.check_shaders_caching = true

# Handle Wrapping
# =====================
# <LayerIdentifier>.unique_handles
# Handle wrapping checks. Disable this feature if you are exerience crashes when
# creating new extensions or developing new Vulkan objects/structures.
khronos_validation.unique_handles = true

# Object Lifetime
# =====================
# <LayerIdentifier>.object_lifetime
# Object tracking checks. This may not always be necessary late in a development
# cycle.
khronos_validation.object_lifetime = true

# Stateless Parameter
# =====================
# <LayerIdentifier>.stateless_param
# Stateless parameter checks. This may not always be necessary late in a
# development cycle.
khronos_validation.stateless_param = true

# Thread Safety
# =====================
# <LayerIdentifier>.thread_safety
# Thread checks. In order to not degrade performance, it might be best to run
# your program with thread-checking disabled most of the time, enabling it
# occasionally for a quick sanity check or when debugging difficult application
# behaviors.
khronos_validation.thread_safety = true

# Synchronization
# =====================
# <LayerIdentifier>.validate_sync
# Enable synchronization validation during command buffers recording. This
# feature reports resource access conflicts due to missing or incorrect
# synchronization operations between actions (Draw, Copy, Dispatch, Blit)
# reading or writing the same regions of memory.
khronos_validation.validate_sync = true

# QueueSubmit Synchronization Validation
# =====================
# <LayerIdentifier>.sync_queue_submit
# Enable synchronization validation between submitted command buffers when
# Synchronization Validation is enabled. This option will increase the
# synchronization performance cost.
khronos_validation.sync_queue_submit = true

# GPU Base
# =====================
# <LayerIdentifier>.validate_gpu_based
# Setting an option here will enable specialized areas of validation
khronos_validation.validate_gpu_based = GPU_BASED_NONE

# Redirect Printf messages to stdout
# =====================
# <LayerIdentifier>.printf_to_stdout
# Enable redirection of Debug Printf messages from the debug callback to stdout
#khronos_validation.printf_to_stdout = true

# Printf verbose
# =====================
# <LayerIdentifier>.printf_verbose
# Set the verbosity of debug printf messages
#khronos_validation.printf_verbose = false

# Printf buffer size
# =====================
# <LayerIdentifier>.printf_buffer_size
# Set the size in bytes of the buffer used by debug printf
#khronos_validation.printf_buffer_size = 1024

# Shader instrumentation
# =====================
# <LayerIdentifier>.gpuav_shader_instrumentation
# Instrument shaders to validate descriptors, descriptor indexing, buffer device
# addresses and ray queries. Warning: will considerably slow down shader
# executions.
#khronos_validation.gpuav_shader_instrumentation = true

# Descriptors indexing
# =====================
# <LayerIdentifier>.gpuav_descriptor_checks
# Enable descriptors and buffer out of bounds validation when using descriptor
# indexing
khronos_validation.gpuav_descriptor_checks = true

# Generate warning on out of bounds accesses even if buffer robustness is enabled
# =====================
# <LayerIdentifier>.gpuav_warn_on_robust_oob
# Warn on out of bounds accesses even if robustness is enabled
khronos_validation.gpuav_warn_on_robust_oob = true

# Out of bounds buffer device addresses
# =====================
# <LayerIdentifier>.gpuav_buffer_address_oob
# Check for
khronos_validation.gpuav_buffer_address_oob = true

# Maximum number of buffer device addresses in use at one time
# =====================
# <LayerIdentifier>.gpuav_max_buffer_device_addresses

khronos_validation.gpuav_max_buffer_device_addresses = 10000

# RayQuery SPIR-V Instructions
# =====================
# <LayerIdentifier>.gpuav_validate_ray_query
# Enable shader instrumentation on OpRayQueryInitializeKHR
khronos_validation.gpuav_validate_ray_query = true

# Cache instrumented shaders rather than instrumenting them on every run
# =====================
# <LayerIdentifier>.gpuav_cache_instrumented_shaders
# Enable instrumented shader caching
khronos_validation.gpuav_cache_instrumented_shaders = true

# Enable instrumenting shaders selectively
# =====================
# <LayerIdentifier>.gpuav_select_instrumented_shaders
# Select which shaders to instrument passing a VkValidationFeaturesEXT struct
# with GPU-AV enabled in the VkShaderModuleCreateInfo pNext
khronos_validation.gpuav_select_instrumented_shaders = false

# Buffer content validation
# =====================
# <LayerIdentifier>.gpuav_buffers_validation
# Validate buffers containing parameters used in indirect Vulkan commands, or
# used in copy commands
#khronos_validation.gpuav_buffers_validation = true

# Indirect draws parameters
# =====================
# <LayerIdentifier>.gpuav_indirect_draws_buffers
# Validate buffers containing draw parameters used in indirect draw commands
khronos_validation.gpuav_indirect_draws_buffers = true

# Indirect dispatches parameters
# =====================
# <LayerIdentifier>.indirect_dispatches
# Validate buffers containing dispatch parameters used in indirect dispatch
# commands
khronos_validation.indirect_dispatches = true

# Indirect trace rays parameters
# =====================
# <LayerIdentifier>.indirect_trace_rays
# Validate buffers containing ray tracing parameters used in indirect ray
# tracing commands
khronos_validation.indirect_trace_rays = true

# Buffer copies
# =====================
# <LayerIdentifier>.gpuav_buffer_copies
# Validate copies involving a VkBuffer. Right now only validates copy buffer to
# image.
khronos_validation.gpuav_buffer_copies = true

# Reserve Descriptor Set Binding Slot
# =====================
# <LayerIdentifier>.gpuav_reserve_binding_slot
# Specifies that the validation layers reserve a descriptor set binding slot for
# their own use. The layer reports a value for
# VkPhysicalDeviceLimits::maxBoundDescriptorSets that is one less than the value
# reported by the device. If the device supports the binding of only one
# descriptor set, the validation layer does not perform GPU-assisted validation.
#khronos_validation.gpuav_reserve_binding_slot = true

# Linear Memory Allocation Mode
# =====================
# <LayerIdentifier>.gpuav_vma_linear_output
# Use VMA linear memory allocations for GPU-AV output buffers instead of finding
# best place for new allocations among free regions to optimize memory usage.
# Enabling this setting reduces performance cost but disabling this method
# minimizes memory usage.
#khronos_validation.gpuav_vma_linear_output = true

# Validate instrumented shaders
# =====================
# <LayerIdentifier>.gpuav_debug_validate_instrumented_shaders
# Run spirv-val after doing shader instrumentation
#khronos_validation.gpuav_debug_validate_instrumented_shaders = false

# Dump instrumented shaders
# =====================
# <LayerIdentifier>.gpuav_debug_dump_instrumented_shaders
# Will dump the instrumented shaders (before and after) to working directory
#khronos_validation.gpuav_debug_dump_instrumented_shaders = false

# Best Practices
# =====================
# <LayerIdentifier>.validate_best_practices
# Outputs warnings related to common misuse of the API, but which are not
# explicitly prohibited by the specification.
khronos_validation.validate_best_practices = true

# ARM-specific best practices
# =====================
# <LayerIdentifier>.validate_best_practices_arm
# Outputs warnings for spec-conforming but non-ideal code on ARM GPUs.
khronos_validation.validate_best_practices_arm = false

# AMD-specific best practices
# =====================
# <LayerIdentifier>.validate_best_practices_amd
# Outputs warnings for spec-conforming but non-ideal code on AMD GPUs.
khronos_validation.validate_best_practices_amd = false

# IMG-specific best practices
# =====================
# <LayerIdentifier>.validate_best_practices_img
# Outputs warnings for spec-conforming but non-ideal code on Imagination GPUs.
khronos_validation.validate_best_practices_img = false

# NVIDIA-specific best practices
# =====================
# <LayerIdentifier>.validate_best_practices_nvidia
# Outputs warnings for spec-conforming but non-ideal code on NVIDIA GPUs.
khronos_validation.validate_best_practices_nvidia = false

# Debug Action
# =====================
# <LayerIdentifier>.debug_action
# Specifies what action is to be taken when a layer reports information
khronos_validation.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG

# Log Filename
# =====================
# <LayerIdentifier>.log_filename
# Specifies the output filename
khronos_validation.log_filename = stdout

# Message Severity
# =====================
# <LayerIdentifier>.report_flags
# Comma-delineated list of options specifying the types of messages to be
# reported
khronos_validation.report_flags = error

# Limit Duplicated Messages
# =====================
# <LayerIdentifier>.enable_message_limit
# Enable limiting of duplicate messages.
khronos_validation.enable_message_limit = false

# Max Duplicated Messages
# =====================
# <LayerIdentifier>.duplicate_message_limit
# Maximum number of times any single validation message should be reported.
#khronos_validation.duplicate_message_limit = 10

# Mute Message VUIDs
# =====================
# <LayerIdentifier>.message_id_filter
# List of VUIDs and VUID identifers which are to be IGNORED by the validation
# layer
khronos_validation.message_id_filter =

# Display Application Name
# =====================
# <LayerIdentifier>.message_format_display_application_name
# Useful when running multiple instances to know which instance the message is
# from.
khronos_validation.message_format_display_application_name = false

0 comments on commit d387fb9

Please sign in to comment.