/* An internal blend shader descriptor, from the compiler */
struct panfrost_blend_shader {
- /* The compiled shader in GPU memory */
- struct panfrost_transfer shader;
+ struct panfrost_context *ctx;
+
+ /* The compiled shader */
+ void *buffer;
/* Byte count of the shader */
unsigned size;
/* A blend shader descriptor ready for actual use */
struct panfrost_blend_shader_final {
- /* The upload, possibly to transient memory */
- mali_ptr gpu;
+ /* GPU address where we're compiled to */
+ uint64_t gpu;
+
+ /* First instruction tag (for tagging the pointer) */
+ unsigned first_tag;
/* Same meaning as panfrost_blend_shader */
unsigned work_count;
};
struct panfrost_blend_equation_final {
- struct mali_blend_equation *equation;
+ struct mali_blend_equation_packed equation;
float constant;
};
* 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 */
/* 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;
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