summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>2020-01-07 08:39:39 +0100
committerMarge Bot <eric+marge@anholt.net>2020-01-23 10:48:02 +0000
commit603e6ba972dae06fe0a198fc00b6aa4a0a33d479 (patch)
treebc3332f8fc331fc787bc1c2d50c16451cc4ed21c
parentdea29b3818ecd813f5b96d44d54d0d3966af1665 (diff)
nir: add two new texture ops for multisample fragment color/mask fetches
This introduces: - nir_texop_fragment_mask_fetch (fetch a fragment mask from a compressed multisampled color surface) - nir_texop_fragment_fetch (fetch a color fragment for a particular sample at corresponding fragment mask index). These two texture operations are necessary for implementing SPV_AMD_shader_fragment_mask. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3304>
-rw-r--r--src/compiler/nir/nir.h3
-rw-r--r--src/compiler/nir/nir_print.c6
2 files changed, 9 insertions, 0 deletions
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index eafd6fad855..c68fef5f1cc 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -1830,6 +1830,8 @@ typedef enum {
* identical.
*/
nir_texop_tex_prefetch, /**< Regular texture look-up, eligible for pre-dispatch */
+ nir_texop_fragment_fetch, /**< Multisample fragment color texture fetch */
+ nir_texop_fragment_mask_fetch,/**< Multisample fragment mask texture fetch */
} nir_texop;
typedef struct {
@@ -1926,6 +1928,7 @@ nir_tex_instr_dest_size(const nir_tex_instr *instr)
case nir_texop_texture_samples:
case nir_texop_query_levels:
case nir_texop_samples_identical:
+ case nir_texop_fragment_mask_fetch:
return 1;
default:
diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c
index aa9ee670a70..9a03f6eee70 100644
--- a/src/compiler/nir/nir_print.c
+++ b/src/compiler/nir/nir_print.c
@@ -1040,6 +1040,12 @@ print_tex_instr(nir_tex_instr *instr, print_state *state)
case nir_texop_tex_prefetch:
fprintf(fp, "tex (pre-dispatchable) ");
break;
+ case nir_texop_fragment_fetch:
+ fprintf(fp, "fragment_fetch ");
+ break;
+ case nir_texop_fragment_mask_fetch:
+ fprintf(fp, "fragment_mask_fetch ");
+ break;
default:
unreachable("Invalid texture operation");
break;