[Mesa-dev] [PATCH 06/17] st/mesa: use TGSI utility to emulate features for VS variants

Marek Olšák maraeo at gmail.com
Mon Oct 5 18:26:19 PDT 2015


From: Marek Olšák <marek.olsak at amd.com>

---
 src/mesa/state_tracker/st_program.c | 41 ++++++++++++++++++++++++++-----------
 1 file changed, 29 insertions(+), 12 deletions(-)

diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index 9e100db..6ace352 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -43,6 +43,8 @@
 #include "pipe/p_shader_tokens.h"
 #include "draw/draw_context.h"
 #include "tgsi/tgsi_dump.h"
+#include "tgsi/tgsi_emulate.h"
+#include "tgsi/tgsi_parse.h"
 #include "tgsi/tgsi_ureg.h"
 
 #include "st_debug.h"
@@ -377,12 +379,6 @@ st_translate_vertex_program(struct st_context *st,
 
    vpv->key = *key;
 
-   vpv->num_inputs = stvp->num_inputs;
-   if (key->passthrough_edgeflags) {
-      vpv->num_inputs++;
-      num_outputs++;
-   }
-
    if (ST_DEBUG & DEBUG_MESA) {
       _mesa_print_program(&stvp->Base.Base);
       _mesa_print_program_parameters(st->ctx, &stvp->Base.Base);
@@ -396,7 +392,7 @@ st_translate_vertex_program(struct st_context *st,
                                    stvp->glsl_to_tgsi,
                                    &stvp->Base.Base,
                                    /* inputs */
-                                   vpv->num_inputs,
+                                   stvp->num_inputs,
                                    input_to_index,
                                    NULL, /* inputSlotToAttr */
                                    NULL, /* input semantic name */
@@ -409,15 +405,15 @@ st_translate_vertex_program(struct st_context *st,
                                    output_slot_to_attr,
                                    output_semantic_name,
                                    output_semantic_index,
-                                   key->passthrough_edgeflags,
-                                   key->clamp_color);
+                                   false,
+                                   false);
    else
       error = st_translate_mesa_program(st->ctx,
                                         TGSI_PROCESSOR_VERTEX,
                                         ureg,
                                         &stvp->Base.Base,
                                         /* inputs */
-                                        vpv->num_inputs,
+                                        stvp->num_inputs,
                                         input_to_index,
                                         NULL, /* input semantic name */
                                         NULL, /* input semantic index */
@@ -427,8 +423,8 @@ st_translate_vertex_program(struct st_context *st,
                                         stvp->result_to_output,
                                         output_semantic_name,
                                         output_semantic_index,
-                                        key->passthrough_edgeflags,
-                                        key->clamp_color);
+                                        false,
+                                        false);
 
    if (error)
       goto fail;
@@ -445,6 +441,27 @@ st_translate_vertex_program(struct st_context *st,
                                       &vpv->tgsi.stream_output);
    }
 
+   vpv->num_inputs = stvp->num_inputs;
+
+   /* Emulate features. */
+   if (key->clamp_color || key->passthrough_edgeflags) {
+      const struct tgsi_token *tokens;
+      unsigned flags =
+         (key->clamp_color ? TGSI_EMU_CLAMP_COLOR_OUTPUTS : 0) |
+         (key->passthrough_edgeflags ? TGSI_EMU_PASSTHROUGH_EDGEFLAG : 0);
+
+      tokens = tgsi_emulate(vpv->tgsi.tokens, flags);
+
+      if (tokens) {
+         tgsi_free_tokens(vpv->tgsi.tokens);
+         vpv->tgsi.tokens = tokens;
+
+         if (key->passthrough_edgeflags)
+            vpv->num_inputs++;
+      } else
+         fprintf(stderr, "mesa: cannot emulate deprecated features\n");
+   }
+
    if (ST_DEBUG & DEBUG_TGSI) {
       tgsi_dump(vpv->tgsi.tokens, 0);
       debug_printf("\n");
-- 
2.1.4



More information about the mesa-dev mailing list