 1e5d7b0b27
			
		
	
	
		1e5d7b0b27
		
	
	
	
	
		
			
			- Support new opaque types: f16sampler*, f16image*, f16subpassInput*. - Add new built-in GLSL texture/image functions.
		
			
				
	
	
		
			1274 lines
		
	
	
		
			58 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			1274 lines
		
	
	
		
			58 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| #version 450 core
 | |
| 
 | |
| #extension GL_ARB_sparse_texture2: enable
 | |
| #extension GL_ARB_sparse_texture_clamp: enable
 | |
| #extension GL_AMD_gpu_shader_half_float: enable
 | |
| #extension GL_AMD_gpu_shader_half_float_fetch: enable
 | |
| #extension GL_AMD_texture_gather_bias_lod: enable
 | |
| 
 | |
| layout(set = 0, binding =  0) uniform f16sampler1D            s1D;
 | |
| layout(set = 0, binding =  1) uniform f16sampler2D            s2D;
 | |
| layout(set = 0, binding =  2) uniform f16sampler3D            s3D;
 | |
| layout(set = 0, binding =  3) uniform f16sampler2DRect        s2DRect;
 | |
| layout(set = 0, binding =  4) uniform f16samplerCube          sCube;
 | |
| layout(set = 0, binding =  5) uniform f16samplerBuffer        sBuffer;
 | |
| layout(set = 0, binding =  6) uniform f16sampler2DMS          s2DMS;
 | |
| layout(set = 0, binding =  7) uniform f16sampler1DArray       s1DArray;
 | |
| layout(set = 0, binding =  8) uniform f16sampler2DArray       s2DArray;
 | |
| layout(set = 0, binding =  9) uniform f16samplerCubeArray     sCubeArray;
 | |
| layout(set = 0, binding = 10) uniform f16sampler2DMSArray     s2DMSArray;
 | |
| 
 | |
| layout(set = 0, binding = 11) uniform f16sampler1DShadow          s1DShadow;
 | |
| layout(set = 0, binding = 12) uniform f16sampler2DShadow          s2DShadow;
 | |
| layout(set = 0, binding = 13) uniform f16sampler2DRectShadow      s2DRectShadow;
 | |
| layout(set = 0, binding = 14) uniform f16samplerCubeShadow        sCubeShadow;
 | |
| layout(set = 0, binding = 15) uniform f16sampler1DArrayShadow     s1DArrayShadow;
 | |
| layout(set = 0, binding = 16) uniform f16sampler2DArrayShadow     s2DArrayShadow;
 | |
| layout(set = 0, binding = 17) uniform f16samplerCubeArrayShadow   sCubeArrayShadow;
 | |
| 
 | |
| layout(set = 1, binding =  0) layout(rgba16f) uniform f16image1D          i1D;
 | |
| layout(set = 1, binding =  1) layout(rgba16f) uniform f16image2D          i2D;
 | |
| layout(set = 1, binding =  2) layout(rgba16f) uniform f16image3D          i3D;
 | |
| layout(set = 1, binding =  3) layout(rgba16f) uniform f16image2DRect      i2DRect;
 | |
| layout(set = 1, binding =  4) layout(rgba16f) uniform f16imageCube        iCube;
 | |
| layout(set = 1, binding =  5) layout(rgba16f) uniform f16image1DArray     i1DArray;
 | |
| layout(set = 1, binding =  6) layout(rgba16f) uniform f16image2DArray     i2DArray;
 | |
| layout(set = 1, binding =  7) layout(rgba16f) uniform f16imageCubeArray   iCubeArray;
 | |
| layout(set = 1, binding =  8) layout(rgba16f) uniform f16imageBuffer      iBuffer;
 | |
| layout(set = 1, binding =  9) layout(rgba16f) uniform f16image2DMS        i2DMS;
 | |
| layout(set = 1, binding = 10) layout(rgba16f) uniform f16image2DMSArray   i2DMSArray;
 | |
| 
 | |
| layout(set = 2, binding =  0) uniform f16texture1D           t1D;
 | |
| layout(set = 2, binding =  1) uniform f16texture2D           t2D;
 | |
| layout(set = 2, binding =  2) uniform f16texture3D           t3D;
 | |
| layout(set = 2, binding =  3) uniform f16texture2DRect       t2DRect;
 | |
| layout(set = 2, binding =  4) uniform f16textureCube         tCube;
 | |
| layout(set = 2, binding =  5) uniform f16texture1DArray      t1DArray;
 | |
| layout(set = 2, binding =  6) uniform f16texture2DArray      t2DArray;
 | |
| layout(set = 2, binding =  7) uniform f16textureCubeArray    tCubeArray;
 | |
| layout(set = 2, binding =  8) uniform f16textureBuffer       tBuffer;
 | |
| layout(set = 2, binding =  9) uniform f16texture2DMS         t2DMS;
 | |
| layout(set = 2, binding = 10) uniform f16texture2DMSArray    t2DMSArray;
 | |
| 
 | |
| layout(set = 2, binding = 11) uniform sampler s;
 | |
| layout(set = 2, binding = 12) uniform samplerShadow sShadow;
 | |
| 
 | |
| layout(set = 3, binding = 0, input_attachment_index = 0) uniform f16subpassInput   subpass;
 | |
| layout(set = 3, binding = 1, input_attachment_index = 0) uniform f16subpassInputMS subpassMS;
 | |
| 
 | |
| layout(location =  0) in float c1;
 | |
| layout(location =  1) in vec2  c2;
 | |
| layout(location =  2) in vec3  c3;
 | |
| layout(location =  3) in vec4  c4;
 | |
| 
 | |
| layout(location =  4) in float compare;
 | |
| layout(location =  5) in float lod;
 | |
| layout(location =  6) in float bias;
 | |
| layout(location =  7) in float lodClamp;
 | |
| 
 | |
| layout(location =  8) in float dPdxy1;
 | |
| layout(location =  9) in vec2  dPdxy2;
 | |
| layout(location = 10) in vec3  dPdxy3;
 | |
| 
 | |
| layout(location = 11) in float16_t f16c1;
 | |
| layout(location = 12) in f16vec2   f16c2;
 | |
| layout(location = 13) in f16vec3   f16c3;
 | |
| layout(location = 14) in f16vec4   f16c4;
 | |
| 
 | |
| layout(location = 15) in float16_t f16lod;
 | |
| layout(location = 16) in float16_t f16bias;
 | |
| layout(location = 17) in float16_t f16lodClamp;
 | |
| 
 | |
| layout(location = 18) in float16_t f16dPdxy1;
 | |
| layout(location = 19) in f16vec2   f16dPdxy2;
 | |
| layout(location = 20) in f16vec3   f16dPdxy3;
 | |
| 
 | |
| const int   offset1 = 1;
 | |
| const ivec2 offset2 = ivec2(1);
 | |
| const ivec3 offset3 = ivec3(1);
 | |
| const ivec2 offsets[4] = { offset2, offset2, offset2, offset2 };
 | |
| 
 | |
| layout(location = 0) out vec4 fragColor;
 | |
| 
 | |
| f16vec4 testTexture()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += texture(s1D, c1);
 | |
|     texel   += texture(s1D, f16c1, f16bias);
 | |
|     texel   += texture(s2D, c2);
 | |
|     texel   += texture(s2D, f16c2, f16bias);
 | |
|     texel   += texture(s3D, c3);
 | |
|     texel   += texture(s3D, f16c3, f16bias);
 | |
|     texel   += texture(sCube, c3);
 | |
|     texel   += texture(sCube, f16c3, f16bias);
 | |
|     texel.x += texture(s1DShadow, c3);
 | |
|     texel.x += texture(s1DShadow, f16c2, compare, f16bias);
 | |
|     texel.x += texture(s2DShadow, c3);
 | |
|     texel.x += texture(s2DShadow, f16c2, compare, f16bias);
 | |
|     texel.x += texture(sCubeShadow, c4);
 | |
|     texel.x += texture(sCubeShadow, f16c3, compare, f16bias);
 | |
|     texel   += texture(s1DArray, c2);
 | |
|     texel   += texture(s1DArray, f16c2, f16bias);
 | |
|     texel   += texture(s2DArray, c3);
 | |
|     texel   += texture(s2DArray, f16c3, f16bias);
 | |
|     texel   += texture(sCubeArray, c4);
 | |
|     texel   += texture(sCubeArray, f16c4, f16bias);
 | |
|     texel.x += texture(s1DArrayShadow, c3);
 | |
|     texel.x += texture(s1DArrayShadow, f16c2, compare, f16bias);
 | |
|     texel.x += texture(s2DArrayShadow, c4);
 | |
|     texel.x += texture(s2DArrayShadow, f16c3, compare);
 | |
|     texel   += texture(s2DRect, c2);
 | |
|     texel   += texture(s2DRect, f16c2);
 | |
|     texel.x += texture(s2DRectShadow, c3);
 | |
|     texel.x += texture(s2DRectShadow, f16c2, compare);
 | |
|     texel.x += texture(sCubeArrayShadow, c4, compare);
 | |
|     texel.x += texture(sCubeArrayShadow, f16c4, compare);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureProj()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureProj(s1D, c2);
 | |
|     texel   += textureProj(s1D, f16c2, f16bias);
 | |
|     texel   += textureProj(s1D, c4);
 | |
|     texel   += textureProj(s1D, f16c4, f16bias);
 | |
