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