Files
parallel-dc/.github/workflows/vulkan-negotiation.yml
libretroadmin f2f7ef700a Direct3D 12: the raster shaders as DXIL where the device takes shader model 6.0
dx12_dxil.inc has every raster shader and the HDR output's as DXIL,
shader model 6.0, made by dxc and signed, each held to the raster root
signature (-verifyrootsignature); kernels_dx12.sh update-dxil makes it,
and check compares it. DX12Pipelines::Init() asks the device for its
shader model before the pipeline file is read: DXIL from 6.0 on, DXBC
below, a pipeline's shaders always of one kind. The pipeline file's sum is
of the shaders chosen.

tools/rend/d3d_dxil.sh runs the test discs on Direct3D 12 as the device
answers and with it saying 5.1 (d3d_hdr.c's D3DH_SM51): the shaders are
DXIL only where the device takes it, every pipeline is made, and the
pictures are the DXBC ones.
2026-11-02 22:59:14 +01:00

196 lines
9.3 KiB
YAML

name: Vulkan negotiation
# The core's Vulkan device, negotiated as RetroArch does (v2, made through
# the frontend's vkCreateDevice wrapper) and as a frontend without v2 does
# (v1), on lavapipe under the validation layer: tools/vulkan/vk_negotiate.sh.
# Then the HDR output (Color Format), the frames run and the pictures read
# back: tools/vulkan/vk_hdr.sh; and its HLSL, which Direct3D 11 and 12
# draw with, against the GLSL: tools/vulkan/hdr_hlsl.sh. And ACES 2.0
# (Full)'s cube, baked by a lock-free worker off the frame, against the
# cube baked in place, under TSan and ASan/UBSan: tools/hdr/hdr_cube.sh.
# And Direct3D 11 and 12's HDR encoders and their DXBC, under wine (wined3d
# and vkd3d on lavapipe), against the GLSL: tools/hdr/hdr_d3d.sh; and the
# core's Windows build drawing with Direct3D 11 and 12 under wine, its
# 24-bit, HDR10 and scRGB pictures read back and judged:
# tools/hdr/d3d_hdr.sh. SSAA's exact average on Direct3D 12 is the
# encoders' (hdr_d3d 12ssaa, 12sums): wine's vkd3d cannot draw SSAA.
# The HDR post effects (bloom, halation, chromatic aberration) are judged
# in each against what the CPU makes of the picture (vk_hdr --post).
# And renders to textures: what is fetched off the card and when
# (tools/rend/rtt_watch_test.sh), and video memory written by DMA over
# them, with Vulkan and with OpenGL (tools/vulkan/vk_dma.sh,
# tools/gl/gl_dma.sh: Mesa's surfaceless EGL). And the translucent
# sorter's sort against a stable sort by < (tools/rend/sort_pairs_test.sh).
# And polygons drawn outside a clipping rectangle, with OpenGL and OpenGL
# ES, each renderer (tools/gl/gl_clip.sh).
# And a state saved while a render to a texture is still on the card, every
# frame run ahead, with OpenGL and OpenGL ES (tools/gl/gl_ahead.sh).
# And the OpenGL renderers compiled as macOS (clang) and the Switch (libnx)
# build them, through glsm's own GL functions (tools/gl/gl_shapes.sh).
# And a frame's vertices and indices parsed straight into memory the card
# reads, none copied, the pictures those of the lists copied, with Vulkan
# and with OpenGL (tools/vulkan/vk_parse_arena.sh, tools/gl/gl_parse_arena.sh:
# no OpenGL error either, and OpenGL ES drawing as ever), and with Direct3D
# 12 where the adapter's memory is the processor's (tools/rend/d3d_parse_arena.sh,
# under wine), and the arena's slices (tools/rend/parse_arena_test.sh).
on:
push:
paths:
- 'core/rend/vulkan/**'
- 'core/rend/hdr/**'
- 'core/rend/dx11/**'
- 'core/rend/dx12/**'
- 'tools/rend/kernels_dxbc.sh'
- 'tools/rend/kernels_dx12.sh'
- 'tools/rend/dxil_bindings.c'
- 'core/rend/tile/pvr_compute.h'
- 'tools/hdr/**'
- 'core/libretro/**'
- 'tools/threads/live_disc.py'
- 'tools/vulkan/**'
- 'core/rend/upscaler.*'
- 'tools/rend/upscaler_test.*'
- 'core/rend/rtt_watch.*'
- 'core/rend/gles/**'
- 'core/rend/gl4/**'
- 'tools/gl/**'
- 'core/rend/TexCache.*'
- 'core/hw/sh4/sh4_mem.cpp'
- 'tools/rend/rtt_watch_test.*'
- 'core/rend/sorter.*'
- 'core/rend/sort_pairs.h'
- 'core/rend/grow_buf.h'
- 'tools/rend/sort_pairs_test.*'
- 'core/rend/parse_arena.*'
- 'core/hw/pvr/ta_index.*'
- 'core/hw/pvr/ta_list.*'
- 'core/hw/pvr/helper_classes.h'
- 'tools/rend/parse_arena_test.*'
- 'tools/rend/d3d_parse_arena.sh'
- 'tools/rend/d3d_dxil.sh'
- 'tools/rend/dx12_blend_fold_test.*'
- 'tools/rend/clip_check.py'
- 'tools/threads/live_prog.c'
- 'Makefile*'
- '.github/workflows/vulkan-negotiation.yml'
pull_request:
paths:
- 'core/rend/vulkan/**'
- 'core/rend/hdr/**'
- 'core/rend/dx11/**'
- 'core/rend/dx12/**'
- 'tools/rend/kernels_dxbc.sh'
- 'tools/rend/kernels_dx12.sh'
- 'tools/rend/dxil_bindings.c'
- 'core/rend/tile/pvr_compute.h'
- 'tools/hdr/**'
- 'core/libretro/**'
- 'tools/threads/live_disc.py'
- 'tools/vulkan/**'
- 'core/rend/upscaler.*'
- 'tools/rend/upscaler_test.*'
- 'core/rend/rtt_watch.*'
- 'core/rend/gles/**'
- 'core/rend/gl4/**'
- 'tools/gl/**'
- 'core/rend/TexCache.*'
- 'core/hw/sh4/sh4_mem.cpp'
- 'tools/rend/rtt_watch_test.*'
- 'core/rend/sorter.*'
- 'core/rend/sort_pairs.h'
- 'core/rend/grow_buf.h'
- 'tools/rend/sort_pairs_test.*'
- 'core/rend/parse_arena.*'
- 'core/hw/pvr/ta_index.*'
- 'core/hw/pvr/ta_list.*'
- 'core/hw/pvr/helper_classes.h'
- 'tools/rend/parse_arena_test.*'
- 'tools/rend/d3d_parse_arena.sh'
- 'tools/rend/d3d_dxil.sh'
- 'tools/rend/dx12_blend_fold_test.*'
- 'tools/rend/clip_check.py'
- 'tools/threads/live_prog.c'
- 'Makefile*'
- '.github/workflows/vulkan-negotiation.yml'
workflow_dispatch:
permissions:
contents: read
jobs:
vulkan-negotiation:
runs-on: ubuntu-24.04
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
- name: Install Vulkan (lavapipe, validation layer)
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential libgl1-mesa-dev mesa-vulkan-drivers vulkan-validationlayers libvulkan1 \
glslang-tools mingw-w64 wine wine64 xvfb libegl1-mesa-dev libgl1-mesa-dri clang
- name: The OpenGL renderers as macOS and the Switch compile them
run: sh tools/gl/gl_shapes.sh
- name: Build the core
run: make -j"$(nproc)"
- name: Negotiation v2 and v1
run: VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json sh tools/vulkan/vk_negotiate.sh
- name: Renders to textures - what is fetched off the card, when, and what a DMA over them leaves
run: |
sh tools/rend/rtt_watch_test.sh
VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json sh tools/vulkan/vk_dma.sh
sh tools/gl/gl_dma.sh
- name: Polygons drawn outside a clipping rectangle, with OpenGL and OpenGL ES (each renderer)
run: sh tools/gl/gl_clip.sh
- name: A state saved while a render to a texture is on the card, every frame run ahead (OpenGL and OpenGL ES)
run: sh tools/gl/gl_ahead.sh
- name: The translucent sorter's sort (radix, stable, as a sort by <)
run: sh tools/rend/sort_pairs_test.sh
- name: Direct3D 12's polygon blends, the factors folded into the shader, against the PowerVR's (wine, no device)
run: sh tools/rend/dx12_blend_fold_test.sh
- name: The frame parsed where the card reads it, not copied (the arena's slices; the pictures those of a copy)
run: |
sh tools/rend/parse_arena_test.sh
VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json sh tools/vulkan/vk_parse_arena.sh
sh tools/gl/gl_parse_arena.sh
- name: The temporal upscaler's side in the core (strips matched, the request, the inputs)
run: sh tools/rend/upscaler_test.sh
- name: HDR output (HDR10, scRGB, each renderer, every Display Transform)
run: VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json sh tools/vulkan/vk_hdr.sh
- name: HDR output's HLSL against its GLSL
run: VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json sh tools/vulkan/hdr_hlsl.sh
- name: HDR output's DXBC and DXIL are their sources' (sums), the compute kernels' bindings
run: |
sh tools/rend/kernels_dxbc.sh check
sh tools/rend/kernels_dx12.sh check
sh tools/rend/kernels_dx12.sh bindings
- name: HDR output with Direct3D 11 and 12 (wine, the core's encoders, against the GLSL)
run: VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json sh tools/hdr/hdr_d3d.sh
- name: ACES 2.0 (Full)'s cube baked off the frame (threads, TSan, ASan/UBSan, no threads)
run: |
sh tools/hdr/hdr_cube.sh
SANITIZE=thread sh tools/hdr/hdr_cube.sh
SANITIZE=address,undefined UBSAN_OPTIONS=halt_on_error=1 sh tools/hdr/hdr_cube.sh
d3d11-hdr:
runs-on: ubuntu-24.04
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
- name: Install mingw-w64, wine and lavapipe
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential mingw-w64 wine wine64 xvfb mesa-vulkan-drivers libvulkan1 python3
- name: Build the core for Windows
run: make -j"$(nproc)" platform=win CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++
- name: HDR output with Direct3D 11 and 12 (24-bit, refused, HDR10, scRGB, each renderer)
run: VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json sh tools/hdr/d3d_hdr.sh parallel_dc_libretro.dll
- name: Direct3D 11 - video memory written by DMA over renders to textures (Direct3D 12 with D3D12_DLLS)
run: VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json sh tools/rend/d3d_dma.sh parallel_dc_libretro.dll
- name: Direct3D 12 drawing the frame from where it is parsed, every frame the one of the lists copied
run: VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json sh tools/rend/d3d_parse_arena.sh parallel_dc_libretro.dll
- name: Direct3D 12's shaders as DXIL where the device takes shader model 6.0, as DXBC where it does not
run: VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json sh tools/rend/d3d_dxil.sh parallel_dc_libretro.dll