From 36a6cc31aa2a39728852e59630b63b3af6b00c4e Mon Sep 17 00:00:00 2001 From: Ari Suonpaa Date: Tue, 12 Sep 2017 11:10:01 +0300 Subject: [PATCH] Add tests for texture*ClampARB and sparseTexture*ClampARB. Extended glsl.texture_functions tests to include texture*ClampARB and sparseTexture*ClampARB functions. Affects: dEQP-VK.glsl.texture_functions.texture*clamp.* Components: Vulkan VK-GL-CTS issue: 86 Change-Id: Id080404fe2f0e849b5d5b6c5a84481794cb3ce3e --- android/cts/master/vk-master.txt | 176 ++++++++++ .../vktShaderRenderTextureFunctionTests.cpp | 364 ++++++++++++++++++--- .../mustpass/1.0.4/vk-default-no-waivers.txt | 176 ++++++++++ external/vulkancts/mustpass/1.0.4/vk-default.txt | 176 ++++++++++ 4 files changed, 843 insertions(+), 49 deletions(-) diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index 5c133ea..2f62eda 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -215624,6 +215624,56 @@ dEQP-VK.glsl.texture_functions.texture.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.texture.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.texture.sampler1darrayshadow_bias_fragment dEQP-VK.glsl.texture_functions.texture.samplercubearrayshadow_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_samplercube_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercube_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_samplercube_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercube_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercubearray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercubearray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isamplercubearray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usamplercubearray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_samplercubeshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercubeshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1darrayshadow_bias_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler2d_fixed_vertex dEQP-VK.glsl.texture_functions.textureoffset.sparse_sampler2d_fixed_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler2d_fixed_fragment @@ -215703,6 +215753,42 @@ dEQP-VK.glsl.texture_functions.textureoffset.sampler1dshadow_bias_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.textureoffset.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler1darrayshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1darrayshadow_bias_fragment dEQP-VK.glsl.texture_functions.textureproj.sampler2d_vec3_fixed_vertex dEQP-VK.glsl.texture_functions.textureproj.sampler2d_vec3_fixed_fragment dEQP-VK.glsl.texture_functions.textureproj.sampler2d_vec3_float_vertex @@ -216061,6 +216147,58 @@ dEQP-VK.glsl.texture_functions.texturegrad.sampler1dshadow_vertex dEQP-VK.glsl.texture_functions.texturegrad.sampler1dshadow_fragment dEQP-VK.glsl.texture_functions.texturegrad.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.texturegrad.sampler1darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_samplercube_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercube_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_samplercube_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercube_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercubearray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercubearray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isamplercubearray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usamplercubearray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_samplercubeshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercubeshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.texturegradoffset.sampler2d_fixed_vertex dEQP-VK.glsl.texture_functions.texturegradoffset.sampler2d_fixed_fragment dEQP-VK.glsl.texture_functions.texturegradoffset.sampler2d_float_vertex @@ -216111,6 +216249,44 @@ dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1dshadow_vertex dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1dshadow_fragment dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.textureprojgrad.sampler2d_vec3_fixed_vertex dEQP-VK.glsl.texture_functions.textureprojgrad.sampler2d_vec3_fixed_fragment dEQP-VK.glsl.texture_functions.textureprojgrad.sampler2d_vec3_float_vertex diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureFunctionTests.cpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureFunctionTests.cpp index 43dc78b..c30a9f2 100644 --- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureFunctionTests.cpp +++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureFunctionTests.cpp @@ -52,7 +52,7 @@ using std::vector; enum Function { - FUNCTION_TEXTURE = 0, //!< texture(), textureOffset() + FUNCTION_TEXTURE = 0, //!< texture(), textureOffset(), textureClampARB, textureOffsetClampARB FUNCTION_TEXTUREPROJ, //!< textureProj(), textureProjOffset() FUNCTION_TEXTUREPROJ2, //!< textureProj(sampler1D, vec2) FUNCTION_TEXTUREPROJ3, //!< textureProj(sampler2D, vec3) @@ -60,7 +60,7 @@ enum Function FUNCTION_TEXTUREPROJLOD, FUNCTION_TEXTUREPROJLOD2, //!< textureProjLod(sampler1D, vec2) FUNCTION_TEXTUREPROJLOD3, //!< textureProjLod(sampler2D, vec3) - FUNCTION_TEXTUREGRAD, + FUNCTION_TEXTUREGRAD, //!< textureGrad, textureGradOffset, textureGradClampARB, textureGradOffsetClampARB FUNCTION_TEXTUREPROJGRAD, FUNCTION_TEXTUREPROJGRAD2, //!< textureProjGrad(sampler1D, vec2) FUNCTION_TEXTUREPROJGRAD3, //!< textureProjGrad(sampler2D, vec3) @@ -131,6 +131,10 @@ struct TextureLookupSpec bool useOffset; tcu::IVec3 offset; + // Lod clamp + bool useClamp; + float lodClamp; + TextureLookupSpec (void) : function (FUNCTION_LAST) , minCoord (0.0f) @@ -144,6 +148,8 @@ struct TextureLookupSpec , maxDY (0.0f) , useOffset (false) , offset (0) + , useClamp (false) + , lodClamp (0.0f) { } @@ -158,7 +164,9 @@ struct TextureLookupSpec const tcu::Vec3& minDY_, const tcu::Vec3& maxDY_, bool useOffset_, - const tcu::IVec3& offset_) + const tcu::IVec3& offset_, + bool useClamp_, + float lodClamp_) : function (function_) , minCoord (minCoord_) , maxCoord (maxCoord_) @@ -171,6 +179,8 @@ struct TextureLookupSpec , maxDY (maxDY_) , useOffset (useOffset_) , offset (offset_) + , useClamp (useClamp_) + , lodClamp (lodClamp_) { } }; @@ -229,12 +239,14 @@ struct TextureSpec struct TexLookupParams { float lod; + float lodClamp; tcu::IVec3 offset; tcu::Vec4 scale; tcu::Vec4 bias; TexLookupParams (void) : lod (0.0f) + , lodClamp (0.0f) , offset (0) , scale (1.0f) , bias (0.0f) @@ -422,46 +434,54 @@ inline float texture1DShadowOffset (const ShaderEvalContext& c, float ref, floa inline float texture1DArrayShadowOffset (const ShaderEvalContext& c, float ref, float s, float t, float lod, deInt32 offset) { return c.textures[0].tex1DArray->sampleCompareOffset(c.textures[0].sampler, ref, s, t, lod, offset); } // Eval functions. -static void evalTexture2D (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x(), c.in[0].y(), p.lod)*p.scale + p.bias; } -static void evalTextureCube (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod)*p.scale + p.bias; } -static void evalTexture2DArray (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod)*p.scale + p.bias; } -static void evalTexture3D (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod)*p.scale + p.bias; } -static void evalTexture1D (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x(), p.lod)*p.scale + p.bias; } -static void evalTexture1DArray (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DArray(c, c.in[0].x(), c.in[0].y(), p.lod)*p.scale + p.bias; } -static void evalTextureCubeArray (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCubeArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[0].w(), p.lod)*p.scale + p.bias; } - -static void evalTexture2DBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x(), c.in[0].y(), p.lod+c.in[1].x())*p.scale + p.bias; } -static void evalTextureCubeBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod+c.in[1].x())*p.scale + p.bias; } -static void evalTexture2DArrayBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod+c.in[1].x())*p.scale + p.bias; } -static void evalTexture3DBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod+c.in[1].x())*p.scale + p.bias; } -static void evalTexture1DBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x(), p.lod+c.in[1].x())*p.scale + p.bias; } -static void evalTexture1DArrayBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DArray(c, c.in[0].x(), c.in[0].y(), p.lod+c.in[1].x())*p.scale + p.bias; } -static void evalTextureCubeArrayBias(ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCubeArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[0].w(), p.lod+c.in[1].x())*p.scale + p.bias; } - -static void evalTexture2DProj3 (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].z(), c.in[0].y()/c.in[0].z(), p.lod)*p.scale + p.bias; } -static void evalTexture2DProj3Bias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].z(), c.in[0].y()/c.in[0].z(), p.lod+c.in[1].x())*p.scale + p.bias; } -static void evalTexture2DProj (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), p.lod)*p.scale + p.bias; } -static void evalTexture2DProjBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), p.lod+c.in[1].x())*p.scale + p.bias; } -static void evalTexture3DProj (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), c.in[0].z()/c.in[0].w(), p.lod)*p.scale + p.bias; } -static void evalTexture3DProjBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), c.in[0].z()/c.in[0].w(), p.lod+c.in[1].x())*p.scale + p.bias; } -static void evalTexture1DProj2 (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].y(), p.lod)*p.scale + p.bias; } -static void evalTexture1DProj2Bias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].y(), p.lod+c.in[1].x())*p.scale + p.bias; } -static void evalTexture1DProj (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].w(), p.lod)*p.scale + p.bias; } -static void evalTexture1DProjBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].w(), p.lod+c.in[1].x())*p.scale + p.bias; } - -static void evalTexture2DLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x(), c.in[0].y(), c.in[1].x())*p.scale + p.bias; } -static void evalTextureCubeLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[1].x())*p.scale + p.bias; } -static void evalTexture2DArrayLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[1].x())*p.scale + p.bias; } -static void evalTexture3DLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[1].x())*p.scale + p.bias; } -static void evalTexture1DLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x(), c.in[1].x())*p.scale + p.bias; } -static void evalTexture1DArrayLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DArray(c, c.in[0].x(), c.in[0].y(), c.in[1].x())*p.scale + p.bias; } -static void evalTextureCubeArrayLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCubeArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[0].w(), c.in[1].x())*p.scale + p.bias; } - -static void evalTexture2DProjLod3 (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].z(), c.in[0].y()/c.in[0].z(), c.in[1].x())*p.scale + p.bias; } -static void evalTexture2DProjLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), c.in[1].x())*p.scale + p.bias; } -static void evalTexture3DProjLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), c.in[0].z()/c.in[0].w(), c.in[1].x())*p.scale + p.bias; } -static void evalTexture1DProjLod2 (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].y(), c.in[1].x())*p.scale + p.bias; } -static void evalTexture1DProjLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].w(), c.in[1].x())*p.scale + p.bias; } +static void evalTexture2D (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x(), c.in[0].y(), p.lod)*p.scale + p.bias; } +static void evalTextureCube (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod)*p.scale + p.bias; } +static void evalTexture2DArray (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod)*p.scale + p.bias; } +static void evalTexture3D (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod)*p.scale + p.bias; } +static void evalTexture1D (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x(), p.lod)*p.scale + p.bias; } +static void evalTexture1DArray (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DArray(c, c.in[0].x(), c.in[0].y(), p.lod)*p.scale + p.bias; } +static void evalTextureCubeArray (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCubeArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[0].w(), p.lod)*p.scale + p.bias; } + +static void evalTexture2DBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x(), c.in[0].y(), p.lod+c.in[1].x())*p.scale + p.bias; } +static void evalTextureCubeBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod+c.in[1].x())*p.scale + p.bias; } +static void evalTexture2DArrayBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod+c.in[1].x())*p.scale + p.bias; } +static void evalTexture3DBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod+c.in[1].x())*p.scale + p.bias; } +static void evalTexture1DBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x(), p.lod+c.in[1].x())*p.scale + p.bias; } +static void evalTexture1DArrayBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DArray(c, c.in[0].x(), c.in[0].y(), p.lod+c.in[1].x())*p.scale + p.bias; } +static void evalTextureCubeArrayBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCubeArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[0].w(), p.lod+c.in[1].x())*p.scale + p.bias; } + +static void evalTexture2DProj3 (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].z(), c.in[0].y()/c.in[0].z(), p.lod)*p.scale + p.bias; } +static void evalTexture2DProj3Bias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].z(), c.in[0].y()/c.in[0].z(), p.lod+c.in[1].x())*p.scale + p.bias; } +static void evalTexture2DProj (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), p.lod)*p.scale + p.bias; } +static void evalTexture2DProjBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), p.lod+c.in[1].x())*p.scale + p.bias; } +static void evalTexture3DProj (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), c.in[0].z()/c.in[0].w(), p.lod)*p.scale + p.bias; } +static void evalTexture3DProjBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), c.in[0].z()/c.in[0].w(), p.lod+c.in[1].x())*p.scale + p.bias; } +static void evalTexture1DProj2 (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].y(), p.lod)*p.scale + p.bias; } +static void evalTexture1DProj2Bias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].y(), p.lod+c.in[1].x())*p.scale + p.bias; } +static void evalTexture1DProj (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].w(), p.lod)*p.scale + p.bias; } +static void evalTexture1DProjBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].w(), p.lod+c.in[1].x())*p.scale + p.bias; } + +static void evalTexture2DLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x(), c.in[0].y(), c.in[1].x())*p.scale + p.bias; } +static void evalTextureCubeLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[1].x())*p.scale + p.bias; } +static void evalTexture2DArrayLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[1].x())*p.scale + p.bias; } +static void evalTexture3DLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[1].x())*p.scale + p.bias; } +static void evalTexture1DLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x(), c.in[1].x())*p.scale + p.bias; } +static void evalTexture1DArrayLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DArray(c, c.in[0].x(), c.in[0].y(), c.in[1].x())*p.scale + p.bias; } +static void evalTextureCubeArrayLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCubeArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[0].w(), c.in[1].x())*p.scale + p.bias; } + +static void evalTexture2DProjLod3 (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].z(), c.in[0].y()/c.in[0].z(), c.in[1].x())*p.scale + p.bias; } +static void evalTexture2DProjLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), c.in[1].x())*p.scale + p.bias; } +static void evalTexture3DProjLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x()/c.in[0].w(), c.in[0].y()/c.in[0].w(), c.in[0].z()/c.in[0].w(), c.in[1].x())*p.scale + p.bias; } +static void evalTexture1DProjLod2 (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].y(), c.in[1].x())*p.scale + p.bias; } +static void evalTexture1DProjLod (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x()/c.in[0].w(), c.in[1].x())*p.scale + p.bias; } + +static void evalTexture2DBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x(), c.in[0].y(), de::max(p.lod+c.in[1].x(), p.lodClamp))*p.scale + p.bias; } +static void evalTextureCubeBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(p.lod+c.in[1].x(), p.lodClamp))*p.scale + p.bias; } +static void evalTexture2DArrayBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(p.lod+c.in[1].x(), p.lodClamp))*p.scale + p.bias; } +static void evalTexture3DBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(p.lod+c.in[1].x(), p.lodClamp))*p.scale + p.bias; } +static void evalTexture1DBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x(), de::max(p.lod+c.in[1].x(), p.lodClamp))*p.scale + p.bias; } +static void evalTexture1DArrayBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DArray(c, c.in[0].x(), c.in[0].y(), de::max(p.lod+c.in[1].x(), p.lodClamp))*p.scale + p.bias; } +static void evalTextureCubeArrayBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCubeArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[0].w(), de::max(p.lod+c.in[1].x(), p.lodClamp))*p.scale + p.bias; } // Offset variants @@ -500,6 +520,12 @@ static void evalTexture3DProjLodOffset (ShaderEvalContext& c, const TexLookupP static void evalTexture1DProjLod2Offset (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DOffset(c, c.in[0].x()/c.in[0].y(), c.in[1].x(), p.offset.x())*p.scale + p.bias; } static void evalTexture1DProjLodOffset (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DOffset(c, c.in[0].x()/c.in[0].w(), c.in[1].x(), p.offset.x())*p.scale + p.bias; } +static void evalTexture2DOffsetBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DOffset(c, c.in[0].x(), c.in[0].y(), de::max(p.lod+c.in[1].x(), p.lodClamp), p.offset.swizzle(0,1))*p.scale + p.bias; } +static void evalTexture2DArrayOffsetBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DArrayOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(p.lod+c.in[1].x(), p.lodClamp), p.offset.swizzle(0,1))*p.scale + p.bias; } +static void evalTexture3DOffsetBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3DOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(p.lod+c.in[1].x(), p.lodClamp), p.offset)*p.scale + p.bias; } +static void evalTexture1DOffsetBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DOffset(c, c.in[0].x(), de::max(p.lod+c.in[1].x(), p.lodClamp), p.offset.x())*p.scale + p.bias; } +static void evalTexture1DArrayOffsetBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DArrayOffset(c, c.in[0].x(), c.in[0].y(), de::max(p.lod+c.in[1].x(), p.lodClamp), p.offset.x())*p.scale + p.bias; } + // Shadow variants static void evalTexture2DShadow (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture2DShadow(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), p.lod); } @@ -545,6 +571,14 @@ static void evalTexture2DShadowProjOffsetBias (ShaderEvalContext& c, const TexL static void evalTexture1DShadowProjOffset (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture1DShadowOffset(c, c.in[0].z()/c.in[0].w(), c.in[0].x()/c.in[0].w(), p.lod, p.offset.x()); } static void evalTexture1DShadowProjOffsetBias (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture1DShadowOffset(c, c.in[0].z()/c.in[0].w(), c.in[0].x()/c.in[0].w(), p.lod+c.in[1].x(), p.offset.x()); } +static void evalTexture2DShadowBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture2DShadow(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), de::max(p.lod+c.in[1].x(), p.lodClamp)); } +static void evalTextureCubeShadowBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = textureCubeShadow(c, c.in[0].w(), c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(p.lod+c.in[1].x(), p.lodClamp)); } +static void evalTexture1DShadowBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture1DShadow(c, c.in[0].z(), c.in[0].x(), de::max(p.lod+c.in[1].x(), p.lodClamp)); } +static void evalTexture1DArrayShadowBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture1DArrayShadow(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), de::max(p.lod+c.in[1].x(), p.lodClamp)); } +static void evalTexture2DShadowOffsetBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture2DShadowOffset(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), de::max(p.lod+c.in[1].x(), p.lodClamp), p.offset.swizzle(0,1)); } +static void evalTexture1DShadowOffsetBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture1DShadowOffset(c, c.in[0].z(), c.in[0].x(), de::max(p.lod+c.in[1].x(), p.lodClamp), p.offset.x()); } +static void evalTexture1DArrayShadowOffsetBiasClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture1DArrayShadowOffset(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), de::max(p.lod+c.in[1].x(), p.lodClamp), p.offset.x()); } + // Gradient variarts static void evalTexture2DGrad (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x(), c.in[0].y(), computeLodFromGrad2D(c))*p.scale + p.bias; } @@ -589,6 +623,31 @@ static void evalTexture3DProjGradOffset (ShaderEvalContext& c, const TexLookup static void evalTexture1DProjGrad2Offset (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DOffset(c, c.in[0].x()/c.in[0].y(), computeLodFromGrad1D(c), p.offset.x())*p.scale + p.bias; } static void evalTexture1DProjGradOffset (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DOffset(c, c.in[0].x()/c.in[0].w(), computeLodFromGrad1D(c), p.offset.x())*p.scale + p.bias; } +static void evalTexture2DGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2D(c, c.in[0].x(), c.in[0].y(), de::max(computeLodFromGrad2D(c), p.lodClamp))*p.scale + p.bias; } +static void evalTextureCubeGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(computeLodFromGradCube(c), p.lodClamp))*p.scale + p.bias; } +static void evalTexture2DArrayGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(computeLodFromGrad2DArray(c), p.lodClamp))*p.scale + p.bias; } +static void evalTexture3DGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(computeLodFromGrad3D(c), p.lodClamp))*p.scale + p.bias; } +static void evalTexture1DGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1D(c, c.in[0].x(), de::max(computeLodFromGrad1D(c), p.lodClamp))*p.scale + p.bias; } +static void evalTexture1DArrayGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DArray(c, c.in[0].x(), c.in[0].y(), de::max(computeLodFromGrad1DArray(c), p.lodClamp))*p.scale + p.bias; } +static void evalTextureCubeArrayGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = textureCubeArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[0].w(), de::max(computeLodFromGradCubeArray(c), p.lodClamp))*p.scale + p.bias; } + +static void evalTexture2DShadowGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture2DShadow(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), de::max(computeLodFromGrad2D(c), p.lodClamp)); } +static void evalTextureCubeShadowGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = textureCubeShadow(c, c.in[0].w(), c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(computeLodFromGradCube(c), p.lodClamp)); } +static void evalTexture2DArrayShadowGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture2DArrayShadow(c, c.in[0].w(), c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(computeLodFromGrad2DArray(c), p.lodClamp)); } +static void evalTexture1DShadowGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture1DShadow(c, c.in[0].z(), c.in[0].x(), de::max(computeLodFromGrad1D(c), p.lodClamp)); } +static void evalTexture1DArrayShadowGradClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture1DArrayShadow(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), de::max(computeLodFromGrad1DArray(c), p.lodClamp)); } + +static void evalTexture2DGradOffsetClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DOffset(c, c.in[0].x(), c.in[0].y(), de::max(computeLodFromGrad2D(c), p.lodClamp), p.offset.swizzle(0,1))*p.scale + p.bias; } +static void evalTexture2DArrayGradOffsetClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture2DArrayOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(computeLodFromGrad2DArray(c), p.lodClamp), p.offset.swizzle(0,1))*p.scale + p.bias; } +static void evalTexture3DGradOffsetClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture3DOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(computeLodFromGrad3D(c), p.lodClamp), p.offset)*p.scale + p.bias; } +static void evalTexture1DGradOffsetClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DOffset(c, c.in[0].x(), de::max(computeLodFromGrad1D(c), p.lodClamp), p.offset.x())*p.scale + p.bias; } +static void evalTexture1DArrayGradOffsetClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color = texture1DArrayOffset(c, c.in[0].x(), c.in[0].y(), de::max(computeLodFromGrad1DArray(c), p.lodClamp), p.offset.x())*p.scale + p.bias; } + +static void evalTexture2DShadowGradOffsetClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture2DShadowOffset(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), de::max(computeLodFromGrad2D(c), p.lodClamp), p.offset.swizzle(0,1)); } +static void evalTexture2DArrayShadowGradOffsetClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture2DArrayShadowOffset(c, c.in[0].w(), c.in[0].x(), c.in[0].y(), c.in[0].z(), de::max(computeLodFromGrad2DArray(c), p.lodClamp), p.offset.swizzle(0,1)); } +static void evalTexture1DShadowGradOffsetClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture1DShadowOffset(c, c.in[0].z(), c.in[0].x(), de::max(computeLodFromGrad1D(c), p.lodClamp), p.offset.x()); } +static void evalTexture1DArrayShadowGradOffsetClamp (ShaderEvalContext& c, const TexLookupParams& p) { c.color.x() = texture1DArrayShadowOffset(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), de::max(computeLodFromGrad1DArray(c), p.lodClamp), p.offset.x()); } + // Texel fetch variants static void evalTexelFetch2D (ShaderEvalContext& c, const TexLookupParams& p) @@ -693,6 +752,14 @@ ShaderTextureFunctionInstance::ShaderTextureFunctionInstance (Context& cont { checkDeviceFeatures(m_context, m_textureSpec.type); + if (lookupSpec.useClamp) + { + const vk::VkPhysicalDeviceFeatures& deviceFeatures = context.getDeviceFeatures(); + + if (!deviceFeatures.shaderResourceMinLod) + TCU_THROW(NotSupportedError, "ShaderResourceMinLod feature not supported."); + } + { // Base coord scale & bias Vec4 s = m_lookupSpec.maxCoord-m_lookupSpec.minCoord; @@ -1097,6 +1164,7 @@ void ShaderTextureFunctionInstance::initTexture (void) lookupParams.scale = fmtInfo.lookupScale; lookupParams.bias = fmtInfo.lookupBias; lookupParams.offset = m_lookupSpec.offset; + lookupParams.lodClamp = m_lookupSpec.lodClamp; // \todo [dirnerakos] Avoid const cast somehow const_cast(m_lookupParams) = lookupParams; @@ -1237,6 +1305,9 @@ void ShaderTextureFunctionCase::initShaderSources (void) break; } + if (m_lookupSpec.useClamp) + version = glu::GLSL_VERSION_450; + vert << glu::getGLSLVersionDeclaration(version) << "\n" << "layout(location = 0) in highp vec4 a_position;\n" << "layout(location = 4) in " << coordPrecName << " " << coordTypeName << " a_in0;\n"; @@ -1249,8 +1320,12 @@ void ShaderTextureFunctionCase::initShaderSources (void) else if (hasLodBias) vert << "layout(location = 5) in " << coordPrecName << " float a_in1;\n"; - frag << glu::getGLSLVersionDeclaration(version) << "\n" - << "layout(location = 0) out mediump vec4 o_color;\n"; + frag << glu::getGLSLVersionDeclaration(version) << "\n"; + + if (m_lookupSpec.useClamp) + frag << "#extension GL_ARB_sparse_texture_clamp : require\n"; + + frag << "layout(location = 0) out mediump vec4 o_color;\n"; if (isVtxCase) { @@ -1305,6 +1380,8 @@ void ShaderTextureFunctionCase::initShaderSources (void) op << "vec4(" << baseFuncName; if (m_lookupSpec.useOffset) op << "Offset"; + if (m_lookupSpec.useClamp) + op << "ClampARB"; op << "(u_sampler, "; if (isIntCoord) @@ -1341,6 +1418,9 @@ void ShaderTextureFunctionCase::initShaderSources (void) op << ")"; } + if (m_lookupSpec.useClamp) + op << ", float(" << m_lookupSpec.lodClamp << ")"; + if (isCubeArrayShadow && m_lookupSpec.function == FUNCTION_TEXTURE) op << ", " << texCoord << ".w"; @@ -2803,9 +2883,13 @@ struct TexFuncCaseSpec }; #define CASE_SPEC(NAME, FUNC, MINCOORD, MAXCOORD, USEBIAS, MINLOD, MAXLOD, USEOFFSET, OFFSET, TEXSPEC, EVALFUNC, FLAGS) \ - { #NAME, TextureLookupSpec(FUNC, MINCOORD, MAXCOORD, USEBIAS, MINLOD, MAXLOD, tcu::Vec3(0.0f), tcu::Vec3(0.0f), tcu::Vec3(0.0f), tcu::Vec3(0.0f), USEOFFSET, OFFSET), TEXSPEC, EVALFUNC, FLAGS } + { #NAME, TextureLookupSpec(FUNC, MINCOORD, MAXCOORD, USEBIAS, MINLOD, MAXLOD, tcu::Vec3(0.0f), tcu::Vec3(0.0f), tcu::Vec3(0.0f), tcu::Vec3(0.0f), USEOFFSET, OFFSET, false, 0.0f), TEXSPEC, EVALFUNC, FLAGS } #define GRAD_CASE_SPEC(NAME, FUNC, MINCOORD, MAXCOORD, MINDX, MAXDX, MINDY, MAXDY, USEOFFSET, OFFSET, TEXSPEC, EVALFUNC, FLAGS) \ - { #NAME, TextureLookupSpec(FUNC, MINCOORD, MAXCOORD, false, 0.0f, 0.0f, MINDX, MAXDX, MINDY, MAXDY, USEOFFSET, OFFSET), TEXSPEC, EVALFUNC, FLAGS } + { #NAME, TextureLookupSpec(FUNC, MINCOORD, MAXCOORD, false, 0.0f, 0.0f, MINDX, MAXDX, MINDY, MAXDY, USEOFFSET, OFFSET, false, 0.0f), TEXSPEC, EVALFUNC, FLAGS } +#define CLAMP_CASE_SPEC(NAME, FUNC, MINCOORD, MAXCOORD, USEBIAS, MINLOD, MAXLOD, USEOFFSET, OFFSET, LODCLAMP, TEXSPEC, EVALFUNC, FLAGS) \ + { #NAME, TextureLookupSpec(FUNC, MINCOORD, MAXCOORD, USEBIAS, MINLOD, MAXLOD, tcu::Vec3(0.0f), tcu::Vec3(0.0f), tcu::Vec3(0.0f), tcu::Vec3(0.0f), USEOFFSET, OFFSET, true, LODCLAMP), TEXSPEC, EVALFUNC, FLAGS } +#define GRADCLAMP_CASE_SPEC(NAME, FUNC, MINCOORD, MAXCOORD, MINDX, MAXDX, MINDY, MAXDY, USEOFFSET, OFFSET, LODCLAMP, TEXSPEC, EVALFUNC, FLAGS) \ + { #NAME, TextureLookupSpec(FUNC, MINCOORD, MAXCOORD, false, 0.0f, 0.0f, MINDX, MAXDX, MINDY, MAXDY, USEOFFSET, OFFSET, true, LODCLAMP), TEXSPEC, EVALFUNC, FLAGS } class SparseShaderTextureFunctionInstance : public ShaderTextureFunctionInstance { @@ -2831,6 +2915,13 @@ SparseShaderTextureFunctionInstance::SparseShaderTextureFunctionInstance (Contex const ImageBackingMode imageBackingMode) : ShaderTextureFunctionInstance (context, isVertexCase, evaluator, uniformSetup, lookupSpec, textureSpec, lookupParams, imageBackingMode) { + if (lookupSpec.useClamp) + { + const vk::VkPhysicalDeviceFeatures& deviceFeatures = context.getDeviceFeatures(); + + if (!deviceFeatures.shaderResourceMinLod) + TCU_THROW(NotSupportedError, "ShaderResourceMinLod feature not supported."); + } } SparseShaderTextureFunctionInstance::~SparseShaderTextureFunctionInstance (void) @@ -2930,8 +3021,12 @@ void SparseShaderTextureFunctionCase::initShaderSources (void) vert << "layout(location = 5) in " << coordPrecName << " float a_in1;\n"; frag << "#version 450\n" - << "#extension GL_ARB_sparse_texture2 : require\n" - << "layout(location = 0) out mediump vec4 o_color;\n"; + << "#extension GL_ARB_sparse_texture2 : require\n"; + + if (m_lookupSpec.useClamp) + frag << "#extension GL_ARB_sparse_texture_clamp : require\n"; + + frag << "layout(location = 0) out mediump vec4 o_color;\n"; if (isVtxCase) { @@ -2987,6 +3082,9 @@ void SparseShaderTextureFunctionCase::initShaderSources (void) if (m_lookupSpec.useOffset) op << "Offset"; + if (m_lookupSpec.useClamp) + op << "Clamp"; + op << "ARB(u_sampler, "; if (isIntCoord) @@ -3022,6 +3120,9 @@ void SparseShaderTextureFunctionCase::initShaderSources (void) op << ")"; } + if (m_lookupSpec.useClamp) + op << ", float(" << m_lookupSpec.lodClamp << ")"; + op << ", texel"; if (m_lookupSpec.useBias) @@ -3383,6 +3484,52 @@ void ShaderTextureFunctionTests::init (void) }; createCaseGroup(this, "texture", "texture() Tests", textureCases, DE_LENGTH_OF_ARRAY(textureCases)); + // textureClampARB() cases + static const TexFuncCaseSpec textureClampARBCases[] = + { + // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset LodClamp Format EvalFunc Flags + CLAMP_CASE_SPEC(sampler2d_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 5.0f, tex2DMipmapFixed, evalTexture2DBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler2d_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 5.0f, tex2DMipmapFloat, evalTexture2DBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isampler2d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, false, IVec3(0), 7.0f, tex2DMipmapInt, evalTexture2DBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usampler2d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, false, IVec3(0), 7.0f, tex2DMipmapUint, evalTexture2DBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(samplercube_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 4.0f, texCubeMipmapFixed, evalTextureCubeBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(samplercube_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 4.0f, texCubeMipmapFloat, evalTextureCubeBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isamplercube_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 6.01f, 0.0f), Vec4(6.0f, 6.0f, 6.01f, 0.0f), true, 2.0f, 5.0f, false, IVec3(0), 6.0f, texCubeMipmapInt, evalTextureCubeBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usamplercube_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 6.01f, 0.0f), Vec4(6.0f, 6.0f, 6.01f, 0.0f), true, 2.0f, 5.0f, false, IVec3(0), 6.0f, texCubeMipmapUint, evalTextureCubeBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(sampler2darray_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 4.0f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 5.0f, tex2DArrayMipmapFixed, evalTexture2DArrayBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler2darray_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 4.0f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 5.0f, tex2DArrayMipmapFloat, evalTexture2DArrayBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isampler2darray_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 4.0f, 0.0f), true, 2.0f, 5.0f, false, IVec3(0), 7.0f, tex2DArrayMipmapInt, evalTexture2DArrayBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usampler2darray_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 4.0f, 0.0f), true, 2.0f, 5.0f, false, IVec3(0), 7.0f, tex2DArrayMipmapUint, evalTexture2DArrayBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(sampler3d_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 4.0f, 0.0f), true, -10.0f, 10.0f, false, IVec3(0), 0.0f, tex3DMipmapFixed, evalTexture3DBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler3d_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 4.0f, 0.0f), true, -10.0f, 10.0f, false, IVec3(0), 0.0f, tex3DMipmapFloat, evalTexture3DBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isampler3d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 4.0f, 0.0f), true, 0.0f, 8.0f, false, IVec3(0), 5.0f, tex3DMipmapInt, evalTexture3DBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usampler3d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 4.0f, 0.0f), true, 0.0f, 8.0f, false, IVec3(0), 5.0f, tex3DMipmapUint, evalTexture3DBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(sampler1d_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 0.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 4.0f, tex1DMipmapFixed, evalTexture1DBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler1d_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 0.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 4.0f, tex1DMipmapFloat, evalTexture1DBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isampler1d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 0.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, false, IVec3(0), 7.0f, tex1DMipmapInt, evalTexture1DBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usampler1d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 0.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, false, IVec3(0), 7.0f, tex1DMipmapUint, evalTexture1DBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(sampler1darray_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 4.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 5.0f, tex1DArrayMipmapFixed, evalTexture1DArrayBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler1darray_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 4.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 5.0f, tex1DArrayMipmapFloat, evalTexture1DArrayBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isampler1darray_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 4.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, false, IVec3(0), 7.0f, tex1DArrayMipmapInt, evalTexture1DArrayBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usampler1darray_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 4.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, false, IVec3(0), 7.0f, tex1DArrayMipmapUint, evalTexture1DArrayBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(samplercubearray_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 2.0f), true, 0.0f, 5.0f, false, IVec3(0), 3.0f, texCubeArrayMipmapFixed, evalTextureCubeArrayBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(samplercubearray_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 2.0f), true, 0.0f, 5.0f, false, IVec3(0), 3.0f, texCubeArrayMipmapFloat, evalTextureCubeArrayBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isamplercubearray_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 6.01f, 0.0f), Vec4(6.0f, 6.0f, 6.01f, 2.0f), true, 2.0f, 5.0f, false, IVec3(0), 4.0f, texCubeArrayMipmapInt, evalTextureCubeArrayBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usamplercubearray_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 6.01f, 0.0f), Vec4(6.0f, 6.0f, 6.01f, 2.0f), true, 2.0f, 5.0f, false, IVec3(0), 4.0f, texCubeArrayMipmapUint, evalTextureCubeArrayBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(sampler2dshadow_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4( 1.0f, 1.0f, 1.0f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 7.0f, tex2DMipmapShadow, evalTexture2DShadowBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(samplercubeshadow_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 1.01f, 0.0f), Vec4( 1.0f, 1.0f, 1.01f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 7.0f, texCubeMipmapShadow, evalTextureCubeShadowBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler1dshadow_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4( 1.0f, 0.0f, 1.0f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 7.0f, tex1DMipmapShadow, evalTexture1DShadowBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler1darrayshadow_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4( 1.0f, 4.0f, 1.0f, 0.0f), true, 0.0f, 5.0f, false, IVec3(0), 7.0f, tex1DArrayMipmapShadow, evalTexture1DArrayShadowBiasClamp, FRAGMENT), + }; + createCaseGroup(this, "textureclamp", "textureClampARB() Tests", textureClampARBCases, DE_LENGTH_OF_ARRAY(textureClampARBCases)); + // textureOffset() cases // \note _bias variants are not using mipmap thanks to wide allowed range for LOD computation static const TexFuncCaseSpec textureOffsetCases[] = @@ -3472,6 +3619,41 @@ void ShaderTextureFunctionTests::init (void) }; createCaseGroup(this, "textureoffset", "textureOffset() Tests", textureOffsetCases, DE_LENGTH_OF_ARRAY(textureOffsetCases)); + // textureOffsetClampARB() cases + static const TexFuncCaseSpec textureOffsetClampARBCases[] = + { + // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset LodClamp Format EvalFunc Flags + CLAMP_CASE_SPEC(sampler2d_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, true, IVec3(7, -8, 0), 5.0f, tex2DMipmapFixed, evalTexture2DOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler2d_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, true, IVec3(7, -8, 0), 5.0f, tex2DMipmapFloat, evalTexture2DOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isampler2d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, true, IVec3(7, -8, 0), 7.0f, tex2DMipmapInt, evalTexture2DOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usampler2d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, true, IVec3(7, -8, 0), 7.0f, tex2DMipmapUint, evalTexture2DOffsetBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(sampler2darray_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 4.0f, 0.0f), true, 0.0f, 5.0f, true, IVec3(7, -8, 0), 5.0f, tex2DArrayMipmapFixed, evalTexture2DArrayOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler2darray_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 4.0f, 0.0f), true, 0.0f, 5.0f, true, IVec3(7, -8, 0), 5.0f, tex2DArrayMipmapFloat, evalTexture2DArrayOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isampler2darray_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 4.0f, 0.0f), true, 2.0f, 5.0f, true, IVec3(7, -8, 0), 7.0f, tex2DArrayMipmapInt, evalTexture2DArrayOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usampler2darray_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 4.0f, 0.0f), true, 2.0f, 5.0f, true, IVec3(7, -8, 0), 7.0f, tex2DArrayMipmapUint, evalTexture2DArrayOffsetBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(sampler3d_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 4.0f, 0.0f), true, -12.0f, 12.0f, true, IVec3(-8, 7, 3), 2.0f, tex3DMipmapFixed, evalTexture3DOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler3d_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 1.0f, 4.0f, 0.0f), true, -12.0f, 12.0f, true, IVec3(-8, 7, 3), 2.0f, tex3DMipmapFloat, evalTexture3DOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isampler3d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 4.0f, 0.0f), true, -5.0f, 5.0f, true, IVec3(-8, 7, 3), 1.0f, tex3DMipmapInt, evalTexture3DOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usampler3d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 6.0f, 4.0f, 0.0f), true, -5.0f, 5.0f, true, IVec3(-8, 7, 3), 1.0f, tex3DMipmapUint, evalTexture3DOffsetBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(sampler1d_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 0.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, true, IVec3(-8, 0, 0), 4.0f, tex1DMipmapFixed, evalTexture1DOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler1d_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 0.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, true, IVec3( 7, 0, 0), 4.0f, tex1DMipmapFloat, evalTexture1DOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isampler1d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 0.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, true, IVec3(-8, 0, 0), 7.0f, tex1DMipmapInt, evalTexture1DOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usampler1d_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 0.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, true, IVec3( 7, 0, 0), 7.0f, tex1DMipmapUint, evalTexture1DOffsetBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(sampler1darray_bias_fixed, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 4.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, true, IVec3(-8, 0, 0), 5.0f, tex1DArrayMipmapFixed, evalTexture1DArrayOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler1darray_bias_float, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(1.0f, 4.0f, 0.0f, 0.0f), true, 0.0f, 5.0f, true, IVec3( 7, 0, 0), 5.0f, tex1DArrayMipmapFloat, evalTexture1DArrayOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(isampler1darray_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 4.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, true, IVec3(-8, 0, 0), 7.0f, tex1DArrayMipmapInt, evalTexture1DArrayOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(usampler1darray_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(6.0f, 4.0f, 0.0f, 0.0f), true, 2.0f, 5.0f, true, IVec3( 7, 0, 0), 7.0f, tex1DArrayMipmapUint, evalTexture1DArrayOffsetBiasClamp, FRAGMENT), + + CLAMP_CASE_SPEC(sampler2dshadow_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4( 1.0f, 1.0f, 1.0f, 0.0f), true, 0.0f, 5.0f, true, IVec3(-8, 7, 0), 7.0f, tex2DMipmapShadow, evalTexture2DShadowOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler1dshadow_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4( 1.0f, 0.0f, 1.0f, 0.0f), true, 0.0f, 5.0f, true, IVec3(-8, 0, 0), 7.0f, tex1DMipmapShadow, evalTexture1DShadowOffsetBiasClamp, FRAGMENT), + CLAMP_CASE_SPEC(sampler1darrayshadow_bias, FUNCTION_TEXTURE, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4( 1.0f, 4.0f, 1.0f, 0.0f), true, 0.0f, 5.0f, true, IVec3(-8, 0, 0), 7.0f, tex1DArrayMipmapShadow, evalTexture1DArrayShadowOffsetBiasClamp, FRAGMENT), + }; + createCaseGroup(this, "textureoffsetclamp", "textureOffsetClampARB() Tests", textureOffsetClampARBCases, DE_LENGTH_OF_ARRAY(textureOffsetClampARBCases)); + // textureProj() cases // \note Currently uses constant divider! static const TexFuncCaseSpec textureProjCases[] = @@ -3840,6 +4022,53 @@ void ShaderTextureFunctionTests::init (void) }; createCaseGroup(this, "texturegrad", "textureGrad() Tests", textureGradCases, DE_LENGTH_OF_ARRAY(textureGradCases)); + // textureGradClampARB() cases + static const TexFuncCaseSpec textureGradClampCases[] = + { + // Name Function MinCoord MaxCoord MinDx MaxDx MinDy MaxDy Offset? Offset LodClamp Format EvalFunc Flags + GRADCLAMP_CASE_SPEC(sampler2d_fixed, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4( 1.5f, 2.3f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex2DMipmapFixed, evalTexture2DGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler2d_float, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4( 1.5f, 2.3f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, -0.2f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex2DMipmapFloat, evalTexture2DGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isampler2d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4( 1.5f, 2.3f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex2DMipmapInt, evalTexture2DGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usampler2d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4( 1.5f, 2.3f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.2f, 0.0f), false, IVec3(0), 5.0f, tex2DMipmapUint, evalTexture2DGradClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(samplercube_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, 1.01f, 0.0f), Vec4( 1.0f, 1.0f, 1.01f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, texCubeMipmapFixed, evalTextureCubeGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(samplercube_float, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, -1.01f, 0.0f), Vec4( 1.0f, 1.0f, -1.01f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, -0.2f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, texCubeMipmapFloat, evalTextureCubeGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isamplercube, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, 1.01f, 0.0f), Vec4( 1.0f, 1.0f, 1.01f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), 5.0f, texCubeMipmapInt, evalTextureCubeGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usamplercube, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, -1.01f, 0.0f), Vec4( 1.0f, 1.0f, -1.01f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.2f, 0.0f), false, IVec3(0), 5.0f, texCubeMipmapUint, evalTextureCubeGradClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4( 1.5f, 2.3f, 3.5f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex2DArrayMipmapFixed, evalTexture2DArrayGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler2darray_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4( 1.5f, 2.3f, 3.5f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, -0.2f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex2DArrayMipmapFloat, evalTexture2DArrayGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isampler2darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4( 1.5f, 2.3f, 3.5f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex2DArrayMipmapInt, evalTexture2DArrayGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usampler2darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4( 1.5f, 2.3f, 3.5f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.2f, 0.0f), false, IVec3(0), 5.0f, tex2DArrayMipmapUint, evalTexture2DArrayGradClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4( 1.5f, 2.3f, 2.3f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex3DMipmapFixed, evalTexture3DGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4( 1.5f, 2.3f, 2.3f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.2f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex3DMipmapFloat, evalTexture3DGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isampler3d, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4( 1.5f, 2.3f, 2.3f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex3DMipmapInt, evalTexture3DGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usampler3d, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4( 1.5f, 2.3f, 2.3f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, -0.2f), false, IVec3(0), 5.0f, tex3DMipmapUint, evalTexture3DGradClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(sampler1d_fixed, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, 0.0f, 0.0f, 0.0f), Vec4( 1.5f, 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex1DMipmapFixed, evalTexture1DGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler1d_float, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, 0.0f, 0.0f, 0.0f), Vec4( 1.5f, 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex1DMipmapFloat, evalTexture1DGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isampler1d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, 0.0f, 0.0f, 0.0f), Vec4( 1.5f, 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex1DMipmapInt, evalTexture1DGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usampler1d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, 0.0f, 0.0f, 0.0f), Vec4( 1.5f, 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex1DMipmapUint, evalTexture1DGradClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(sampler1darray_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.5f, 0.0f, 0.0f), Vec4( 1.5f, 3.5f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex1DArrayMipmapFixed, evalTexture1DArrayGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler1darray_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.5f, 0.0f, 0.0f), Vec4( 1.5f, 3.5f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex1DArrayMipmapFloat, evalTexture1DArrayGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isampler1darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.5f, 0.0f, 0.0f), Vec4( 1.5f, 3.5f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex1DArrayMipmapInt, evalTexture1DArrayGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usampler1darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.5f, 0.0f, 0.0f), Vec4( 1.5f, 3.5f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex1DArrayMipmapUint, evalTexture1DArrayGradClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(samplercubearray_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, 1.01f, -0.5f), Vec4( 1.0f, 1.0f, 1.01f, 1.5f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 4.0f, texCubeArrayMipmapFixed, evalTextureCubeArrayGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(samplercubearray_float, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, -1.01f, -0.5f), Vec4( 1.0f, 1.0f, -1.01f, 1.5f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, -0.2f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 4.0f, texCubeArrayMipmapFloat, evalTextureCubeArrayGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isamplercubearray, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, 1.01f, -0.5f), Vec4( 1.0f, 1.0f, 1.01f, 1.5f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), 4.0f, texCubeArrayMipmapInt, evalTextureCubeArrayGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usamplercubearray, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, -1.01f, -0.5f), Vec4( 1.0f, 1.0f, -1.01f, 1.5f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.2f, 0.0f), false, IVec3(0), 4.0f, texCubeArrayMipmapUint, evalTextureCubeArrayGradClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4( 1.5f, 2.3f, 1.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex2DMipmapShadow, evalTexture2DShadowGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(samplercubeshadow, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, 1.01f, 0.0f), Vec4( 1.0f, 1.0f, 1.01f, 1.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.2f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, texCubeMipmapShadow, evalTextureCubeShadowGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler2darrayshadow, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4( 1.5f, 2.3f, 3.5f, 1.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, -0.2f, 0.0f), false, IVec3(0), 5.0f, tex2DArrayMipmapShadow, evalTexture2DArrayShadowGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler1dshadow, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, 0.0f, 0.0f, 0.0f), Vec4( 1.5f, 0.0f, 1.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex1DMipmapShadow, evalTexture1DShadowGradClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler1darrayshadow, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.5f, 0.0f, 0.0f), Vec4( 1.5f, 3.5f, 1.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), 5.0f, tex1DArrayMipmapShadow, evalTexture1DArrayShadowGradClamp, FRAGMENT), + }; + createCaseGroup(this, "texturegradclamp", "textureGradClampARB() Tests", textureGradClampCases, DE_LENGTH_OF_ARRAY(textureGradClampCases)); + // textureGradOffset() cases static const TexFuncCaseSpec textureGradOffsetCases[] = { @@ -3882,6 +4111,43 @@ void ShaderTextureFunctionTests::init (void) }; createCaseGroup(this, "texturegradoffset", "textureGradOffset() Tests", textureGradOffsetCases, DE_LENGTH_OF_ARRAY(textureGradOffsetCases)); + // textureGradOffsetClampARB() cases + static const TexFuncCaseSpec textureGradOffsetClampCases[] = + { + // Name Function MinCoord MaxCoord MinDx MaxDx MinDy MaxDy Offset? Offset LodClamp Format EvalFunc Flags + GRADCLAMP_CASE_SPEC(sampler2d_fixed, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4( 1.5f, 2.3f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), 5.0f, tex2DMipmapFixed, evalTexture2DGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler2d_float, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4( 1.5f, 2.3f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, -0.2f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(7, -8, 0), 5.0f, tex2DMipmapFloat, evalTexture2DGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isampler2d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4( 1.5f, 2.3f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), 5.0f, tex2DMipmapInt, evalTexture2DGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usampler2d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4( 1.5f, 2.3f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.2f, 0.0f), true, IVec3(7, -8, 0), 5.0f, tex2DMipmapUint, evalTexture2DGradOffsetClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4( 1.5f, 2.3f, 3.5f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), 5.0f, tex2DArrayMipmapFixed, evalTexture2DArrayGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler2darray_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4( 1.5f, 2.3f, 3.5f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, -0.2f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(7, -8, 0), 5.0f, tex2DArrayMipmapFloat, evalTexture2DArrayGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isampler2darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4( 1.5f, 2.3f, 3.5f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), 5.0f, tex2DArrayMipmapInt, evalTexture2DArrayGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usampler2darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4( 1.5f, 2.3f, 3.5f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.2f, 0.0f), true, IVec3(7, -8, 0), 5.0f, tex2DArrayMipmapUint, evalTexture2DArrayGradOffsetClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4( 1.5f, 2.3f, 2.3f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(-8, 7, 3), 5.0f, tex3DMipmapFixed, evalTexture3DGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4( 1.5f, 2.3f, 2.3f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.2f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(3, -8, 7), 5.0f, tex3DMipmapFloat, evalTexture3DGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isampler3d, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4( 1.5f, 2.3f, 2.3f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), true, IVec3(-8, 7, 3), 5.0f, tex3DMipmapInt, evalTexture3DGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usampler3d, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4( 1.5f, 2.3f, 2.3f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, -0.2f), true, IVec3(3, -8, 7), 5.0f, tex3DMipmapUint, evalTexture3DGradOffsetClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(sampler1d_fixed, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, 0.0f, 0.0f, 0.0f), Vec4( 1.5f, 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(-8, 0, 0), 5.0f, tex1DMipmapFixed, evalTexture1DGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler1d_float, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, 0.0f, 0.0f, 0.0f), Vec4( 1.5f, 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(7, 0, 0), 5.0f, tex1DMipmapFloat, evalTexture1DGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isampler1d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, 0.0f, 0.0f, 0.0f), Vec4( 1.5f, 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), true, IVec3(-8, 0, 0), 5.0f, tex1DMipmapInt, evalTexture1DGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usampler1d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, 0.0f, 0.0f, 0.0f), Vec4( 1.5f, 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), true, IVec3(7, 0, 0), 5.0f, tex1DMipmapUint, evalTexture1DGradOffsetClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(sampler1darray_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.5f, 0.0f, 0.0f), Vec4( 1.5f, 3.5f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(-8, 0, 0), 5.0f, tex1DArrayMipmapFixed, evalTexture1DArrayGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler1darray_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.5f, 0.0f, 0.0f), Vec4( 1.5f, 3.5f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(7, 0, 0), 5.0f, tex1DArrayMipmapFloat, evalTexture1DArrayGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(isampler1darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.5f, 0.0f, 0.0f), Vec4( 1.5f, 3.5f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), true, IVec3(-8, 0, 0), 5.0f, tex1DArrayMipmapInt, evalTexture1DArrayGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(usampler1darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.5f, 0.0f, 0.0f), Vec4( 1.5f, 3.5f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), true, IVec3(7, 0, 0), 5.0f, tex1DArrayMipmapUint, evalTexture1DArrayGradOffsetClamp, FRAGMENT), + + GRADCLAMP_CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4( 1.5f, 2.3f, 1.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.2f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(7, -8, 0), 5.0f, tex2DMipmapShadow, evalTexture2DShadowGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler2darrayshadow, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4( 1.5f, 2.3f, 3.5f, 1.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, -0.2f, 0.0f), true, IVec3(7, -8, 0), 5.0f, tex2DArrayMipmapShadow, evalTexture2DArrayShadowGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler1dshadow, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, 0.0f, 0.0f, 0.0f), Vec4( 1.5f, 0.0f, 1.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.2f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), true, IVec3(7, 0, 0), 5.0f, tex1DMipmapShadow, evalTexture1DShadowGradOffsetClamp, FRAGMENT), + GRADCLAMP_CASE_SPEC(sampler1darrayshadow, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.5f, 0.0f, 0.0f), Vec4( 1.5f, 3.5f, 1.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3( 0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), true, IVec3(7, 0, 0), 5.0f, tex1DArrayMipmapShadow, evalTexture1DArrayShadowGradOffsetClamp, FRAGMENT), + }; + createCaseGroup(this, "texturegradoffsetclamp", "textureGradOffsetClampARB() Tests", textureGradOffsetClampCases, DE_LENGTH_OF_ARRAY(textureGradOffsetClampCases)); + + // textureProjGrad() cases static const TexFuncCaseSpec textureProjGradCases[] = { diff --git a/external/vulkancts/mustpass/1.0.4/vk-default-no-waivers.txt b/external/vulkancts/mustpass/1.0.4/vk-default-no-waivers.txt index 32e1461..46481ac 100644 --- a/external/vulkancts/mustpass/1.0.4/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/1.0.4/vk-default-no-waivers.txt @@ -215605,6 +215605,56 @@ dEQP-VK.glsl.texture_functions.texture.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.texture.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.texture.sampler1darrayshadow_bias_fragment dEQP-VK.glsl.texture_functions.texture.samplercubearrayshadow_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_samplercube_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercube_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_samplercube_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercube_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercubearray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercubearray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isamplercubearray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usamplercubearray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_samplercubeshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercubeshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1darrayshadow_bias_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler2d_fixed_vertex dEQP-VK.glsl.texture_functions.textureoffset.sparse_sampler2d_fixed_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler2d_fixed_fragment @@ -215681,6 +215731,42 @@ dEQP-VK.glsl.texture_functions.textureoffset.sampler1dshadow_bias_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.textureoffset.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler1darrayshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1darrayshadow_bias_fragment dEQP-VK.glsl.texture_functions.textureproj.sampler2d_vec3_fixed_vertex dEQP-VK.glsl.texture_functions.textureproj.sampler2d_vec3_fixed_fragment dEQP-VK.glsl.texture_functions.textureproj.sampler2d_vec3_float_vertex @@ -216039,6 +216125,58 @@ dEQP-VK.glsl.texture_functions.texturegrad.sampler1dshadow_vertex dEQP-VK.glsl.texture_functions.texturegrad.sampler1dshadow_fragment dEQP-VK.glsl.texture_functions.texturegrad.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.texturegrad.sampler1darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_samplercube_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercube_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_samplercube_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercube_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercubearray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercubearray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isamplercubearray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usamplercubearray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_samplercubeshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercubeshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.texturegradoffset.sampler2d_fixed_vertex dEQP-VK.glsl.texture_functions.texturegradoffset.sampler2d_fixed_fragment dEQP-VK.glsl.texture_functions.texturegradoffset.sampler2d_float_vertex @@ -216088,6 +216226,44 @@ dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1dshadow_vertex dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1dshadow_fragment dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.textureprojgrad.sampler2d_vec3_fixed_vertex dEQP-VK.glsl.texture_functions.textureprojgrad.sampler2d_vec3_fixed_fragment dEQP-VK.glsl.texture_functions.textureprojgrad.sampler2d_vec3_float_vertex diff --git a/external/vulkancts/mustpass/1.0.4/vk-default.txt b/external/vulkancts/mustpass/1.0.4/vk-default.txt index 9e887c5..b3d89f9 100644 --- a/external/vulkancts/mustpass/1.0.4/vk-default.txt +++ b/external/vulkancts/mustpass/1.0.4/vk-default.txt @@ -215605,6 +215605,56 @@ dEQP-VK.glsl.texture_functions.texture.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.texture.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.texture.sampler1darrayshadow_bias_fragment dEQP-VK.glsl.texture_functions.texture.samplercubearrayshadow_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_samplercube_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercube_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_samplercube_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercube_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usamplercube_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercubearray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercubearray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureclamp.isamplercubearray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.usamplercubearray_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sparse_samplercubeshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.samplercubeshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureclamp.sampler1darrayshadow_bias_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler2d_fixed_vertex dEQP-VK.glsl.texture_functions.textureoffset.sparse_sampler2d_fixed_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler2d_fixed_fragment @@ -215681,6 +215731,42 @@ dEQP-VK.glsl.texture_functions.textureoffset.sampler1dshadow_bias_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.textureoffset.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.textureoffset.sampler1darrayshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler2d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler2darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler3d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler3d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler3d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1d_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1d_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler1d_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1darray_bias_fixed_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1darray_bias_float_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.isampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.usampler1darray_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sparse_sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler2dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1dshadow_bias_fragment +dEQP-VK.glsl.texture_functions.textureoffsetclamp.sampler1darrayshadow_bias_fragment dEQP-VK.glsl.texture_functions.textureproj.sampler2d_vec3_fixed_vertex dEQP-VK.glsl.texture_functions.textureproj.sampler2d_vec3_fixed_fragment dEQP-VK.glsl.texture_functions.textureproj.sampler2d_vec3_float_vertex @@ -216039,6 +216125,58 @@ dEQP-VK.glsl.texture_functions.texturegrad.sampler1dshadow_vertex dEQP-VK.glsl.texture_functions.texturegrad.sampler1dshadow_fragment dEQP-VK.glsl.texture_functions.texturegrad.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.texturegrad.sampler1darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_samplercube_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercube_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_samplercube_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercube_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usamplercube_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercubearray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercubearray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.isamplercubearray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.usamplercubearray_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_samplercubeshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.samplercubeshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sparse_sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.texturegradoffset.sampler2d_fixed_vertex dEQP-VK.glsl.texture_functions.texturegradoffset.sampler2d_fixed_fragment dEQP-VK.glsl.texture_functions.texturegradoffset.sampler2d_float_vertex @@ -216088,6 +216226,44 @@ dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1dshadow_vertex dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1dshadow_fragment dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1darrayshadow_vertex dEQP-VK.glsl.texture_functions.texturegradoffset.sampler1darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler2d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler2darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler3d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler3d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler3d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1d_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1d_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler1d_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1darray_fixed_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1darray_float_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.isampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.usampler1darray_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sparse_sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler2darrayshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1dshadow_fragment +dEQP-VK.glsl.texture_functions.texturegradoffsetclamp.sampler1darrayshadow_fragment dEQP-VK.glsl.texture_functions.textureprojgrad.sampler2d_vec3_fixed_vertex dEQP-VK.glsl.texture_functions.textureprojgrad.sampler2d_vec3_fixed_fragment dEQP-VK.glsl.texture_functions.textureprojgrad.sampler2d_vec3_float_vertex -- 2.7.4