Commit graph

1563 commits

Author SHA1 Message Date
Samuel Pitoiset
12b5c3f00e radv: set radv_vgt_shader_key::ngg_streamout for ESO
Not used yet, but will be needed.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27575>
2024-02-19 16:30:08 +00:00
Samuel Pitoiset
eea75777be radv: pass the ES stage when emitting geometry shader with ESO
Not used yet, but will be needed for NGG support.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27575>
2024-02-19 16:30:08 +00:00
Samuel Pitoiset
3713f27260 radv: only configure {XYZ_DIM,DRAW_INDEX}_REG for mesh shaders if enabled
This seems to be the root cause of the huge performance issue with
GS_FAST_LAUNCH=2 on RDNA3 dGPUs. Probably a firmware bug, but on dGPUs
only, because on RDNA3 APUs this is just working...

With that GS_FAST_LAUNCH=2 can be re-enabled by default on GFX11.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27636>
2024-02-16 15:58:31 +00:00
Samuel Pitoiset
0c2213cbbd radv: fix setting the rasterized primitive for ESO
This was missing.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27479>
2024-02-16 07:08:36 +00:00
Samuel Pitoiset
b199aa1bda radv: fix selecting shader variants with ESO
The shader BO for variants (like as LS) wasn't added to the BO list.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27479>
2024-02-16 07:08:36 +00:00
Samuel Pitoiset
a47de04ff3 radv: make sure to reset the GS copy shader with ESO
It should be NULL when not used. This is also slightly more optimal
than doing it in the loop.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27479>
2024-02-16 07:08:36 +00:00
Samuel Pitoiset
b1d4a7a95e radv: fix re-emitting DB_RENDER_CONTROL when resetting gfx pipeline state
This is only used by internal operations but the state wasn't
re-emitted.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27479>
2024-02-16 07:08:36 +00:00
Samuel Pitoiset
64e18b04d9 radv: clear the custom blend mode when resetting gfx pipeline state
This custom blend mode is only used by internal operations and they
don't use shader objects.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27479>
2024-02-16 07:08:35 +00:00
Samuel Pitoiset
b0a31a62e4 radv: clear RADV_CMD_DIRTY_SHADERS when resetting the shader object state
Binding a pipeline resets the shader object state and it's more optimal
to clear this flag here.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27479>
2024-02-16 07:08:35 +00:00
Samuel Pitoiset
32c1e45718 radv: fix emitting VS prologs for merged shaders compiled separately on GFX10+
RSRC1 isn't equal to the VS RSRC1 and both config registers need to
be re-emitted.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27574>
2024-02-13 14:01:42 +00:00
Samuel Pitoiset
6cab5559f9 radv: add support for emitting TES+GS compiled separately on GFX9+
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27432>
2024-02-12 08:09:28 +00:00
Samuel Pitoiset
dd92f5f664 radv: bind the vertex input SGPR only for relevant stages
Otherwise, user_data_0 is wrong if merged shaders are compiled
separately and if we have GS.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27432>
2024-02-12 08:09:28 +00:00
Samuel Pitoiset
b58de424f4 radv: fix RGP barrier reason for RP barriers inserted by the runtime
Without that, RGP is confused and it's reporting CmdPipelineBarrier()
instead of CmdRenderPassSync().

Cc: mesa-stable
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27546>
2024-02-12 07:50:16 +00:00
Samuel Pitoiset
bde272349d radv: add support for emitting VS+GS compiled separately on GFX9+
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27388>
2024-02-08 13:33:34 +00:00
Konstantin Seurer
767f628079 radv/rra: Dump basic ray history tokens
This only dumps the begin tokens. Tokens are written to a buffer
containing a 12 byte header at the beginning.

We use an intermediate format for the ray history tokens because the RRA
format is very inefficient.

Reviewed-by: Friedrich Vock <friedrich.vock@gmx.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25548>
2024-02-03 12:59:47 +01:00
Samuel Pitoiset
0aa9afa8e1 radv: add support for emitting VS+TCS compiled separately on GFX9+
With a VS prolog, we end up with 3 long jumps (VS prolog->VS->TCS->TCS
epilog), super annoying.

The shaders config must also be combined between VS and TCS.

