[Piglit] [RFC PATCH 3/5] arb_bindless_texture: add compiler-related tests

Samuel Pitoiset samuel.pitoiset at gmail.com
Tue Mar 28 23:09:34 UTC 2017



On 03/29/2017 12:29 AM, Timothy Arceri wrote:
>
>
> On 28/03/17 09:05, Samuel Pitoiset wrote:
>> Tests are splitted into samplers and images. That way someone
>> who cares about implementing ARB_bindless_texture without
>> ARB_shader_image_load_store will be able to run some tests.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>>  .../compiler/images/arith-expr.vert                |  32 ++++++
>>  .../compiler/images/bindless-global.vert           |  25 +++++
>>  .../compiler/images/bindless-local.vert            |  25 +++++
>>  .../compiler/images/bindless-nonuniform.vert       |  23 +++++
>>  .../compiler/images/bound-global.vert              |  25 +++++
>>  .../compiler/images/bound-local.vert               |  25 +++++
>>  .../compiler/images/bound-nonuniform.vert          |  23 +++++
>>  .../compiler/images/explicit-conversions.vert      |  86
>> ++++++++++++++++
>>  .../compiler/images/flat-input.frag                |  28 +++++
>>  .../compiler/images/implicit_conversions.vert      |  22 ++++
>>  .../compiler/images/indexing.vert                  |  30 ++++++
>>  .../compiler/images/inout-struct.frag              |  29 ++++++
>>  .../compiler/images/inout.frag                     |  24 +++++
>>  .../compiler/images/input.frag                     |  28 +++++
>>  .../compiler/images/input.vert                     |  25 +++++
>>  .../compiler/images/interface-block.vert           |  27 +++++
>>  .../compiler/images/out-struct.frag                |  29 ++++++
>>  .../arb_bindless_texture/compiler/images/out.frag  |  24 +++++
>>  .../compiler/images/output.frag                    |  22 ++++
>>  .../compiler/images/output.vert                    |  24 +++++
>>  .../compiler/images/return-struct.frag             |  32 ++++++
>>  .../compiler/images/return.frag                    |  26 +++++
>>  .../compiler/images/temporary.vert                 |  21 ++++
>>  .../compiler/samplers/arith-expr.vert              |  31 ++++++
>>  .../compiler/samplers/bindless-global.vert         |  24 +++++
>>  .../compiler/samplers/bindless-local.vert          |  24 +++++
>>  .../compiler/samplers/bindless-nonuniform.vert     |  22 ++++
>>  .../compiler/samplers/bound-global.vert            |  24 +++++
>>  .../compiler/samplers/bound-local.vert             |  24 +++++
>>  .../compiler/samplers/bound-nonuniform.vert        |  22 ++++
>>  .../compiler/samplers/explicit-conversions.vert    | 114
>> +++++++++++++++++++++
>>  .../compiler/samplers/flat-input.frag              |  27 +++++
>>  .../compiler/samplers/implicit-conversions.vert    |  21 ++++
>>  .../compiler/samplers/indexing.vert                |  29 ++++++
>>  .../compiler/samplers/inout-struct.frag            |  28 +++++
>>  .../compiler/samplers/inout.frag                   |  23 +++++
>>  .../compiler/samplers/input.frag                   |  27 +++++
>>  .../compiler/samplers/input.vert                   |  24 +++++
>>  .../compiler/samplers/interface-block.vert         |  26 +++++
>>  .../compiler/samplers/out-struct.frag              |  28 +++++
>>  .../compiler/samplers/out.frag                     |  23 +++++
>>  .../compiler/samplers/output.frag                  |  21 ++++
>>  .../compiler/samplers/output.vert                  |  23 +++++
>>  .../compiler/samplers/return-struct.frag           |  31 ++++++
>>  .../compiler/samplers/return.frag                  |  25 +++++
>>  .../compiler/samplers/temporary.vert               |  20 ++++
>>  46 files changed, 1316 insertions(+)
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/arith-expr.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/bindless-global.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/bindless-local.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/bindless-nonuniform.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/bound-global.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/bound-local.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/bound-nonuniform.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/explicit-conversions.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/flat-input.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/implicit_conversions.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/indexing.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/inout-struct.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/inout.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/input.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/input.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/interface-block.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/out-struct.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/out.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/output.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/output.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/return-struct.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/return.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/images/temporary.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/arith-expr.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/bindless-global.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/bindless-local.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/bindless-nonuniform.vert
>>
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/bound-global.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/bound-local.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/bound-nonuniform.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/explicit-conversions.vert
>>
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/flat-input.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/implicit-conversions.vert
>>
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/indexing.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/inout-struct.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/inout.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/input.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/input.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/interface-block.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/out-struct.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/out.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/output.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/output.vert
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/return-struct.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/return.frag
>>  create mode 100644
>> tests/spec/arb_bindless_texture/compiler/samplers/temporary.vert
>>
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/arith-expr.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/arith-expr.vert
>> new file mode 100644
>> index 000000000..d36bf6e50
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/arith-expr.vert
>> @@ -0,0 +1,32 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>
> I didn't notice this yesterday but the spec says OpenGL 4.0 or later
> versions is required. Any reason for using 3.3 in all the tests?

