diff options
author | Alyssa Rosenzweig <[email protected]> | 2020-05-21 18:51:52 -0400 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-06-01 18:38:49 +0000 |
commit | 31de10c4342bc5c21366d14a1266e942b95295a0 (patch) | |
tree | c1922a9b06d5a457b8a914155af1dc541e17bd28 | |
parent | ca6759c3f9ff56a077675bfbee3dab2b7b7afc6b (diff) |
pan/mdg: Disassemble out-of-order bits
Optimization for texture instructions, allowing ALU and LD/ST within a
single thread while a texture read is still in flight.
Signed-off-by: Alyssa Rosenzweig <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5286>
-rw-r--r-- | src/panfrost/midgard/disassemble.c | 7 | ||||
-rw-r--r-- | src/panfrost/midgard/midgard.h | 17 | ||||
-rw-r--r-- | src/panfrost/midgard/midgard_compile.c | 4 |
3 files changed, 15 insertions, 13 deletions
diff --git a/src/panfrost/midgard/disassemble.c b/src/panfrost/midgard/disassemble.c index b4c9d772bb6..2b9fb0a2318 100644 --- a/src/panfrost/midgard/disassemble.c +++ b/src/panfrost/midgard/disassemble.c @@ -1441,11 +1441,8 @@ print_texture_word(FILE *fp, uint32_t *word, unsigned tabs, unsigned in_reg_base if (texture->last) fprintf(fp, ".last"); - if (texture->barrier_buffer) - fprintf(fp, ".barrier_buffer /* XXX */"); - - if (texture->barrier_shared) - fprintf(fp, ".barrier_shared /* XXX */"); + if (texture->out_of_order) + fprintf(fp, ".ooo%u", texture->out_of_order); /* Output modifiers are always interpreted floatly */ print_outmod(fp, texture->outmod, false); diff --git a/src/panfrost/midgard/midgard.h b/src/panfrost/midgard/midgard.h index 63f2fa2f586..4e7c80585d5 100644 --- a/src/panfrost/midgard/midgard.h +++ b/src/panfrost/midgard/midgard.h @@ -655,6 +655,9 @@ enum mali_sampler_type { MALI_SAMPLER_SIGNED = 0x3, /* isampler */ }; +#define MIDGARD_BARRIER_BUFFER (1 << 0) +#define MIDGARD_BARRIER_SHARED (1 << 1) + typedef struct __attribute__((__packed__)) { @@ -719,12 +722,14 @@ __attribute__((__packed__)) /* For barriers, control barriers are implied regardless, but these * bits also enable memory barriers of various types. For regular - * textures, these bits are not yet understood. */ - unsigned barrier_buffer : 1; - unsigned barrier_shared : 1; - unsigned barrier_stack : 1; - - unsigned unknown4 : 9; + * textures, these indicate how many bundles after this texture op may + * be executed in parallel with this op. We may execute only ALU and + * ld/st in parallel (not other textures), and obviously there cannot + * be any dependency (the blob appears to forbid even accessing other + * channels of a given texture register). */ + + unsigned out_of_order : 2; + unsigned unknown4 : 10; /* In immediate mode, each offset field is an immediate range [0, 7]. * diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c index 1841e0e0be2..e0d2f26a245 100644 --- a/src/panfrost/midgard/midgard_compile.c +++ b/src/panfrost/midgard/midgard_compile.c @@ -1436,8 +1436,8 @@ emit_control_barrier(compiler_context *ctx) .op = TEXTURE_OP_BARRIER, /* TODO: optimize */ - .barrier_buffer = 1, - .barrier_shared = 1 + .out_of_order = MIDGARD_BARRIER_BUFFER | + MIDGARD_BARRIER_SHARED , } }; |