tgsi: refactor tgsi_opcode_infer_dst_type()
[mesa.git] / src / gallium / auxiliary / vl / vl_idct.h
index 5d3784ce6c0ff69d6a700ae92be106cf37b73891..575a6206742287242634628170208790be7caa87 100644 (file)
@@ -28,7 +28,9 @@
 #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
@@ -39,55 +41,79 @@ struct vl_idct
 
    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_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