replaced by st_atom_shader.c
authorBrian <brian.paul@tungstengraphics.com>
Tue, 25 Sep 2007 20:30:26 +0000 (14:30 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Tue, 25 Sep 2007 20:30:26 +0000 (14:30 -0600)
src/mesa/state_tracker/st_atom_fs.c [deleted file]
src/mesa/state_tracker/st_atom_vs.c [deleted file]

diff --git a/src/mesa/state_tracker/st_atom_fs.c b/src/mesa/state_tracker/st_atom_fs.c
deleted file mode 100644 (file)
index 2801985..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-/*
- * Authors:
- *   Keith Whitwell <keith@tungstengraphics.com>
- *   Brian Paul
- */
-
-#include "shader/prog_parameter.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_defines.h"
-#include "pipe/p_winsys.h"
-#include "pipe/tgsi/mesa/mesa_to_tgsi.h"
-#include "pipe/tgsi/exec/tgsi_core.h"
-#include "pipe/tgsi/exec/tgsi_dump.h"
-
-#include "st_context.h"
-#include "st_cache.h"
-#include "st_atom.h"
-#include "st_program.h"
-
-
-#define TGSI_DEBUG 0
-
-
-/**
- * Translate a Mesa fragment shader into a TGSI shader.
- * \param inputMapping  to map fragment program input registers to TGSI
- *                      input slots
- * \param tokensOut  destination for TGSI tokens
- * \return  pointer to cached pipe_shader object.
- */
-const struct cso_fragment_shader *
-st_translate_fragment_shader(const struct st_context *st,
-                             struct st_fragment_program *stfp,
-                             const GLuint inputMapping[],
-                             struct tgsi_token *tokensOut,
-                             GLuint maxTokens)
-{
-   GLuint outputMapping[FRAG_RESULT_MAX];
-   GLuint defaultInputMapping[FRAG_ATTRIB_MAX];
-   struct pipe_shader_state fs;
-   const struct cso_fragment_shader *cso;
-   GLuint interpMode[16];  /* XXX size? */
-   GLuint attr;
-   GLbitfield inputsRead = stfp->Base.Base.InputsRead;
-
-   /* Check if all fragment programs need the fragment position (in order
-    * to do perspective-corrected interpolation).
-    */
-   /* XXX temporary! */
-   if (st->pipe->get_param(st->pipe, PIPE_PARAM_FS_NEEDS_POS))
-      inputsRead |= FRAG_BIT_WPOS;
-
-   memset(&fs, 0, sizeof(fs));
-
-   /*
-    * Convert Mesa program inputs to TGSI input register semantics.
-    */
-   for (attr = 0; attr < FRAG_ATTRIB_MAX; attr++) {
-      if (inputsRead & (1 << attr)) {
-         const GLuint slot = fs.num_inputs;
-
-         fs.num_inputs++;
-
-         defaultInputMapping[attr] = slot;
-
-         switch (attr) {
-         case FRAG_ATTRIB_WPOS:
-            fs.input_semantic_name[slot] = TGSI_SEMANTIC_POSITION;
-            fs.input_semantic_index[slot] = 0;
-            interpMode[slot] = TGSI_INTERPOLATE_CONSTANT;
-            break;
-         case FRAG_ATTRIB_COL0:
-            fs.input_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
-            fs.input_semantic_index[slot] = 0;
-            interpMode[slot] = TGSI_INTERPOLATE_LINEAR;
-            break;
-         case FRAG_ATTRIB_COL1:
-            fs.input_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
-            fs.input_semantic_index[slot] = 1;
-            interpMode[slot] = TGSI_INTERPOLATE_LINEAR;
-            break;
-         case FRAG_ATTRIB_FOGC:
-            fs.input_semantic_name[slot] = TGSI_SEMANTIC_FOG;
-            fs.input_semantic_index[slot] = 0;
-            interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
-            break;
-         case FRAG_ATTRIB_TEX0:
-         case FRAG_ATTRIB_TEX1:
-         case FRAG_ATTRIB_TEX2:
-         case FRAG_ATTRIB_TEX3:
-         case FRAG_ATTRIB_TEX4:
-         case FRAG_ATTRIB_TEX5:
-         case FRAG_ATTRIB_TEX6:
-         case FRAG_ATTRIB_TEX7:
-            fs.input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
-            fs.input_semantic_index[slot] = attr - FRAG_ATTRIB_TEX0;
-            interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
-            break;
-         case FRAG_ATTRIB_VAR0:
-            /* fall-through */
-         default:
-            fs.input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
-            fs.input_semantic_index[slot] = attr - FRAG_ATTRIB_VAR0;
-            interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
-         }
-      }
-   }
-
-   /*
-    * Semantics for outputs
-    */
-   for (attr = 0; attr < FRAG_RESULT_MAX; attr++) {
-      if (stfp->Base.Base.OutputsWritten & (1 << attr)) {
-         switch (attr) {
-         case FRAG_RESULT_DEPR:
-            fs.output_semantic_name[fs.num_outputs] = TGSI_SEMANTIC_POSITION;
-            outputMapping[attr] = fs.num_outputs;
-            break;
-         case FRAG_RESULT_COLR:
-            fs.output_semantic_name[fs.num_outputs] = TGSI_SEMANTIC_COLOR;
-            outputMapping[attr] = fs.num_outputs;
-            break;
-         default:
-            assert(0);
-         }
-         fs.num_outputs++;
-      }
-   }
-
-   if (!inputMapping)
-      inputMapping = defaultInputMapping;
-
-   /* XXX: fix static allocation of tokens:
-    */
-   tgsi_mesa_compile_fp_program( &stfp->Base,
-                                 /* inputs */
-                                 fs.num_inputs,
-                                 inputMapping,
-                                 fs.input_semantic_name,
-                                 fs.input_semantic_index,
-                                 interpMode,
-                                 /* outputs */
-                                 outputMapping,
-                                 /* tokenized result */
-                                 tokensOut, maxTokens);
-
-
-   fs.tokens = tokensOut;
-
-   cso = st_cached_fs_state(st, &fs);
-   stfp->fs = cso;
-
-   if (TGSI_DEBUG)
-      tgsi_dump( tokensOut, 0/*TGSI_DUMP_VERBOSE*/ );
-
-#if defined(USE_X86_ASM) || defined(SLANG_X86)
-   if (stfp->sse2_program.csr == stfp->sse2_program.store)
-      tgsi_emit_sse2_fs( tokensOut, &stfp->sse2_program );
-
-   if (!cso->state.executable)
-      ((struct cso_fragment_shader*)cso)->state.executable = (void *) x86_get_func( &stfp->sse2_program );
-#endif
-
-   return cso;
-}
-
-
-
-static void update_fs( struct st_context *st )
-{
-   struct st_fragment_program *stfp = NULL;
-
-   /* find active shader and params.  Changes to this Mesa state
-    * should be covered by ST_NEW_FRAGMENT_PROGRAM, thanks to the
-    * logic in st_cb_program.c
-    */
-   if (st->ctx->Shader.CurrentProgram &&
-       st->ctx->Shader.CurrentProgram->LinkStatus &&
-       st->ctx->Shader.CurrentProgram->FragmentProgram) {
-      struct gl_fragment_program *f
-         = st->ctx->Shader.CurrentProgram->FragmentProgram;
-      stfp = st_fragment_program(f);
-   }
-   else {
-      assert(st->ctx->FragmentProgram._Current);
-      stfp = st_fragment_program(st->ctx->FragmentProgram._Current);
-   }
-
-   /* if new binding, or shader has changed */
-   if (st->fp != stfp /**|| stfp->dirty**/) {
-
-#if 0
-      if (stfp->dirty)
-         (void) st_translate_fragment_shader( st, stfp );
-
-      /* Bind the vertex program and TGSI shader */
-      st->fp = stfp;
-      st->state.fs = stfp->fs;
-
-      st->pipe->bind_fs_state(st->pipe, st->state.fs->data);
-#else
-
-      /* NEW */
-      st->dirty.st |= ST_NEW_LINKAGE;
-
-#endif
-   }
-}
-
-
-#if 0
-const struct st_tracked_state st_update_fs = {
-   .name = "st_update_fs",
-   .dirty = {
-      .mesa  = 0,
-      .st   = ST_NEW_FRAGMENT_PROGRAM,
-   },
-   .update = update_fs
-};
-#endif
diff --git a/src/mesa/state_tracker/st_atom_vs.c b/src/mesa/state_tracker/st_atom_vs.c
deleted file mode 100644 (file)
index 0f07906..0000000
+++ /dev/null
@@ -1,324 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  *   Brian Paul
-  */
-
-#include "shader/prog_parameter.h"
-#include "shader/prog_print.h"
-#include "tnl/t_vp_build.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_defines.h"
-#include "pipe/p_winsys.h"
-#include "pipe/tgsi/mesa/mesa_to_tgsi.h"
-#include "pipe/tgsi/exec/tgsi_core.h"
-
-#include "st_context.h"
-#include "st_cache.h"
-#include "st_atom.h"
-#include "st_program.h"
-
-
-#define TGSI_DEBUG 0
-
-
-/**
- * Translate a Mesa vertex shader into a TGSI shader.
- * \param outputMapping  to map vertex program output registers to TGSI
- *                       output slots
- * \param tokensOut  destination for TGSI tokens
- * \return  pointer to cached pipe_shader object.
- */
-const struct cso_vertex_shader *
-st_translate_vertex_shader(const struct st_context *st,
-                           struct st_vertex_program *stvp,
-                           const GLuint outputMapping[],
-                           struct tgsi_token *tokensOut,
-                           GLuint maxTokens)
-{
-   GLuint defaultOutputMapping[VERT_RESULT_MAX];
-   struct pipe_shader_state vs;
-   const struct cso_vertex_shader *cso;
-   GLuint attr, i;
-
-   memset(&vs, 0, sizeof(vs));
-
-   /*
-    * Determine number of inputs, the mappings between VERT_ATTRIB_x
-    * and TGSI generic input indexes, plus input attrib semantic info.
-    */
-   for (attr = 0; attr < VERT_ATTRIB_MAX; attr++) {
-      if (stvp->Base.Base.InputsRead & (1 << attr)) {
-         const GLuint slot = vs.num_inputs;
-
-         vs.num_inputs++;
-
-         stvp->input_to_index[attr] = slot;
-         stvp->index_to_input[slot] = attr;
-
-         switch (attr) {
-         case VERT_ATTRIB_POS:
-            vs.input_semantic_name[slot] = TGSI_SEMANTIC_POSITION;
-            vs.input_semantic_index[slot] = 0;
-            break;
-         case VERT_ATTRIB_WEIGHT:
-            /* fall-through */
-         case VERT_ATTRIB_NORMAL:
-            /* just label as a generic */
-            vs.input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
-            vs.input_semantic_index[slot] = 0;
-            break;
-         case VERT_ATTRIB_COLOR0:
-            vs.input_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
-            vs.input_semantic_index[slot] = 0;
-            break;
-         case VERT_ATTRIB_COLOR1:
-            vs.input_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
-            vs.input_semantic_index[slot] = 1;
-            break;
-         case VERT_ATTRIB_FOG:
-            vs.input_semantic_name[slot] = TGSI_SEMANTIC_FOG;
-            vs.input_semantic_index[slot] = 0;
-            break;
-         case VERT_ATTRIB_TEX0:
-         case VERT_ATTRIB_TEX1:
-         case VERT_ATTRIB_TEX2:
-         case VERT_ATTRIB_TEX3:
-         case VERT_ATTRIB_TEX4:
-         case VERT_ATTRIB_TEX5:
-         case VERT_ATTRIB_TEX6:
-         case VERT_ATTRIB_TEX7:
-            vs.input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
-            vs.input_semantic_index[slot] = attr - VERT_ATTRIB_TEX0;
-            break;
-         case VERT_ATTRIB_GENERIC0:
-         case VERT_ATTRIB_GENERIC1:
-         case VERT_ATTRIB_GENERIC2:
-         case VERT_ATTRIB_GENERIC3:
-         case VERT_ATTRIB_GENERIC4:
-         case VERT_ATTRIB_GENERIC5:
-         case VERT_ATTRIB_GENERIC6:
-         case VERT_ATTRIB_GENERIC7:
-            assert(attr < VERT_ATTRIB_MAX);
-            vs.input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
-            vs.input_semantic_index[slot] = attr - VERT_ATTRIB_GENERIC0;
-            break;
-         default:
-            assert(0);
-         }
-      }
-   }
-
-   /* initialize output semantics to defaults */
-   for (i = 0; i < PIPE_MAX_SHADER_OUTPUTS; i++) {
-      vs.output_semantic_name[i] = TGSI_SEMANTIC_GENERIC;
-      vs.output_semantic_index[i] = 0;
-   }
-
-   /*
-    * Determine number of outputs, the (default) output register
-    * mapping and the semantic information for each output.
-    */
-   for (attr = 0; attr < VERT_RESULT_MAX; attr++) {
-      if (stvp->Base.Base.OutputsWritten & (1 << attr)) {
-         GLuint slot;
-
-         if (outputMapping) {
-            slot = outputMapping[attr];
-            assert(slot != ~0);
-         }
-         else {
-            slot = vs.num_outputs;
-            vs.num_outputs++;
-            defaultOutputMapping[attr] = slot;
-         }
-
-         /*
-         printf("Output %u -> slot %u\n", attr, slot);
-         */
-
-         switch (attr) {
-         case VERT_RESULT_HPOS:
-            vs.output_semantic_name[slot] = TGSI_SEMANTIC_POSITION;
-            vs.output_semantic_index[slot] = 0;
-            break;
-         case VERT_RESULT_COL0:
-            vs.output_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
-            vs.output_semantic_index[slot] = 0;
-            break;
-         case VERT_RESULT_COL1:
-            vs.output_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
-            vs.output_semantic_index[slot] = 1;
-            break;
-         case VERT_RESULT_BFC0:
-            vs.output_semantic_name[slot] = TGSI_SEMANTIC_BCOLOR;
-            vs.output_semantic_index[slot] = 0;
-            break;
-         case VERT_RESULT_BFC1:
-            vs.output_semantic_name[slot] = TGSI_SEMANTIC_BCOLOR;
-            vs.output_semantic_index[slot] = 1;
-            break;
-         case VERT_RESULT_FOGC:
-            vs.output_semantic_name[slot] = TGSI_SEMANTIC_FOG;
-            vs.output_semantic_index[slot] = 0;
-            break;
-         case VERT_RESULT_PSIZ:
-            vs.output_semantic_name[slot] = TGSI_SEMANTIC_PSIZE;
-            vs.output_semantic_index[slot] = 0;
-            break;
-         case VERT_RESULT_EDGE:
-            assert(0);
-            break;
-         case VERT_RESULT_TEX0:
-         case VERT_RESULT_TEX1:
-         case VERT_RESULT_TEX2:
-         case VERT_RESULT_TEX3:
-         case VERT_RESULT_TEX4:
-         case VERT_RESULT_TEX5:
-         case VERT_RESULT_TEX6:
-         case VERT_RESULT_TEX7:
-            vs.output_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
-            vs.output_semantic_index[slot] = attr - VERT_RESULT_TEX0;
-            break;
-         case VERT_RESULT_VAR0:
-            /* fall-through */
-         default:
-            assert(attr - VERT_RESULT_VAR0 < MAX_VARYING);
-            vs.output_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
-            vs.output_semantic_index[slot] = attr - VERT_RESULT_VAR0;
-         }
-      }
-   }
-
-
-   if (outputMapping) {
-      /* find max output slot referenced to compute vs.num_outputs */
-      GLuint maxSlot = 0;
-      for (attr = 0; attr < VERT_RESULT_MAX; attr++) {
-         if (outputMapping[attr] != ~0 && outputMapping[attr] > maxSlot)
-            maxSlot = outputMapping[attr];
-      }
-      vs.num_outputs = maxSlot + 1;
-   }
-   else {
-      outputMapping = defaultOutputMapping;
-   }
-
-   /* XXX: fix static allocation of tokens:
-    */
-   tgsi_mesa_compile_vp_program( &stvp->Base,
-                                 /* inputs */
-                                 vs.num_inputs,
-                                 stvp->input_to_index,
-                                 vs.input_semantic_name,
-                                 vs.input_semantic_index,
-                                 /* outputs */
-                                 vs.num_outputs,
-                                 outputMapping,
-                                 vs.output_semantic_name,
-                                 vs.output_semantic_index,
-                                 /* tokenized result */
-                                 tokensOut, maxTokens);
-
-   vs.tokens = tokensOut;
-   cso = st_cached_vs_state(st, &vs);
-   stvp->vs = cso;
-
-   if (TGSI_DEBUG)
-      tgsi_dump( tokensOut, 0 );
-
-#if defined(USE_X86_ASM) || defined(SLANG_X86)
-   if (stvp->sse2_program.csr == stvp->sse2_program.store)
-      tgsi_emit_sse2( tokensOut, &stvp->sse2_program );
-
-   if (!cso->state.executable)
-      ((struct cso_vertex_shader*)cso)->state.executable = (void *) x86_get_func( &stvp->sse2_program );
-#endif
-
-   stvp->dirty = 0;
-
-   return cso;
-}
-
-
-
-static void update_vs( struct st_context *st )
-{
-   struct st_vertex_program *stvp;
-
-   /* find active shader and params -- Should be covered by
-    * ST_NEW_VERTEX_PROGRAM
-    */
-   if (st->ctx->Shader.CurrentProgram &&
-       st->ctx->Shader.CurrentProgram->LinkStatus &&
-       st->ctx->Shader.CurrentProgram->VertexProgram) {
-      struct gl_vertex_program *f
-         = st->ctx->Shader.CurrentProgram->VertexProgram;
-      stvp = st_vertex_program(f);
-   }
-   else {
-      assert(st->ctx->VertexProgram._Current);
-      stvp = st_vertex_program(st->ctx->VertexProgram._Current);
-   }
-
-   if (st->vp != stvp || stvp->dirty) {
-#if 0
-      if (stvp->dirty)
-         (void) st_translate_vertex_shader( st, stvp );
-
-      /* Bind the vertex program and TGSI shader */
-      st->vp = stvp;
-      st->state.vs = stvp->vs;
-
-#if 0
-      printf("###### bind vp tokens: %p %p  num_inp=%u\n",
-             stvp, stvp->tokens, stvp->vs->state.num_inputs);
-      if (TGSI_DEBUG)
-         tgsi_dump( stvp->tokens, 0 );
-#endif
-      st->pipe->bind_vs_state(st->pipe, st->state.vs->data);
-#else
-      /* NEW */
-      st->dirty.st |= ST_NEW_LINKAGE;
-
-#endif
-   }
-}
-
-#if 0
-const struct st_tracked_state st_update_vs = {
-   .name = "st_update_vs",
-   .dirty = {
-      .mesa  = _NEW_PROGRAM, 
-      .st   = ST_NEW_VERTEX_PROGRAM,
-   },
-   .update = update_vs
-};
-#endif