diff options
author | Bin Jin <bjin@ctrl-d.org> | 2019-03-07 15:06:24 +0000 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2019-03-09 12:56:11 +0100 |
commit | 1d0349d3b5d9a263251fcb3b0d7e135d4731bfd0 (patch) | |
tree | 92614a4e6d04276d8a543e178376854da8b3af66 /video | |
parent | b3cbd4650984902548432f15be9f267f9cb2230e (diff) | |
download | mpv-1d0349d3b5d9a263251fcb3b0d7e135d4731bfd0.tar.bz2 mpv-1d0349d3b5d9a263251fcb3b0d7e135d4731bfd0.tar.xz |
vo_gpu: add two useful operators to user shader
modulo operator could be used to check if size is multiple of a
certain number.
equal operator could be used to verify if size of different textures
aligns.
Diffstat (limited to 'video')
-rw-r--r-- | video/out/gpu/user_shaders.c | 5 | ||||
-rw-r--r-- | video/out/gpu/user_shaders.h | 2 |
2 files changed, 7 insertions, 0 deletions
diff --git a/video/out/gpu/user_shaders.c b/video/out/gpu/user_shaders.c index 446941b03f..0613eb93f6 100644 --- a/video/out/gpu/user_shaders.c +++ b/video/out/gpu/user_shaders.c @@ -16,6 +16,7 @@ */ #include <assert.h> +#include <math.h> #include "common/msg.h" #include "misc/ctype.h" @@ -52,9 +53,11 @@ static bool parse_rpn_szexpr(struct bstr line, struct szexp out[MAX_SZEXP_SIZE]) case '-': exp->tag = SZEXP_OP2; exp->val.op = SZEXP_OP_SUB; continue; case '*': exp->tag = SZEXP_OP2; exp->val.op = SZEXP_OP_MUL; continue; case '/': exp->tag = SZEXP_OP2; exp->val.op = SZEXP_OP_DIV; continue; + case '%': exp->tag = SZEXP_OP2; exp->val.op = SZEXP_OP_MOD; continue; case '!': exp->tag = SZEXP_OP1; exp->val.op = SZEXP_OP_NOT; continue; case '>': exp->tag = SZEXP_OP2; exp->val.op = SZEXP_OP_GT; continue; case '<': exp->tag = SZEXP_OP2; exp->val.op = SZEXP_OP_LT; continue; + case '=': exp->tag = SZEXP_OP2; exp->val.op = SZEXP_OP_EQ; continue; } if (mp_isdigit(word.start[0])) { @@ -118,8 +121,10 @@ bool eval_szexpr(struct mp_log *log, void *priv, case SZEXP_OP_SUB: res = op1 - op2; break; case SZEXP_OP_MUL: res = op1 * op2; break; case SZEXP_OP_DIV: res = op1 / op2; break; + case SZEXP_OP_MOD: res = fmodf(op1, op2); break; case SZEXP_OP_GT: res = op1 > op2; break; case SZEXP_OP_LT: res = op1 < op2; break; + case SZEXP_OP_EQ: res = op1 == op2; break; default: abort(); } diff --git a/video/out/gpu/user_shaders.h b/video/out/gpu/user_shaders.h index 8d8cc6bde0..a477e3ce3d 100644 --- a/video/out/gpu/user_shaders.h +++ b/video/out/gpu/user_shaders.h @@ -30,9 +30,11 @@ enum szexp_op { SZEXP_OP_SUB, SZEXP_OP_MUL, SZEXP_OP_DIV, + SZEXP_OP_MOD, SZEXP_OP_NOT, SZEXP_OP_GT, SZEXP_OP_LT, + SZEXP_OP_EQ, }; enum szexp_tag { |