123 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
#version 450
 | 
						|
 | 
						|
#extension GL_NV_shader_texture_footprint : require
 | 
						|
 | 
						|
 | 
						|
layout (location = 0) in vec2 P2;
 | 
						|
layout (location = 2) in vec3 P3;
 | 
						|
layout (location = 3) in flat int granularity;
 | 
						|
layout (location = 4) in float lodClamp;
 | 
						|
layout (location = 5) in float lod;
 | 
						|
layout (location = 6) in vec2 dx;
 | 
						|
layout (location = 8) in vec2 dy;
 | 
						|
layout (location = 9) in float bias;
 | 
						|
 | 
						|
uniform sampler2D sample2D;
 | 
						|
uniform sampler3D sample3D;
 | 
						|
 | 
						|
buffer result2D {
 | 
						|
    bool ret2D;
 | 
						|
    uvec2 anchor2D;
 | 
						|
    uvec2 offset2D;
 | 
						|
    uvec2 mask2D;
 | 
						|
    uint lod2D;
 | 
						|
    uint granularity2D;
 | 
						|
};
 | 
						|
 | 
						|
buffer result3D {
 | 
						|
    bool ret3D;
 | 
						|
    uvec3 anchor3D;
 | 
						|
    uvec3 offset3D;
 | 
						|
    uvec2 mask3D;
 | 
						|
    uint lod3D;
 | 
						|
    uint granularity3D;
 | 
						|
};
 | 
						|
 | 
						|
void main() {
 | 
						|
 gl_TextureFootprint2DNV fp2D;
 | 
						|
 gl_TextureFootprint3DNV fp3D;
 | 
						|
 
 | 
						|
 ret2D = textureFootprintNV(sample2D, P2, granularity, true, fp2D);
 | 
						|
 anchor2D = fp2D.anchor;
 | 
						|
 offset2D = fp2D.offset;
 | 
						|
 mask2D = fp2D.mask;
 | 
						|
 lod2D = fp2D.lod;
 | 
						|
 granularity2D = fp2D.granularity;
 | 
						|
 
 | 
						|
 ret2D = textureFootprintNV(sample2D, P2, granularity, true, fp2D, bias);
 | 
						|
 anchor2D += fp2D.anchor;
 | 
						|
 offset2D += fp2D.offset;
 | 
						|
 mask2D += fp2D.mask;
 | 
						|
 lod2D += fp2D.lod;
 | 
						|
 granularity2D += fp2D.granularity;
 | 
						|
 
 | 
						|
 ret2D = textureFootprintClampNV(sample2D, P2, lodClamp, granularity, true, fp2D);
 | 
						|
 anchor2D += fp2D.anchor;
 | 
						|
 offset2D += fp2D.offset;
 | 
						|
 mask2D += fp2D.mask;
 | 
						|
 lod2D += fp2D.lod;
 | 
						|
 granularity2D += fp2D.granularity;
 | 
						|
 
 | 
						|
 ret2D = textureFootprintClampNV(sample2D, P2, lodClamp, granularity, true, fp2D, bias);
 | 
						|
 anchor2D += fp2D.anchor;
 | 
						|
 offset2D += fp2D.offset;
 | 
						|
 mask2D += fp2D.mask;
 | 
						|
 lod2D += fp2D.lod;
 | 
						|
 granularity2D += fp2D.granularity;
 | 
						|
 
 | 
						|
 ret2D = textureFootprintLodNV(sample2D, P2, lod, granularity, true, fp2D);
 | 
						|
 anchor2D += fp2D.anchor;
 | 
						|
 offset2D += fp2D.offset;
 | 
						|
 mask2D += fp2D.mask;
 | 
						|
 lod2D += fp2D.lod;
 | 
						|
 granularity2D += fp2D.granularity;
 | 
						|
 
 | 
						|
 ret2D = textureFootprintGradNV(sample2D, P2, dx, dy, granularity, true, fp2D);
 | 
						|
 anchor2D += fp2D.anchor;
 | 
						|
 offset2D += fp2D.offset;
 | 
						|
 mask2D += fp2D.mask;
 | 
						|
 lod2D += fp2D.lod;
 | 
						|
 granularity2D += fp2D.granularity;
 | 
						|
 
 | 
						|
 ret2D = textureFootprintGradClampNV(sample2D, P2, dx, dy, lodClamp, granularity, true, fp2D);
 | 
						|
 anchor2D += fp2D.anchor;
 | 
						|
 offset2D += fp2D.offset;
 | 
						|
 mask2D += fp2D.mask;
 | 
						|
 lod2D += fp2D.lod;
 | 
						|
 granularity2D += fp2D.granularity;
 | 
						|
 
 | 
						|
 ret3D = textureFootprintNV(sample3D, P3, granularity, true, fp3D);
 | 
						|
 anchor3D = fp3D.anchor;
 | 
						|
 offset3D = fp3D.offset;
 | 
						|
 mask3D = fp3D.mask;
 | 
						|
 lod3D = fp3D.lod;
 | 
						|
 granularity3D = fp3D.granularity;
 | 
						|
 
 | 
						|
 ret3D = textureFootprintNV(sample3D, P3, granularity, true, fp3D, bias);
 | 
						|
 anchor3D += fp3D.anchor;
 | 
						|
 offset3D += fp3D.offset;
 | 
						|
 mask3D += fp3D.mask;
 | 
						|
 lod3D += fp3D.lod;
 | 
						|
 granularity3D += fp3D.granularity;
 | 
						|
 
 | 
						|
 ret3D = textureFootprintClampNV(sample3D, P3, lodClamp, granularity, true, fp3D);
 | 
						|
 anchor3D += fp3D.anchor;
 | 
						|
 offset3D += fp3D.offset;
 | 
						|
 mask3D += fp3D.mask;
 | 
						|
 lod3D += fp3D.lod;
 | 
						|
 granularity3D += fp3D.granularity;
 | 
						|
 
 | 
						|
 ret3D = textureFootprintClampNV(sample3D, P3, lodClamp, granularity, true, fp3D, bias);
 | 
						|
 anchor3D += fp3D.anchor;
 | 
						|
 offset3D += fp3D.offset;
 | 
						|
 mask3D += fp3D.mask;
 | 
						|
 lod3D += fp3D.lod;
 | 
						|
 granularity3D += fp3D.granularity;
 | 
						|
 
 | 
						|
 ret3D = textureFootprintLodNV(sample3D, P3, lod, granularity, true, fp3D);
 | 
						|
 anchor3D += fp3D.anchor;
 | 
						|
 offset3D += fp3D.offset;
 | 
						|
 mask3D += fp3D.mask;
 | 
						|
 lod3D += fp3D.lod;
 | 
						|
 granularity3D += fp3D.granularity;
 | 
						|
} |