[Piglit] [PATCH] textureGather: add textureGatherOffsets to execution test (v2.1)
Chris Forbes
chrisf at ijw.co.nz
Mon Feb 10 00:00:37 PST 2014
This test is getting pretty crazy.
It would be nice to get rid of all the shadow_compare(norm_value(..
duplication. Either way,
Reviewed-by: Chris Forbes <chrisf at ijw.co.nz>
On Mon, Feb 10, 2014 at 3:37 PM, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> Test for checking textureGatherOffsets from ARB_gpu_shader5 works, this
> is tested on the nvidia binary driver and passes.
>
> also add to all.py.
>
> v2.1 fix VS bits + whitespace
>
> Cc: Chris Forbes <chrisf at ijw.co.nz>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> tests/all.py | 8 ++--
> tests/texturing/shaders/textureGather.c | 73 ++++++++++++++++++++++++---------
> 2 files changed, 58 insertions(+), 23 deletions(-)
>
> diff --git a/tests/all.py b/tests/all.py
> index 68186d1..ba34543 100644
> --- a/tests/all.py
> +++ b/tests/all.py
> @@ -1694,7 +1694,7 @@ for stage in ['vs', 'fs']:
> for comps in ['r', 'rg', 'rgb', 'rgba']:
> for cs in [0, 1, 2, 3][:len(comps)]:
> for sampler in ['2D', '2DArray', 'Cube', 'CubeArray', '2DRect']:
> - for func in ['textureGather'] if 'Cube' in sampler else ['textureGather', 'textureGatherOffset']:
> + for func in ['textureGather'] if 'Cube' in sampler else ['textureGather', 'textureGatherOffset', 'textureGatherOffsets' ]:
> testname = '%s/%s-%s-%s-%s-%s' % (
> func, stage, comps,
> cs,
> @@ -1702,7 +1702,7 @@ for stage in ['vs', 'fs']:
> address_mode = 'clamp' if sampler == '2DRect' else 'repeat'
> cmd = 'textureGather %s %s %s %s %s %s %s' % (
> stage,
> - 'nonconst' if func == 'textureGatherOffset' else '',
> + 'offsets' if func == 'textureGatherOffsets' else 'nonconst' if func == 'textureGatherOffset' else '',
> comps, cs, type, sampler, address_mode
> )
> arb_gpu_shader5[testname] = concurrent_test(cmd)
> @@ -1721,12 +1721,12 @@ for stage in ['vs', 'fs']:
> arb_gpu_shader5[testname] = concurrent_test(cmd)
> # test shadow samplers
> for sampler in ['2D', '2DArray', 'Cube', 'CubeArray', '2DRect']:
> - for func in ['textureGather'] if 'Cube' in sampler else ['textureGather', 'textureGatherOffset']:
> + for func in ['textureGather'] if 'Cube' in sampler else ['textureGather', 'textureGatherOffset', 'textureGatherOffsets' ]:
> testname = '%s/%s-r-none-shadow-%s' % (func, stage, sampler)
> address_mode = 'clamp' if sampler == '2DRect' else 'repeat'
> cmd = 'textureGather %s shadow r %s %s %s' % (
> stage,
> - 'nonconst' if func == 'textureGatherOffset' else '',
> + 'offsets' if func == 'textureGatherOffsets' else 'nonconst' if func == 'textureGatherOffset' else '',
> sampler,
> address_mode)
> arb_gpu_shader5[testname] = concurrent_test(cmd)
> diff --git a/tests/texturing/shaders/textureGather.c b/tests/texturing/shaders/textureGather.c
> index df8781a..d10ada5 100644
> --- a/tests/texturing/shaders/textureGather.c
> +++ b/tests/texturing/shaders/textureGather.c
> @@ -18,6 +18,7 @@ enum { UNORM_T, FLOAT_T, INT_T, UINT_T, SHADOW_T, NUM_COMPTYPES } comptype = UNO
> enum { SAMPLER_2D, SAMPLER_2DARRAY, SAMPLER_CUBE, SAMPLER_CUBEARRAY, SAMPLER_2DRECT } sampler = SAMPLER_2D;
> bool use_offset = false;
> bool use_nonconst = false;
> +bool use_offsets = false;
> int components = 0;
> int comp_select = -1;
>
> @@ -84,7 +85,7 @@ piglit_display(void)
> */
>
> static unsigned char
> -pixel_value(int i, int j)
> +pixel_value(int i, int j, int offset_sel)
> {
> if (swizzle == ZERO)
> return 0;
> @@ -95,6 +96,25 @@ pixel_value(int i, int j)
> /* apply texel offset */
> i += -8;
> j += 7;
> + } else if (use_offsets) {
> + switch (offset_sel) {
> + case 0:
> + i += -8;
> + j += 7;
> + break;
> + case 1:
> + i += 7;
> + j += -8;
> + break;
> + case 2:
> + i += 3;
> + j += 3;
> + break;
> + case 3:
> + i += -3;
> + j += -3;
> + break;
> + }
> }
>
> if (address_mode == GL_REPEAT) {
> @@ -146,16 +166,30 @@ make_expected(void)
> for (j = 0; j < TEXTURE_HEIGHT; j++)
> for (i = 0; i < TEXTURE_WIDTH; i++) {
> if (comptype == SHADOW_T) {
> - *pe++ = shadow_compare(norm_value(pixel_value(i, j + 1)));
> - *pe++ = shadow_compare(norm_value(pixel_value(i + 1, j + 1)));
> - *pe++ = shadow_compare(norm_value(pixel_value(i + 1, j)));
> - *pe++ = shadow_compare(norm_value(pixel_value(i, j)));
> + if (use_offsets) {
> + *pe++ = shadow_compare(norm_value(pixel_value(i, j, 0)));
> + *pe++ = shadow_compare(norm_value(pixel_value(i, j, 1)));
> + *pe++ = shadow_compare(norm_value(pixel_value(i, j, 2)));
> + *pe++ = shadow_compare(norm_value(pixel_value(i, j, 3)));
> + } else {
> + *pe++ = shadow_compare(norm_value(pixel_value(i, j + 1, 0)));
> + *pe++ = shadow_compare(norm_value(pixel_value(i + 1, j + 1, 0)));
> + *pe++ = shadow_compare(norm_value(pixel_value(i + 1, j, 0)));
> + *pe++ = shadow_compare(norm_value(pixel_value(i, j, 0)));
> + }
> }
> else {
> - *pe++ = norm_value(pixel_value(i, j + 1));
> - *pe++ = norm_value(pixel_value(i + 1, j + 1));
> - *pe++ = norm_value(pixel_value(i + 1, j));
> - *pe++ = norm_value(pixel_value(i, j));
> + if (use_offsets) {
> + *pe++ = norm_value(pixel_value(i, j, 0));
> + *pe++ = norm_value(pixel_value(i, j, 1));
> + *pe++ = norm_value(pixel_value(i, j, 2));
> + *pe++ = norm_value(pixel_value(i, j, 3));
> + } else {
> + *pe++ = norm_value(pixel_value(i, j + 1, 0));
> + *pe++ = norm_value(pixel_value(i + 1, j + 1, 0));
> + *pe++ = norm_value(pixel_value(i + 1, j, 0));
> + *pe++ = norm_value(pixel_value(i, j, 0));
> + }
> }
> }
> }
> @@ -212,7 +246,7 @@ do_requires(void)
> if (sampler == SAMPLER_CUBEARRAY)
> piglit_require_extension("GL_ARB_texture_cube_map_array");
>
> - if (use_offset && (sampler == SAMPLER_CUBE || sampler == SAMPLER_CUBEARRAY)) {
> + if ((use_offsets || use_offset) && (sampler == SAMPLER_CUBE || sampler == SAMPLER_CUBEARRAY)) {
> printf("Offset is not supported with cube or cube array samplers.\n");
> piglit_report_result(PIGLIT_SKIP);
> }
> @@ -231,7 +265,7 @@ do_requires(void)
> * or use non-constant offsets, or use shadow comparitor, or
> * use gsampler2DRect, check that we have ARB_gpu_shader5
> */
> - if (comp_select != -1 || use_nonconst || comptype == SHADOW_T || sampler == SAMPLER_2DRECT)
> + if (comp_select != -1 || use_offsets || use_nonconst || comptype == SHADOW_T || sampler == SAMPLER_2DRECT)
> piglit_require_extension("GL_ARB_gpu_shader5");
>
> /* if rect sampler, repeat is not available */
> @@ -364,7 +398,7 @@ do_shader_setup(void)
> "gl_FragCoord.xy", /* 2drect */
> };
> char *comp_expr[] = {"", ", 0", ", 1", ", 2", ", 3"};
> - bool need_shader5 = (comp_select != -1) || use_nonconst || (comptype == SHADOW_T) || sampler == SAMPLER_2DRECT;
> + bool need_shader5 = (comp_select != -1) || use_offsets || use_nonconst || (comptype == SHADOW_T) || sampler == SAMPLER_2DRECT;
>
> if (stage == VS) {
> asprintf(&vs_code, "#version %s\n"
> @@ -388,12 +422,12 @@ do_shader_setup(void)
> prefix[comptype],
> samplersuffix[sampler],
> comptype == SHADOW_T ? "Shadow" : "",
> - use_nonconst ? "uniform ivec2 o1,o2;\n" : "",
> + use_offsets ? "const ivec2 osets[4] = ivec2[4](ivec2(-8,7), ivec2(7, -8), ivec2(3, 3), ivec2(-3, -3));\n" :use_nonconst ? "uniform ivec2 o1,o2;\n" : "",
> swizzle == ONE ? scale[0] : scale[comptype],
> - use_offset ? "Offset" : "",
> + use_offsets ? "Offsets" : (use_offset ? "Offset" : ""),
> vs_tc_expr[sampler],
> comptype == SHADOW_T ? ", 0.5" : "",
> - use_nonconst ? ", o1+o2" : use_offset ? ", ivec2(-8,7)" : "",
> + use_offsets ? ", osets" : use_nonconst ? ", o1+o2" : use_offset ? ", ivec2(-8,7)" : "",
> comp_expr[1 + comp_select]);
> asprintf(&fs_code,
> "#version %s\n"
> @@ -433,12 +467,12 @@ do_shader_setup(void)
> prefix[comptype],
> samplersuffix[sampler],
> comptype == SHADOW_T ? "Shadow" : "",
> - use_nonconst ? "uniform ivec2 o1,o2;\n" : "",
> + use_offsets ? "const ivec2 osets[4] = ivec2[4](ivec2(-8,7), ivec2(7, -8), ivec2(3, 3), ivec2(-3, -3));\n" :use_nonconst ? "uniform ivec2 o1,o2;\n" : "",
> swizzle == ONE ? scale[0] : scale[comptype],
> - use_offset ? "Offset" : "",
> + use_offsets ? "Offsets" : (use_offset ? "Offset" : ""),
> fs_tc_expr[sampler],
> comptype == SHADOW_T ? ", 0.5" : "",
> - use_nonconst ? ", o1+o2" : use_offset ? ", ivec2(-8,7)" : "",
> + use_offsets ? ", osets" : use_nonconst ? ", o1+o2" : use_offset ? ", ivec2(-8,7)" : "",
> comp_expr[1 + comp_select]);
> }
>
> @@ -476,7 +510,7 @@ do_geometry_setup(void)
> void
> fail_with_usage(void)
> {
> - printf("Usage: textureGather <stage> [offset] [nonconst] <components> <swizzle> <comptype> <sampler> <compselect> <addressmode>\n"
> + printf("Usage: textureGather <stage> [offset] [nonconst] [offsets] <components> <swizzle> <comptype> <sampler> <compselect> <addressmode>\n"
> " stage = vs|fs\n"
> " components = r|rg|rgb|rgba\n"
> " swizzle = red|green|blue|alpha|zero|one\n"
> @@ -497,6 +531,7 @@ piglit_init(int argc, char **argv)
> else if (!strcmp(opt, "fs")) stage = FS;
> else if (!strcmp(opt, "offset")) use_offset = true;
> else if (!strcmp(opt, "nonconst")) use_nonconst = true;
> + else if (!strcmp(opt, "offsets")) use_offsets = true;
> else if (!strcmp(opt, "r")) components = 1;
> else if (!strcmp(opt, "rg")) components = 2;
> else if (!strcmp(opt, "rgb")) components = 3;
> --
> 1.8.5.3
>
More information about the Piglit
mailing list