Looks like we traditionally don't really respect this and 330 looked good.

>
>
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.X, (Images)"
>> +//
>> +//  "Images may not be implicitly converted to and from 64-bit integers,
>> +//   and may not be used in arithmetic expressions."
>> +
>> +uniform uvec2 u;
>> +
>> +void main()
>> +{
>> +    writeonly image2D img;
>> +    uvec2 r;
>> +
>> +    r = img + u;
>> +    r = img - u;
>> +    r = img * u;
>> +    r = img / u;
>> +    r = img % u;
>> +    img++;
>> +    img--;
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/bindless-global.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/bindless-global.vert
>> new file mode 100644
>> index 000000000..447bb7b4a
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/images/bindless-global.vert
>> @@ -0,0 +1,25 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.4.6 Opaque-Uniform Layout Qualifiers of the
>> GLSL 4.30
>> +//   spec"
>> +//
>> +//  "These layouts may be specified at global scope to control the
>> default
>> +//   behavior of uniforms of the corresponding types, e.g."
>> +//
>> +//       layout (bindless_sampler) uniform;
>> +
>> +layout (bindless_image) uniform;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/bindless-local.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/bindless-local.vert
>> new file mode 100644
>> index 000000000..b5d5bb564
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/bindless-local.vert
>> @@ -0,0 +1,25 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.4.6 Opaque-Uniform Layout Qualifiers of the
>> GLSL 4.30
>> +//   spec"
>> +//
>> +//  "They may also be specified on a uniform variable declaration of a
>> +//   corresponding type, e.g."
>> +//
>> +//      layout (bindless_sampler) uniform sampler2D mySampler;
>> +
>> +layout (bindless_image) writeonly uniform image2D img;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/bindless-nonuniform.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/bindless-nonuniform.vert
>>
>> new file mode 100644
>> index 000000000..4c479249e
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/images/bindless-nonuniform.vert
>>
>> @@ -0,0 +1,23 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.7, Interface Blocks, p. 38"
>> +//
>> +//  "If these layout qualifiers are applied to other types of default
>> block
>> +//   uniforms, or variables with non-uniform storage, a compile-time
>> error
>> +//   will be generated."
>> +
>> +layout (bindless_image) uint i;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/bound-global.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/bound-global.vert
>> new file mode 100644
>> index 000000000..0018bfdf9
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/bound-global.vert
>> @@ -0,0 +1,25 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.4.6 Opaque-Uniform Layout Qualifiers of the
>> GLSL 4.30
>> +//   spec"
>> +//
>> +//  "These layouts may be specified at global scope to control the
>> default
>> +//   behavior of uniforms of the corresponding types, e.g."
>> +//
>> +//      layout (bindless_sampler) uniform;
>> +
>> +layout (bound_image) uniform;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/bound-local.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/bound-local.vert
>> new file mode 100644
>> index 000000000..d14117e57
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/bound-local.vert
>> @@ -0,0 +1,25 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.4.6 Opaque-Uniform Layout Qualifiers of the
>> GLSL 4.30
>> +//   spec"
>> +//
>> +//  "They may also be specified on a uniform variable declaration of a
>> +//   corresponding type, e.g."
>> +//
>> +//       layout (bindless_sampler) uniform sampler2D mySampler;
>> +
>> +layout (bound_image) writeonly uniform image2D img;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/bound-nonuniform.vert b/tests/spec/arb_bindless_texture/compiler/images/bound-nonuniform.vert
>>
>> new file mode 100644
>> index 000000000..ed65e4ce0
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/images/bound-nonuniform.vert
>> @@ -0,0 +1,23 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.7, Interface Blocks, p. 38"
>> +//
>> +//  "If these layout qualifiers are applied to other types of default
>> block
>> +//   uniforms, or variables with non-uniform storage, a compile-time
>> error
>> +//   will be generated."
>> +
>> +layout (bound_image) uint i;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/explicit-conversions.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/explicit-conversions.vert
>>
>> new file mode 100644
>> index 000000000..9837f5f2a
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/images/explicit-conversions.vert
>>
>> @@ -0,0 +1,86 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 5.4.1, Conversion and Scalar Constructors, p. 60"
>> +//
>> +//   (add the following constructors:)
>> +//
>> +//  "In the following four constructors, the low 32 bits of the image
>> +//   type correspond to the .x component of the uvec2 and the high 32
>> bits
>> +//   correspond to the .y component."
>> +//
>> +//   "Converts an image type to a pair of 32-bit unsigned integers:
>> +//   uvec2(any image type)"
>> +//
>> +//   "Converts a pair of 32-bit unsigned integers to an image type:
>> +//   any image type(uvec2)"
>> +
>> +void any_image_type_to_uvec2()
>> +{
>> +    uvec2 pair = uvec2(0, 0);
>> +
>> +    writeonly imageBuffer ibuf;
>> +    pair = uvec2(ibuf);
>> +
>> +    writeonly image1D i1d;
>> +    pair = uvec2(i1d);
>> +
>> +    writeonly image1DArray i1darr;
>> +    pair = uvec2(i1darr);
>> +
>> +    writeonly image2D i2d;
>> +    pair = uvec2(i2d);
>> +
>> +    writeonly image2DMS i2dms;
>> +    pair = uvec2(i2dms);
>> +
>> +    writeonly image2DArray i2darr;
>> +    pair = uvec2(i2darr);
>> +
>> +    writeonly image2DMSArray i2dmsarr;
>> +    pair = uvec2(i2dmsarr);
>> +
>> +    writeonly image2DRect i2drect;
>> +    pair = uvec2(i2drect);
>> +
>> +    writeonly image3D i3d;
>> +    pair = uvec2(i3d);
>> +
>> +    writeonly imageCube icube;
>> +    pair = uvec2(icube);
>> +
>> +    writeonly imageCubeArray icubearr;
>> +    pair = uvec2(icubearr);
>> +}
>> +
>> +void uvec2_to_any_image_type()
>> +{
>> +    uvec2 pair = uvec2(0, 0);
>> +
>> +    writeonly imageBuffer ibuf = imageBuffer(pair);
>> +    writeonly image1D i1d = image1D(pair);
>> +    writeonly image1DArray i1darr = image1DArray(pair);
>> +    writeonly image2D i2d = image2D(pair);
>> +    writeonly image2DMS i2dms = image2DMS(pair);
>> +    writeonly image2DArray i2darr = image2DArray(pair);
>> +    writeonly image2DMSArray i2dmsarr = image2DMSArray(pair);
>> +    writeonly image2DRect i2drect =  image2DRect(pair);
>> +    writeonly image3D i3d = image3D(pair);
>> +    writeonly imageCube icube = imageCube(pair);
>> +    writeonly imageCubeArray icubearr = imageCubeArray(pair);
>> +}
>> +
>> +void main()
>> +{
>> +    any_image_type_to_uvec2();
>> +    uvec2_to_any_image_type();
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/flat-input.frag
>> b/tests/spec/arb_bindless_texture/compiler/images/flat-input.frag
>> new file mode 100644
>> index 000000000..394e9d2a3
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/flat-input.frag
>> @@ -0,0 +1,28 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.4, Inputs, p. 34"
>> +//
>> +//  "(modify last paragraph, p. 35, allowing samplers and images as
>> fragment
>> +//   shader inputs) ... Fragment inputs can only be signed and unsigned
>> +//   integers and integer vectors, floating point scalars,
>> floating-point
>> +//   vectors, matrices, sampler and image types, or arrays or
>> structures of
>> +//   these.  Fragment shader inputs that are signed or unsigned
>> integers,
>> +//   integer vectors, or any double-precision floating- point type,
>> or any
>> +//   sampler or image type must be qualified with the interpolation
>> qualifier
>> +//   "flat"."
>> +
>> +flat in writeonly image2D sampler;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/implicit_conversions.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/implicit_conversions.vert
>>
>> new file mode 100644
>> index 000000000..7d06f6d57
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/images/implicit_conversions.vert
>>
>> @@ -0,0 +1,22 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.X, (Images)"
>> +//
>> +//  "Images may not be implicitly converted to and from 64-bit integers,
>> +//   and may not be used in arithmetic expressions."
>> +
>> +void main()
>> +{
>> +    image2D img = uvec2(0, 0);
>> +    uvec2 pair = img;
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/indexing.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/indexing.vert
>> new file mode 100644
>> index 000000000..dd865b22f
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/indexing.vert
>> @@ -0,0 +1,30 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.X, (Images)"
>> +//
>> +//  "Images may be aggregated into arrays within a shader (using square
>> +//   brackets []) and can be indexed with general integer expressions."
>> +
>> +uniform writeonly image2D imgs[64];
>> +uniform uint a, b;
>> +
>> +void main()
>> +{
>> +    writeonly image2D img;
>> +    uint idx = 42u;
>> +
>> +    img = imgs[42];
>> +    img = imgs[idx];
>> +    img = imgs[idx + idx];
>
>
> This is an out of bounds access. Should this fail compilation?

Mmmh, good question. I would say yes. The test works with the NVIDIA 
blob, but I will update.

>
>
>> +    img = imgs[a * b];
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/inout-struct.frag
>> b/tests/spec/arb_bindless_texture/compiler/images/inout-struct.frag
>> new file mode 100644
>> index 000000000..09f24a0a1
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/inout-struct.frag
>> @@ -0,0 +1,29 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.X, (Images)"
>> +//
>> +//  "Images can be used as l-values, so can be assigned into and used as
>> +//   "out" and "inout" function parameters."
>> +
>> +struct foo {
>> +    float x;
>> +    writeonly image2D img;
>> +};
>> +
>> +void f(inout foo p)
>> +{
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/inout.frag
>> b/tests/spec/arb_bindless_texture/compiler/images/inout.frag
>> new file mode 100644
>> index 000000000..b19f0ba8f
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/inout.frag
>> @@ -0,0 +1,24 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.X, (Images)"
>> +//
>> +//  "Images can be used as l-values, so can be assigned into and used as
>> +//   "out" and "inout" function parameters."
>> +
>> +void f(inout sampler2D p)
>> +{
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/input.frag
>> b/tests/spec/arb_bindless_texture/compiler/images/input.frag
>> new file mode 100644
>> index 000000000..ec82c857b
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/input.frag
>> @@ -0,0 +1,28 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.4, Inputs, p. 34"
>> +//
>> +//  "(modify last paragraph, p. 35, allowing samplers and images as
>> fragment
>> +//   shader inputs) ... Fragment inputs can only be signed and unsigned
>> +//   integers and integer vectors, floating point scalars,
>> floating-point
>> +//   vectors, matrices, sampler and image types, or arrays or
>> structures of
>> +//   these.  Fragment shader inputs that are signed or unsigned
>> integers,
>> +//   integer vectors, or any double-precision floating- point type,
>> or any
>> +//   sampler or image type must be qualified with the interpolation
>> qualifier
>> +//   "flat"."
>> +
>> +in writeonly image2D image;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/input.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/input.vert
>> new file mode 100644
>> index 000000000..9e0a893f5
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/input.vert
>> @@ -0,0 +1,25 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.4, Inputs, p. 34"
>> +//
>> +//  "(modify third paragraph of the section to allow sampler and
>> image types)
>> +//   ...  Vertex shader inputs can only be float, single-precision
>> +//   floating-point scalars, single-precision floating-point vectors,
>> +//   matrices, signed and unsigned integers and integer vectors,
>> sampler and
>> +//   image types."
>> +
>> +in writeonly image2D image;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/interface-block.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/interface-block.vert
>> new file mode 100644
>> index 000000000..721353f00
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/images/interface-block.vert
>> @@ -0,0 +1,27 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.7, Interface Blocks, p. 38"
>> +//
>> +//  "(remove the following bullet from the last list on p. 39, thereby
>> +//   permitting sampler types in interface blocks; image types are also
>> +//   permitted in blocks by this extension)"
>> +//
>> +//      * sampler types are not allowed
>> +
>> +uniform Images {
>
>
> You are testing a uniform block here not an interface block.

I will update.

>
>
>> +    writeonly image2D image;
>> +};
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/out-struct.frag
>> b/tests/spec/arb_bindless_texture/compiler/images/out-struct.frag
>> new file mode 100644
>> index 000000000..7e32fa283
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/out-struct.frag
>> @@ -0,0 +1,29 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.X, (Images)"
>> +//
>> +//  "Images can be used as l-values, so can be assigned into and used as
>> +//   "out" and "inout" function parameters."
>> +
>> +struct foo {
>> +    float x;
>> +    writeonly image2D img;
>> +};
>> +
>> +void f(out foo p)
>> +{
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git a/tests/spec/arb_bindless_texture/compiler/images/out.frag
>> b/tests/spec/arb_bindless_texture/compiler/images/out.frag
>> new file mode 100644
>> index 000000000..1898b61d6
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/out.frag
>> @@ -0,0 +1,24 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.X, (Images)"
>> +//
>> +//  "Images can be used as l-values, so can be assigned into and used as
>> +//   "out" and "inout" function parameters."
>> +
>> +void f(out image2D p)
>> +{
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/output.frag
>> b/tests/spec/arb_bindless_texture/compiler/images/output.frag
>> new file mode 100644
>> index 000000000..c3b63a3ca
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/output.frag
>> @@ -0,0 +1,22 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.6, Outputs, p. 36"
>> +//
>> +//  "(do not modify the last paragraph, p. 38; samplers and images
>> are not
>> +//   allowed as fragment shader outputs)"
>> +
>> +out writeonly image2D image;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/output.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/output.vert
>> new file mode 100644
>> index 000000000..450672a4f
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/output.vert
>> @@ -0,0 +1,24 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.6, Outputs, p. 36"
>> +//
>> +//  "(modify second paragraph, p. 37, to allow sampler and image
>> outputs)
>> +//   ... Output variables can only be floating-point scalars,
>> floating-point
>> +//   vectors, matrices, signed or unsigned integers or integer vectors,
>> +//   sampler or image types, or arrays or structures of any these."
>> +
>> +out writeonly image2D img;
>
> I don't think we need to fail when it isn't but I think this should
> really be flat on anything lower than OpenGL 4.4 where interpolation is
> required to match at link time.

Okay, I will add 'flat' here.

>
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/return-struct.frag
>> b/tests/spec/arb_bindless_texture/compiler/images/return-struct.frag
>> new file mode 100644
>> index 000000000..98a1990ab
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/return-struct.frag
>> @@ -0,0 +1,32 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.X, (Images)"
>> +//
>> +//  "Images can be used as l-values, so can be assigned into and used as
>> +//   "out" and "inout" function parameters."
>> +
>> +struct foo {
>> +    float x;
>> +    writeonly image2D img;
>> +};
>> +
>> +uniform foo u;
>> +
>> +foo f()
>> +{
>> +    return u;
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/return.frag
>> b/tests/spec/arb_bindless_texture/compiler/images/return.frag
>> new file mode 100644
>> index 000000000..204a1885d
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/return.frag
>> @@ -0,0 +1,26 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.X, (Images)"
>> +//
>> +//  "Images can be used as l-values, so can be assigned into and used as
>> +//   "out" and "inout" function parameters."
>> +
>> +writeonly image2D f()
>> +{
>> +    writeonly image2D img;
>> +    return img;
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/images/temporary.vert
>> b/tests/spec/arb_bindless_texture/compiler/images/temporary.vert
>> new file mode 100644
>> index 000000000..65b6fb161
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/images/temporary.vert
>> @@ -0,0 +1,21 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> GL_ARB_shader_image_load_store
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_shader_image_load_store: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.X, (Images)"
>> +//
>> +//  "Images may be declared as shader inputs and outputs, as uniform
>> +//   variables, as temporary variables, and as function parameters."
>> +
>> +void main()
>> +{
>> +    writeonly image2D img;
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/arith-expr.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/arith-expr.vert
>> new file mode 100644
>> index 000000000..ca1ea744e
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/arith-expr.vert
>> @@ -0,0 +1,31 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.7 (Samplers), p. 25"
>> +//
>> +//  "Samplers may not be implicitly converted to and from 64-bit
>> integers,
>> +//   and may not be used in arithmetic expressions."
>> +
>> +uniform uvec2 u;
>> +
>> +void main()
>> +{
>> +    sampler2D tex;
>> +    uvec2 r;
>> +
>> +    r = tex + u;
>> +    r = tex - u;
>> +    r = tex * u;
>> +    r = tex / u;
>> +    r = tex % u;
>> +    tex++;
>> +    tex--;
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/bindless-global.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/bindless-global.vert
>> new file mode 100644
>> index 000000000..48ba8daba
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/samplers/bindless-global.vert
>> @@ -0,0 +1,24 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.4.6 Opaque-Uniform Layout Qualifiers of the
>> GLSL 4.30
>> +//   spec"
>> +//
>> +//  "These layouts may be specified at global scope to control the
>> default
>> +//   behavior of uniforms of the corresponding types, e.g."
>> +//
>> +//       layout (bindless_sampler) uniform;
>> +
>> +layout (bindless_sampler) uniform;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/bindless-local.vert b/tests/spec/arb_bindless_texture/compiler/samplers/bindless-local.vert
>>
>> new file mode 100644
>> index 000000000..3ce0144d6
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/samplers/bindless-local.vert
>> @@ -0,0 +1,24 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.4.6 Opaque-Uniform Layout Qualifiers of the
>> GLSL 4.30
>> +//   spec"
>> +//
>> +//  "They may also be specified on a uniform variable declaration of a
>> +//   corresponding type, e.g."
>> +//
>> +//      layout (bindless_sampler) uniform sampler2D mySampler;
>> +
>> +layout (bindless_sampler) uniform sampler2D tex;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/bindless-nonuniform.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/bindless-nonuniform.vert
>>
>> new file mode 100644
>> index 000000000..7667038d0
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/samplers/bindless-nonuniform.vert
>>
>> @@ -0,0 +1,22 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.7, Interface Blocks, p. 38"
>> +//
>> +//  "If these layout qualifiers are applied to other types of default
>> block
>> +//   uniforms, or variables with non-uniform storage, a compile-time
>> error
>> +//   will be generated."
>> +
>> +layout (bindless_sampler) uint i;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/bound-global.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/bound-global.vert
>> new file mode 100644
>> index 000000000..8cb4dd6ef
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/bound-global.vert
>> @@ -0,0 +1,24 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.4.6 Opaque-Uniform Layout Qualifiers of the
>> GLSL 4.30
>> +//   spec"
>> +//
>> +//  "These layouts may be specified at global scope to control the
>> default
>> +//   behavior of uniforms of the corresponding types, e.g."
>> +//
>> +//      layout (bindless_sampler) uniform;
>> +
>> +layout (bound_sampler) uniform;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/bound-local.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/bound-local.vert
>> new file mode 100644
>> index 000000000..32475a6de
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/bound-local.vert
>> @@ -0,0 +1,24 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.4.6 Opaque-Uniform Layout Qualifiers of the
>> GLSL 4.30
>> +//   spec"
>> +//
>> +//  "They may also be specified on a uniform variable declaration of a
>> +//   corresponding type, e.g."
>> +//
>> +//       layout (bindless_sampler) uniform sampler2D mySampler;
>> +
>> +layout (bound_sampler) uniform sampler2D tex;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/bound-nonuniform.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/bound-nonuniform.vert
>> new file mode 100644
>> index 000000000..420ceab3d
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/samplers/bound-nonuniform.vert
>> @@ -0,0 +1,22 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.7, Interface Blocks, p. 38"
>> +//
>> +//  "If these layout qualifiers are applied to other types of default
>> block
>> +//   uniforms, or variables with non-uniform storage, a compile-time
>> error
>> +//   will be generated."
>> +
>> +layout (bound_sampler) uint i;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/explicit-conversions.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/explicit-conversions.vert
>>
>> new file mode 100644
>> index 000000000..1ea1b9d42
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/samplers/explicit-conversions.vert
>>
>> @@ -0,0 +1,114 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +#extension GL_ARB_texture_cube_map_array: enable
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 5.4.1, Conversion and Scalar Constructors, p. 60"
>> +//
>> +//   (add the following constructors:)
>> +//
>> +//  "In the following four constructors, the low 32 bits of the sampler
>> +//   type correspond to the .x component of the uvec2 and the high 32
>> bits
>> +//   correspond to the .y component."
>> +//
>> +//   "Converts a sampler type to a pair of 32-bit unsigned integers:
>> +//   uvec2(any sampler type)"
>> +//
>> +//   "Converts a pair of 32-bit unsigned integers to a sampler type:
>> +//   any sampler type(uvec2)"
>> +
>> +void any_sampler_type_to_uvec2()
>> +{
>> +    uvec2 pair = uvec2(0, 0);
>> +
>> +    samplerBuffer sbuf;
>> +    pair = uvec2(sbuf);
>> +
>> +    sampler1D s1d;
>> +    pair = uvec2(s1d);
>> +
>> +    sampler1DArray s1darr;
>> +    pair = uvec2(s1darr);
>> +
>> +    sampler2D s2d;
>> +    pair = uvec2(s2d);
>> +
>> +    sampler2DMS s2dms;
>> +    pair = uvec2(s2dms);
>> +
>> +    sampler2DArray s2darr;
>> +    pair = uvec2(s2darr);
>> +
>> +    sampler2DMSArray s2dmsarr;
>> +    pair = uvec2(s2dmsarr);
>> +
>> +    sampler2DRect s2drect;
>> +    pair = uvec2(s2drect);
>> +
>> +    sampler3D s3d;
>> +    pair = uvec2(s3d);
>> +
>> +    samplerCube scube;
>> +    pair = uvec2(scube);
>> +
>> +    samplerCubeArray scubearr;
>> +    pair = uvec2(scubearr);
>> +
>> +    sampler1DShadow s1ds;
>> +    pair = uvec2(s1ds);
>> +
>> +    sampler2DShadow s2ds;
>> +    pair = uvec2(s2ds);
>> +
>> +    samplerCubeShadow scubes;
>> +    pair = uvec2(scubes);
>> +
>> +    sampler2DRectShadow s2drects;
>> +    pair = uvec2(s2drects);
>> +
>> +    sampler1DArrayShadow s1darrs;
>> +    pair = uvec2(s1darrs);
>> +
>> +    sampler2DArrayShadow s2darrs;
>> +    pair = uvec2(s2darrs);
>> +
>> +    samplerCubeArrayShadow scubearrs;
>> +    pair = uvec2(scubearrs);
>> +}
>> +
>> +void uvec2_to_any_sampler_type()
>> +{
>> +    uvec2 pair = uvec2(0, 0);
>> +
>> +    samplerBuffer sbuf = samplerBuffer(pair);
>> +    sampler1D s1d = sampler1D(pair);
>> +    sampler1DArray s1darr = sampler1DArray(pair);
>> +    sampler2D s2d = sampler2D(pair);
>> +    sampler2DMS s2dms = sampler2DMS(pair);
>> +    sampler2DArray s2darr = sampler2DArray(pair);
>> +    sampler2DMSArray s2dmsarr = sampler2DMSArray(pair);
>> +    sampler2DRect s2drect = sampler2DRect(pair);
>> +    sampler3D s3d = sampler3D(pair);
>> +    samplerCube scube = samplerCube(pair);
>> +    samplerCubeArray scubearr = samplerCubeArray(pair);
>> +    sampler1DShadow s1ds = sampler1DShadow(pair);
>> +    sampler2DShadow s2ds = sampler2DShadow(pair);
>> +    samplerCubeShadow scubes = samplerCubeShadow(pair);
>> +    sampler2DRectShadow s2drects = sampler2DRectShadow(pair);
>> +    sampler1DArrayShadow s1darrs = sampler1DArrayShadow(pair);
>> +    sampler2DArrayShadow s2darrs = sampler2DArrayShadow(pair);
>> +    samplerCubeArrayShadow scubearrs = samplerCubeArrayShadow(pair);
>> +}
>> +
>> +void main()
>> +{
>> +    any_sampler_type_to_uvec2();
>> +    uvec2_to_any_sampler_type();
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/flat-input.frag
>> b/tests/spec/arb_bindless_texture/compiler/samplers/flat-input.frag
>> new file mode 100644
>> index 000000000..01846e927
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/flat-input.frag
>> @@ -0,0 +1,27 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.4, Inputs, p. 34"
>> +//
>> +//  "(modify last paragraph, p. 35, allowing samplers and images as
>> fragment
>> +//   shader inputs) ... Fragment inputs can only be signed and unsigned
>> +//   integers and integer vectors, floating point scalars,
>> floating-point
>> +//   vectors, matrices, sampler and image types, or arrays or
>> structures of
>> +//   these.  Fragment shader inputs that are signed or unsigned
>> integers,
>> +//   integer vectors, or any double-precision floating- point type,
>> or any
>> +//   sampler or image type must be qualified with the interpolation
>> qualifier
>> +//   "flat"."
>> +
>> +flat in sampler2D tex;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/implicit-conversions.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/implicit-conversions.vert
>>
>> new file mode 100644
>> index 000000000..bb5bc9373
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/samplers/implicit-conversions.vert
>>
>> @@ -0,0 +1,21 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.7 (Samplers), p. 25"
>> +//
>> +//  "Samplers may not be implicitly converted to and from 64-bit
>> integers,
>> +//   and may not be used in arithmetic expressions."
>> +
>> +void main()
>> +{
>> +    sampler2D tex = uvec2(0, 0);
>> +    uvec2 pair = tex;
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/indexing.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/indexing.vert
>> new file mode 100644
>> index 000000000..c73668c1d
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/indexing.vert
>> @@ -0,0 +1,29 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.7 (Samplers), p. 25"
>> +//
>> +//  "Samplers aggregated into arrays within a shader (using square
>> +//   brackets []) can be indexed with arbitrary integer expressions."
>> +
>> +uniform sampler2D texs[64];
>> +uniform uint a, b;
>> +
>> +void main()
>> +{
>> +    sampler2D tex;
>> +    uint idx = 42u;
>> +
>> +    tex = texs[42];
>> +    tex = texs[idx];
>> +    tex = texs[idx + idx];
>
>
> Again this is out of bounds.
>
>
>> +    tex = texs[a * b];
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/inout-struct.frag
>> b/tests/spec/arb_bindless_texture/compiler/samplers/inout-struct.frag
>> new file mode 100644
>> index 000000000..01729065d
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/inout-struct.frag
>> @@ -0,0 +1,28 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.7 (Samplers), p. 25"
>> +//
>> +//  "Samplers can be used as l-values, so can be assigned into and
>> used as
>> +//   "out" and "inout" function parameters."
>> +
>> +struct foo {
>> +    float x;
>> +    sampler2D tex;
>> +};
>> +
>> +void f(inout foo p)
>> +{
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/inout.frag
>> b/tests/spec/arb_bindless_texture/compiler/samplers/inout.frag
>> new file mode 100644
>> index 000000000..61d6e52d5
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/inout.frag
>> @@ -0,0 +1,23 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.7 (Samplers), p. 25"
>> +//
>> +//  "Samplers can be used as l-values, so can be assigned into and
>> used as
>> +//   "out" and "inout" function parameters."
>> +
>> +void f(inout sampler2D p)
>> +{
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/input.frag
>> b/tests/spec/arb_bindless_texture/compiler/samplers/input.frag
>> new file mode 100644
>> index 000000000..0803d3017
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/input.frag
>> @@ -0,0 +1,27 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.4, Inputs, p. 34"
>> +//
>> +//  "(modify last paragraph, p. 35, allowing samplers and images as
>> fragment
>> +//   shader inputs) ... Fragment inputs can only be signed and unsigned
>> +//   integers and integer vectors, floating point scalars,
>> floating-point
>> +//   vectors, matrices, sampler and image types, or arrays or
>> structures of
>> +//   these.  Fragment shader inputs that are signed or unsigned
>> integers,
>> +//   integer vectors, or any double-precision floating- point type,
>> or any
>> +//   sampler or image type must be qualified with the interpolation
>> qualifier
>> +//   "flat"."
>> +
>> +in sampler2D tex;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/input.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/input.vert
>> new file mode 100644
>> index 000000000..e8f830af7
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/input.vert
>> @@ -0,0 +1,24 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.4, Inputs, p. 34"
>> +//
>> +//  "(modify third paragraph of the section to allow sampler and
>> image types)
>> +//   ...  Vertex shader inputs can only be float, single-precision
>> +//   floating-point scalars, single-precision floating-point vectors,
>> +//   matrices, signed and unsigned integers and integer vectors,
>> sampler and
>> +//   image types."
>> +
>> +in sampler2D tex;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/interface-block.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/interface-block.vert
>> new file mode 100644
>> index 000000000..97f9c4ad8
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/samplers/interface-block.vert
>> @@ -0,0 +1,26 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.7, Interface Blocks, p. 38"
>> +//
>> +//  "(remove the following bullet from the last list on p. 39, thereby
>> +//   permitting sampler types in interface blocks; image types are also
>> +//   permitted in blocks by this extension)"
>> +//
>> +//      * sampler types are not allowed
>> +
>> +uniform Samplers {
>
>
> Again this is testing a uniform block, not an interface block.
>
>
>> +    sampler2D tex;
>> +};
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/out-struct.frag
>> b/tests/spec/arb_bindless_texture/compiler/samplers/out-struct.frag
>> new file mode 100644
>> index 000000000..1d60d3b87
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/out-struct.frag
>> @@ -0,0 +1,28 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.7 (Samplers), p. 25"
>> +//
>> +//  "Samplers can be used as l-values, so can be assigned into and
>> used as
>> +//   "out" and "inout" function parameters."
>> +
>> +struct foo {
>> +    float x;
>> +    sampler2D tex;
>> +};
>> +
>> +void f(out foo p)
>> +{
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/out.frag
>> b/tests/spec/arb_bindless_texture/compiler/samplers/out.frag
>> new file mode 100644
>> index 000000000..b7e427177
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/out.frag
>> @@ -0,0 +1,23 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.7 (Samplers), p. 25"
>> +//
>> +//  "Samplers can be used as l-values, so can be assigned into and
>> used as
>> +//   "out" and "inout" function parameters."
>> +
>> +void f(out sampler2D p)
>> +{
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/output.frag
>> b/tests/spec/arb_bindless_texture/compiler/samplers/output.frag
>> new file mode 100644
>> index 000000000..36cc52298
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/output.frag
>> @@ -0,0 +1,21 @@
>> +// [config]
>> +// expect_result: fail
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.6, Outputs, p. 36"
>> +//
>> +//  "(do not modify the last paragraph, p. 38; samplers and images
>> are not
>> +//   allowed as fragment shader outputs)"
>> +
>> +out sampler2D tex;
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/output.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/output.vert
>> new file mode 100644
>> index 000000000..141e6b7c1
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/output.vert
>> @@ -0,0 +1,23 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Modify Section 4.3.6, Outputs, p. 36"
>> +//
>> +//  "(modify second paragraph, p. 37, to allow sampler and image
>> outputs)
>> +//   ... Output variables can only be floating-point scalars,
>> floating-point
>> +//   vectors, matrices, signed or unsigned integers or integer vectors,
>> +//   sampler or image types, or arrays or structures of any these."
>> +
>> +out sampler2D tex;
>
>
> Again maybe add flat for correctness pre OpenGL 4.4?
>
>
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/return-struct.frag
>> b/tests/spec/arb_bindless_texture/compiler/samplers/return-struct.frag
>> new file mode 100644
>> index 000000000..05b0fde08
>> --- /dev/null
>> +++
>> b/tests/spec/arb_bindless_texture/compiler/samplers/return-struct.frag
>> @@ -0,0 +1,31 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.7 (Samplers), p. 25"
>> +//
>> +//  "Samplers can be used as l-values, so can be assigned into and
>> used as
>> +//   "out" and "inout" function parameters."
>> +
>> +struct foo {
>> +    float x;
>> +    sampler2D tex;
>> +};
>> +
>> +uniform foo u;
>> +
>> +foo f()
>> +{
>> +    return u;
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/return.frag
>> b/tests/spec/arb_bindless_texture/compiler/samplers/return.frag
>> new file mode 100644
>> index 000000000..a3ae163ce
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/return.frag
>> @@ -0,0 +1,25 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.7 (Samplers), p. 25"
>> +//
>> +//  "Samplers can be used as l-values, so can be assigned into and
>> used as
>> +//   "out" and "inout" function parameters."
>> +
>> +sampler2D f()
>> +{
>> +    sampler2D tex;
>> +    return tex;
>> +}
>> +
>> +void main()
>> +{
>> +}
>> diff --git
>> a/tests/spec/arb_bindless_texture/compiler/samplers/temporary.vert
>> b/tests/spec/arb_bindless_texture/compiler/samplers/temporary.vert
>> new file mode 100644
>> index 000000000..492d15a2a
>> --- /dev/null
>> +++ b/tests/spec/arb_bindless_texture/compiler/samplers/temporary.vert
>> @@ -0,0 +1,20 @@
>> +// [config]
>> +// expect_result: pass
>> +// glsl_version: 3.30
>> +// require_extensions: GL_ARB_bindless_texture
>> +// [end config]
>> +
>> +#version 330
>> +#extension GL_ARB_bindless_texture: require
>> +
>> +// The ARB_bindless_texture spec says:
>> +//
>> +//  "Replace Section 4.1.7 (Samplers), p. 25"
>> +//
>> +//  "Samplers may be declared as shader inputs and outputs, as uniform
>> +//   variables, as temporary variables, and as function parameters."
>> +
>> +void main()
>> +{
>> +    sampler2D tex;
>> +}
>>


More information about the Piglit mailing list