* Each binding element within an arrayed descriptor has a bool indicating if
it's dynamically used or not (which will be set to true if the feedback isn't
available). Each descriptor has a uint32_t indicating how many elements are
dynamically used - which is useful for the UI to hide the root of an array
that has no used elements, or to heuristically decide whether to expand or
elide the contents.
Renames the "cont.d" column in the Pipeline State window to
"Additional". This is a less confusing title then the contraction.
Adds a "(VK_WHOLE_SIZE)" annotation after the range if VK_WHOLE_SIZE
was used, and an "(empty view)" annotation if the range is empty.
These annotations are intended to help diagnose incorrectly filled
buffer descriptors.
* If we have multiple bindings aliasing the same slot, we want to keep going if
the first one we find is unused to see if the slot is aliased with one that
*is* used. We'll still use the last unused one if we don't find any used at
all (and with aliasing any one we pick is as valid as another).
* We also fix a number of issues that could cause incorrect formats to be
generated.
* Test cases added for D3D11/GL/Vulkan to test different struct types. These
aren't automated at the moment because most of the code they're testing is in
the UI itself.
* For D3D11 byte offsets are always uint32 aligned, but for other APIs that's
not guaranteed. Storing a byte offset is strictly more expressive and a lot
simpler to reason about.
* This is the only way in GL to do rendering from one mip to another. We handle
it and display the whole texture even if it's temporarily constricted, and
display the mip state in the pipeline viewer.
* If the mip state is constricted at the start of the frame capture, only mips
0..MAX will be visible at all and other mips will be assumed to not be valid.
If conditional rendering is enabled its state is always
displayed in both 'Rasterizer' and 'CS' states.
Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
* This isn't relevant for Vulkan, but in GL it's valid to not specify a binding
and fetch it at runtime (and even if a binding is specified, it's not
immutable and can be changed).
* Similarly GL allows bare uniforms that aren't in a buffer, which we handle in
the same way by wrapping them into a $Globals UBO.
Predicate state is displayed in the raster state.
"Draw Call" and "Wireframe" overlays are visible even if predicate doesn't pass.
Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
* We handle 4:4:4, 4:2:2, and 4:2:0, with packed, 2-plane and 3-plane formats,
for 8, 10, 12, and 16 bit depths.
* This covers most common formats but still leaves a few out - NV11, palettised
formats, V208/V408 JPG formats.
* For pipelines using tessellation or containing a geometry shader we use
transform feedback to fetch the output of the vertex pipeline after these
stages.
* Using the row index is not accurate when some input attributes are disabled,
because they won't match up to the original index in the attributes list.