|     texel   += textureProj(s2D, c3);
 | |
|     texel   += textureProj(s2D, f16c3, f16bias);
 | |
|     texel   += textureProj(s2D, c4);
 | |
|     texel   += textureProj(s2D, f16c4, f16bias);
 | |
|     texel   += textureProj(s3D, c4);
 | |
|     texel   += textureProj(s3D, f16c4, f16bias);
 | |
|     texel.x += textureProj(s1DShadow, c4);
 | |
|     texel.x += textureProj(s1DShadow, f16c3, compare, f16bias);
 | |
|     texel.x += textureProj(s2DShadow, c4);
 | |
|     texel.x += textureProj(s2DShadow, f16c3, compare, f16bias);
 | |
|     texel   += textureProj(s2DRect, c3);
 | |
|     texel   += textureProj(s2DRect, f16c3);
 | |
|     texel   += textureProj(s2DRect, c4);
 | |
|     texel   += textureProj(s2DRect, f16c4);
 | |
|     texel.x += textureProj(s2DRectShadow, c4);
 | |
|     texel.x += textureProj(s2DRectShadow, f16c3, compare);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureLod()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureLod(s1D, c1, lod);
 | |
|     texel   += textureLod(s1D, f16c1, f16lod);
 | |
|     texel   += textureLod(s2D, c2, lod);
 | |
|     texel   += textureLod(s2D, f16c2, f16lod);
 | |
|     texel   += textureLod(s3D, c3, lod);
 | |
|     texel   += textureLod(s3D, f16c3, f16lod);
 | |
|     texel   += textureLod(sCube, c3, lod);
 | |
|     texel   += textureLod(sCube, f16c3, f16lod);
 | |
|     texel.x += textureLod(s1DShadow, c3, lod);
 | |
|     texel.x += textureLod(s1DShadow, f16c2, compare, f16lod);
 | |
|     texel.x += textureLod(s2DShadow, c3, lod);
 | |
|     texel.x += textureLod(s2DShadow, f16c2, compare, f16lod);
 | |
|     texel   += textureLod(s1DArray, c2, lod);
 | |
|     texel   += textureLod(s1DArray, f16c2, f16lod);
 | |
|     texel   += textureLod(s2DArray, c3, lod);
 | |
|     texel   += textureLod(s2DArray, f16c3, f16lod);
 | |
|     texel.x += textureLod(s1DArrayShadow, c3, lod);
 | |
|     texel.x += textureLod(s1DArrayShadow, f16c2, compare, f16lod);
 | |
|     texel   += textureLod(sCubeArray, c4, lod);
 | |
|     texel   += textureLod(sCubeArray, f16c4, f16lod);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureOffset(s1D, c1, offset1);
 | |
|     texel   += textureOffset(s1D, f16c1, offset1, f16bias);
 | |
|     texel   += textureOffset(s2D, c2, offset2);
 | |
|     texel   += textureOffset(s2D, f16c2, offset2, f16bias);
 | |
|     texel   += textureOffset(s3D, c3, offset3);
 | |
|     texel   += textureOffset(s3D, f16c3, offset3, f16bias);
 | |
|     texel   += textureOffset(s2DRect, c2, offset2);
 | |
|     texel   += textureOffset(s2DRect, f16c2, offset2);
 | |
|     texel.x += textureOffset(s2DRectShadow, c3, offset2);
 | |
|     texel.x += textureOffset(s2DRectShadow, f16c2, compare, offset2);
 | |
|     texel.x += textureOffset(s1DShadow, c3, offset1);
 | |
|     texel.x += textureOffset(s1DShadow, f16c2, compare, offset1, f16bias);
 | |
|     texel.x += textureOffset(s2DShadow, c3, offset2);
 | |
|     texel.x += textureOffset(s2DShadow, f16c2, compare, offset2, f16bias);
 | |
|     texel   += textureOffset(s1DArray, c2, offset1);
 | |
|     texel   += textureOffset(s1DArray, f16c2, offset1, f16bias);
 | |
|     texel   += textureOffset(s2DArray, c3, offset2);
 | |
|     texel   += textureOffset(s2DArray, f16c3, offset2, f16bias);
 | |
|     texel.x += textureOffset(s1DArrayShadow, c3, offset1);
 | |
|     texel.x += textureOffset(s1DArrayShadow, f16c2, compare, offset1, f16bias);
 | |
|     texel.x += textureOffset(s2DArrayShadow, c4, offset2);
 | |
|     texel.x += textureOffset(s2DArrayShadow, f16c3, compare, offset2);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureProjOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureProjOffset(s1D, c2, offset1);
 | |
|     texel   += textureProjOffset(s1D, f16c2, offset1, f16bias);
 | |
|     texel   += textureProjOffset(s1D, c4, offset1);
 | |
|     texel   += textureProjOffset(s1D, f16c4, offset1, f16bias);
 | |
|     texel   += textureProjOffset(s2D, c3, offset2);
 | |
|     texel   += textureProjOffset(s2D, f16c3, offset2, f16bias);
 | |
|     texel   += textureProjOffset(s2D, c4, offset2);
 | |
|     texel   += textureProjOffset(s2D, f16c4, offset2, f16bias);
 | |
|     texel   += textureProjOffset(s3D, c4, offset3);
 | |
|     texel   += textureProjOffset(s3D, f16c4, offset3, f16bias);
 | |
|     texel   += textureProjOffset(s2DRect, c3, offset2);
 | |
|     texel   += textureProjOffset(s2DRect, f16c3, offset2);
 | |
|     texel   += textureProjOffset(s2DRect, c4, offset2);
 | |
|     texel   += textureProjOffset(s2DRect, f16c4, offset2);
 | |
|     texel.x += textureProjOffset(s2DRectShadow, c4, offset2);
 | |
|     texel.x += textureProjOffset(s2DRectShadow, f16c3, compare, offset2);
 | |
|     texel.x += textureProjOffset(s1DShadow, c4, offset1);
 | |
|     texel.x += textureProjOffset(s1DShadow, f16c3, compare, offset1, f16bias);
 | |
|     texel.x += textureProjOffset(s2DShadow, c4, offset2);
 | |
|     texel.x += textureProjOffset(s2DShadow, f16c3, compare, offset2, f16bias); 
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureLodOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureLodOffset(s1D, c1, lod, offset1);
 | |
|     texel   += textureLodOffset(s1D, f16c1, f16lod, offset1);
 | |
|     texel   += textureLodOffset(s2D, c2, lod, offset2);
 | |
|     texel   += textureLodOffset(s2D, f16c2, f16lod, offset2);
 | |
|     texel   += textureLodOffset(s3D, c3, lod, offset3);
 | |
|     texel   += textureLodOffset(s3D, f16c3, f16lod, offset3);
 | |
|     texel.x += textureLodOffset(s1DShadow, c3, lod, offset1);
 | |
|     texel.x += textureLodOffset(s1DShadow, f16c2, compare, f16lod, offset1);
 | |
|     texel.x += textureLodOffset(s2DShadow, c3, lod, offset2);
 | |
|     texel.x += textureLodOffset(s2DShadow, f16c2, compare, f16lod, offset2);
 | |
|     texel   += textureLodOffset(s1DArray, c2, lod, offset1);
 | |
|     texel   += textureLodOffset(s1DArray, f16c2, f16lod, offset1);
 | |
|     texel   += textureLodOffset(s2DArray, c3, lod, offset2);
 | |
|     texel   += textureLodOffset(s2DArray, f16c3, f16lod, offset2);
 | |
|     texel.x += textureLodOffset(s1DArrayShadow, c3, lod, offset1);
 | |
|     texel.x += textureLodOffset(s1DArrayShadow, f16c2, compare, f16lod, offset1);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureProjLodOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureProjLodOffset(s1D, c2, lod, offset1);
 | |
|     texel   += textureProjLodOffset(s1D, f16c2, f16lod, offset1);
 | |
|     texel   += textureProjLodOffset(s1D, c4, lod, offset1);
 | |
|     texel   += textureProjLodOffset(s1D, f16c4, f16lod, offset1);
 | |
|     texel   += textureProjLodOffset(s2D, c3, lod, offset2);
 | |
|     texel   += textureProjLodOffset(s2D, f16c3, f16lod, offset2);
 | |
|     texel   += textureProjLodOffset(s2D, c4, lod, offset2);
 | |
|     texel   += textureProjLodOffset(s2D, f16c4, f16lod, offset2);
 | |
|     texel   += textureProjLodOffset(s3D, c4, lod, offset3);
 | |
|     texel   += textureProjLodOffset(s3D, f16c4, f16lod, offset3);
 | |
|     texel.x += textureProjLodOffset(s1DShadow, c4, lod, offset1);
 | |
|     texel.x += textureProjLodOffset(s1DShadow, f16c3, compare, f16lod, offset1);
 | |
|     texel.x += textureProjLodOffset(s2DShadow, c4, lod, offset2);
 | |
|     texel.x += textureProjLodOffset(s2DShadow, f16c3, compare, f16lod, offset2);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTexelFetch()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += texelFetch(s1D, int(c1), int(lod));
 | |
|     texel   += texelFetch(s2D, ivec2(c2), int(lod));
 | |
|     texel   += texelFetch(s3D, ivec3(c3), int(lod));
 | |
|     texel   += texelFetch(s2DRect, ivec2(c2));
 | |
