nouveau: Add support for XvMC acceleration
[mesa.git] / src / gallium / drivers / nvfx / nvfx_state.h
index 05d41cfc8ddd702e66f6e622100c0a08b5fcfed9..15e1cbb1986703cf6202f5ca6ef76fe47b14191a 100644 (file)
@@ -2,6 +2,7 @@
 #define __NVFX_STATE_H__
 
 #include "pipe/p_state.h"
+#include "pipe/p_video_state.h"
 #include "tgsi/tgsi_scan.h"
 #include "nouveau/nouveau_statebuf.h"
 #include "util/u_dynarray.h"
@@ -17,15 +18,8 @@ struct nvfx_vertex_program_data {
 };
 
 struct nvfx_vertex_program {
-       struct pipe_shader_state pipe;
        unsigned long long id;
 
-       struct draw_vertex_shader *draw;
-
-       boolean translated;
-
-       struct pipe_clip_state ucp;
-
        struct nvfx_vertex_program_exec *insns;
        unsigned nr_insns;
        struct nvfx_vertex_program_data *consts;
@@ -42,12 +36,26 @@ struct nvfx_vertex_program {
 
        uint32_t ir;
        uint32_t or;
-       uint32_t clip_ctrl;
+       int clip_nr;
 
        struct util_dynarray branch_relocs;
        struct util_dynarray const_relocs;
 };
 
+#define NVFX_VP_FAILED ((struct nvfx_vertex_program*)-1)
+
+struct nvfx_pipe_vertex_program {
+       struct pipe_shader_state pipe;
+       struct tgsi_shader_info info;
+
+       unsigned draw_elements;
+       boolean draw_no_elements;
+       struct draw_vertex_shader *draw_vs;
+       struct nvfx_vertex_program* draw_vp;
+
+       struct nvfx_vertex_program* vp;
+};
+
 struct nvfx_fragment_program_data {
        unsigned offset;
        unsigned index;
@@ -61,13 +69,10 @@ struct nvfx_fragment_program_bo {
 };
 
 struct nvfx_fragment_program {
-       struct pipe_shader_state pipe;
-       struct tgsi_shader_info info;
-
-       boolean translated;
        unsigned samplers;
        unsigned point_sprite_control;
        unsigned or;
+       unsigned coord_conventions;
 
        uint32_t *insn;
        int       insn_len;
@@ -75,10 +80,11 @@ struct nvfx_fragment_program {
        struct nvfx_fragment_program_data *consts;
        unsigned nr_consts;
 
+       /* the slot at num_slots is for the sprite coordinate, if any */
        unsigned num_slots; /* how many input semantics? */
-       unsigned char slot_to_generic[8]; /* semantics */
-       unsigned char slot_to_fp_input[8]; /* current assignment of slots for each used semantic */
-       struct util_dynarray slot_relocations[8];
+       unsigned char slot_to_generic[10]; /* semantics */
+       unsigned char slot_to_fp_input[11]; /* current assignment of slots for each used semantic */
+       struct util_dynarray slot_relocations[11];
 
        /* This is reset to progs on any relocation update, and decreases every time we
         * move to a new prog due to a constant update
@@ -99,5 +105,11 @@ struct nvfx_fragment_program {
        struct nvfx_fragment_program_bo* fpbo;
 };
 
+struct nvfx_pipe_fragment_program {
+        struct pipe_shader_state pipe;
+        struct tgsi_shader_info info;
+
+        struct nvfx_fragment_program* fps[2];
+};
 
 #endif