Mesa (master): freedreno: drop shader_t

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jul 28 10:04:38 UTC 2020


Module: Mesa
Branch: master
Commit: 6b379a4cb4b1e387794494e250c4a2cbddf71721
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6b379a4cb4b1e387794494e250c4a2cbddf71721

Author: Rob Clark <robdclark at chromium.org>
Date:   Sat Jul 25 12:16:36 2020 -0700

freedreno: drop shader_t

When this code was outside of the mesa tree, we needed our own enum.
Now we can use a common one, to simplify deduplicating the disasm
code.

Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6070>

---

 src/freedreno/decode/cffdec.c      | 128 +++++++++++++++++++------------------
 src/freedreno/decode/disasm-a2xx.c |  10 +--
 src/freedreno/decode/disasm.h      |  11 +---
 src/freedreno/decode/meson.build   |  16 ++++-
 src/freedreno/decode/pgmdump.c     |  12 ++--
 5 files changed, 92 insertions(+), 85 deletions(-)

diff --git a/src/freedreno/decode/cffdec.c b/src/freedreno/decode/cffdec.c
index d0b269578ad..cafb4a30a89 100644
--- a/src/freedreno/decode/cffdec.c
+++ b/src/freedreno/decode/cffdec.c
@@ -1114,18 +1114,18 @@ cp_im_loadi(uint32_t *dwords, uint32_t sizedwords, int level)
 	uint32_t start = dwords[1] >> 16;
 	uint32_t size  = dwords[1] & 0xffff;
 	const char *type = NULL, *ext = NULL;
