Thanks for looking at these. Yes, I agree that they would be easier to understand with separate output buffers... I started these long enough ago that I don't remember why I did it this way, but am just left with the impression that I thought I had a good reason at the time.
I want to get these in for now, and if we want, I can refactor them to split up the output arrays. The important bit is to make sure to avoid barriers if at all possible, since r600g/radeonsi + clover doesn't yet have working global barriers (at least last I checked). --Aaron On Fri, Oct 24, 2014 at 11:08 AM, Jan Vesely <[email protected]> wrote: > On Fri, 2014-10-24 at 07:55 -0500, Aaron Watry wrote: >> Tests both usage of return value and no-return-usage variants. >> >> Signed-off-by: Aaron Watry <[email protected]> > > I think it would be easier to read/understand if the return variants > used separate output buffer for the return values instead of offset > magic. > > either way, for the series > Reviewed-by: Jan Vesely <[email protected]> > >> --- >> .../builtin/atomic/atomic_sub-global-return.cl | 62 >> ++++++++++++++++++++++ >> .../execute/builtin/atomic/atomic_sub-global.cl | 59 ++++++++++++++++++++ >> 2 files changed, 121 insertions(+) >> create mode 100644 >> tests/cl/program/execute/builtin/atomic/atomic_sub-global-return.cl >> create mode 100644 >> tests/cl/program/execute/builtin/atomic/atomic_sub-global.cl >> >> diff --git >> a/tests/cl/program/execute/builtin/atomic/atomic_sub-global-return.cl >> b/tests/cl/program/execute/builtin/atomic/atomic_sub-global-return.cl >> new file mode 100644 >> index 0000000..8d826be >> --- /dev/null >> +++ b/tests/cl/program/execute/builtin/atomic/atomic_sub-global-return.cl >> @@ -0,0 +1,62 @@ >> +/*! >> +[config] >> +name: atomic_sub global, with usage of return variable >> +clc_version_min: 11 >> + >> +[test] >> +name: simple int >> +kernel_name: simple_int >> +dimensions: 1 >> +global_size: 1 0 0 >> +local_size: 1 0 0 >> +arg_out: 0 buffer int[2] -6 -4 >> +arg_in: 0 buffer int[2] -4 0 >> + >> +[test] >> +name: simple uint >> +kernel_name: simple_uint >> +dimensions: 1 >> +global_size: 1 0 0 >> +local_size: 1 0 0 >> +arg_out: 0 buffer uint[2] 1 3 >> +arg_in: 0 buffer uint[2] 3 0 >> + >> +[test] >> +name: threads int >> +kernel_name: threads_int >> +dimensions: 1 >> +global_size: 8 0 0 >> +local_size: 8 0 0 >> +arg_out: 0 buffer int[18] 0 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 >> +arg_in: 0 buffer int[18] 28 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 >> + >> +[test] >> +name: threads uint >> +kernel_name: threads_uint >> +dimensions: 1 >> +global_size: 8 0 0 >> +local_size: 8 0 0 >> +arg_out: 0 buffer uint[18] 0 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 >> +arg_in: 0 buffer uint[18] 28 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 >> + >> +!*/ >> + >> +#define SIMPLE_TEST(TYPE) \ >> +kernel void simple_##TYPE(global TYPE *mem) { \ >> + mem[1] = atomic_sub(mem, 2); \ >> +} >> + >> +#define THREADS_TEST(TYPE) \ >> +kernel void threads_##TYPE(global TYPE *mem) { \ >> + TYPE mul = mem[1]; \ >> + TYPE id = get_global_id(0); \ >> + TYPE ret = atomic_sub(mem, id); \ >> + TYPE ret2 = atomic_sub(&mem[(id+1)*2], id+ret*mul); \ >> + mem[(id+1)*2+1] = ret2; \ >> +} >> + >> +SIMPLE_TEST(int) >> +SIMPLE_TEST(uint) >> + >> +THREADS_TEST(int) >> +THREADS_TEST(uint) >> diff --git a/tests/cl/program/execute/builtin/atomic/atomic_sub-global.cl >> b/tests/cl/program/execute/builtin/atomic/atomic_sub-global.cl >> new file mode 100644 >> index 0000000..a3dca39 >> --- /dev/null >> +++ b/tests/cl/program/execute/builtin/atomic/atomic_sub-global.cl >> @@ -0,0 +1,59 @@ >> +/*! >> +[config] >> +name: atomic_sub global, no usage of return variable >> +clc_version_min: 11 >> + >> +[test] >> +name: simple int >> +kernel_name: simple_int >> +dimensions: 1 >> +global_size: 1 0 0 >> +local_size: 1 0 0 >> +arg_out: 0 buffer int[1] -6 >> +arg_in: 0 buffer int[1] -4 >> + >> +[test] >> +name: simple uint >> +kernel_name: simple_uint >> +dimensions: 1 >> +global_size: 1 0 0 >> +local_size: 1 0 0 >> +arg_out: 0 buffer uint[1] 1 >> +arg_in: 0 buffer uint[1] 3 >> + >> +[test] >> +name: threads int >> +kernel_name: threads_int >> +dimensions: 1 >> +global_size: 8 0 0 >> +local_size: 8 0 0 >> +arg_out: 0 buffer int[1] 0 >> +arg_in: 0 buffer int[1] 28 >> + >> +[test] >> +name: threads uint >> +kernel_name: threads_uint >> +dimensions: 1 >> +global_size: 8 0 0 >> +local_size: 8 0 0 >> +arg_out: 0 buffer uint[1] 0 >> +arg_in: 0 buffer uint[1] 28 >> + >> +!*/ >> + >> +#define SIMPLE_TEST(TYPE) \ >> +kernel void simple_##TYPE(global TYPE *mem) { \ >> + atomic_sub(mem, 2); \ >> +} >> + >> +#define THREADS_TEST(TYPE) \ >> +kernel void threads_##TYPE(global TYPE *mem) { \ >> + TYPE id = get_global_id(0); \ >> + atomic_sub(mem, id); \ >> +} >> + >> +SIMPLE_TEST(int) >> +SIMPLE_TEST(uint) >> + >> +THREADS_TEST(int) >> +THREADS_TEST(uint) > > -- > Jan Vesely <[email protected]> _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
