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 <[email protected]> On Mon, Feb 10, 2014 at 3:37 PM, Dave Airlie <[email protected]> wrote: > From: Dave Airlie <[email protected]> > > 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 <[email protected]> > Signed-off-by: Dave Airlie <[email protected]> > --- > 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 > _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
