tgsi_from_mesa: add tgsi_get_gl_frag_result_semantic
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 8 Jun 2017 17:36:59 +0000 (19:36 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 5 Jul 2017 10:27:11 +0000 (12:27 +0200)
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/auxiliary/tgsi/tgsi_from_mesa.c
src/gallium/auxiliary/tgsi/tgsi_from_mesa.h

index 44fae1c..b7a21f2 100644 (file)
@@ -148,3 +148,38 @@ tgsi_get_gl_varying_semantic(gl_varying_slot attr,
       break;
    }
 }
+
+/**
+ * Determine the semantic name and index used for the given fragment shader
+ * result.
+ */
+void
+tgsi_get_gl_frag_result_semantic(gl_frag_result frag_result,
+                                 unsigned *semantic_name,
+                                 unsigned *semantic_index)
+{
+   if (frag_result >= FRAG_RESULT_DATA0) {
+      *semantic_name = TGSI_SEMANTIC_COLOR;
+      *semantic_index = frag_result - FRAG_RESULT_DATA0;
+      return;
+   }
+
+   *semantic_index = 0;
+
+   switch (frag_result) {
+   case FRAG_RESULT_DEPTH:
+      *semantic_name = TGSI_SEMANTIC_POSITION;
+      break;
+   case FRAG_RESULT_STENCIL:
+      *semantic_name = TGSI_SEMANTIC_STENCIL;
+      break;
+   case FRAG_RESULT_COLOR:
+      *semantic_name = TGSI_SEMANTIC_COLOR;
+      break;
+   case FRAG_RESULT_SAMPLE_MASK:
+      *semantic_name = TGSI_SEMANTIC_SAMPLEMASK;
+      break;
+   default:
+      assert(false);
+   }
+}
index d0f211e..bfaa48d 100644 (file)
@@ -42,6 +42,11 @@ unsigned
 tgsi_get_generic_gl_varying_index(gl_varying_slot attr,
                                   bool needs_texcoord_semantic);
 
+void
+tgsi_get_gl_frag_result_semantic(gl_frag_result frag_result,
+                                 unsigned *semantic_name,
+                                 unsigned *semantic_index);
+
 static inline enum pipe_shader_type
 pipe_shader_type_from_mesa(gl_shader_stage stage)
 {