st/mesa: Don't open code the drawpixels vertex shader.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 4 Dec 2018 06:38:33 +0000 (22:38 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 21 Dec 2018 23:29:28 +0000 (15:29 -0800)
Now that we always copy color, we can just use the util function.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_cb_drawpixels.c

index 0bb2caf5edcc107b610544e645283e8e215ef8b8..120b5c48339daa8de2876e984d3deb4b4ae75fee 100644 (file)
@@ -72,6 +72,7 @@
 #include "util/u_format.h"
 #include "util/u_inlines.h"
 #include "util/u_math.h"
+#include "util/u_simple_shaders.h"
 #include "util/u_tile.h"
 #include "cso_cache/cso_context.h"
 
@@ -196,35 +197,18 @@ get_drawpix_z_stencil_program(struct st_context *st,
 static void
 make_passthrough_vertex_shader(struct st_context *st)
 {
-   const enum tgsi_semantic texcoord_semantic = st->needs_texcoord_semantic ?
-      TGSI_SEMANTIC_TEXCOORD : TGSI_SEMANTIC_GENERIC;
+   if (st->drawpix.vert_shader)
+      return;
 
-   if (!st->drawpix.vert_shader) {
-      struct ureg_program *ureg = ureg_create( PIPE_SHADER_VERTEX );
+   const uint semantic_names[] = { TGSI_SEMANTIC_POSITION,
+                                   TGSI_SEMANTIC_COLOR,
+     st->needs_texcoord_semantic ? TGSI_SEMANTIC_TEXCOORD :
+                                   TGSI_SEMANTIC_GENERIC };
+   const uint semantic_indexes[] = { 0, 0, 0 };
 
-      if (ureg == NULL)
-         return;
-
-      /* MOV result.pos, vertex.pos; */
-      ureg_MOV(ureg,
-               ureg_DECL_output( ureg, TGSI_SEMANTIC_POSITION, 0 ),
-               ureg_DECL_vs_input( ureg, 0 ));
-
-      /* MOV result.color0, vertex.attr[1]; */
-      ureg_MOV(ureg,
-               ureg_DECL_output( ureg, TGSI_SEMANTIC_COLOR, 0 ),
-               ureg_DECL_vs_input( ureg, 1 ));
-
-      /* MOV result.texcoord0, vertex.attr[2]; */
-      ureg_MOV(ureg,
-               ureg_DECL_output( ureg, texcoord_semantic, 0 ),
-               ureg_DECL_vs_input( ureg, 2 ));
-
-      ureg_END( ureg );
-      
-      st->drawpix.vert_shader =
-         ureg_create_shader_and_destroy( ureg, st->pipe );
-   }
+   st->drawpix.vert_shader =
+      util_make_vertex_passthrough_shader(st->pipe, 3, semantic_names,
+                                          semantic_indexes, false);
 }