turnip: A750 support (sysmem)
What does this MR do and why?
Adds a750 support (sysmem only).
Highlights:
- Consts uploading via
SS6_DIRECT
is subtly broken now - it seems that consts are uploaded only for the first draw call afterCP_LOAD_STATE6_FRAG
, following draw calls would have undefined values.- This is fixed by using preamble for all consts uploads like driver params and inline uniforms.
- Driver params are now lowered to UBOs.
- Reworked a bit how driver params size is calculated.
VS doesn't seem to have this issue (and blob uses old path for driver params uploads) so driver params for VS use old path.- For blits/clears it is fixed by using
SS6_INDIRECT
. - Uploaded consts are emitted via
CP_NOP
since code that emits them is always insidesub_cs
(we cannot emit nested sub_cs).-
⚠ This is something that need to be changed, e.g. by emitting them via separate cs.
-
-
⚠ I disabledEXT_fragment_density_map
on a750 because I haven't fixed its interaction with new way to upload consts.
- This is fixed by using preamble for all consts uploads like driver params and inline uniforms.
- VS attribute buffer in gmem - part of gmem is now carved out for VS attributes, this carve out is now considered in gmem calculations (search for
PC_ATTR_BUF_
). - There are some
V2
new regs which duplicate some old regs values, they are emitted unconditional for all generations at the moment. Emitting them conditionally is seems like a pain and command stream is backward compatible as is.
Passes VK CTS but for a few (probably failing on other gens) tests. Tested rendering of D3D11 and D3D12 games.
Edited by Danylo Piliaiev