sp_fs_exec.c revision c04a7f8929d674971a472ffa4d3a31200c22aa5a
1c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell/**************************************************************************
2c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell *
3c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
4c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * All Rights Reserved.
5c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell *
6c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a
7c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * copy of this software and associated documentation files (the
8c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * "Software"), to deal in the Software without restriction, including
9c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * without limitation the rights to use, copy, modify, merge, publish,
10c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * distribute, sub license, and/or sell copies of the Software, and to
11c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * permit persons to whom the Software is furnished to do so, subject to
12c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * the following conditions:
13c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell *
14c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * The above copyright notice and this permission notice (including the
15c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * next paragraph) shall be included in all copies or substantial portions
16c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * of the Software.
17c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell *
18c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell *
26c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell **************************************************************************/
27c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
28c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
29c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell#include "sp_context.h"
30c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell#include "sp_state.h"
31c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell#include "sp_fs.h"
32c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell#include "sp_headers.h"
33c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
34c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
35c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell#include "pipe/p_state.h"
36c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell#include "pipe/p_defines.h"
37c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell#include "pipe/p_util.h"
38c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell#include "pipe/p_inlines.h"
39c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell#include "pipe/tgsi/exec/tgsi_exec.h"
40c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
41c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwellstruct sp_exec_fragment_shader {
42c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   struct sp_fragment_shader base;
43c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell};
44c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
45c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
46c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
47c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
48c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwellstatic void
49c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwellexec_prepare( struct sp_fragment_shader *base,
50c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell	      struct tgsi_exec_machine *machine,
51c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell	      struct tgsi_sampler *samplers )
52c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell{
53c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   tgsi_exec_machine_bind_shader( machine,
54c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell				  base->shader.tokens,
55c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell				  PIPE_MAX_SAMPLERS,
56c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell				  samplers );
57c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell}
58c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
59c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
60c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
61c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
62c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell/* TODO: hide the machine struct in here somewhere, remove from this
63c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell * interface:
64c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell */
65c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwellstatic unsigned
66c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwellexec_run( struct sp_fragment_shader *base,
67c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell	  struct tgsi_exec_machine *machine,
68c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell	  struct quad_header *quad )
69c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell{
70c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
71c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   /* Compute X, Y, Z, W vals for this quad */
72c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   sp_setup_pos_vector(quad->posCoef,
73c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell		       (float)quad->x0, (float)quad->y0,
74c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell		       &machine->QuadPos);
75c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
76c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   return tgsi_exec_machine_run( machine );
77c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell}
78c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
79c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
80c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
81c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwellstatic void
82c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwellexec_delete( struct sp_fragment_shader *base )
83c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell{
84c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   FREE(base);
85c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell}
86c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
87c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
88c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
89c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
90c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
91c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwellstruct sp_fragment_shader *
92c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwellsoftpipe_create_fs_exec(struct softpipe_context *softpipe,
93c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell			const struct pipe_shader_state *templ)
94c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell{
95c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   struct sp_exec_fragment_shader *shader;
96c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
97c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   /* Decide whether we'll be codegenerating this shader and if so do
98c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell    * that now.
99c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell    */
100c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
101c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   shader = CALLOC_STRUCT(sp_exec_fragment_shader);
102c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   if (!shader)
103c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell      return NULL;
104c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
105c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   shader->base.shader = *templ;
106c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   shader->base.prepare = exec_prepare;
107c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   shader->base.run = exec_run;
108c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   shader->base.delete = exec_delete;
109c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
110c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell   return &shader->base;
111c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell}
112c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell
113