radeonsi: have separate LS and ES main shader parts in the shader selector
[mesa.git] / src / gallium / drivers / radeonsi / si_shader.h
index 5a24318b96fbb973f4b14c9e131c42dbfbea980b..d4b57c97d59ecf32c2b79fff4bf41064de2b9d51 100644 (file)
@@ -247,6 +247,13 @@ enum {
        SI_FIX_FETCH_RGBA_32_SSCALED,
        SI_FIX_FETCH_RGBA_32_FIXED,
        SI_FIX_FETCH_RGBX_32_FIXED,
+       SI_FIX_FETCH_RG_64_FLOAT,
+       SI_FIX_FETCH_RGB_64_FLOAT,
+       SI_FIX_FETCH_RGBA_64_FLOAT,
+       SI_FIX_FETCH_RGB_8,     /* A = 1.0 */
+       SI_FIX_FETCH_RGB_8_INT, /* A = 1 */
+       SI_FIX_FETCH_RGB_16,
+       SI_FIX_FETCH_RGB_16_INT,
 };
 
 struct si_shader;
@@ -280,6 +287,8 @@ struct si_shader_selector {
         * uploaded to a buffer).
         */
        struct si_shader        *main_shader_part;
+       struct si_shader        *main_shader_part_ls; /* as_ls is set in the key */
+       struct si_shader        *main_shader_part_es; /* as_es is set in the key */
 
        struct si_shader        *gs_copy_shader;
 
@@ -441,8 +450,8 @@ struct si_shader_key {
        /* Flags for monolithic compilation only. */
        union {
                struct {
-                       /* One nibble for every input: SI_FIX_FETCH_* enums. */
-                       uint64_t        fix_fetch;
+                       /* One byte for every input: SI_FIX_FETCH_* enums. */
+                       uint8_t         fix_fetch[SI_MAX_ATTRIBS];
                } vs;
                struct {
                        uint64_t        inputs_to_copy; /* for fixed-func TCS */
@@ -498,6 +507,8 @@ struct si_shader_info {
 };
 
 struct si_shader {
+       struct si_compiler_ctx_state    compiler_ctx_state;
+
        struct si_shader_selector       *selector;
        struct si_shader                *next_variant;
 
@@ -574,5 +585,20 @@ void si_shader_binary_read_config(struct radeon_shader_binary *binary,
                                  unsigned symbol_offset);
 unsigned si_get_spi_shader_z_format(bool writes_z, bool writes_stencil,
                                    bool writes_samplemask);
+const char *si_get_shader_name(struct si_shader *shader, unsigned processor);
+
+/* Inline helpers. */
+
+/* Return the pointer to the main shader part's pointer. */
+static inline struct si_shader **
+si_get_main_shader_part(struct si_shader_selector *sel,
+                       struct si_shader_key *key)
+{
+       if (key->as_ls)
+               return &sel->main_shader_part_ls;
+       if (key->as_es)
+               return &sel->main_shader_part_es;
+       return &sel->main_shader_part;
+}
 
 #endif