branchsbox/vk-dynamic-descriptor-sets-per-stagecancel
11 Commits over 31 Days - 0.01cph!
Do a full checkout for a Steam branch build
Vulkan: Separate the shared VS/PS/GS dynamic descriptor set into per-stage dynamic sets
Reworks the single uber dynamic descriptor set containing every stage
into 3 much smaller sets for each stage (VS/PS/GS).
This is primarily a backport from the latest Source 2 branch, however
this diverges on materialsystem2, on rendersystemvulkan threading and
quite heavily vfx_vulkan where we use mostly our own compiler code using
DXC instead of Slang.
The main purpose of this is to remove the restrictions of not being able
to use VK_EXT_graphics_pipeline_library with uniform texel buffers,
storage images, storage buffers, storage texel buffers.
Previously the only solution would be forced usage of a static descriptor
set, however that isn't feasible for UGC or an easy to use engine.
The layout now is:
Dynamic set 0 - VS/CS (Would also be used for mesh shaders)
Dynamic set 1 - PS
Dynamic Set 2 - GS
Set 3+ - static sets
The index of static sets remains the same because sets 1/2 are reused
from previously deprecated materialsystem2 owned descriptor sets.
Other changes include:
* VFX_MAX_SAMPLERS: 16 -> 32
* VFX_MAX_UAVS: 8 -> 16
FIXME: CRayTracePipelineVulkan needs to be upgraded but is unused currently
Up SHADER_COMPILER_VERSION to 3 and refuse to load older shaders
scenesystem: All layers get lighting constants, there are buffers that need to always be bound here and there is no overhead
Recompile all shaders
Debug: Spew when a shader doesn't support pipeline library so hitches can be blamed on geometry shaders
Can't workflow_dispatch on a branch
Debug: Spew when a shader doesn't support pipeline library so hitches can be blamed on geometry shaders
Maybe don't leave debug prints in and be confused at the extra 2ms
scenesystem: All layers get lighting constants, there are buffers that need to always be bound here and there is no overhead
Up SHADER_COMPILER_VERSION to 3 and refuse to load older shaders
Recompile all shaders
Vulkan: Separate the shared VS/PS/GS dynamic descriptor set into per-stage dynamic sets
Reworks the single uber dynamic descriptor set containing every stage
into 3 much smaller sets for each stage (VS/PS/GS).
This is primarily a backport from the latest Source 2 branch, however
this diverges on materialsystem2, on rendersystemvulkan threading and
quite heavily vfx_vulkan where we use mostly our own compiler code using
DXC instead of Slang.
The main purpose of this is to remove the restrictions of not being able
to use VK_EXT_graphics_pipeline_library with uniform texel buffers,
storage images, storage buffers, storage texel buffers.
Previously the only solution would be forced usage of a static descriptor
set, however that isn't feasible for UGC or an easy to use engine.
The layout now is:
Dynamic set 0 - VS/CS (Would also be used for mesh shaders)
Dynamic set 1 - PS
Dynamic Set 2 - GS
Set 3+ - static sets
The index of static sets remains the same because sets 1/2 are reused
from previously deprecated materialsystem2 owned descriptor sets.
Other changes include:
* VFX_MAX_SAMPLERS: 16 -> 32
* VFX_MAX_UAVS: 8 -> 16
FIXME: CRayTracePipelineVulkan needs to be upgraded but is unused currently
Temp: All layers get per view lighting constants (these are probably worthy of a static descriptor set)
Temp: Disable bloom layer - throwing too many errors which makes debugging impossible
vfx_vulkan: Separate the shared VS/PS/GS dynamic descriptor set into per-stage dynamic sets
Reworks the single uber dynamic descriptor set containing every stage
into 3 much smaller sets for each stage (VS/PS/GS).
The main purpose of this is to remove the restrictions of not being able
to use VK_EXT_graphics_pipeline_library with uniform texel buffers,
storage images, storage buffers, storage texel buffers.
(And we use a lot of dynamic StructuredBuffers now)
Previously the only solution would be forced usage of a static descriptor
set, however that isn't feasible for UGC or an easy to use engine.
The layout now is:
Dynamic set 0 - VS/CS
Dynamic set 1 - PS
Dynamic Set 2 - GS
Set 3+ - static sets
rendersystemvulkan/materialsystem2: support dynamic descriptor sets
Backport latest CPipelineManagerVulkan from Valve mainly
providing support for dynamic descriptor sets and additional
graphics pipeline library support.
Backport some materialsystem2 changes to support dynamic descriptor sets
although there is a lot of divergance.
Force rebuild all shaders with descriptor set changes
rendersystemvulkan: descriptor pool sizes match VFX_MAX enums
materialsystem2: Do not add UAVs from external descriptor sets
materialsystem2: Only MapOpBindTexture for dynamic descriptor sets
rendersystemvulkan: Fix validation error loading from the pipeline cache - DanG
rendersystemvulkan: Reset constant buffer bindings
materialsystem2: Mark explicit fallthrough
materialsystem2: Fix logic for updating CBs in descriptor sets
Temp: All layers get per view lighting constants (these are probably worthy of a static descriptor set)
Some debugging..
Temp: Disable bloom layer - throwing too many errors which makes debugging impossible
▍▄█_▅▇▆▋▌▋: ▍▄▇▌▌▅▌▋ ▅▉▊ ▋▌▄▇█▄ ▊▆/▌▉/▍▉ ▌▄▉▅▇▋█ ▆▅█▍▇▍█▌▆▋ █▇▅ ▌▍▋▄ ▄▄▋-▇▊▉▄▅ ▍▉█▋▆▄█ ▄▋▇▉
▇▌▋█▄▅█ █▇▅ ▋▋▍▇█▄ ▇▄▅▉ ▉█▌▇█▍▅ ▍▊▍▇███▇▅▇ ▉▊▅ ▆▄▊▍▅▌▉▇▌▍ ▅▍▊▋▍ ▌▄▇▄▅
▄█▋█ ▌ ▇▆▉▄ ▆▋▌▇▍▇█ ▌▌▅▉ ▇▋▅ ▋▌█▌ ▊██▅▍ (█▉/▅▋/▇▅).
▅▌▉ ▄▇▉▆ ▆▉▋▇█▄▆ ▆█ ▋▆▇▄ ▉▇ ▉▉ ▄▉▅▌▇▌ ▋▊▅ ▊▊▇▄▆█▉█▉▌▄▇ ▍█ ▌▋▄ ▌▌▇▆▊ ▋▇▄▍
▌█ ▇▍▋ ▍▊_▇█▉_▍██▌▋▉▍▉_█▆▅▅▆▅▇▄_▌▇▍▍▌▄▄ ▇▉▅▅ ▊▄▅▊▊▍▆ ▌▉▇▄▉ ▊▊▆▌▋▌▋,
▅▆▊▋▄▇▇ ▉▊▍█▅▇, ▊█▇█▇▊█ ▅▄▇▋▊▌▌, ▇▆▊▅▆█▌ ▄▌▍▇▄ ▆▇▇▉▍▅▅.
(▊▍▅ ▇▋ ▉▅█ ▉ ▅▍▌ ▄▅ ▉▄▆▄▋▅▊ ▉▉▊▇▅▆▇▅▌█▇▊█▆▌▅▍ ▌▉▅)
▄▆▍▍▅▆▍▋▆▅ ▉▅▍ █▅▇▉ ▍▊▇▌▆▋▋▉ ▆▊▍▊▌ ▆▅ ▅▄▊▆▊▊ ▆▌▆▉▌ ▊▌ ▆ ▊▍▄█▉▄ ▅▆▇▋█▆▇▌▊▍
▅█▌, ▇▍▍▌▍▋▌ ▊▌▄▆ █▄▌'▇ ▊▊▍▅▆▆▄▍ ▋▌▋ ▇▇█ ▆▆ ▇█ ▌▉▆▊ ▅▄ ▊▋█ ▇▅▄▇██.
▄▆▄ ▄▍▅▊▇▄ ▆▍▅ █▉:
▆▊▋▌▍▆▇ ▄▍█ ▌ - █▉/▋▊
▌▊▉▇▍▇▅ ▆▆▇ ▇ - ▅▅
▆█▅▌▆▆▆ ▋▇▅ ▇ - ▅▄
▍▆▉ ▅+ - ▉▉▌▊▆▉ █▌█▅
▄▇▉█▊▅▅▌█▇▍▅▇▉▍█▉▅/▆▌▇▍▋▅▌▋▆▉▄▌▋▄▌: ▄▅▇▌▊▋▍ ▍▅▌▅▅▇▅ ▆▋▋▄▆▉▉▌▅▊ █▊▌▌
▊▌▊▉▍▇▇▇ ▊▊▌█▆▍ ▆▅▉▍█▊▍▌▆▌██▆▅▄▊█▄▌▅▇▇ ▅▊▆▄ ▌▌▄▅▆ ▋▇▊▉▄▅
█▅▆▌▌▉▌▅█ ▅▅▇▍▅▌▉ ▅▉▌ ▍▍▊█▌▄▋ ▄▉▊▅▉▉▄█▍▌ ▊▆▉▋ ▇█▌ ▌▊▉▅▍█▅▅▅▋
▄▆▌▋█▋▅█ ▆█▆▉▉▆█▆ ▍▍▍▄▅▉█ ▌▉▅▉▉▄▅.
█▍█▌▍▆▅▅ ▆██▆ ▅▄▉▆▄▇▊▋█▆▆▄▉▉▌ ▄▅▆▆▉█▄ ▍▆ ▅▊▆▆▅▌▋ ▉▊▌█▇▆▆ ▄▅▍▇▊▆▋▇▇█ ▇▄▍▍
▅▌▌▄▅▆▅▇ ▄▇▊▊▉ ▋▇ ▋ ▅▉▋ ▍▅ ▄▉▄█▊▉▋▇▌▍.
▄▍▋▇▋ ▄▇▅▍▅▊▅ ▉▋▄ ▋▄▍▊▇▌▇ ▄▌▄▇ ▋▊█▋▇▄▆█▉▋ ▋▇▊ ▊▋▇▌▋█▍
[ ! ] ▄▇▇▍█▌▋ █▅▋▌▍ ▆█▆▋▊ - ▆▌▊▌▅▅▇▍ ▊▇▍ ▉██▆ ▇▅▆█▇▉ ▇▉▆▋▇ ▌▌▌▅▅ █▄▊▉▍▌▅▌▆ ▍▍▋█▌▍▊▆▉▉
▅▅▌█▅▌▇█▄▌▇▉▅▉▅█▉▌: ▌▇▉▍█▆▇▊▉▄ ▇▌▊▉ ▆▇▄▍▊ ▊▉▋▊▇ ▄▄▌_█▋▆ ▆▇▇▋▇
▆▍▅▋ ▊▄█▇▆▄▆▅▋..
▆▌█▆▌▍▇▅▋▅▍█▇▍▌: ▆▋ ▄█▍ ▆▄▇ ▍▆▍▉ ▄▇▇▇ ▌▌▄▅▍▌▄▉ ██▅▉▌▆▇▆▅▊ ▄█▍▋
▅▉▆██▍▌▇▇▌▇▋▄▉▆: ▋▌█▋ █▄▉▄█▉▋▍▋██▇▌▇▄▊ ▉▍▉ ▇▅▊▄▅▇▆ ▄▅▋▄▇▋▉▋█▋ ▊▉▋▍
▋▍▅▍▌██▇▄▌▋▋▇▅▊▌▄█: ▊▆█ ▊▅▊▄▊▋▅▍▇▄ ▍▆▊▉▅ █▄▆▌▋▊▄ ▍▆▉█ █▅▊ ▋▆▌██▅▋█ ▍▆▋▇█ - ▋▌▋▉
vfx_vulkan: Separate the shared VS/PS/GS dynamic descriptor set into per-stage dynamic sets
Reworks the single uber dynamic descriptor set containing every stage
into 3 much smaller sets for each stage (VS/PS/GS).
The main purpose of this is to remove the restrictions of not being able
to use VK_EXT_graphics_pipeline_library with uniform texel buffers,
storage images, storage buffers, storage texel buffers.
(And we use a lot of dynamic StructuredBuffers now)
Previously the only solution would be forced usage of a static descriptor
set, however that isn't feasible for UGC or an easy to use engine.
The layout now is:
Dynamic set 0 - VS/CS
Dynamic set 1 - PS
Dynamic Set 2 - GS
Set 3+ - static sets