summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/vega/shader.c
diff options
context:
space:
mode:
authorChia-I Wu <[email protected]>2010-12-03 00:44:43 +0800
committerChia-I Wu <[email protected]>2010-12-03 14:23:04 +0800
commita84a1e344f544ec4da61809d4f09853a94d93e07 (patch)
treed1d141510e4a3b64c58e7596b2127749b320a067 /src/gallium/state_trackers/vega/shader.c
parent29bea39fde0b3be89a34bf0d979f33f601412eee (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.c11
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)