|     texel   += texelFetch(s1DArray, ivec2(c2), int(lod));
 | |
|     texel   += texelFetch(s2DArray, ivec3(c3), int(lod));
 | |
|     texel   += texelFetch(sBuffer, int(c1));
 | |
|     texel   += texelFetch(s2DMS, ivec2(c2), 1);
 | |
|     texel   += texelFetch(s2DMSArray, ivec3(c3), 2);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTexelFetchOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += texelFetchOffset(s1D, int(c1), int(lod), offset1);
 | |
|     texel   += texelFetchOffset(s2D, ivec2(c2), int(lod), offset2);
 | |
|     texel   += texelFetchOffset(s3D, ivec3(c3), int(lod), offset3);
 | |
|     texel   += texelFetchOffset(s2DRect, ivec2(c2), offset2);
 | |
|     texel   += texelFetchOffset(s1DArray, ivec2(c2), int(lod), offset1);
 | |
|     texel   += texelFetchOffset(s2DArray, ivec3(c3), int(lod), offset2);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureGrad()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureGrad(s1D, c1, dPdxy1, dPdxy1);
 | |
|     texel   += textureGrad(s1D, f16c1, f16dPdxy1, f16dPdxy1);
 | |
|     texel   += textureGrad(s2D, c2, dPdxy2, dPdxy2);
 | |
|     texel   += textureGrad(s2D, f16c2, f16dPdxy2, f16dPdxy2);
 | |
|     texel   += textureGrad(s3D, c3, dPdxy3, dPdxy3);
 | |
|     texel   += textureGrad(s3D, f16c3, f16dPdxy3, f16dPdxy3);
 | |
|     texel   += textureGrad(sCube, c3, dPdxy3, dPdxy3);
 | |
|     texel   += textureGrad(sCube, f16c3, f16dPdxy3, f16dPdxy3);
 | |
|     texel   += textureGrad(s2DRect, c2, dPdxy2, dPdxy2);
 | |
|     texel   += textureGrad(s2DRect, f16c2, f16dPdxy2, f16dPdxy2);
 | |
|     texel.x += textureGrad(s2DRectShadow, c3, dPdxy2, dPdxy2);
 | |
|     texel.x += textureGrad(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2);
 | |
|     texel.x += textureGrad(s1DShadow, c3, dPdxy1, dPdxy1);
 | |
|     texel.x += textureGrad(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1);
 | |
|     texel.x += textureGrad(s2DShadow, c3, dPdxy2, dPdxy2);
 | |
|     texel.x += textureGrad(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2);
 | |
|     texel.x += textureGrad(sCubeShadow, c4, dPdxy3, dPdxy3);
 | |
|     texel.x += textureGrad(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3);
 | |
|     texel   += textureGrad(s1DArray, c2, dPdxy1, dPdxy1);
 | |
|     texel   += textureGrad(s1DArray, f16c2, f16dPdxy1, f16dPdxy1);
 | |
|     texel   += textureGrad(s2DArray, c3, dPdxy2, dPdxy2);
 | |
|     texel   += textureGrad(s2DArray, f16c3, f16dPdxy2, f16dPdxy2);
 | |
|     texel.x += textureGrad(s1DArrayShadow, c3, dPdxy1, dPdxy1);
 | |
|     texel.x += textureGrad(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1);
 | |
|     texel.x += textureGrad(s2DArrayShadow, c4, dPdxy2, dPdxy2);
 | |
|     texel.x += textureGrad(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2);
 | |
|     texel   += textureGrad(sCubeArray, c4, dPdxy3, dPdxy3);
 | |
