You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.2 KiB
123 lines
3.2 KiB
#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;
|
|
} |