-	enum shader_t disasm_type;
+	gl_shader_stage disasm_type;
 
 	switch (dwords[0]) {
 	case 0:
 		type = "vertex";
 		ext = "vo";
-		disasm_type = SHADER_VERTEX;
+		disasm_type = MESA_SHADER_VERTEX;
 		break;
 	case 1:
 		type = "fragment";
 		ext = "fo";
-		disasm_type = SHADER_FRAGMENT;
+		disasm_type = MESA_SHADER_FRAGMENT;
 		break;
 	default:
 		type = "<unknown>";
@@ -1189,23 +1189,23 @@ enum adreno_state_block {
  */
 
 static void
-a3xx_get_state_type(uint32_t *dwords, enum shader_t *stage, enum state_t *state,
+a3xx_get_state_type(uint32_t *dwords, gl_shader_stage *stage, enum state_t *state,
 		    enum state_src_t *src)
 {
 	unsigned state_block_id = (dwords[0] >> 19) & 0x7;
 	unsigned state_type = dwords[1] & 0x3;
 	static const struct {
-		enum shader_t stage;
+		gl_shader_stage stage;
 		enum state_t state;
 	} lookup[0xf][0x3] = {
-		[SB_VERT_TEX][0]    = { SHADER_VERTEX,    TEX_SAMP },
-		[SB_VERT_TEX][1]    = { SHADER_VERTEX,    TEX_CONST },
-		[SB_FRAG_TEX][0]    = { SHADER_FRAGMENT,  TEX_SAMP },
-		[SB_FRAG_TEX][1]    = { SHADER_FRAGMENT,  TEX_CONST },
-		[SB_VERT_SHADER][0] = { SHADER_VERTEX,    SHADER_PROG },
-		[SB_VERT_SHADER][1] = { SHADER_VERTEX,    SHADER_CONST },
-		[SB_FRAG_SHADER][0] = { SHADER_FRAGMENT,  SHADER_PROG },
-		[SB_FRAG_SHADER][1] = { SHADER_FRAGMENT,  SHADER_CONST },
+		[SB_VERT_TEX][0]    = { MESA_SHADER_VERTEX,    TEX_SAMP },
+		[SB_VERT_TEX][1]    = { MESA_SHADER_VERTEX,    TEX_CONST },
+		[SB_FRAG_TEX][0]    = { MESA_SHADER_FRAGMENT,  TEX_SAMP },
+		[SB_FRAG_TEX][1]    = { MESA_SHADER_FRAGMENT,  TEX_CONST },
+		[SB_VERT_SHADER][0] = { MESA_SHADER_VERTEX,    SHADER_PROG },
+		[SB_VERT_SHADER][1] = { MESA_SHADER_VERTEX,    SHADER_CONST },
+		[SB_FRAG_SHADER][0] = { MESA_SHADER_FRAGMENT,  SHADER_PROG },
+		[SB_FRAG_SHADER][1] = { MESA_SHADER_FRAGMENT,  SHADER_CONST },
 	};
 
 	*stage = lookup[state_block_id][state_type].stage;
@@ -1234,69 +1234,69 @@ _get_state_src(unsigned dword0)
 
 static void
 _get_state_type(unsigned state_block_id, unsigned state_type,
-		enum shader_t *stage, enum state_t *state)
+		gl_shader_stage *stage, enum state_t *state)
 {
 	static const struct {
-		enum shader_t stage;
+		gl_shader_stage stage;
 		enum state_t  state;
 	} lookup[0x10][0x4] = {
 		// SB4_VS_TEX:
-		[0x0][0] = { SHADER_VERTEX,    TEX_SAMP },
-		[0x0][1] = { SHADER_VERTEX,    TEX_CONST },
-		[0x0][2] = { SHADER_VERTEX,    UBO },
+		[0x0][0] = { MESA_SHADER_VERTEX,    TEX_SAMP },
+		[0x0][1] = { MESA_SHADER_VERTEX,    TEX_CONST },
+		[0x0][2] = { MESA_SHADER_VERTEX,    UBO },
 		// SB4_HS_TEX:
-		[0x1][0] = { SHADER_TCS,       TEX_SAMP },
-		[0x1][1] = { SHADER_TCS,       TEX_CONST },
-		[0x1][2] = { SHADER_TCS,       UBO },
+		[0x1][0] = { MESA_SHADER_TESS_CTRL, TEX_SAMP },
+		[0x1][1] = { MESA_SHADER_TESS_CTRL, TEX_CONST },
+		[0x1][2] = { MESA_SHADER_TESS_CTRL, UBO },
 		// SB4_DS_TEX:
-		[0x2][0] = { SHADER_TES,       TEX_SAMP },
-		[0x2][1] = { SHADER_TES,       TEX_CONST },
-		[0x2][2] = { SHADER_TES,       UBO },
+		[0x2][0] = { MESA_SHADER_TESS_EVAL, TEX_SAMP },
+		[0x2][1] = { MESA_SHADER_TESS_EVAL, TEX_CONST },
+		[0x2][2] = { MESA_SHADER_TESS_EVAL, UBO },
 		// SB4_GS_TEX:
-		[0x3][0] = { SHADER_GEOM,      TEX_SAMP },
-		[0x3][1] = { SHADER_GEOM,      TEX_CONST },
-		[0x3][2] = { SHADER_GEOM,      UBO },
+		[0x3][0] = { MESA_SHADER_GEOMETRY,  TEX_SAMP },
+		[0x3][1] = { MESA_SHADER_GEOMETRY,  TEX_CONST },
+		[0x3][2] = { MESA_SHADER_GEOMETRY,  UBO },
 		// SB4_FS_TEX:
-		[0x4][0] = { SHADER_FRAGMENT,  TEX_SAMP },
-		[0x4][1] = { SHADER_FRAGMENT,  TEX_CONST },
-		[0x4][2] = { SHADER_FRAGMENT,  UBO },
+		[0x4][0] = { MESA_SHADER_FRAGMENT,  TEX_SAMP },
+		[0x4][1] = { MESA_SHADER_FRAGMENT,  TEX_CONST },
+		[0x4][2] = { MESA_SHADER_FRAGMENT,  UBO },
 		// SB4_CS_TEX:
-		[0x5][0] = { SHADER_COMPUTE,   TEX_SAMP },
-		[0x5][1] = { SHADER_COMPUTE,   TEX_CONST },
-		[0x5][2] = { SHADER_COMPUTE,   UBO },
+		[0x5][0] = { MESA_SHADER_COMPUTE,   TEX_SAMP },
+		[0x5][1] = { MESA_SHADER_COMPUTE,   TEX_CONST },
+		[0x5][2] = { MESA_SHADER_COMPUTE,   UBO },
 		// SB4_VS_SHADER:
-		[0x8][0] = { SHADER_VERTEX,    SHADER_PROG },
-		[0x8][1] = { SHADER_VERTEX,    SHADER_CONST },
-		[0x8][2] = { SHADER_VERTEX,    UBO },
+		[0x8][0] = { MESA_SHADER_VERTEX,    SHADER_PROG },
+		[0x8][1] = { MESA_SHADER_VERTEX,    SHADER_CONST },
+		[0x8][2] = { MESA_SHADER_VERTEX,    UBO },
 		// SB4_HS_SHADER
-		[0x9][0] = { SHADER_TCS,       SHADER_PROG },
-		[0x9][1] = { SHADER_TCS,       SHADER_CONST },
-		[0x9][2] = { SHADER_TCS,       UBO },
+		[0x9][0] = { MESA_SHADER_TESS_CTRL, SHADER_PROG },
+		[0x9][1] = { MESA_SHADER_TESS_CTRL, SHADER_CONST },
+		[0x9][2] = { MESA_SHADER_TESS_CTRL, UBO },
 		// SB4_DS_SHADER
-		[0xa][0] = { SHADER_TES,       SHADER_PROG },
-		[0xa][1] = { SHADER_TES,       SHADER_CONST },
-		[0xa][2] = { SHADER_TES,       UBO },
+		[0xa][0] = { MESA_SHADER_TESS_EVAL, SHADER_PROG },
+		[0xa][1] = { MESA_SHADER_TESS_EVAL, SHADER_CONST },
+		[0xa][2] = { MESA_SHADER_TESS_EVAL, UBO },
 		// SB4_GS_SHADER
-		[0xb][0] = { SHADER_GEOM,      SHADER_PROG },
-		[0xb][1] = { SHADER_GEOM,      SHADER_CONST },
-		[0xb][2] = { SHADER_GEOM,      UBO },
+		[0xb][0] = { MESA_SHADER_GEOMETRY,  SHADER_PROG },
+		[0xb][1] = { MESA_SHADER_GEOMETRY,  SHADER_CONST },
+		[0xb][2] = { MESA_SHADER_GEOMETRY,  UBO },
 		// SB4_FS_SHADER:
-		[0xc][0] = { SHADER_FRAGMENT,  SHADER_PROG },
-		[0xc][1] = { SHADER_FRAGMENT,  SHADER_CONST },
-		[0xc][2] = { SHADER_FRAGMENT,  UBO },
+		[0xc][0] = { MESA_SHADER_FRAGMENT,  SHADER_PROG },
+		[0xc][1] = { MESA_SHADER_FRAGMENT,  SHADER_CONST },
+		[0xc][2] = { MESA_SHADER_FRAGMENT,  UBO },
 		// SB4_CS_SHADER:
-		[0xd][0] = { SHADER_COMPUTE,   SHADER_PROG },
-		[0xd][1] = { SHADER_COMPUTE,   SHADER_CONST },
-		[0xd][2] = { SHADER_COMPUTE,   UBO },
-		[0xd][3] = { SHADER_COMPUTE,   SSBO_0 },      /* a6xx location */
+		[0xd][0] = { MESA_SHADER_COMPUTE,   SHADER_PROG },
+		[0xd][1] = { MESA_SHADER_COMPUTE,   SHADER_CONST },
+		[0xd][2] = { MESA_SHADER_COMPUTE,   UBO },
+		[0xd][3] = { MESA_SHADER_COMPUTE,   SSBO_0 },      /* a6xx location */
 		// SB4_SSBO (shared across all stages)
 		[0xe][0] = { 0, SSBO_0 },                     /* a5xx (and a4xx?) location */
 		[0xe][1] = { 0, SSBO_1 },
 		[0xe][2] = { 0, SSBO_2 },
 		// SB4_CS_SSBO
-		[0xf][0] = { SHADER_COMPUTE, SSBO_0 },
-		[0xf][1] = { SHADER_COMPUTE, SSBO_1 },
-		[0xf][2] = { SHADER_COMPUTE, SSBO_2 },
+		[0xf][0] = { MESA_SHADER_COMPUTE, SSBO_0 },
+		[0xf][1] = { MESA_SHADER_COMPUTE, SSBO_1 },
+		[0xf][2] = { MESA_SHADER_COMPUTE, SSBO_2 },
 		// unknown things
 		/* This looks like combined UBO state for 3d stages (a5xx and
 		 * before??  I think a6xx has UBO state per shader stage:
@@ -1310,7 +1310,7 @@ _get_state_type(unsigned state_block_id, unsigned state_type,
 }
 
 static void
-a4xx_get_state_type(uint32_t *dwords, enum shader_t *stage, enum state_t *state,
+a4xx_get_state_type(uint32_t *dwords, gl_shader_stage *stage, enum state_t *state,
 		    enum state_src_t *src)
 {
 	unsigned state_block_id = (dwords[0] >> 18) & 0xf;
@@ -1320,7 +1320,7 @@ a4xx_get_state_type(uint32_t *dwords, enum shader_t *stage, enum state_t *state,
 }
 
 static void
-a6xx_get_state_type(uint32_t *dwords, enum shader_t *stage, enum state_t *state,
+a6xx_get_state_type(uint32_t *dwords, gl_shader_stage *stage, enum state_t *state,
 		    enum state_src_t *src)
 {
 	unsigned state_block_id = (dwords[0] >> 18) & 0xf;
@@ -1406,7 +1406,7 @@ dump_tex_const(uint32_t *texconst, int num_unit, int level)
 static void
 cp_load_state(uint32_t *dwords, uint32_t sizedwords, int level)
 {
-	enum shader_t stage;
+	gl_shader_stage stage;
 	enum state_t state;
 	enum state_src_t src;
 	uint32_t num_unit = (dwords[0] >> 22) & 0x1ff;
@@ -1437,7 +1437,9 @@ cp_load_state(uint32_t *dwords, uint32_t sizedwords, int level)
 		break;
 	case STATE_SRC_BINDLESS: {
 		const unsigned base_reg =
-			stage == SHADER_COMPUTE ? regbase("HLSQ_CS_BINDLESS_BASE[0]") : regbase("HLSQ_BINDLESS_BASE[0]");
+			stage == MESA_SHADER_COMPUTE ?
+				regbase("HLSQ_CS_BINDLESS_BASE[0]") :
+				regbase("HLSQ_BINDLESS_BASE[0]");
 
 		if (is_64b()) {
 			const unsigned reg = base_reg + (dwords[1] >> 28) * 2;
@@ -1478,13 +1480,13 @@ cp_load_state(uint32_t *dwords, uint32_t sizedwords, int level)
 		 * note: num_unit seems to be # of instruction groups, where
 		 * an instruction group has 4 64bit instructions.
 		 */
-		if (stage == SHADER_VERTEX) {
+		if (stage == MESA_SHADER_VERTEX) {
 			ext = "vo3";
-		} else if (stage == SHADER_GEOM) {
+		} else if (stage == MESA_SHADER_GEOMETRY) {
 			ext = "go3";
-		} else if (stage == SHADER_COMPUTE) {
+		} else if (stage == MESA_SHADER_COMPUTE) {
 			ext = "co3";
-		} else if (stage == SHADER_FRAGMENT){
+		} else if (stage == MESA_SHADER_FRAGMENT){
 			ext = "fo3";
 		}
 
diff --git a/src/freedreno/decode/disasm-a2xx.c b/src/freedreno/decode/disasm-a2xx.c
index 622d00479a8..80b8a00d348 100644
--- a/src/freedreno/decode/disasm-a2xx.c
+++ b/src/freedreno/decode/disasm-a2xx.c
@@ -96,17 +96,17 @@ static void print_dstreg(uint32_t num, uint32_t mask, uint32_t dst_exp)
 	}
 }
 
-static void print_export_comment(uint32_t num, enum shader_t type)
+static void print_export_comment(uint32_t num, gl_shader_stage type)
 {
 	const char *name = NULL;
 	switch (type) {
-	case SHADER_VERTEX:
+	case MESA_SHADER_VERTEX:
 		switch (num) {
 		case 62: name = "gl_Position";  break;
 		case 63: name = "gl_PointSize"; break;
 		}
 		break;
-	case SHADER_FRAGMENT:
+	case MESA_SHADER_FRAGMENT:
 		switch (num) {
 		case 0:  name = "gl_FragColor"; break;
 		}
@@ -212,7 +212,7 @@ struct {
 };
 
 static int disasm_alu(uint32_t *dwords, uint32_t alu_off,
-		int level, int sync, enum shader_t type)
+		int level, int sync, gl_shader_stage type)
 {
 	instr_alu_t *alu = (instr_alu_t *)dwords;
 
@@ -577,7 +577,7 @@ static void print_cf(instr_cf_t *cf, int level)
  *   2) ALU and FETCH instructions
  */
 
-int disasm_a2xx(uint32_t *dwords, int sizedwords, int level, enum shader_t type)
+int disasm_a2xx(uint32_t *dwords, int sizedwords, int level, gl_shader_stage type)
 {
 	instr_cf_t *cfs = (instr_cf_t *)dwords;
 	int idx, max_idx;
diff --git a/src/freedreno/decode/disasm.h b/src/freedreno/decode/disasm.h
index 21ae5a11cd2..de89ab49e90 100644
--- a/src/freedreno/decode/disasm.h
+++ b/src/freedreno/decode/disasm.h
@@ -26,14 +26,7 @@
 
 #include <stdio.h>
 
-enum shader_t {
-	SHADER_VERTEX,
-	SHADER_TCS,
-	SHADER_TES,
-	SHADER_GEOM,
-	SHADER_FRAGMENT,
-	SHADER_COMPUTE,
-};
+#include "compiler/shader_enums.h"
 
 /* bitmask of debug flags */
 enum debug_t {
@@ -50,7 +43,7 @@ struct shader_stats {
 	int constlen;
 };
 
-int disasm_a2xx(uint32_t *dwords, int sizedwords, int level, enum shader_t type);
+int disasm_a2xx(uint32_t *dwords, int sizedwords, int level, gl_shader_stage type);
 int disasm_a3xx(uint32_t *dwords, int sizedwords, int level, FILE *out, unsigned gpu_id);
 int disasm_a3xx_stat(uint32_t *dwords, int sizedwords, int level, FILE *out,
 		unsigned gpu_id, struct shader_stats *stats);
diff --git a/src/freedreno/decode/meson.build b/src/freedreno/decode/meson.build
index 0ec9995aa74..74b3fd690d6 100644
--- a/src/freedreno/decode/meson.build
+++ b/src/freedreno/decode/meson.build
@@ -49,6 +49,8 @@ libfreedreno_cffdec = static_library(
   ],
   include_directories: [
     inc_freedreno_rnn,
+    inc_include,
+    inc_src,
   ],
   c_args : [ no_override_init_args ],
   gnu_symbol_visibility: 'hidden',
@@ -84,6 +86,8 @@ if dep_lua.found() and dep_libarchive.found()
     ],
     include_directories: [
       inc_freedreno_rnn,
+      inc_include,
+      inc_src,
     ],
     c_args : [no_override_init_args],
     gnu_symbol_visibility: 'hidden',
@@ -104,6 +108,8 @@ crashdec = executable(
   'crashdec.c',
   include_directories: [
     inc_freedreno_rnn,
+    inc_include,
+    inc_src,
   ],
   gnu_symbol_visibility: 'hidden',
   dependencies: [],
@@ -118,7 +124,10 @@ if dep_libarchive.found()
   pgmdump = executable(
     'pgmdump',
     'pgmdump.c',
-    include_directories: [],
+    include_directories: [
+      inc_include,
+      inc_src,
+    ],
     gnu_symbol_visibility: 'hidden',
     dependencies: [],
     link_with: [
@@ -131,7 +140,10 @@ if dep_libarchive.found()
   pgmdump2 = executable(
     'pgmdump2',
     'pgmdump2.c',
-    include_directories: [],
+    include_directories: [
+      inc_include,
+      inc_src,
+    ],
     gnu_symbol_visibility: 'hidden',
     dependencies: [],
     link_with: [
diff --git a/src/freedreno/decode/pgmdump.c b/src/freedreno/decode/pgmdump.c
index b8d7cd3837a..ab5deae7335 100644
--- a/src/freedreno/decode/pgmdump.c
+++ b/src/freedreno/decode/pgmdump.c
@@ -444,7 +444,7 @@ static void dump_shaders_a2xx(struct state *state)
 		} else {
 			dump_short_summary(state, vs_hdr->unknown1 - 1, constants);
 		}
-		disasm_a2xx((uint32_t *)(ptr + 32), (sect_size - 32) / 4, level+1, SHADER_VERTEX);
+		disasm_a2xx((uint32_t *)(ptr + 32), (sect_size - 32) / 4, level+1, MESA_SHADER_VERTEX);
 		dump_raw_shader((uint32_t *)(ptr + 32), (sect_size - 32) / 4, i, "vo");
 		free(ptr);
 
@@ -495,7 +495,7 @@ static void dump_shaders_a2xx(struct state *state)
 		} else {
 			dump_short_summary(state, fs_hdr->unknown1 - 1, constants);
 		}
-		disasm_a2xx((uint32_t *)(ptr + 32), (sect_size - 32) / 4, level+1, SHADER_FRAGMENT);
+		disasm_a2xx((uint32_t *)(ptr + 32), (sect_size - 32) / 4, level+1, MESA_SHADER_FRAGMENT);
 		dump_raw_shader((uint32_t *)(ptr + 32), (sect_size - 32) / 4, i, "fo");
 		free(ptr);
 
@@ -585,7 +585,7 @@ printf("hdr_size=%d\n", hdr_size);
 			instrs_size -= 32;
 		}
 
-		disasm_a3xx((uint32_t *)instrs, instrs_size / 4, level+1, SHADER_VERTEX, gpu_id);
+		disasm_a3xx((uint32_t *)instrs, instrs_size / 4, level+1, stdout, gpu_id);
 		dump_raw_shader((uint32_t *)instrs, instrs_size / 4, i, "vo3");
 		free(vs_hdr);
 	}
@@ -980,12 +980,12 @@ int main(int argc, char **argv)
 
 	/* figure out what sort of input we are dealing with: */
 	if (!(check_extension(infile, ".rd") || check_extension(infile, ".rd.gz"))) {
-		enum shader_t shader = ~0;
+		gl_shader_stage shader = ~0;
 		int ret;
 		if (check_extension(infile, ".vo")) {
-			shader = SHADER_VERTEX;
+			shader = MESA_SHADER_VERTEX;
 		} else if (check_extension(infile, ".fo")) {
-			shader = SHADER_FRAGMENT;
+			shader = MESA_SHADER_FRAGMENT;
 		} else if (check_extension(infile, ".vo3")) {
 		} else if (check_extension(infile, ".fo3")) {
 		} else if (check_extension(infile, ".co3")) {



More information about the mesa-commit mailing list