Mesa (main): v3d/clif: add support for dumping GS shader state
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Oct 13 21:40:15 UTC 2021
Module: Mesa
Branch: main
Commit: ec51c8774d0f87e0a8d0ca8d8818bb13056641c2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ec51c8774d0f87e0a8d0ca8d8818bb13056641c2
Author: Alejandro Piñeiro <apinheiro at igalia.com>
Date: Fri Oct 8 14:20:22 2021 +0200
v3d/clif: add support for dumping GS shader state
The basic vertex+fragment shader state uses the packet
GL_SHADER_STATE, but when geometry shader are involved, the packet
used is GL_SHADER_STATE_INCLUDING_GS.
Without this commit any program using a geometry shader would dump
their shader state (and their shader state record and attribues) as
binaries.
Reviewed-by: Juan A. Suarez <jasuarez at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13269>
---
src/broadcom/clif/clif_dump.c | 18 ++++++++++++++++--
src/broadcom/clif/clif_private.h | 1 +
src/broadcom/clif/v3dx_dump.c | 19 +++++++++++++++++++
3 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/src/broadcom/clif/clif_dump.c b/src/broadcom/clif/clif_dump.c
index 0aaa6b6ad8b..ede6f42eedf 100644
--- a/src/broadcom/clif/clif_dump.c
+++ b/src/broadcom/clif/clif_dump.c
@@ -160,7 +160,8 @@ clif_dump_cl(struct clif_dump *clif, uint32_t start, uint32_t end,
static uint32_t
clif_dump_gl_shader_state_record(struct clif_dump *clif,
struct reloc_worklist_entry *reloc,
- void *vaddr)
+ void *vaddr,
+ bool including_gs)
{
struct v3d_group *state = v3d_spec_find_struct(clif->spec,
"GL Shader State Record");
@@ -170,6 +171,16 @@ clif_dump_gl_shader_state_record(struct clif_dump *clif,
assert(attr);
uint32_t offset = 0;
+ if (including_gs) {
+ struct v3d_group *gs_state = v3d_spec_find_struct(clif->spec,
+ "Geometry Shader State Record");
+ assert(gs_state);
+ out(clif, "@format shadrec_gl_geom\n");
+ v3d_print_group(clif, gs_state, 0, vaddr + offset);
+ offset += v3d_group_get_length(gs_state);
+ /* Extra pad when geometry/tessellation shader is present */
+ offset += 20;
+ }
out(clif, "@format shadrec_gl_main\n");
v3d_print_group(clif, state, 0, vaddr + offset);
offset += v3d_group_get_length(state);
@@ -201,6 +212,7 @@ clif_process_worklist(struct clif_dump *clif)
break;
case reloc_gl_shader_state:
+ case reloc_gl_including_gs_shader_state:
break;
case reloc_generic_tile_list:
clif_dump_cl(clif, reloc->addr,
@@ -336,10 +348,12 @@ clif_dump_buffers(struct clif_dump *clif)
break;
case reloc_gl_shader_state:
+ case reloc_gl_including_gs_shader_state:
offset += clif_dump_gl_shader_state_record(clif,
reloc,
bo->vaddr +
- offset);
+ offset,
+ reloc->type == reloc_gl_including_gs_shader_state);
break;
case reloc_generic_tile_list:
offset = clif_dump_cl(clif, reloc->addr,
diff --git a/src/broadcom/clif/clif_private.h b/src/broadcom/clif/clif_private.h
index d96bfd12de9..6ace62b0310 100644
--- a/src/broadcom/clif/clif_private.h
+++ b/src/broadcom/clif/clif_private.h
@@ -64,6 +64,7 @@ struct clif_dump {
enum reloc_worklist_type {
reloc_cl,
reloc_gl_shader_state,
+ reloc_gl_including_gs_shader_state,
reloc_generic_tile_list,
};
diff --git a/src/broadcom/clif/v3dx_dump.c b/src/broadcom/clif/v3dx_dump.c
index 9cf59f88920..454478531ff 100644
--- a/src/broadcom/clif/v3dx_dump.c
+++ b/src/broadcom/clif/v3dx_dump.c
@@ -94,6 +94,25 @@ v3dX(clif_dump_packet)(struct clif_dump *clif, uint32_t offset,
return true;
}
+#if V3D_VERSION >= 41
+ case V3DX(GL_SHADER_STATE_INCLUDING_GS_opcode): {
+ struct V3DX(GL_SHADER_STATE_INCLUDING_GS) values;
+ V3DX(GL_SHADER_STATE_INCLUDING_GS_unpack)(cl, &values);
+
+ if (reloc_mode) {
+ struct reloc_worklist_entry *reloc =
+ clif_dump_add_address_to_worklist(clif,
+ reloc_gl_including_gs_shader_state,
+ values.address);
+ if (reloc) {
+ reloc->shader_state.num_attrs =
+ values.number_of_attribute_arrays;
+ }
+ }
+ return true;
+ }
+#endif /* V3D_VERSION >= 41 */
+
#if V3D_VERSION < 40
case V3DX(STORE_MULTI_SAMPLE_RESOLVED_TILE_COLOR_BUFFER_EXTENDED_opcode): {
struct V3DX(STORE_MULTI_SAMPLE_RESOLVED_TILE_COLOR_BUFFER_EXTENDED) values;
More information about the mesa-commit
mailing list