summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_from_mesa.c35
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_from_mesa.h5
2 files changed, 40 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_from_mesa.c b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.c
index 44fae1c28e6..b7a21f29bad 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_from_mesa.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.c
@@ -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);
+ }
+}
diff --git a/src/gallium/auxiliary/tgsi/tgsi_from_mesa.h b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.h
index d0f211e31e0..bfaa48d7fa3 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_from_mesa.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.h
@@ -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)
{