/
redgpu
/
ispc
Обзор
Документация
Войти
/
redgpu
/
ispc
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
tests/func-tests/operators4.ispc
97 строк
2 KB
Arina Neshlyaeva
Extend binary operators support
09 июн 2025, 21:14
09 июн 2025, 21:14
fdf117c
Код
Авторство
О чём код?
#include "test_static.isph" struct S { uint a; }; struct S operator&(struct S rr, struct S rv) { struct S c; c.a = rr.a & rv.a; return c; } struct S operator|(struct S rr, struct S rv) { struct S c; c.a = rr.a | rv.a; return c; } struct S operator&&(struct S rr, struct S rv) { struct S c; c.a = rr.a && rv.a; return c; } struct S operator||(struct S rr, struct S rv) { struct S c; c.a = rr.a || rv.a; return c; } struct S operator^(struct S rr, struct S rv) { struct S c; c.a = rr.a ^ rv.a; return c; } struct S operator&(struct S &rr, struct S rv) { struct S c; c.a = (rr.a & rv.a) + 1; // Add 1 to distinguish reference version return c; } struct S operator|(struct S rr, struct S &rv) { struct S c; c.a = (rr.a | rv.a) + 1; // Add 1 to distinguish reference version return c; } struct S operator&&(struct S &rr, struct S &rv) { struct S c; c.a = (uint)(rr.a && rv.a) + 1; // Add 1 to distinguish reference version return c; } struct S operator||(struct S &rr, struct S &rv) { struct S c; c.a = (uint)(rr.a || rv.a) + 1; // Add 1 to distinguish reference version return c; } struct S operator^(struct S &rr, struct S &rv) { struct S c; c.a = (rr.a ^ rv.a) + 1; // Add 1 to distinguish reference version return c; } task void f_f(uniform float RET[], uniform float aFOO[]) { struct S a; struct S b; struct S c; a.a = aFOO[programIndex]; b.a = aFOO[programIndex] + 1; c.a = aFOO[programIndex] + 2; struct S d; if (programIndex < 3) d = (a && b) & b | c ^ a; else d = a || b; RET[programIndex] = reduce_add(d.a); // Create references struct S &refA = a; struct S &refB = b; struct S &refC = c; if (programIndex < 3) d = (refA && refB) & b | refC ^ refA; // Mix of references and values else d = refA || refB; RET[programIndex] += reduce_add(d.a); } task void result(uniform float RET[16]) { RET[programIndex] = 23 + programCount*3; }