llvmpipe: add framebuffer fetching support (v1.1)
[mesa.git] / src / gallium / auxiliary / gallivm / lp_bld_tgsi.h
index 380579c3f70f44be02c2fe63a894e990b0ec4dca..856cea40c55ebd600deb4a1e2835af2af642c1c4 100644 (file)
@@ -183,6 +183,9 @@ struct lp_bld_tgsi_system_values {
    LLVMValueRef tess_outer;
    LLVMValueRef tess_inner;
    LLVMValueRef vertices_in;
+   LLVMValueRef sample_id;
+   LLVMValueRef sample_pos;
+   LLVMValueRef sample_mask_in;
 };
 
 
@@ -241,6 +244,20 @@ struct lp_build_image_soa
                        const struct lp_sampler_size_query_params *params);
 };
 
+struct lp_build_fs_iface;
+struct lp_build_fs_iface {
+   LLVMValueRef (*interp_fn)(const struct lp_build_fs_iface *iface,
+                             struct lp_build_context *bld,
+                             unsigned attrib, unsigned chan,
+                             bool centroid, bool sample,
+                             LLVMValueRef indir_index, LLVMValueRef offsets[2]);
+
+   void (*fb_fetch)(const struct lp_build_fs_iface *iface,
+                    struct lp_build_context *bld,
+                    unsigned cbuf,
+                    LLVMValueRef result[4]);
+};
+
 void
 lp_build_tgsi_info(const struct tgsi_token *tokens,
                    struct lp_tgsi_info *info);
@@ -266,6 +283,8 @@ struct lp_build_tgsi_params {
    LLVMValueRef shared_ptr;
    const struct lp_build_coro_suspend_info *coro;
    LLVMValueRef kernel_args;
+   const struct lp_build_fs_iface *fs_iface;
+   unsigned gs_vertex_streams;
 };
 
 void
@@ -415,13 +434,13 @@ struct lp_build_gs_iface
                        struct lp_build_context * bld,
                        LLVMValueRef (*outputs)[4],
                        LLVMValueRef emitted_vertices_vec,
-                       LLVMValueRef stream_id);
+                       LLVMValueRef mask_vec, LLVMValueRef stream_id);
    void (*end_primitive)(const struct lp_build_gs_iface *gs_iface,
                          struct lp_build_context * bld,
                          LLVMValueRef total_emitted_vertices_vec,
                          LLVMValueRef verts_per_prim_vec,
                          LLVMValueRef emitted_prims_vec,
-                         LLVMValueRef mask_vec);
+                         LLVMValueRef mask_vec, unsigned stream);
    void (*gs_epilogue)(const struct lp_build_gs_iface *gs_iface,
                        LLVMValueRef total_emitted_vertices_vec,
                        LLVMValueRef emitted_prims_vec, unsigned stream);
@@ -441,7 +460,8 @@ struct lp_build_tcs_iface
                              boolean is_aindex_indirect,
                              LLVMValueRef attrib_index,
                              LLVMValueRef swizzle_index,
-                             LLVMValueRef value);
+                             LLVMValueRef value,
+                             LLVMValueRef mask_vec);
 
    LLVMValueRef (*emit_fetch_input)(const struct lp_build_tcs_iface *tcs_iface,
                                     struct lp_build_context * bld,