freedreno/a3xx/compiler: refactor trans_samp()
[mesa.git] / src / gallium / drivers / freedreno / freedreno_lowering.h
index 60191d08497949907fe4ff91014ac2740946a2e0..2d36d8faf8177329e4f071adf739c346d79e702f 100644 (file)
 #define FREEDRENO_LOWERING_H_
 
 #include "pipe/p_shader_tokens.h"
+#include "tgsi/tgsi_scan.h"
 
-const struct tgsi_token * fd_transform_lowering(const struct tgsi_token *tokens);
+struct fd_lowering_config {
+       /* For fragment shaders, generate a shader that emulates two
+        * sided color by inserting a BGCOLOR input for each COLOR
+        * input, and insert a CMP instruction to select the correct
+        * color to use based on the TGSI_SEMANTIC_FACE input.
+        *
+        * Note that drivers which use this to emulate two sided color
+        * will:
+        *  a) need to generate (on demand) alternate shaders to use
+        *     depending on the rasterizer state (ie. whether two
+        *     sided shading enabled)
+        *  b) expect to see the BGCOLOR semantic name in fragment
+        *     shaders.  During linkage, the driver should simply
+        *     map VS.OUT.BGCOLOR[n] to FS.IN.BGCOLOR[n] (in the
+        *     same was as linking other outs/ins).
+        */
+       unsigned color_two_side : 1;
+
+       /* TODO support for alpha_to_one as well?? */
+
+       /* Individual OPC lowerings, if lower_<opc> is TRUE then
+        * enable lowering of TGSI_OPCODE_<opc>
+        */
+       unsigned lower_DST : 1;
+       unsigned lower_XPD : 1;
+       unsigned lower_SCS : 1;
+       unsigned lower_LRP : 1;
+       unsigned lower_FRC : 1;
+       unsigned lower_POW : 1;
+       unsigned lower_LIT : 1;
+       unsigned lower_EXP : 1;
+       unsigned lower_LOG : 1;
+       unsigned lower_DP4 : 1;
+       unsigned lower_DP3 : 1;
+       unsigned lower_DPH : 1;
+       unsigned lower_DP2 : 1;
+       unsigned lower_DP2A : 1;
+};
+
+const struct tgsi_token * fd_transform_lowering(
+               const struct fd_lowering_config *config,
+               const struct tgsi_token *tokens,
+               struct tgsi_shader_info *info);
 
 #endif /* FREEDRENO_LOWERING_H_ */