gallium/tgsi: add helper tgsi_get_interp_mode
authorMarek Olšák <marek.olsak@amd.com>
Sat, 22 Aug 2020 10:28:52 +0000 (06:28 -0400)
committerMarge Bot <eric+marge@anholt.net>
Mon, 24 Aug 2020 19:07:18 +0000 (19:07 +0000)
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6442>

src/gallium/auxiliary/tgsi/tgsi_from_mesa.c
src/gallium/auxiliary/tgsi/tgsi_from_mesa.h
src/mesa/state_tracker/st_glsl_to_tgsi.cpp

index 29fa68da9f00c5d56bdd490b65c4c19bb372bb86..a7641c11592f25cad1c26fe8cf05684c37ef1e1b 100644 (file)
@@ -290,3 +290,20 @@ tgsi_get_sysval_semantic(unsigned sysval)
       unreachable("Unexpected system value to TGSI");
    }
 }
+
+enum tgsi_interpolate_mode
+tgsi_get_interp_mode(enum glsl_interp_mode mode, bool color)
+{
+   switch (mode) {
+   case INTERP_MODE_NONE:
+      return color ? TGSI_INTERPOLATE_COLOR : TGSI_INTERPOLATE_PERSPECTIVE;
+   case INTERP_MODE_FLAT:
+      return TGSI_INTERPOLATE_CONSTANT;
+   case INTERP_MODE_NOPERSPECTIVE:
+      return TGSI_INTERPOLATE_LINEAR;
+   case INTERP_MODE_SMOOTH:
+      return TGSI_INTERPOLATE_PERSPECTIVE;
+   default:
+      unreachable("unknown interpolation mode");
+   }
+}
index 92f08e2211a6ce01112a363f4bb249102653e4b1..e3f1456d88a8f0b1caa7c3902653d4a9a7cb34ae 100644 (file)
@@ -55,6 +55,9 @@ tgsi_get_gl_frag_result_semantic(gl_frag_result frag_result,
 enum tgsi_semantic
 tgsi_get_sysval_semantic(unsigned sysval);
 
+enum tgsi_interpolate_mode
+tgsi_get_interp_mode(enum glsl_interp_mode mode, bool color);
+
 static inline enum pipe_shader_type
 pipe_shader_type_from_mesa(gl_shader_stage stage)
 {
index 7d8f6fc3b257e467cb7fcf0e0f19b97b2a21545f..0fb30bb3b2d31b6abe9d8faf7f2836fc7bc37ab4 100644 (file)
@@ -6554,26 +6554,6 @@ sort_inout_decls_by_slot(struct inout_decl *decls,
    std::sort(decls, decls + count, sorter);
 }
 
-static enum tgsi_interpolate_mode
-st_translate_interp(enum glsl_interp_mode glsl_qual, GLuint varying)
-{
-   switch (glsl_qual) {
-   case INTERP_MODE_NONE:
-      if (varying == VARYING_SLOT_COL0 || varying == VARYING_SLOT_COL1)
-         return TGSI_INTERPOLATE_COLOR;
-      return TGSI_INTERPOLATE_PERSPECTIVE;
-   case INTERP_MODE_SMOOTH:
-      return TGSI_INTERPOLATE_PERSPECTIVE;
-   case INTERP_MODE_FLAT:
-      return TGSI_INTERPOLATE_CONSTANT;
-   case INTERP_MODE_NOPERSPECTIVE:
-      return TGSI_INTERPOLATE_LINEAR;
-   default:
-      assert(0 && "unexpected interp mode in st_translate_interp()");
-      return TGSI_INTERPOLATE_PERSPECTIVE;
-   }
-}
-
 /**
  * Translate intermediate IR (glsl_to_tgsi_instruction) to TGSI format.
  * \param program  the program to translate
@@ -6682,7 +6662,9 @@ st_translate_program(
             assert(interpMode);
             interp_mode = interpMode[slot] != TGSI_INTERPOLATE_COUNT ?
                (enum tgsi_interpolate_mode) interpMode[slot] :
-               st_translate_interp(decl->interp, inputSlotToAttr[slot]);
+               tgsi_get_interp_mode(decl->interp,
+                                    inputSlotToAttr[slot] == VARYING_SLOT_COL0 ||
+                                    inputSlotToAttr[slot] == VARYING_SLOT_COL1);
 
             interp_location = (enum tgsi_interpolate_loc) decl->interp_loc;
          }