#ifndef vl_idct_h
#define vl_idct_h
-#include <pipe/p_state.h>
+#include "pipe/p_state.h"
+
+#include "tgsi/tgsi_ureg.h"
/* shader based inverse distinct cosinus transformation
* expect usage of vl_vertex_buffers as a todo list
unsigned buffer_width;
unsigned buffer_height;
- unsigned blocks_x, blocks_y;
+ unsigned nr_of_render_targets;
void *rs_state;
+ void *blend;
void *samplers[2];
- void *matrix_vs, *transpose_vs;
- void *matrix_fs, *transpose_fs;
+ void *vs_mismatch, *fs_mismatch;
+ void *vs, *fs;
struct pipe_sampler_view *matrix;
+ struct pipe_sampler_view *transpose;
};
/* a set of buffers to work with */
struct vl_idct_buffer
{
- struct pipe_viewport_state viewport[2];
- struct pipe_framebuffer_state fb_state[2];
+ struct pipe_viewport_state viewport_mismatch;
+ struct pipe_viewport_state viewport;
+
+ struct pipe_framebuffer_state fb_state_mismatch;
+ struct pipe_framebuffer_state fb_state;
union
{
struct pipe_sampler_view *all[4];
struct pipe_sampler_view *stage[2][2];
struct {
- struct pipe_sampler_view *matrix, *source;
- struct pipe_sampler_view *transpose, *intermediate;
+ struct pipe_sampler_view *source, *matrix;
+ struct pipe_sampler_view *intermediate, *transpose;
} individual;
} sampler_views;
};
/* upload the idct matrix, which can be shared by all idct instances of a pipe */
-struct pipe_sampler_view *vl_idct_upload_matrix(struct pipe_context *pipe, float scale);
+struct pipe_sampler_view *
+vl_idct_upload_matrix(struct pipe_context *pipe, float scale);
+
+void
+vl_idct_stage2_vert_shader(struct vl_idct *idct, struct ureg_program *shader,
+ unsigned first_output, struct ureg_dst tex);
+
+void
+vl_idct_stage2_frag_shader(struct vl_idct *idct, struct ureg_program *shader,
+ unsigned first_input, struct ureg_dst fragment);
/* init an idct instance */
-bool vl_idct_init(struct vl_idct *idct, struct pipe_context *pipe,
- unsigned buffer_width, unsigned buffer_height,
- unsigned blocks_x, unsigned blocks_y,
- struct pipe_sampler_view *matrix);
+bool
+vl_idct_init(struct vl_idct *idct, struct pipe_context *pipe,
+ unsigned buffer_width, unsigned buffer_height,
+ unsigned nr_of_render_targets,
+ struct pipe_sampler_view *matrix,
+ struct pipe_sampler_view *transpose);
/* destroy an idct instance */
-void vl_idct_cleanup(struct vl_idct *idct);
+void
+vl_idct_cleanup(struct vl_idct *idct);
/* init a buffer assosiated with agiven idct instance */
-bool vl_idct_init_buffer(struct vl_idct *idct, struct vl_idct_buffer *buffer,
- struct pipe_sampler_view *source,
- struct pipe_sampler_view *intermediate,
- struct pipe_surface *destination);
+bool
+vl_idct_init_buffer(struct vl_idct *idct, struct vl_idct_buffer *buffer,
+ struct pipe_sampler_view *source,
+ struct pipe_sampler_view *intermediate);
/* cleanup a buffer of an idct instance */
-void vl_idct_cleanup_buffer(struct vl_idct *idct, struct vl_idct_buffer *buffer);
+void
+vl_idct_cleanup_buffer(struct vl_idct_buffer *buffer);
/* flush the buffer and start rendering, vertex buffers needs to be setup before calling this */
-void vl_idct_flush(struct vl_idct *idct, struct vl_idct_buffer *buffer, unsigned num_verts);
+void
+vl_idct_flush(struct vl_idct *idct, struct vl_idct_buffer *buffer, unsigned num_verts);
+
+void
+vl_idct_prepare_stage2(struct vl_idct *idct, struct vl_idct_buffer *buffer);
#endif