| #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; | |
| } |