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