diff options
author | Chia-I Wu <[email protected]> | 2010-12-03 00:44:43 +0800 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2010-12-03 14:23:04 +0800 |
commit | a84a1e344f544ec4da61809d4f09853a94d93e07 (patch) | |
tree | d1d141510e4a3b64c58e7596b2127749b320a067 /src/gallium/state_trackers/vega/shader.c | |
parent | 29bea39fde0b3be89a34bf0d979f33f601412eee (diff) |
st/vega: Move vertex transformation to shader.
It was done in path-to-polygon conversion. That meant that the
results were invalidated when the transformation was modified, and CPU
had to recreate the vertex buffer with new vertices. It could be a
performance hit for apps that animate.
Diffstat (limited to 'src/gallium/state_trackers/vega/shader.c')
-rw-r--r-- | src/gallium/state_trackers/vega/shader.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/vega/shader.c b/src/gallium/state_trackers/vega/shader.c index 3d397f9ed4c..db410e3dadb 100644 --- a/src/gallium/state_trackers/vega/shader.c +++ b/src/gallium/state_trackers/vega/shader.c @@ -50,6 +50,7 @@ struct shader { struct vg_paint *paint; struct vg_image *image; + struct matrix modelview; struct matrix paint_matrix; VGboolean drawing_image; @@ -299,6 +300,7 @@ void shader_bind(struct shader *shader) renderer_validate_for_shader(ctx->renderer, (const struct pipe_sampler_state **) samplers, sampler_views, num_samplers, + &shader->modelview, shader->fs, (const void *) shader->constants, param_bytes); } @@ -328,6 +330,15 @@ void shader_set_image(struct shader *shader, struct vg_image *img) } /** + * Set the transformation to map a vertex to the surface coordinates. + */ +void shader_set_surface_matrix(struct shader *shader, + const struct matrix *mat) +{ + shader->modelview = *mat; +} + +/** * Set the transformation to map a pixel to the paint coordinates. */ void shader_set_paint_matrix(struct shader *shader, const struct matrix *mat) |