This is for VK_EXT_shader_object.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27336>
2024-02-02 10:16:59 +01:00
Samuel Pitoiset
397a08b407 radv: always emit PGM_RSRC1_HS when emitting the TCS epilog state
This will simplify upcoming changes and it doesn't matter much because
this is for ESO only.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27336>
2024-02-02 10:16:59 +01:00
Samuel Pitoiset
3d5d163693 radv: always mark drawid/base_instance used with ESO
The user SGPR is always declared for merged shaders compiled separately
because the args must match.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27336>
2024-02-02 10:16:59 +01:00
Samuel Pitoiset
7a20946579 radv: add a helper to know if device fault detection is enabled
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27293>
2024-01-31 08:41:54 +01:00
Samuel Pitoiset
f23efd7093 radv: bind and emit mesh/task shaders with ESO
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27237>
2024-01-30 18:29:51 +00:00
Samuel Pitoiset
29491d36aa radv: determine the last VGT api stage with mesh shaders and ESO
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27237>
2024-01-30 18:29:51 +00:00
Samuel Pitoiset
6adea03a3e radv: ignore unneeded dynamic states with mesh shaders and ESO
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27237>
2024-01-30 18:29:51 +00:00
Samuel Pitoiset
f870e5ff11 radv: fix emitting tess domain origin for merged TES+GS on GFX9
For merged TES+GS, TES is NULL and this state wasn't emitted.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27301>
2024-01-30 11:47:29 +00:00
Samuel Pitoiset
6a2b264526 radv: emit more default states for ESO on GFX10.3+
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27236>
2024-01-29 09:47:01 +00:00
Samuel Pitoiset
b7fdfdc901 radv: do not ignore RADV_DYNAMIC_FRAGMENT_SHADING_RATE for ESO on GFX10.3+
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27236>
2024-01-29 09:47:01 +00:00
Samuel Pitoiset
9a7c551f95 radv: set NGG fields in vgt_shader_key for ESO on GFX10+
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27236>
2024-01-29 09:47:01 +00:00
Samuel Pitoiset
70c288558a radv: fix the late scissor emission workaround with ESO on GFX9
graphics_pipeline is NULL when ESO is used.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27236>
2024-01-29 09:47:01 +00:00
Samuel Pitoiset
411e23e193 radv: use the non-emitted graphics pipeline for the needed dynamic states
This is similar but it will allow us to re-use the helper for the
late scissor bug on GFX9.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27236>
2024-01-29 09:47:01 +00:00
Samuel Pitoiset
d14ecd6d89 radv: use device->vk.enabled_features instead of iterating twice
vk_device already has the list of enabled features, no need to iterate
twice on the pNext structs.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27276>
2024-01-26 15:16:26 +00:00
Samuel Pitoiset
30f2802e31 radv: promote VK_EXT_index_type_uint8 to KHR
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27262>
2024-01-26 10:00:48 +00:00
Samuel Pitoiset
df3fbe3b33 radv: promote VK_EXT_line_rasterization to KHR
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27262>
2024-01-26 10:00:48 +00:00
Samuel Pitoiset
f0e7714d0d radv: add support for binding/emitting shader objects
Only GFX6-8 support for now because merged shaders make it harder to
implement but I have a bunch of local work for that.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26930>
2024-01-26 08:56:54 +00:00
Samuel Pitoiset
a12019cc91 radv: initialize default dynamic state when beginning a new cmdbuf
With ESO everything is dynamic and the default dynamic state must be
initialized when beginning a new command buffer.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26930>
2024-01-26 08:56:54 +00:00
Samuel Pitoiset
482ca4b074 radv: add required NV entrypoints for VK_EXT_shader_object
Even if the implementation doesn't support the extensions, the
entrypoints must exist.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26930>
2024-01-26 08:56:54 +00:00
Samuel Pitoiset
9351a4c51a radv: re-emit the TCS epilog when a new TCS is bound
Similarly to VS prologs and PS epilogs, this needs to be re-emitted
otherwise the config shader state can be overwritten.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26930>
2024-01-26 08:56:54 +00:00
Samuel Pitoiset
1bc5f15b68 radv: prevent accessing NULL pipelines when emitting VBO with ESO
ESO always uses dynamic strides, so this should be zero.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26930>
2024-01-26 08:56:54 +00:00
Samuel Pitoiset
fe1a9b3ab3 radv: add a helper for binding the custom blend mode
This re-emits the according state when a new graphics pipeline is bound

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26930>
2024-01-26 08:56:54 +00:00
Samuel Pitoiset
783e3c096f radv: fix indirect draws with NULL index buffer on GFX10
GFX10 has a hw bug and it can't handle 0-sized index buffer. The
non-indirect draw path was fine but not the indirect path where RADV
emits the index buffer.