|     texel   += textureGrad(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureGradOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureGradOffset(s1D, c1, dPdxy1, dPdxy1, offset1);
 | |
|     texel   += textureGradOffset(s1D, f16c1, f16dPdxy1, f16dPdxy1, offset1);
 | |
|     texel   += textureGradOffset(s2D, c2, dPdxy2, dPdxy2, offset2);
 | |
|     texel   += textureGradOffset(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2);
 | |
|     texel   += textureGradOffset(s3D, c3, dPdxy3, dPdxy3, offset3);
 | |
|     texel   += textureGradOffset(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3);
 | |
|     texel   += textureGradOffset(s2DRect, c2, dPdxy2, dPdxy2, offset2);
 | |
|     texel   += textureGradOffset(s2DRect, f16c2, f16dPdxy2, f16dPdxy2, offset2);
 | |
|     texel.x += textureGradOffset(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2);
 | |
|     texel.x += textureGradOffset(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2);
 | |
|     texel.x += textureGradOffset(s1DShadow, c3, dPdxy1, dPdxy1, offset1);
 | |
|     texel.x += textureGradOffset(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1);
 | |
|     texel.x += textureGradOffset(s2DShadow, c3, dPdxy2, dPdxy2, offset2);
 | |
|     texel.x += textureGradOffset(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2);
 | |
|     texel   += textureGradOffset(s1DArray, c2, dPdxy1, dPdxy1, offset1);
 | |
|     texel   += textureGradOffset(s1DArray, f16c2, f16dPdxy1, f16dPdxy1, offset1);
 | |
|     texel   += textureGradOffset(s2DArray, c3, dPdxy2, dPdxy2, offset2);
 | |
|     texel   += textureGradOffset(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2);
 | |
|     texel.x += textureGradOffset(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1);
 | |
|     texel.x += textureGradOffset(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1);
 | |
|     texel.x += textureGradOffset(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2);
 | |
|     texel.x += textureGradOffset(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureProjGrad()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureProjGrad(s1D, c2, dPdxy1, dPdxy1);
 | |
|     texel   += textureProjGrad(s1D, f16c2, f16dPdxy1, f16dPdxy1);
 | |
|     texel   += textureProjGrad(s1D, c4, dPdxy1, dPdxy1);
 | |
|     texel   += textureProjGrad(s1D, f16c4, f16dPdxy1, f16dPdxy1);
 | |
|     texel   += textureProjGrad(s2D, c3, dPdxy2, dPdxy2);
 | |
|     texel   += textureProjGrad(s2D, f16c3, f16dPdxy2, f16dPdxy2);
 | |
|     texel   += textureProjGrad(s2D, c4, dPdxy2, dPdxy2);
 | |
|     texel   += textureProjGrad(s2D, f16c4, f16dPdxy2, f16dPdxy2);
 | |
|     texel   += textureProjGrad(s3D, c4, dPdxy3, dPdxy3);
 | |
|     texel   += textureProjGrad(s3D, f16c4, f16dPdxy3, f16dPdxy3);
 | |
|     texel   += textureProjGrad(s2DRect, c3, dPdxy2, dPdxy2);
 | |
|     texel   += textureProjGrad(s2DRect, f16c3, f16dPdxy2, f16dPdxy2);
 | |
|     texel   += textureProjGrad(s2DRect, c4, dPdxy2, dPdxy2);
 | |
|     texel   += textureProjGrad(s2DRect, f16c4, f16dPdxy2, f16dPdxy2);
 | |
|     texel.x += textureProjGrad(s2DRectShadow, c4, dPdxy2, dPdxy2);
 | |
|     texel.x += textureProjGrad(s2DRectShadow, f16c3, compare, f16dPdxy2, f16dPdxy2);
 | |
|     texel.x += textureProjGrad(s1DShadow, c4, dPdxy1, dPdxy1);
 | |
|     texel.x += textureProjGrad(s1DShadow, f16c3, compare, f16dPdxy1, f16dPdxy1);
 | |
|     texel.x += textureProjGrad(s2DShadow, c4, dPdxy2, dPdxy2);
 | |
|     texel.x += textureProjGrad(s2DShadow, f16c3, compare, f16dPdxy2, f16dPdxy2);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureProjGradoffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureProjGradOffset(s1D, c2, dPdxy1, dPdxy1, offset1);
 | |
|     texel   += textureProjGradOffset(s1D, f16c2, f16dPdxy1, f16dPdxy1, offset1);
 | |
|     texel   += textureProjGradOffset(s1D, c4, dPdxy1, dPdxy1, offset1);
 | |
|     texel   += textureProjGradOffset(s1D, f16c4, f16dPdxy1, f16dPdxy1, offset1);
 | |
|     texel   += textureProjGradOffset(s2D, c3, dPdxy2, dPdxy2, offset2);
 | |
|     texel   += textureProjGradOffset(s2D, f16c3, f16dPdxy2, f16dPdxy2, offset2);
 | |
|     texel   += textureProjGradOffset(s2D, c4, dPdxy2, dPdxy2, offset2);
 | |
|     texel   += textureProjGradOffset(s2D, f16c4, f16dPdxy2, f16dPdxy2, offset2);
 | |
|     texel   += textureProjGradOffset(s2DRect, c3, dPdxy2, dPdxy2, offset2);
 | |
|     texel   += textureProjGradOffset(s2DRect, f16c3, f16dPdxy2, f16dPdxy2, offset2);
 | |
|     texel   += textureProjGradOffset(s2DRect, c4, dPdxy2, dPdxy2, offset2);
 | |
|     texel   += textureProjGradOffset(s2DRect, f16c4, f16dPdxy2, f16dPdxy2, offset2);
 | |
|     texel.x += textureProjGradOffset(s2DRectShadow, c4, dPdxy2, dPdxy2, offset2);
 | |
|     texel.x += textureProjGradOffset(s2DRectShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2);
 | |
|     texel   += textureProjGradOffset(s3D, c4, dPdxy3, dPdxy3, offset3);
 | |
|     texel   += textureProjGradOffset(s3D, f16c4, f16dPdxy3, f16dPdxy3, offset3);
 | |
|     texel.x += textureProjGradOffset(s1DShadow, c4, dPdxy1, dPdxy1, offset1);
 | |
|     texel.x += textureProjGradOffset(s1DShadow, f16c3, compare, f16dPdxy1, f16dPdxy1, offset1);
 | |
|     texel.x += textureProjGradOffset(s2DShadow, c4, dPdxy2, dPdxy2, offset2);
 | |
|     texel.x += textureProjGradOffset(s2DShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureGather()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureGather(s2D, c2, 0);
 | |
|     texel   += textureGather(s2D, f16c2, 0, f16bias);
 | |
|     texel   += textureGather(s2DArray, c3, 0);
 | |
|     texel   += textureGather(s2DArray, f16c3, 0, f16bias);
 | |
|     texel   += textureGather(sCube, c3, 0);
 | |
|     texel   += textureGather(sCube, f16c3, 0, f16bias);
 | |
|     texel   += textureGather(sCubeArray, c4, 0);
 | |
|     texel   += textureGather(sCubeArray, f16c4, 0, f16bias);
 | |
|     texel   += textureGather(s2DRect, c2, 0);
 | |
|     texel   += textureGather(s2DRect, f16c2, 0);
 | |
|     texel   += textureGather(s2DShadow, c2, compare);
 | |
|     texel   += textureGather(s2DShadow, f16c2, compare);
 | |
|     texel   += textureGather(s2DArrayShadow, c3, compare);
 | |
|     texel   += textureGather(s2DArrayShadow, f16c3, compare);
 | |
|     texel   += textureGather(sCubeShadow, c3, compare);
 | |
|     texel   += textureGather(sCubeShadow, f16c3, compare);
 | |
|     texel   += textureGather(sCubeArrayShadow, c4, compare);
 | |
|     texel   += textureGather(sCubeArrayShadow, f16c4, compare);
 | |
|     texel   += textureGather(s2DRectShadow, c2, compare);
 | |
|     texel   += textureGather(s2DRectShadow, f16c2, compare);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureGatherOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureGatherOffset(s2D, c2, offset2, 0);
 | |
|     texel   += textureGatherOffset(s2D, f16c2, offset2, 0, f16bias);
 | |
|     texel   += textureGatherOffset(s2DArray, c3, offset2, 0);
 | |
|     texel   += textureGatherOffset(s2DArray, f16c3, offset2, 0, f16bias);
 | |
|     texel   += textureGatherOffset(s2DRect, c2, offset2, 0);
 | |
|     texel   += textureGatherOffset(s2DRect, f16c2, offset2, 0);
 | |
|     texel   += textureGatherOffset(s2DShadow, c2, compare, offset2);
 | |
|     texel   += textureGatherOffset(s2DShadow, f16c2, compare, offset2);
 | |
|     texel   += textureGatherOffset(s2DArrayShadow, c3, compare, offset2);
 | |
|     texel   += textureGatherOffset(s2DArrayShadow, f16c3, compare, offset2);
 | |
|     texel   += textureGatherOffset(s2DRectShadow, c2, compare, offset2);
 | |
|     texel   += textureGatherOffset(s2DRectShadow, f16c2, compare, offset2);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureGatherOffsets()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureGatherOffsets(s2D, c2, offsets, 0);
 | |
|     texel   += textureGatherOffsets(s2D, f16c2, offsets, 0, f16bias);
 | |
|     texel   += textureGatherOffsets(s2DArray, c3, offsets, 0);
 | |
|     texel   += textureGatherOffsets(s2DArray, f16c3, offsets, 0, f16bias);
 | |
|     texel   += textureGatherOffsets(s2DRect, c2, offsets, 0);
 | |
|     texel   += textureGatherOffsets(s2DRect, f16c2, offsets, 0);
 | |
|     texel   += textureGatherOffsets(s2DShadow, c2, compare, offsets);
 | |
|     texel   += textureGatherOffsets(s2DShadow, f16c2, compare, offsets);
 | |
|     texel   += textureGatherOffsets(s2DArrayShadow, c3, compare, offsets);
 | |
|     texel   += textureGatherOffsets(s2DArrayShadow, f16c3, compare, offsets);
 | |
|     texel   += textureGatherOffsets(s2DRectShadow, c2, compare, offsets);
 | |
|     texel   += textureGatherOffsets(s2DRectShadow, f16c2, compare, offsets);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureGatherLod()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureGatherLodAMD(s2D, c2, lod, 0);
 | |
|     texel   += textureGatherLodAMD(s2D, f16c2, f16lod, 0);
 | |
|     texel   += textureGatherLodAMD(s2DArray, c3, lod, 0);
 | |
|     texel   += textureGatherLodAMD(s2DArray, f16c3, f16lod, 0);
 | |
|     texel   += textureGatherLodAMD(sCube, c3, lod, 0);
 | |
|     texel   += textureGatherLodAMD(sCube, f16c3, f16lod, 0);
 | |
|     texel   += textureGatherLodAMD(sCubeArray, c4, lod, 0);
 | |
|     texel   += textureGatherLodAMD(sCubeArray, f16c4, f16lod, 0);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureGatherLodOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureGatherLodOffsetAMD(s2D, c2, lod, offset2, 0);
 | |
|     texel   += textureGatherLodOffsetAMD(s2D, f16c2, f16lod, offset2, 0);
 | |
|     texel   += textureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, 0);
 | |
|     texel   += textureGatherLodOffsetAMD(s2DArray, f16c3, f16lod, offset2, 0);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureGatherLodOffsets()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureGatherLodOffsetsAMD(s2D, c2, lod, offsets, 0);
 | |
|     texel   += textureGatherLodOffsetsAMD(s2D, f16c2, f16lod, offsets, 0);
 | |
|     texel   += textureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, 0);
 | |
|     texel   += textureGatherLodOffsetsAMD(s2DArray, f16c3, f16lod, offsets, 0);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| ivec4 testTextureSize()
 | |
| {
 | |
|     ivec4 size = ivec4(0);
 | |
| 
 | |
|     size.x      += textureSize(s1D, int(lod));
 | |
|     size.xy     += textureSize(s2D, int(lod));
 | |
|     size.xyz    += textureSize(s3D, int(lod));
 | |
|     size.xy     += textureSize(sCube, int(lod));
 | |
|     size.x      += textureSize(s1DShadow, int(lod));
 | |
|     size.xy     += textureSize(s2DShadow, int(lod));
 | |
|     size.xy     += textureSize(sCubeShadow, int(lod));
 | |
|     size.xyz    += textureSize(sCubeArray, int(lod));
 | |
|     size.xyz    += textureSize(sCubeArrayShadow, int(lod));
 | |
|     size.xy     += textureSize(s2DRect);
 | |
|     size.xy     += textureSize(s2DRectShadow);
 | |
|     size.xy     += textureSize(s1DArray, int(lod));
 | |
|     size.xyz    += textureSize(s2DArray, int(lod));
 | |
|     size.xy     += textureSize(s1DArrayShadow, int(lod));
 | |
|     size.xyz    += textureSize(s2DArrayShadow, int(lod));
 | |
|     size.x      += textureSize(sBuffer);
 | |
|     size.xy     += textureSize(s2DMS);
 | |
|     size.xyz    += textureSize(s2DMSArray);
 | |
| 
 | |
|     return size;
 | |
| }
 | |
| 
 | |
| vec2 testTextureQueryLod()
 | |
| {
 | |
|     vec2 lod = vec2(0.0);
 | |
| 
 | |
|     lod  += textureQueryLod(s1D, c1);
 | |
|     lod  += textureQueryLod(s1D, f16c1);
 | |
|     lod  += textureQueryLod(s2D, c2);
 | |
|     lod  += textureQueryLod(s2D, f16c2);
 | |
|     lod  += textureQueryLod(s3D, c3);
 | |
|     lod  += textureQueryLod(s3D, f16c3);
 | |
|     lod  += textureQueryLod(sCube, c3);
 | |
|     lod  += textureQueryLod(sCube, f16c3);
 | |
|     lod  += textureQueryLod(s1DArray, c1);
 | |
|     lod  += textureQueryLod(s1DArray, f16c1);
 | |
|     lod  += textureQueryLod(s2DArray, c2);
 | |
|     lod  += textureQueryLod(s2DArray, f16c2);
 | |
|     lod  += textureQueryLod(sCubeArray, c3);
 | |
|     lod  += textureQueryLod(sCubeArray, f16c3);
 | |
|     lod  += textureQueryLod(s1DShadow, c1);
 | |
|     lod  += textureQueryLod(s1DShadow, f16c1);
 | |
|     lod  += textureQueryLod(s2DShadow, c2);
 | |
|     lod  += textureQueryLod(s2DShadow, f16c2);
 | |
|     lod  += textureQueryLod(sCubeArrayShadow, c3);
 | |
|     lod  += textureQueryLod(sCubeArrayShadow, f16c3);
 | |
|     lod  += textureQueryLod(s1DArrayShadow, c1);
 | |
|     lod  += textureQueryLod(s1DArrayShadow, f16c1);
 | |
|     lod  += textureQueryLod(s2DArrayShadow, c2);
 | |
|     lod  += textureQueryLod(s2DArrayShadow, f16c2);
 | |
|     lod  += textureQueryLod(sCubeArrayShadow, c3);
 | |
|     lod  += textureQueryLod(sCubeArrayShadow, f16c3);
 | |
| 
 | |
|     return lod;
 | |
| }
 | |
| 
 | |
| int testTextureQueryLevels()
 | |
| {
 | |
|     int levels = 0;
 | |
| 
 | |
|     levels  += textureQueryLevels(s1D);
 | |
|     levels  += textureQueryLevels(s2D);
 | |
|     levels  += textureQueryLevels(s3D);
 | |
|     levels  += textureQueryLevels(sCube);
 | |
|     levels  += textureQueryLevels(s1DShadow);
 | |
|     levels  += textureQueryLevels(s2DShadow);
 | |
|     levels  += textureQueryLevels(sCubeShadow);
 | |
|     levels  += textureQueryLevels(sCubeArray);
 | |
|     levels  += textureQueryLevels(sCubeArrayShadow);
 | |
|     levels  += textureQueryLevels(s1DArray);
 | |
|     levels  += textureQueryLevels(s2DArray);
 | |
|     levels  += textureQueryLevels(s1DArrayShadow);
 | |
|     levels  += textureQueryLevels(s2DArrayShadow);
 | |
| 
 | |
|     return levels;
 | |
| }
 | |
| 
 | |
| int testTextureSamples()
 | |
| {
 | |
|     int samples = 0;
 | |
| 
 | |
|     samples += textureSamples(s2DMS);
 | |
|     samples += textureSamples(s2DMSArray);
 | |
| 
 | |
|     return samples;
 | |
| }
 | |
| 
 | |
| f16vec4 testImageLoad()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel += imageLoad(i1D, int(c1));
 | |
|     texel += imageLoad(i2D, ivec2(c2));
 | |
|     texel += imageLoad(i3D, ivec3(c3));
 | |
|     texel += imageLoad(i2DRect, ivec2(c2));
 | |
|     texel += imageLoad(iCube, ivec3(c3));
 | |
|     texel += imageLoad(iBuffer, int(c1));
 | |
|     texel += imageLoad(i1DArray, ivec2(c2));
 | |
|     texel += imageLoad(i2DArray, ivec3(c3));
 | |
|     texel += imageLoad(iCubeArray, ivec3(c3));
 | |
|     texel += imageLoad(i2DMS, ivec2(c2), 1);
 | |
|     texel += imageLoad(i2DMSArray, ivec3(c3), 1);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| void testImageStore(f16vec4 data)
 | |
| {
 | |
|     imageStore(i1D, int(c1), data);
 | |
|     imageStore(i2D, ivec2(c2), data);
 | |
|     imageStore(i3D, ivec3(c3), data);
 | |
|     imageStore(i2DRect, ivec2(c2), data);
 | |
|     imageStore(iCube, ivec3(c3), data);
 | |
|     imageStore(iBuffer, int(c1), data);
 | |
|     imageStore(i1DArray, ivec2(c2), data);
 | |
|     imageStore(i2DArray, ivec3(c3), data);
 | |
|     imageStore(iCubeArray, ivec3(c3), data);
 | |
|     imageStore(i2DMS, ivec2(c2), 1, data);
 | |
|     imageStore(i2DMSArray, ivec3(c3), 1, data);
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTexture()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureARB(s2D, c2, texel);
 | |
|     sparseTextureARB(s2D, f16c2, texel, f16bias);
 | |
|     sparseTextureARB(s3D, c3, texel);
 | |
|     sparseTextureARB(s3D, f16c3, texel, f16bias);
 | |
|     sparseTextureARB(sCube, c3, texel);
 | |
|     sparseTextureARB(sCube, f16c3, texel, f16bias);
 | |
|     sparseTextureARB(s2DShadow, c3, texel.x);
 | |
|     sparseTextureARB(s2DShadow, f16c2, compare, texel.x, f16bias);
 | |
|     sparseTextureARB(sCubeShadow, c4, texel.x);
 | |
|     sparseTextureARB(sCubeShadow, f16c3, compare, texel.x, f16bias);
 | |
|     sparseTextureARB(s2DArray, c3, texel);
 | |
|     sparseTextureARB(s2DArray, f16c3, texel, f16bias);
 | |
|     sparseTextureARB(sCubeArray, c4, texel);
 | |
|     sparseTextureARB(sCubeArray, f16c4, texel, f16bias);
 | |
|     sparseTextureARB(s2DArrayShadow, c4, texel.x);
 | |
|     sparseTextureARB(s2DArrayShadow, f16c3, compare, texel.x);
 | |
|     sparseTextureARB(s2DRect, c2, texel);
 | |
|     sparseTextureARB(s2DRect, f16c2, texel);
 | |
|     sparseTextureARB(s2DRectShadow, c3, texel.x);
 | |
|     sparseTextureARB(s2DRectShadow, f16c2, compare, texel.x);
 | |
|     sparseTextureARB(sCubeArrayShadow, c4, compare, texel.x);
 | |
|     sparseTextureARB(sCubeArrayShadow, f16c4, compare, texel.x);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureLod()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureLodARB(s2D, c2, lod, texel);
 | |
|     sparseTextureLodARB(s2D, f16c2, f16lod, texel);
 | |
|     sparseTextureLodARB(s3D, c3, lod, texel);
 | |
|     sparseTextureLodARB(s3D, f16c3, f16lod, texel);
 | |
|     sparseTextureLodARB(sCube, c3, lod, texel);
 | |
|     sparseTextureLodARB(sCube, f16c3, f16lod, texel);
 | |
|     sparseTextureLodARB(s2DShadow, c3, lod, texel.x);
 | |
|     sparseTextureLodARB(s2DShadow, f16c2, compare, f16lod, texel.x);
 | |
|     sparseTextureLodARB(s2DArray, c3, lod, texel);
 | |
|     sparseTextureLodARB(s2DArray, f16c3, f16lod, texel);
 | |
|     sparseTextureLodARB(sCubeArray, c4, lod, texel);
 | |
|     sparseTextureLodARB(sCubeArray, f16c4, f16lod, texel);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureOffsetARB(s2D, c2, offset2, texel);
 | |
|     sparseTextureOffsetARB(s2D, f16c2, offset2, texel, f16bias);
 | |
|     sparseTextureOffsetARB(s3D, c3, offset3, texel);
 | |
|     sparseTextureOffsetARB(s3D, f16c3, offset3, texel, f16bias);
 | |
|     sparseTextureOffsetARB(s2DRect, c2, offset2, texel);
 | |
|     sparseTextureOffsetARB(s2DRect, f16c2, offset2, texel);
 | |
|     sparseTextureOffsetARB(s2DRectShadow, c3, offset2, texel.x);
 | |
|     sparseTextureOffsetARB(s2DRectShadow, f16c2, compare, offset2, texel.x);
 | |
|     sparseTextureOffsetARB(s2DShadow, c3, offset2, texel.x);
 | |
|     sparseTextureOffsetARB(s2DShadow, f16c2, compare, offset2, texel.x, f16bias);
 | |
|     sparseTextureOffsetARB(s2DArray, c3, offset2, texel);
 | |
|     sparseTextureOffsetARB(s2DArray, f16c3, offset2, texel, f16bias);
 | |
|     sparseTextureOffsetARB(s2DArrayShadow, c4, offset2, texel.x);
 | |
|     sparseTextureOffsetARB(s2DArrayShadow, f16c3, compare, offset2, texel.x);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureLodOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureLodOffsetARB(s2D, c2, lod, offset2, texel);
 | |
|     sparseTextureLodOffsetARB(s2D, f16c2, f16lod, offset2, texel);
 | |
|     sparseTextureLodOffsetARB(s3D, c3, lod, offset3, texel);
 | |
|     sparseTextureLodOffsetARB(s3D, f16c3, f16lod, offset3, texel);
 | |
|     sparseTextureLodOffsetARB(s2DShadow, c3, lod, offset2, texel.x);
 | |
|     sparseTextureLodOffsetARB(s2DShadow, f16c2, compare, f16lod, offset2, texel.x);
 | |
|     sparseTextureLodOffsetARB(s2DArray, c3, lod, offset2, texel);
 | |
|     sparseTextureLodOffsetARB(s2DArray, f16c3, f16lod, offset2, texel);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureGrad()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureGradARB(s2D, c2, dPdxy2, dPdxy2, texel);
 | |
|     sparseTextureGradARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, texel);
 | |
|     sparseTextureGradARB(s3D, c3, dPdxy3, dPdxy3, texel);
 | |
|     sparseTextureGradARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, texel);
 | |
|     sparseTextureGradARB(sCube, c3, dPdxy3, dPdxy3, texel);
 | |
|     sparseTextureGradARB(sCube, f16c3, f16dPdxy3, f16dPdxy3, texel);
 | |
|     sparseTextureGradARB(s2DRect, c2, dPdxy2, dPdxy2, texel);
 | |
|     sparseTextureGradARB(s2DRect, f16c2, f16dPdxy2, f16dPdxy2, texel);
 | |
|     sparseTextureGradARB(s2DRectShadow, c3, dPdxy2, dPdxy2, texel.x);
 | |
|     sparseTextureGradARB(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, texel.x);
 | |
|     sparseTextureGradARB(s2DShadow, c3, dPdxy2, dPdxy2, texel.x);
 | |
|     sparseTextureGradARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, texel.x);
 | |
|     sparseTextureGradARB(sCubeShadow, c4, dPdxy3, dPdxy3, texel.x);
 | |
|     sparseTextureGradARB(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3, texel.x);
 | |
|     sparseTextureGradARB(s2DArray, c3, dPdxy2, dPdxy2, texel);
 | |
|     sparseTextureGradARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, texel);
 | |
|     sparseTextureGradARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, texel.x);
 | |
|     sparseTextureGradARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, texel.x);
 | |
|     sparseTextureGradARB(sCubeArray, c4, dPdxy3, dPdxy3, texel);
 | |
|     sparseTextureGradARB(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3, texel);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureGradOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureGradOffsetARB(s2D, c2, dPdxy2, dPdxy2, offset2, texel);
 | |
|     sparseTextureGradOffsetARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2, texel);
 | |
|     sparseTextureGradOffsetARB(s3D, c3, dPdxy3, dPdxy3, offset3, texel);
 | |
|     sparseTextureGradOffsetARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3, texel);
 | |
|     sparseTextureGradOffsetARB(s2DRect, c2, dPdxy2, dPdxy2, offset2, texel);
 | |
|     sparseTextureGradOffsetARB(s2DRect, f16c2, f16dPdxy2, f16dPdxy2, offset2, texel);
 | |
|     sparseTextureGradOffsetARB(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2, texel.x);
 | |
|     sparseTextureGradOffsetARB(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, texel.x);
 | |
|     sparseTextureGradOffsetARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, texel.x);
 | |
|     sparseTextureGradOffsetARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, texel.x);
 | |
|     sparseTextureGradOffsetARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, texel);
 | |
|     sparseTextureGradOffsetARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2, texel);
 | |
|     sparseTextureGradOffsetARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, texel.x);
 | |
|     sparseTextureGradOffsetARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2, texel.x);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTexelFetch()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTexelFetchARB(s2D, ivec2(c2), int(lod), texel);
 | |
|     sparseTexelFetchARB(s3D, ivec3(c3), int(lod), texel);
 | |
|     sparseTexelFetchARB(s2DRect, ivec2(c2), texel);
 | |
|     sparseTexelFetchARB(s2DArray, ivec3(c3), int(lod), texel);
 | |
|     sparseTexelFetchARB(s2DMS, ivec2(c2), 1, texel);
 | |
|     sparseTexelFetchARB(s2DMSArray, ivec3(c3), 2, texel);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTexelFetchOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTexelFetchOffsetARB(s2D, ivec2(c2), int(lod), offset2, texel);
 | |
|     sparseTexelFetchOffsetARB(s3D, ivec3(c3), int(lod), offset3, texel);
 | |
|     sparseTexelFetchOffsetARB(s2DRect, ivec2(c2), offset2, texel);
 | |
|     sparseTexelFetchOffsetARB(s2DArray, ivec3(c3), int(lod), offset2, texel);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureGather()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureGatherARB(s2D, c2, texel, 0);
 | |
|     sparseTextureGatherARB(s2D, f16c2, texel, 0, f16bias);
 | |
|     sparseTextureGatherARB(s2DArray, c3, texel, 0);
 | |
|     sparseTextureGatherARB(s2DArray, f16c3, texel, 0, f16bias);
 | |
|     sparseTextureGatherARB(sCube, c3, texel, 0);
 | |
|     sparseTextureGatherARB(sCube, f16c3, texel, 0, f16bias);
 | |
|     sparseTextureGatherARB(sCubeArray, c4, texel, 0);
 | |
|     sparseTextureGatherARB(sCubeArray, f16c4, texel, 0, f16bias);
 | |
|     sparseTextureGatherARB(s2DRect, c2, texel, 0);
 | |
|     sparseTextureGatherARB(s2DRect, f16c2, texel, 0);
 | |
|     sparseTextureGatherARB(s2DShadow, c2, compare, texel);
 | |
|     sparseTextureGatherARB(s2DShadow, f16c2, compare, texel);
 | |
|     sparseTextureGatherARB(s2DArrayShadow, c3, compare, texel);
 | |
|     sparseTextureGatherARB(s2DArrayShadow, f16c3, compare, texel);
 | |
|     sparseTextureGatherARB(sCubeShadow, c3, compare, texel);
 | |
|     sparseTextureGatherARB(sCubeShadow, f16c3, compare, texel);
 | |
|     sparseTextureGatherARB(sCubeArrayShadow, c4, compare, texel);
 | |
|     sparseTextureGatherARB(sCubeArrayShadow, f16c4, compare, texel);
 | |
|     sparseTextureGatherARB(s2DRectShadow, c2, compare, texel);
 | |
|     sparseTextureGatherARB(s2DRectShadow, f16c2, compare, texel);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureGatherOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureGatherOffsetARB(s2D, c2, offset2, texel, 0);
 | |
|     sparseTextureGatherOffsetARB(s2D, f16c2, offset2, texel, 0, f16bias);
 | |
|     sparseTextureGatherOffsetARB(s2DArray, c3, offset2, texel, 0);
 | |
|     sparseTextureGatherOffsetARB(s2DArray, f16c3, offset2, texel, 0, f16bias);
 | |
|     sparseTextureGatherOffsetARB(s2DRect, c2, offset2, texel, 0);
 | |
|     sparseTextureGatherOffsetARB(s2DRect, f16c2, offset2, texel, 0);
 | |
|     sparseTextureGatherOffsetARB(s2DShadow, c2, compare, offset2, texel);
 | |
|     sparseTextureGatherOffsetARB(s2DShadow, f16c2, compare, offset2, texel);
 | |
|     sparseTextureGatherOffsetARB(s2DArrayShadow, c3, compare, offset2, texel);
 | |
|     sparseTextureGatherOffsetARB(s2DArrayShadow, f16c3, compare, offset2, texel);
 | |
|     sparseTextureGatherOffsetARB(s2DRectShadow, c2, compare, offset2, texel);
 | |
|     sparseTextureGatherOffsetARB(s2DRectShadow, f16c2, compare, offset2, texel);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureGatherOffsets()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel, 0);
 | |
|     sparseTextureGatherOffsetsARB(s2D, f16c2, offsets, texel, 0, f16bias);
 | |
|     sparseTextureGatherOffsetsARB(s2DArray, c3, offsets, texel, 0);
 | |
|     sparseTextureGatherOffsetsARB(s2DArray, f16c3, offsets, texel, 0, f16bias);
 | |
|     sparseTextureGatherOffsetsARB(s2DRect, c2, offsets, texel, 0);
 | |
|     sparseTextureGatherOffsetsARB(s2DRect, f16c2, offsets, texel, 0);
 | |
|     sparseTextureGatherOffsetsARB(s2DShadow, c2, compare, offsets, texel);
 | |
|     sparseTextureGatherOffsetsARB(s2DShadow, f16c2, compare, offsets, texel);
 | |
|     sparseTextureGatherOffsetsARB(s2DArrayShadow, c3, compare, offsets, texel);
 | |
|     sparseTextureGatherOffsetsARB(s2DArrayShadow, f16c3, compare, offsets, texel);
 | |
|     sparseTextureGatherOffsetsARB(s2DRectShadow, c2, compare, offsets, texel);
 | |
|     sparseTextureGatherOffsetsARB(s2DRectShadow, f16c2, compare, offsets, texel);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureGatherLod()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureGatherLodAMD(s2D, c2, lod, texel, 0);
 | |
|     sparseTextureGatherLodAMD(s2D, f16c2, f16lod, texel, 0);
 | |
|     sparseTextureGatherLodAMD(s2DArray, c3, lod, texel, 0);
 | |
|     sparseTextureGatherLodAMD(s2DArray, f16c3, f16lod, texel, 0);
 | |
|     sparseTextureGatherLodAMD(sCube, c3, lod, texel, 0);
 | |
|     sparseTextureGatherLodAMD(sCube, f16c3, f16lod, texel, 0);
 | |
|     sparseTextureGatherLodAMD(sCubeArray, c4, lod, texel, 0);
 | |
|     sparseTextureGatherLodAMD(sCubeArray, f16c4, f16lod, texel, 0);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureGatherLodOffset()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureGatherLodOffsetAMD(s2D, c2, lod, offset2, texel, 0);
 | |
|     sparseTextureGatherLodOffsetAMD(s2D, f16c2, f16lod, offset2, texel, 0);
 | |
|     sparseTextureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, texel, 0);
 | |
|     sparseTextureGatherLodOffsetAMD(s2DArray, f16c3, f16lod, offset2, texel, 0);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureGatherLodOffsets()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureGatherLodOffsetsAMD(s2D, c2, lod, offsets, texel, 0);
 | |
|     sparseTextureGatherLodOffsetsAMD(s2D, f16c2, f16lod, offsets, texel, 0);
 | |
|     sparseTextureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, texel, 0);
 | |
|     sparseTextureGatherLodOffsetsAMD(s2DArray, f16c3, f16lod, offsets, texel, 0);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseImageLoad()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseImageLoadARB(i2D, ivec2(c2), texel);
 | |
|     sparseImageLoadARB(i3D, ivec3(c3), texel);
 | |
|     sparseImageLoadARB(i2DRect, ivec2(c2), texel);
 | |
|     sparseImageLoadARB(iCube, ivec3(c3), texel);
 | |
|     sparseImageLoadARB(i2DArray, ivec3(c3), texel);
 | |
|     sparseImageLoadARB(iCubeArray, ivec3(c3), texel);
 | |
|     sparseImageLoadARB(i2DMS, ivec2(c2), 1, texel);
 | |
|     sparseImageLoadARB(i2DMSArray, ivec3(c3), 2, texel);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureClamp()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureClampARB(s2D, c2, lodClamp, texel);
 | |
|     sparseTextureClampARB(s2D, f16c2, f16lodClamp, texel, f16bias);
 | |
|     sparseTextureClampARB(s3D, c3, lodClamp, texel);
 | |
|     sparseTextureClampARB(s3D, f16c3, f16lodClamp, texel, f16bias);
 | |
|     sparseTextureClampARB(sCube, c3, lodClamp, texel);
 | |
|     sparseTextureClampARB(sCube, f16c3, f16lodClamp, texel, f16bias);
 | |
|     sparseTextureClampARB(s2DShadow, c3, lodClamp, texel.x);
 | |
|     sparseTextureClampARB(s2DShadow, f16c2, compare, f16lodClamp, texel.x, f16bias);
 | |
|     sparseTextureClampARB(sCubeShadow, c4, lodClamp, texel.x);
 | |
|     sparseTextureClampARB(sCubeShadow, f16c3, compare, f16lodClamp, texel.x, f16bias);
 | |
|     sparseTextureClampARB(s2DArray, c3, lodClamp, texel);
 | |
|     sparseTextureClampARB(s2DArray, f16c3, f16lodClamp, texel, f16bias);
 | |
|     sparseTextureClampARB(sCubeArray, c4, lodClamp, texel);
 | |
|     sparseTextureClampARB(sCubeArray, f16c4, f16lodClamp, texel, f16bias);
 | |
|     sparseTextureClampARB(s2DArrayShadow, c4, lodClamp, texel.x);
 | |
|     sparseTextureClampARB(s2DArrayShadow, f16c3, compare, f16lodClamp, texel.x);
 | |
|     sparseTextureClampARB(sCubeArrayShadow, c4, compare, lodClamp, texel.x);
 | |
|     sparseTextureClampARB(sCubeArrayShadow, f16c4, compare, f16lodClamp, texel.x);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureClamp()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureClampARB(s1D, c1, lodClamp);
 | |
|     texel   += textureClampARB(s1D, f16c1, f16lodClamp, f16bias);
 | |
|     texel   += textureClampARB(s2D, c2, lodClamp);
 | |
|     texel   += textureClampARB(s2D, f16c2, f16lodClamp, f16bias);
 | |
|     texel   += textureClampARB(s3D, c3, lodClamp);
 | |
|     texel   += textureClampARB(s3D, f16c3, f16lodClamp, f16bias);
 | |
|     texel   += textureClampARB(sCube, c3, lodClamp);
 | |
|     texel   += textureClampARB(sCube, f16c3, f16lodClamp, f16bias);
 | |
|     texel.x += textureClampARB(s1DShadow, c3, lodClamp);
 | |
|     texel.x += textureClampARB(s1DShadow, f16c2, compare, f16lodClamp, f16bias);
 | |
|     texel.x += textureClampARB(s2DShadow, c3, lodClamp);
 | |
|     texel.x += textureClampARB(s2DShadow, f16c2, compare, f16lodClamp, f16bias);
 | |
|     texel.x += textureClampARB(sCubeShadow, c4, lodClamp);
 | |
|     texel.x += textureClampARB(sCubeShadow, f16c3, compare, f16lodClamp, f16bias);
 | |
|     texel   += textureClampARB(s1DArray, c2, lodClamp);
 | |
|     texel   += textureClampARB(s1DArray, f16c2, f16lodClamp, f16bias);
 | |
|     texel   += textureClampARB(s2DArray, c3, lodClamp);
 | |
|     texel   += textureClampARB(s2DArray, f16c3, f16lodClamp, f16bias);
 | |
|     texel   += textureClampARB(sCubeArray, c4, lodClamp);
 | |
|     texel   += textureClampARB(sCubeArray, f16c4, f16lodClamp, f16bias);
 | |
|     texel.x += textureClampARB(s1DArrayShadow, c3, lodClamp);
 | |
|     texel.x += textureClampARB(s1DArrayShadow, f16c2, compare, f16lodClamp, f16bias);
 | |
|     texel.x += textureClampARB(s2DArrayShadow, c4, lodClamp);
 | |
|     texel.x += textureClampARB(s2DArrayShadow, f16c3, compare, f16lodClamp);
 | |
|     texel.x += textureClampARB(sCubeArrayShadow, c4, compare, lodClamp);
 | |
|     texel.x += textureClampARB(sCubeArrayShadow, f16c4, compare, f16lodClamp);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureOffsetClamp()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureOffsetClampARB(s2D, c2, offset2, lodClamp, texel);
 | |
|     sparseTextureOffsetClampARB(s2D, f16c2, offset2, f16lodClamp, texel, f16bias);
 | |
|     sparseTextureOffsetClampARB(s3D, c3, offset3, lodClamp, texel);
 | |
|     sparseTextureOffsetClampARB(s3D, f16c3, offset3, f16lodClamp, texel, f16bias);
 | |
|     sparseTextureOffsetClampARB(s2DShadow, c3, offset2, lodClamp, texel.x);
 | |
|     sparseTextureOffsetClampARB(s2DShadow, f16c2, compare, offset2, f16lodClamp, texel.x, f16bias);
 | |
|     sparseTextureOffsetClampARB(s2DArray, c3, offset2, lodClamp, texel);
 | |
|     sparseTextureOffsetClampARB(s2DArray, f16c3, offset2, f16lodClamp, texel, f16bias);
 | |
|     sparseTextureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp, texel.x);
 | |
|     sparseTextureOffsetClampARB(s2DArrayShadow, f16c3, compare, offset2, f16lodClamp, texel.x);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureOffsetClamp()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureOffsetClampARB(s1D, c1, offset1, lodClamp);
 | |
|     texel   += textureOffsetClampARB(s1D, f16c1, offset1, f16lodClamp, f16bias);
 | |
|     texel   += textureOffsetClampARB(s2D, c2, offset2, lodClamp);
 | |
|     texel   += textureOffsetClampARB(s2D, f16c2, offset2, f16lodClamp, f16bias);
 | |
|     texel   += textureOffsetClampARB(s3D, c3, offset3, lodClamp);
 | |
|     texel   += textureOffsetClampARB(s3D, f16c3, offset3, f16lodClamp, f16bias);
 | |
|     texel.x += textureOffsetClampARB(s1DShadow, c3, offset1, lodClamp);
 | |
|     texel.x += textureOffsetClampARB(s1DShadow, f16c2, compare, offset1, f16lodClamp, f16bias);
 | |
|     texel.x += textureOffsetClampARB(s2DShadow, c3, offset2, lodClamp);
 | |
|     texel.x += textureOffsetClampARB(s2DShadow, f16c2, compare, offset2, f16lodClamp, f16bias);
 | |
|     texel   += textureOffsetClampARB(s1DArray, c2, offset1, lodClamp);
 | |
|     texel   += textureOffsetClampARB(s1DArray, f16c2, offset1, f16lodClamp, f16bias);
 | |
|     texel   += textureOffsetClampARB(s2DArray, c3, offset2, lodClamp);
 | |
|     texel   += textureOffsetClampARB(s2DArray, f16c3, offset2, f16lodClamp, f16bias);
 | |
|     texel.x += textureOffsetClampARB(s1DArrayShadow, c3, offset1, lodClamp);
 | |
|     texel.x += textureOffsetClampARB(s1DArrayShadow, f16c2, compare, offset1, f16lodClamp, f16bias);
 | |
|     texel.x += textureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp);
 | |
|     texel.x += textureOffsetClampARB(s2DArrayShadow, f16c3, compare, offset2, f16lodClamp);
 | |
|     
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureGradClamp()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp, texel);
 | |
|     sparseTextureGradClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, f16lodClamp, texel);
 | |
|     sparseTextureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp, texel);
 | |
|     sparseTextureGradClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp, texel);
 | |
|     sparseTextureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp, texel);
 | |
|     sparseTextureGradClampARB(sCube, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp, texel);
 | |
|     sparseTextureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp, texel.x);
 | |
|     sparseTextureGradClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, f16lodClamp, texel.x);
 | |
|     sparseTextureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp, texel.x);
 | |
|     sparseTextureGradClampARB(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3, f16lodClamp, texel.x);
 | |
|     sparseTextureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp, texel);
 | |
|     sparseTextureGradClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, f16lodClamp, texel);
 | |
|     sparseTextureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp, texel.x);
 | |
|     sparseTextureGradClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, f16lodClamp, texel.x);
 | |
|     sparseTextureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp, texel);
 | |
|     sparseTextureGradClampARB(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3, f16lodClamp, texel);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureGradClamp()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureGradClampARB(s1D, c1, dPdxy1, dPdxy1, lodClamp);
 | |
|     texel   += textureGradClampARB(s1D, f16c1, f16dPdxy1, f16dPdxy1, f16lodClamp);
 | |
|     texel   += textureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp);
 | |
|     texel   += textureGradClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, f16lodClamp);
 | |
|     texel   += textureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp);
 | |
|     texel   += textureGradClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp);
 | |
|     texel   += textureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp);
 | |
|     texel   += textureGradClampARB(sCube, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp);
 | |
|     texel.x += textureGradClampARB(s1DShadow, c3, dPdxy1, dPdxy1, lodClamp);
 | |
|     texel.x += textureGradClampARB(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, f16lodClamp);
 | |
|     texel.x += textureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp);
 | |
|     texel.x += textureGradClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, f16lodClamp);
 | |
|     texel.x += textureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp);
 | |
|     texel.x += textureGradClampARB(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3, f16lodClamp);
 | |
|     texel   += textureGradClampARB(s1DArray, c2, dPdxy1, dPdxy1, lodClamp);
 | |
|     texel   += textureGradClampARB(s1DArray, f16c2, f16dPdxy1, f16dPdxy1, f16lodClamp);
 | |
|     texel   += textureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp);
 | |
|     texel   += textureGradClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, f16lodClamp);
 | |
|     texel.x += textureGradClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, lodClamp);
 | |
|     texel.x += textureGradClampARB(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, f16lodClamp);
 | |
|     texel.x += textureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp);
 | |
|     texel.x += textureGradClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, f16lodClamp);
 | |
|     texel   += textureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp);
 | |
|     texel   += textureGradClampARB(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3, f16lodClamp);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSparseTextureGradOffsetClamp()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     sparseTextureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp, texel);
 | |
|     sparseTextureGradOffsetClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel);
 | |
|     sparseTextureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp, texel);
 | |
|     sparseTextureGradOffsetClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3, f16lodClamp, texel);
 | |
|     sparseTextureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel.x);
 | |
|     sparseTextureGradOffsetClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel.x);
 | |
|     sparseTextureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel);
 | |
|     sparseTextureGradOffsetClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel);
 | |
|     sparseTextureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp, texel.x);
 | |
|     sparseTextureGradOffsetClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel.x);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testTextureGradOffsetClamp()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += textureGradOffsetClampARB(s1D, c1, dPdxy1, dPdxy1, offset1, lodClamp);
 | |
|     texel   += textureGradOffsetClampARB(s1D, f16c1, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);
 | |
|     texel   += textureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp);
 | |
|     texel   += textureGradOffsetClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);
 | |
|     texel   += textureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp);
 | |
|     texel   += textureGradOffsetClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3, f16lodClamp);
 | |
|     texel.x += textureGradOffsetClampARB(s1DShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp);
 | |
|     texel.x += textureGradOffsetClampARB(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);
 | |
|     texel.x += textureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp);
 | |
|     texel.x += textureGradOffsetClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);
 | |
|     texel   += textureGradOffsetClampARB(s1DArray, c2, dPdxy1, dPdxy1, offset1, lodClamp);
 | |
|     texel   += textureGradOffsetClampARB(s1DArray, f16c2, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);
 | |
|     texel   += textureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp);
 | |
|     texel   += textureGradOffsetClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);
 | |
|     texel.x += textureGradOffsetClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp);
 | |
|     texel.x += textureGradOffsetClampARB(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);
 | |
|     texel.x += textureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp);
 | |
|     texel.x += textureGradOffsetClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testCombinedTextureSampler()
 | |
| {
 | |
|     f16vec4 texel = f16vec4(0.0hf);
 | |
| 
 | |
|     texel   += texture(f16sampler1D(t1D, s), c1);
 | |
|     texel   += texture(f16sampler1D(t1D, s), f16c1, f16bias);
 | |
|     texel   += texture(f16sampler2D(t2D, s), c2);
 | |
|     texel   += texture(f16sampler2D(t2D, s), f16c2, f16bias);
 | |
|     texel   += texture(f16sampler3D(t3D, s), c3);
 | |
|     texel   += texture(f16sampler3D(t3D, s), f16c3, f16bias);
 | |
|     texel   += texture(f16samplerCube(tCube, s), c3);
 | |
|     texel   += texture(f16samplerCube(tCube, s), f16c3, f16bias);
 | |
|     texel.x += texture(f16sampler1DShadow(t1D, sShadow), c3);
 | |
|     texel.x += texture(f16sampler1DShadow(t1D, sShadow), f16c2, compare, f16bias);
 | |
|     texel.x += texture(f16sampler2DShadow(t2D, sShadow), c3);
 | |
|     texel.x += texture(f16sampler2DShadow(t2D, sShadow), f16c2, compare, f16bias);
 | |
|     texel.x += texture(f16samplerCubeShadow(tCube, sShadow), c4);
 | |
|     texel.x += texture(f16samplerCubeShadow(tCube, sShadow), f16c3, compare, f16bias);
 | |
|     texel   += texture(f16sampler1DArray(t1DArray, s), c2);
 | |
|     texel   += texture(f16sampler1DArray(t1DArray, s), f16c2, f16bias);
 | |
|     texel   += texture(f16sampler2DArray(t2DArray, s), c3);
 | |
|     texel   += texture(f16sampler2DArray(t2DArray, s), f16c3, f16bias);
 | |
|     texel   += texture(f16samplerCubeArray(tCubeArray, s), c4);
 | |
|     texel   += texture(f16samplerCubeArray(tCubeArray, s), f16c4, f16bias);
 | |
|     texel.x += texture(f16sampler1DArrayShadow(t1DArray, sShadow), c3);
 | |
|     texel.x += texture(f16sampler1DArrayShadow(t1DArray, sShadow), f16c2, compare, f16bias);
 | |
|     texel.x += texture(f16sampler2DArrayShadow(t2DArray, sShadow), c4);
 | |
|     texel.x += texture(f16sampler2DArrayShadow(t2DArray, sShadow), f16c3, compare);
 | |
|     texel   += texture(f16sampler2DRect(t2DRect, s), c2);
 | |
|     texel   += texture(f16sampler2DRect(t2DRect, s), f16c2);
 | |
|     texel.x += texture(f16sampler2DRectShadow(t2DRect, sShadow), c3);
 | |
|     texel.x += texture(f16sampler2DRectShadow(t2DRect, sShadow), f16c2, compare);
 | |
|     texel.x += texture(f16samplerCubeArrayShadow(tCubeArray, sShadow), c4, compare);
 | |
|     texel.x += texture(f16samplerCubeArrayShadow(tCubeArray, sShadow), f16c4, compare);
 | |
| 
 | |
|     return texel;
 | |
| }
 | |
| 
 | |
| f16vec4 testSubpassLoad()
 | |
| {
 | |
|     return subpassLoad(subpass) + subpassLoad(subpassMS, 2);
 | |
| }
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     f16vec4 result = f16vec4(0.0hf);
 | |
| 
 | |
|     result  += testTexture();
 | |
|     result  += testTextureProj();
 | |
|     result  += testTextureLod();
 | |
|     result  += testTextureOffset();
 | |
|     result  += testTextureLodOffset();
 | |
|     result  += testTextureProjLodOffset();
 | |
|     result  += testTexelFetch();
 | |
|     result  += testTexelFetchOffset();
 | |
|     result  += testTextureGrad();
 | |
|     result  += testTextureGradOffset();
 | |
|     result  += testTextureProjGrad();
 | |
|     result  += testTextureProjGradoffset();
 | |
|     result  += testTextureGather();
 | |
|     result  += testTextureGatherOffset();
 | |
|     result  += testTextureGatherOffsets();
 | |
|     result  += testTextureGatherLod();
 | |
|     result  += testTextureGatherLodOffset();
 | |
|     result  += testTextureGatherLodOffsets();
 | |
| 
 | |
|     result    += f16vec4(testTextureSize());
 | |
|     result.xy += f16vec2(testTextureQueryLod());
 | |
|     result.x  += float16_t(testTextureQueryLevels());
 | |
|     result.x  += float16_t(testTextureSamples());
 | |
| 
 | |
|     result  += testImageLoad();
 | |
|     testImageStore(result);
 | |
| 
 | |
|     result += testSparseTexture();
 | |
|     result += testSparseTextureLod();
 | |
|     result += testSparseTextureOffset();
 | |
|     result += testSparseTextureLodOffset();
 | |
|     result += testSparseTextureGrad();
 | |
|     result += testSparseTextureGradOffset();
 | |
|     result += testSparseTexelFetch();
 | |
|     result += testSparseTexelFetchOffset();
 | |
|     result += testSparseTextureGather();
 | |
|     result += testSparseTextureGatherOffset();
 | |
|     result += testSparseTextureGatherOffsets();
 | |
|     result += testSparseTextureGatherLod();
 | |
|     result += testSparseTextureGatherLodOffset();
 | |
|     result += testSparseTextureGatherLodOffsets();
 | |
| 
 | |
|     result += testSparseImageLoad();
 | |
| 
 | |
|     result += testSparseTextureClamp();
 | |
|     result += testTextureClamp();
 | |
|     result += testSparseTextureOffsetClamp();
 | |
|     result += testTextureOffsetClamp();
 | |
|     result += testSparseTextureGrad();
 | |
|     result += testTextureGrad();
 | |
|     result += testSparseTextureGradOffsetClamp();
 | |
|     result += testTextureGradOffsetClamp();
 | |
| 
 | |
|     result += testCombinedTextureSampler();
 | |
|     result += testSubpassLoad();
 | |
| 
 | |
|     fragColor = result;
 | |
| }
 |