Re: [Mesa-dev] [PATCH 2/7] gallium: Add helper to convert PIPE blending to shader_enum style

2019-05-09 Thread Eric Anholt
Alyssa Rosenzweig  writes:

> Complementing the new API-agnostic shader_enum blending style, we add
> helpers to translate between the two forms. Ideally, we could just use
> PIPE blending directly, but that makes Vulkan support challenging.
>
> Signed-off-by: Alyssa Rosenzweig 
> Cc: Eric Anholt 
> Cc: Kenneth Graunke 

Patch 2-3 are:

Reviewed-by: Eric Anholt 


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH 2/7] gallium: Add helper to convert PIPE blending to shader_enum style

2019-05-05 Thread Alyssa Rosenzweig
Complementing the new API-agnostic shader_enum blending style, we add
helpers to translate between the two forms. Ideally, we could just use
PIPE blending directly, but that makes Vulkan support challenging.

Signed-off-by: Alyssa Rosenzweig 
Cc: Eric Anholt 
Cc: Kenneth Graunke 
---
 src/gallium/auxiliary/util/u_blend.h | 92 
 1 file changed, 92 insertions(+)

diff --git a/src/gallium/auxiliary/util/u_blend.h 
b/src/gallium/auxiliary/util/u_blend.h
index 4f969778972..ed3f7589345 100644
--- a/src/gallium/auxiliary/util/u_blend.h
+++ b/src/gallium/auxiliary/util/u_blend.h
@@ -2,6 +2,7 @@
 #define U_BLEND_H
 
 #include "pipe/p_state.h"
+#include "compiler/shader_enums.h"
 
 /**
  * When faking RGBX render target formats with RGBA ones, the blender is still
@@ -22,4 +23,95 @@ util_blend_dst_alpha_to_one(int factor)
}
 }
 
+/** To lower blending to software shaders, the Gallium blend mode has to
+ * be translated to something API-agnostic, as defined in shader_enums.h
+ * */
+
+static inline enum blend_func
+util_blend_func_to_shader(enum pipe_blend_func func)
+{
+   switch (func) {
+  case PIPE_BLEND_ADD:
+ return BLEND_FUNC_ADD;
+  case PIPE_BLEND_SUBTRACT:
+ return BLEND_FUNC_SUBTRACT;
+  case PIPE_BLEND_REVERSE_SUBTRACT:
+ return BLEND_FUNC_REVERSE_SUBTRACT;
+  case PIPE_BLEND_MIN:
+ return BLEND_FUNC_MIN;
+  case PIPE_BLEND_MAX:
+ return BLEND_FUNC_MAX;
+  default:
+ unreachable("Invalid blend function");
+   }
+}
+
+static inline enum blend_factor
+util_blend_factor_to_shader(enum pipe_blendfactor factor)
+{
+   switch (factor) {
+  case PIPE_BLENDFACTOR_ZERO:
+  case PIPE_BLENDFACTOR_ONE:
+ return BLEND_FACTOR_ZERO;
+
+  case PIPE_BLENDFACTOR_SRC_COLOR:
+  case PIPE_BLENDFACTOR_INV_SRC_COLOR:
+ return BLEND_FACTOR_SRC_COLOR;
+
+  case PIPE_BLENDFACTOR_SRC_ALPHA:
+  case PIPE_BLENDFACTOR_INV_SRC_ALPHA:
+ return BLEND_FACTOR_SRC_ALPHA;
+
+  case PIPE_BLENDFACTOR_DST_ALPHA:
+  case PIPE_BLENDFACTOR_INV_DST_ALPHA:
+ return BLEND_FACTOR_DST_ALPHA;
+
+  case PIPE_BLENDFACTOR_DST_COLOR:
+  case PIPE_BLENDFACTOR_INV_DST_COLOR:
+ return BLEND_FACTOR_DST_COLOR;
+
+  case PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE:
+ return BLEND_FACTOR_SRC_ALPHA_SATURATE;
+
+  case PIPE_BLENDFACTOR_CONST_COLOR:
+  case PIPE_BLENDFACTOR_INV_CONST_COLOR:
+ return BLEND_FACTOR_CONSTANT_COLOR;
+
+  case PIPE_BLENDFACTOR_CONST_ALPHA:
+  case PIPE_BLENDFACTOR_INV_CONST_ALPHA:
+ return BLEND_FACTOR_CONSTANT_ALPHA;
+
+  case PIPE_BLENDFACTOR_SRC1_COLOR:
+  case PIPE_BLENDFACTOR_SRC1_ALPHA:
+  case PIPE_BLENDFACTOR_INV_SRC1_COLOR:
+  case PIPE_BLENDFACTOR_INV_SRC1_ALPHA:
+ /* unimplemented */
+ assert(0);
+ return BLEND_FACTOR_ZERO;
+
+  default:
+ unreachable("Invalid factor");
+   }
+}
+
+static inline bool
+util_blend_factor_is_inverted(enum pipe_blendfactor factor)
+{
+   switch (factor) {
+  case PIPE_BLENDFACTOR_ONE:
+  case PIPE_BLENDFACTOR_INV_SRC_COLOR:
+  case PIPE_BLENDFACTOR_INV_SRC_ALPHA:
+  case PIPE_BLENDFACTOR_INV_DST_ALPHA:
+  case PIPE_BLENDFACTOR_INV_DST_COLOR:
+  case PIPE_BLENDFACTOR_INV_CONST_COLOR:
+  case PIPE_BLENDFACTOR_INV_CONST_ALPHA:
+  case PIPE_BLENDFACTOR_INV_SRC1_COLOR:
+  case PIPE_BLENDFACTOR_INV_SRC1_ALPHA:
+ return true;
+
+  default:
+ return false;
+   }
+}
+
 #endif /* U_BLEND_H */
-- 
2.20.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev