Parser & SPV: Implement two extensions regarding GLSL sparse texture.
Implement extension "GL_ARB_sparse_texture2". Implement extension "GL_ARB_sparse_texture_clamp".
This commit is contained in:
70
Test/spv.sparseTextureClamp.frag
Normal file
70
Test/spv.sparseTextureClamp.frag
Normal file
@@ -0,0 +1,70 @@
|
||||
#version 450
|
||||
#extension GL_ARB_sparse_texture_clamp: enable
|
||||
|
||||
uniform sampler2D s2D;
|
||||
uniform sampler3D s3D;
|
||||
uniform sampler2DShadow s2DShadow;
|
||||
uniform samplerCubeShadow sCubeShadow;
|
||||
uniform sampler2DArrayShadow s2DArrayShadow;
|
||||
uniform sampler2DRectShadow s2DRectShadow;
|
||||
uniform samplerCubeArrayShadow sCubeArrayShadow;
|
||||
|
||||
uniform isamplerCube isCube;
|
||||
uniform isampler2DArray is2DArray;
|
||||
|
||||
uniform usamplerCubeArray usCubeArray;
|
||||
uniform usampler2DRect us2DRect;
|
||||
|
||||
uniform vec2 c2;
|
||||
uniform vec3 c3;
|
||||
uniform vec4 c4;
|
||||
|
||||
uniform float lodClamp;
|
||||
|
||||
out vec4 outColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
int resident = 0;
|
||||
vec4 texel = vec4(0.0);
|
||||
ivec4 itexel = ivec4(0);
|
||||
uvec4 utexel = uvec4(0);
|
||||
|
||||
resident |= sparseTextureClampARB(s2D, c2, lodClamp, texel);
|
||||
resident |= sparseTextureClampARB(s3D, c3, lodClamp, texel, 2.0);
|
||||
resident |= sparseTextureClampARB(isCube, c3, lodClamp, itexel);
|
||||
resident |= sparseTextureClampARB(s2DShadow, c3, lodClamp, texel.x);
|
||||
resident |= sparseTextureClampARB(sCubeArrayShadow, c4, 1.0, lodClamp, texel.x);
|
||||
|
||||
texel += textureClampARB(s2D, c2, lodClamp);
|
||||
texel += textureClampARB(s3D, c3, lodClamp, 2.0);
|
||||
itexel += textureClampARB(isCube, c3, lodClamp);
|
||||
texel.x += textureClampARB(s2DShadow, c3, lodClamp);
|
||||
texel.x += textureClampARB(sCubeArrayShadow, c4, 1.0, lodClamp);
|
||||
|
||||
resident |= sparseTextureOffsetClampARB(s3D, c3, ivec3(2), lodClamp, texel, 2.0);
|
||||
resident |= sparseTextureOffsetClampARB(us2DRect, c2, ivec2(3), lodClamp, utexel);
|
||||
resident |= sparseTextureOffsetClampARB(s2DArrayShadow, c4, ivec2(5), lodClamp, texel.z);
|
||||
|
||||
texel += textureOffsetClampARB(s3D, c3, ivec3(2), lodClamp, 2.0);
|
||||
utexel += textureOffsetClampARB(us2DRect, c2, ivec2(3), lodClamp);
|
||||
texel.z += textureOffsetClampARB(s2DArrayShadow, c4, ivec2(5), lodClamp);
|
||||
|
||||
resident |= sparseTextureGradClampARB(s3D, c3, c3, c3, lodClamp, texel);
|
||||
resident |= sparseTextureGradClampARB(sCubeShadow, c4, c3, c3, lodClamp, texel.y);
|
||||
resident |= sparseTextureGradClampARB(usCubeArray, c4, c3, c3, lodClamp, utexel);
|
||||
|
||||
texel += textureGradClampARB(s3D, c3, c3, c3, lodClamp);
|
||||
texel.y += textureGradClampARB(sCubeShadow, c4, c3, c3, lodClamp);
|
||||
utexel += textureGradClampARB(usCubeArray, c4, c3, c3, lodClamp);
|
||||
|
||||
resident |= sparseTextureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp, texel);
|
||||
resident |= sparseTextureGradOffsetClampARB(s2DRectShadow, c3, c2, c2, ivec2(6), lodClamp, texel.w);
|
||||
resident |= sparseTextureGradOffsetClampARB(is2DArray, c3, c2, c2, ivec2(2), lodClamp, itexel);
|
||||
|
||||
texel += textureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp);
|
||||
texel.w += textureGradOffsetClampARB(s2DRectShadow, c3, c2, c2, ivec2(6), lodClamp);
|
||||
itexel += textureGradOffsetClampARB(is2DArray, c3, c2, c2, ivec2(2), lodClamp);
|
||||
|
||||
outColor = sparseTexelsResidentARB(resident) ? texel : vec4(itexel) + vec4(utexel);
|
||||
}
|
||||
Reference in New Issue
Block a user