gallium: add TGSI_MEMORY_STREAM_CACHE_POLICY
authorMarek Olšák <marek.olsak@amd.com>
Wed, 25 Jul 2018 04:41:48 +0000 (00:41 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 29 Aug 2018 19:31:41 +0000 (15:31 -0400)
For internal radeonsi shaders.

src/gallium/auxiliary/tgsi/tgsi_strings.c
src/gallium/auxiliary/tgsi/tgsi_strings.h
src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c
src/gallium/include/pipe/p_shader_tokens.h

index 434871273f2171dc8951fbc562fa90da6e631004..03261ed2d990724a5a6a34a72e0767c73c2a57cd 100644 (file)
@@ -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",
 };
 
 
index 20e3f7127f6051919a594702dc3574d67f79a62a..61068d562d83b0b90f685b960c1c34648a3b55bb 100644 (file)
@@ -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 *
index 8e0578b4d5e1d5a9367cf84800828390f2885e95..eaa200a95d63ef4697c52f879dff559ae3b99f86 100644 (file)
@@ -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;
 }
 
index 08ed08156e7be9e002193b4e33d53ecff1b1c541..bef826f23b5ad3c83954522f6a428a462ef99ec3 100644 (file)
@@ -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)