panfrost: Separate postfix from emits
[mesa.git] / src / gallium / drivers / panfrost / pan_blend.h
index a29353ff0014e1159254d2bb59647fdf8b3791cf..df1227bfd01b50cf8329f72469e3014ae319e792 100644 (file)
@@ -55,8 +55,8 @@ struct panfrost_blend_shader {
 /* A blend shader descriptor ready for actual use */
 
 struct panfrost_blend_shader_final {
-        /* The compiled shader in GPU memory, possibly patched */
-        struct panfrost_bo *bo;
+        /* GPU address where we're compiled to */
+        uint64_t gpu;
 
         /* First instruction tag (for tagging the pointer) */
         unsigned first_tag;
@@ -66,7 +66,7 @@ struct panfrost_blend_shader_final {
 };
 
 struct panfrost_blend_equation_final {
-        struct mali_blend_equation *equation;
+        struct mali_blend_equation_packed equation;
         float constant;
 };
 
@@ -75,11 +75,14 @@ struct panfrost_blend_rt {
          * fixed-function configuration for this blend state */
 
         bool has_fixed_function;
-        struct mali_blend_equation equation;
+        struct mali_blend_equation_packed equation;
 
         /* Mask of blend color components read */
         unsigned constant_mask;
 
+        /* Properties of the blend mode */
+        bool opaque, load_dest, no_colour;
+
         /* Regardless of fixed-function blending, this is a map of pipe_format
          * to panfrost_blend_shader */
 
@@ -99,6 +102,15 @@ struct panfrost_blend_final {
         /* Set for a shader, clear for an equation */
         bool is_shader;
 
+        /* Set if this is the replace mode */
+        bool opaque;
+
+        /* Set if destination is loaded */
+        bool load_dest;
+
+        /* Set if the colour mask is 0x0 (nothing is written) */
+        bool no_colour;
+
         union {
                 struct panfrost_blend_shader_final shader;
                 struct panfrost_blend_equation_final equation;
@@ -111,4 +123,11 @@ panfrost_blend_context_init(struct pipe_context *pipe);
 struct panfrost_blend_final
 panfrost_get_blend_for_context(struct panfrost_context *ctx, unsigned rt);
 
+struct panfrost_blend_shader *
+panfrost_get_blend_shader(
+        struct panfrost_context *ctx,
+        struct panfrost_blend_state *blend,
+        enum pipe_format fmt,
+        unsigned rt);
+
 #endif