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