summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2018-07-25 00:41:48 -0400
committerMarek Olšák <[email protected]>2018-08-29 15:31:41 -0400
commit8f6e06d1608bff31165511787a06da8c635e6da0 (patch)
treec4f492d663755c46fa10f9d70d9e53a0c746264d /src
parentd8033d4083d341f3351c8ca929935617b9b16f3a (diff)
gallium: add TGSI_MEMORY_STREAM_CACHE_POLICY
For internal radeonsi shaders.
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_strings.c3
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_strings.h2
-rw-r--r--src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c3
-rw-r--r--src/gallium/include/pipe/p_shader_tokens.h8
4 files changed, 12 insertions, 4 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_strings.c b/src/gallium/auxiliary/tgsi/tgsi_strings.c
index 434871273f2..03261ed2d99 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_strings.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_strings.c
@@ -228,11 +228,12 @@ const char *tgsi_immediate_type_names[6] =
"INT64",
};
-const char *tgsi_memory_names[3] =
+const char *tgsi_memory_names[4] =
{
"COHERENT",
"RESTRICT",
"VOLATILE",
+ "STREAM_CACHE_POLICY",
};
diff --git a/src/gallium/auxiliary/tgsi/tgsi_strings.h b/src/gallium/auxiliary/tgsi/tgsi_strings.h
index 20e3f7127f6..61068d562d8 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_strings.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_strings.h
@@ -62,7 +62,7 @@ extern const char *tgsi_fs_coord_pixel_center_names[2];
extern const char *tgsi_immediate_type_names[6];
-extern const char *tgsi_memory_names[3];
+extern const char *tgsi_memory_names[4];
const char *
diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c
index 8e0578b4d5e..eaa200a95d6 100644
--- a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c
+++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c
@@ -331,6 +331,9 @@ static unsigned get_cache_policy(struct si_shader_context *ctx,
inst->Memory.Qualifier & (TGSI_MEMORY_COHERENT | TGSI_MEMORY_VOLATILE)))
cache_policy |= ac_glc;
+ if (inst->Memory.Qualifier & TGSI_MEMORY_STREAM_CACHE_POLICY)
+ cache_policy |= ac_slc;
+
return cache_policy;
}
diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h
index 08ed08156e7..bef826f23b5 100644
--- a/src/gallium/include/pipe/p_shader_tokens.h
+++ b/src/gallium/include/pipe/p_shader_tokens.h
@@ -790,16 +790,20 @@ struct tgsi_dst_register
#define TGSI_MEMORY_COHERENT (1 << 0)
#define TGSI_MEMORY_RESTRICT (1 << 1)
#define TGSI_MEMORY_VOLATILE (1 << 2)
+/* The "stream" cache policy will minimize memory cache usage if other
+ * memory operations need the cache.
+ */
+#define TGSI_MEMORY_STREAM_CACHE_POLICY (1 << 3)
/**
* Specifies the type of memory access to do for the LOAD/STORE instruction.
*/
struct tgsi_instruction_memory
{
- unsigned Qualifier : 3; /* TGSI_MEMORY_ */
+ unsigned Qualifier : 4; /* TGSI_MEMORY_ */
unsigned Texture : 8; /* only for images: TGSI_TEXTURE_ */
unsigned Format : 10; /* only for images: PIPE_FORMAT_ */
- unsigned Padding : 11;
+ unsigned Padding : 10;
};
#define TGSI_MEMBAR_SHADER_BUFFER (1 << 0)