This fixes flakes with dEQP-VK.*maintenance6* on NAVI14, and possibly
GPU hangs if there is an indirect draw with a valid index buffer right
before because it would re-use the same index buffer.

Fixes: db9816fd66 ("radv: add support for NULL index buffer")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27142>
2024-01-22 08:14:23 +00:00
Samuel Pitoiset
5c03cdbd02 radv: fix indirect dispatches on the compute queue on GFX7
GFX7 CP requires the indirect dispatch VA to be aligned to 32-bytes.

This fixes dEQP-VK.api.command_buffers.many_indirect_disps_on_secondary,
but it's unexpected that it uncovered this bug.

Cc: mesa-stable
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27148>
2024-01-22 07:41:05 +00:00
Samuel Pitoiset
10e2dbb63b radv: delay emitting streamout enable at draw time
Since Vulkan 1.3.271, the spec allowed vkCmdBeginTransformFeedbackEXT
to be called without an active graphics pipeline bound when using
shader objects.

That means that the last VGT shader would be NULL once VKCTS is
updated accordingly. This change delays emitting streamout enable at
draw time to make sure the last VGT shader is present, regarldess if
ESO is enabled or not.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27075>
2024-01-17 17:33:17 +00:00
Samuel Pitoiset
3f655bc47c radv: do not issue SQTT marker with DISPATCH_MESH_INDIRECT_MULTI
According to PAL, only DISPATCH_TASKMESH_GFX is supposed to emit a
SQTT marker as part of the packet, probably because there is also
a packet emitted on ACE for executing task shaders.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10401
Fixes: 312103e0ff ("radv: set THREAD_TRACE_MARKER_ENABLE for mesh/task draws")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26936>
2024-01-11 07:59:40 +00:00
Samuel Pitoiset
41cbd6f735 radv: rework declaring color arguments for PS epilogs
Rely on the actual FS outputs instead of the spi shader col format,
this is safer and it will help for future work.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26903>
2024-01-10 16:10:15 +00:00
Dave Airlie
71bd479a7f radv: don't emit cp dma packets on video rings.
Only emit this on the gfx/ace rings.

Fixes hangs with CTS on video decode with navi3x.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26945>
2024-01-09 07:39:52 +00:00
Konstantin Seurer
77b9a6f9e2 radv/rt: Use radv_shader for compiled shaders
Reviewed-by: Friedrich Vock <friedrich.vock@gmx.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25224>
2024-01-07 21:28:19 +01:00
Konstantin Seurer
8198805e1f radv: Skip compiling chit and miss shaders
Reviewed-by: Friedrich Vock <friedrich.vock@gmx.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25224>
2024-01-07 21:28:06 +01:00
Konstantin Seurer
0f87d406b5 radv/rt: Skip compiling a traversal shader
If we don't need one, we don't compile one.

Reviewed-by: Friedrich Vock <friedrich.vock@gmx.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25224>
2024-01-07 21:28:02 +01:00
Friedrich Vock
1e3541728b radv,aco: Convert 1D ray launches to 2D
Because we use unaligned dispatches, 1D launches only use 8 threads per
wave. Converting to 2D and fixing up launch IDs in the prolog
significantly increases occupancy.

Gives ~30% uplift in Ghostwire Tokyo.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26105>
2024-01-05 17:08:05 +00:00
Samuel Pitoiset
395dee0d89 radv: drop si_ prefix from all functions
Most of these functions were copied from RadeonSI but they should be
prefixed with radv_ instead.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26854>
2024-01-04 08:40:37 +00:00
Samuel Pitoiset
89947eb151 radv: remove radv_write_scissors()
This function is useless.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26854>
2024-01-04 08:40:36 +00:00
Samuel Pitoiset
aa1eb54b3b radv: constify a variable in radv_emit_depth_control()
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26847>
2024-01-04 07:54:41 +00:00