draw_vs_variant.c revision 7c99d7fe60e7bb0b7cf103a851aeef4614278ca6
17c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell/************************************************************************** 27c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * 37c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 47c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * All Rights Reserved. 57c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * 67c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 77c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * copy of this software and associated documentation files (the 87c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * "Software"), to deal in the Software without restriction, including 97c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 107c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 117c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to 127c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * the following conditions: 137c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * 147c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * The above copyright notice and this permission notice (including the 157c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * next paragraph) shall be included in all copies or substantial portions 167c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * of the Software. 177c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * 187c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 197c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 207c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 217c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 227c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 237c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 247c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 257c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * 267c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell **************************************************************************/ 277c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 287c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell /* 297c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * Authors: 307c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * Keith Whitwell <keith@tungstengraphics.com> 317c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell */ 327c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 337c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell#include "pipe/p_util.h" 347c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell#include "draw/draw_context.h" 357c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell#include "draw/draw_private.h" 367c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell#include "draw/draw_vbuf.h" 377c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell#include "draw/draw_vertex.h" 387c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell#include "draw/draw_vs.h" 397c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell#include "translate/translate.h" 407c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell#include "translate/translate_cache.h" 417c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 427c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell/* A first pass at incorporating vertex fetch/emit functionality into 437c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell */ 447c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwellstruct draw_vs_varient_generic { 457c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell struct draw_vs_varient base; 467c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 477c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 487c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 497c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell struct draw_vertex_shader *shader; 507c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell struct draw_context *draw; 517c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 527c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell /* Basic plan is to run these two translate functions before/after 537c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * the vertex shader's existing run_linear() routine to simulate 547c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * the inclusion of this functionality into the shader... 557c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * 567c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell * Next will look at actually including it. 577c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell */ 587c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell struct translate *fetch; 597c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell struct translate *emit; 607c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 617c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell const float (*constants)[4]; 627c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell}; 637c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 647c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 657c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 667c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 677c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwellstatic void vsvg_set_constants( struct draw_vs_varient *varient, 687c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell const float (*constants)[4] ) 697c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell{ 707c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell struct draw_vs_varient_generic *vsvg = (struct draw_vs_varient_generic *)varient; 717c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 727c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->constants = constants; 737c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell} 747c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 757c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 767c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwellstatic void vsvg_set_input( struct draw_vs_varient *varient, 777c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell unsigned buffer, 787c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell const void *ptr, 797c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell unsigned stride ) 807c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell{ 817c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell struct draw_vs_varient_generic *vsvg = (struct draw_vs_varient_generic *)varient; 827c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 837c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->fetch->set_buffer(vsvg->fetch, 847c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell buffer, 857c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell ptr, 867c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell stride); 877c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell} 887c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 897c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 907c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwellstatic void vsvg_run_elts( struct draw_vs_varient *varient, 917c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell const unsigned *elts, 927c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell unsigned count, 937c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell void *output_buffer) 947c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell{ 957c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell struct draw_vs_varient_generic *vsvg = (struct draw_vs_varient_generic *)varient; 967c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 977c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell /* Want to do this in small batches for cache locality? 987c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell */ 997c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1007c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->fetch->run_elts( vsvg->fetch, 1017c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell elts, 1027c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell count, 1037c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell output_buffer ); 1047c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1057c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell //if (!vsvg->base.vs->is_passthrough) 1067c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell { 1077c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.vs->run_linear( vsvg->base.vs, 1087c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell output_buffer, 1097c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell output_buffer, 1107c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->constants, 1117c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell count, 1127c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.key.output_stride, 1137c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.key.output_stride); 1147c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1157c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell //if (!vsvg->already_in_emit_format) 1167c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1177c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->emit->set_buffer( vsvg->emit, 1187c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 0, 1197c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell output_buffer, 1207c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.key.output_stride ); 1217c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1227c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1237c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->emit->run( vsvg->emit, 1247c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 0, count, 1257c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell output_buffer ); 1267c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell } 1277c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell} 1287c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1297c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1307c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwellstatic void vsvg_run_linear( struct draw_vs_varient *varient, 1317c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell unsigned start, 1327c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell unsigned count, 1337c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell void *output_buffer ) 1347c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell{ 1357c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell struct draw_vs_varient_generic *vsvg = (struct draw_vs_varient_generic *)varient; 1367c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1377c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell //debug_printf("%s %d %d\n", __FUNCTION__, start, count); 1387c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1397c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1407c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->fetch->run( vsvg->fetch, 1417c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell start, 1427c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell count, 1437c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell output_buffer ); 1447c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1457c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell //if (!vsvg->base.vs->is_passthrough) 1467c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell { 1477c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.vs->run_linear( vsvg->base.vs, 1487c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell output_buffer, 1497c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell output_buffer, 1507c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->constants, 1517c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell count, 1527c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.key.output_stride, 1537c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.key.output_stride); 1547c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1557c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell //if (!vsvg->already_in_emit_format) 1567c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->emit->set_buffer( vsvg->emit, 1577c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 0, 1587c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell output_buffer, 1597c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.key.output_stride ); 1607c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1617c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1627c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->emit->run( vsvg->emit, 1637c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 0, count, 1647c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell output_buffer ); 1657c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell } 1667c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell} 1677c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1687c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1697c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1707c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwellstatic void vsvg_destroy( struct draw_vs_varient *varient ) 1717c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell{ 1727c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell FREE(varient); 1737c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell} 1747c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1757c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1767c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwellstruct draw_vs_varient *draw_vs_varient_generic( struct draw_vertex_shader *vs, 1777c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell const struct draw_vs_varient_key *key ) 1787c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell{ 1797c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell unsigned i; 1807c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell struct translate_key fetch, emit; 1817c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1827c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell struct draw_vs_varient_generic *vsvg = CALLOC_STRUCT( draw_vs_varient_generic ); 1837c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell if (vsvg == NULL) 1847c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell return NULL; 1857c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1867c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.key = *key; 1877c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.vs = vs; 1887c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.set_input = vsvg_set_input; 1897c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.set_constants = vsvg_set_constants; 1907c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.run_elts = vsvg_run_elts; 1917c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.run_linear = vsvg_run_linear; 1927c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->base.destroy = vsvg_destroy; 1937c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1947c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1957c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 1967c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell /* OK, have to build a new one: 1977c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell */ 1987c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell fetch.nr_elements = vs->info.num_inputs; 1997c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell fetch.output_stride = 0; 2007c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell for (i = 0; i < vs->info.num_inputs; i++) { 2017c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell fetch.element[i].input_format = key->element[i].in.format; 2027c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell fetch.element[i].input_buffer = key->element[i].in.buffer; 2037c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell fetch.element[i].input_offset = key->element[i].in.offset; 2047c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell fetch.element[i].output_format = PIPE_FORMAT_R32G32B32A32_FLOAT; 2057c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell fetch.element[i].output_offset = fetch.output_stride; 2067c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell fetch.output_stride += 4 * sizeof(float); 2077c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell } 2087c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 2097c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 2107c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell emit.nr_elements = vs->info.num_outputs; 2117c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell emit.output_stride = key->output_stride; 2127c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell for (i = 0; i < vs->info.num_outputs; i++) { 2137c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell emit.element[i].input_format = PIPE_FORMAT_R32G32B32A32_FLOAT; 2147c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell emit.element[i].input_buffer = 0; 2157c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell emit.element[i].input_offset = i * 4 * sizeof(float); 2167c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell emit.element[i].output_format = key->element[i].out.format; 2177c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell emit.element[i].output_offset = key->element[i].out.offset; 2187c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell } 2197c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 2207c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->fetch = draw_vs_get_fetch( vs->draw, &fetch ); 2217c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell vsvg->emit = draw_vs_get_emit( vs->draw, &emit ); 2227c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 2237c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell return &vsvg->base; 2247c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell} 2257c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 2267c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 2277c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 2287c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 2297c99d7fe60e7bb0b7cf103a851aeef4614278ca6Keith Whitwell 230