mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-09 12:00:05 +00:00
0003-Add-support-for-SPV_NV_shader_image_footprint
This commit is contained in:
parent
beae2251b7
commit
3a1379667d
@ -33,7 +33,7 @@ enum Op;
|
|||||||
enum Capability;
|
enum Capability;
|
||||||
|
|
||||||
static const int GLSLextNVVersion = 100;
|
static const int GLSLextNVVersion = 100;
|
||||||
static const int GLSLextNVRevision = 7;
|
static const int GLSLextNVRevision = 8;
|
||||||
|
|
||||||
//SPV_NV_sample_mask_override_coverage
|
//SPV_NV_sample_mask_override_coverage
|
||||||
const char* const E_SPV_NV_sample_mask_override_coverage = "SPV_NV_sample_mask_override_coverage";
|
const char* const E_SPV_NV_sample_mask_override_coverage = "SPV_NV_sample_mask_override_coverage";
|
||||||
@ -60,4 +60,7 @@ const char* const E_SPV_NV_fragment_shader_barycentric = "SPV_NV_fragment_shader
|
|||||||
//SPV_NV_compute_shader_derivatives
|
//SPV_NV_compute_shader_derivatives
|
||||||
const char* const E_SPV_NV_compute_shader_derivatives = "SPV_NV_compute_shader_derivatives";
|
const char* const E_SPV_NV_compute_shader_derivatives = "SPV_NV_compute_shader_derivatives";
|
||||||
|
|
||||||
|
//SPV_NV_shader_image_footprint
|
||||||
|
const char* const E_SPV_NV_shader_image_footprint = "SPV_NV_shader_image_footprint";
|
||||||
|
|
||||||
#endif // #ifndef GLSLextNV_H
|
#endif // #ifndef GLSLextNV_H
|
@ -3667,6 +3667,25 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
|
|||||||
if (i == 3)
|
if (i == 3)
|
||||||
lvalue = true;
|
lvalue = true;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
case glslang::EOpImageSampleFootprintNV:
|
||||||
|
if (i == 4)
|
||||||
|
lvalue = true;
|
||||||
|
break;
|
||||||
|
case glslang::EOpImageSampleFootprintClampNV:
|
||||||
|
case glslang::EOpImageSampleFootprintLodNV:
|
||||||
|
if (i == 5)
|
||||||
|
lvalue = true;
|
||||||
|
break;
|
||||||
|
case glslang::EOpImageSampleFootprintGradNV:
|
||||||
|
if (i == 6)
|
||||||
|
lvalue = true;
|
||||||
|
break;
|
||||||
|
case glslang::EOpImageSampleFootprintGradClampNV:
|
||||||
|
if (i == 7)
|
||||||
|
lvalue = true;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -4020,6 +4039,10 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
|
|||||||
|
|
||||||
// Check for texture functions other than queries
|
// Check for texture functions other than queries
|
||||||
bool sparse = node->isSparseTexture();
|
bool sparse = node->isSparseTexture();
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
bool imageFootprint = node->isImageFootprint();
|
||||||
|
#endif
|
||||||
|
|
||||||
bool cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
|
bool cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
|
||||||
|
|
||||||
// check for bias argument
|
// check for bias argument
|
||||||
@ -4049,7 +4072,12 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
|
|||||||
++nonBiasArgCount;
|
++nonBiasArgCount;
|
||||||
if (sparse)
|
if (sparse)
|
||||||
++nonBiasArgCount;
|
++nonBiasArgCount;
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
if (imageFootprint)
|
||||||
|
//Following three extra arguments
|
||||||
|
// int granularity, bool coarse, out gl_TextureFootprint2DNV footprint
|
||||||
|
nonBiasArgCount += 3;
|
||||||
|
#endif
|
||||||
if ((int)arguments.size() > nonBiasArgCount)
|
if ((int)arguments.size() > nonBiasArgCount)
|
||||||
bias = true;
|
bias = true;
|
||||||
}
|
}
|
||||||
@ -4142,7 +4170,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
|
|||||||
params.lodClamp = arguments[2 + extraArgs];
|
params.lodClamp = arguments[2 + extraArgs];
|
||||||
++extraArgs;
|
++extraArgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
// sparse
|
// sparse
|
||||||
if (sparse) {
|
if (sparse) {
|
||||||
params.texelOut = arguments[2 + extraArgs];
|
params.texelOut = arguments[2 + extraArgs];
|
||||||
@ -4158,13 +4185,81 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
|
|||||||
} else
|
} else
|
||||||
params.component = builder.makeIntConstant(0);
|
params.component = builder.makeIntConstant(0);
|
||||||
}
|
}
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
spv::Id resultStruct = spv::NoResult;
|
||||||
|
if (imageFootprint) {
|
||||||
|
//Following three extra arguments
|
||||||
|
// int granularity, bool coarse, out gl_TextureFootprint2DNV footprint
|
||||||
|
params.granularity = arguments[2 + extraArgs];
|
||||||
|
params.coarse = arguments[3 + extraArgs];
|
||||||
|
resultStruct = arguments[4 + extraArgs];
|
||||||
|
extraArgs += 3;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
// bias
|
// bias
|
||||||
if (bias) {
|
if (bias) {
|
||||||
params.bias = arguments[2 + extraArgs];
|
params.bias = arguments[2 + extraArgs];
|
||||||
++extraArgs;
|
++extraArgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
if (imageFootprint) {
|
||||||
|
builder.addExtension(spv::E_SPV_NV_shader_image_footprint);
|
||||||
|
builder.addCapability(spv::CapabilityImageFootprintNV);
|
||||||
|
|
||||||
|
|
||||||
|
//resultStructType(OpenGL type) contains 5 elements:
|
||||||
|
//struct gl_TextureFootprint2DNV {
|
||||||
|
// uvec2 anchor;
|
||||||
|
// uvec2 offset;
|
||||||
|
// uvec2 mask;
|
||||||
|
// uint lod;
|
||||||
|
// uint granularity;
|
||||||
|
//};
|
||||||
|
//or
|
||||||
|
//struct gl_TextureFootprint3DNV {
|
||||||
|
// uvec3 anchor;
|
||||||
|
// uvec3 offset;
|
||||||
|
// uvec2 mask;
|
||||||
|
// uint lod;
|
||||||
|
// uint granularity;
|
||||||
|
//};
|
||||||
|
spv::Id resultStructType = builder.getContainedTypeId(builder.getTypeId(resultStruct));
|
||||||
|
assert(builder.isStructType(resultStructType));
|
||||||
|
|
||||||
|
//resType (SPIR-V type) contains 6 elements:
|
||||||
|
//Member 0 must be a Boolean type scalar(LOD),
|
||||||
|
//Member 1 must be a vector of integer type, whose Signedness operand is 0(anchor),
|
||||||
|
//Member 2 must be a vector of integer type, whose Signedness operand is 0(offset),
|
||||||
|
//Member 3 must be a vector of integer type, whose Signedness operand is 0(mask),
|
||||||
|
//Member 4 must be a scalar of integer type, whose Signedness operand is 0(lod),
|
||||||
|
//Member 5 must be a scalar of integer type, whose Signedness operand is 0(granularity).
|
||||||
|
std::vector<spv::Id> members;
|
||||||
|
members.push_back(resultType());
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
members.push_back(builder.getContainedTypeId(resultStructType, i));
|
||||||
|
}
|
||||||
|
spv::Id resType = builder.makeStructType(members, "ResType");
|
||||||
|
|
||||||
|
//call ImageFootprintNV
|
||||||
|
spv::Id res = builder.createTextureCall(precision, resType, sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params);
|
||||||
|
|
||||||
|
//copy resType (SPIR-V type) to resultStructType(OpenGL type)
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
builder.clearAccessChain();
|
||||||
|
builder.setAccessChainLValue(resultStruct);
|
||||||
|
|
||||||
|
//Accessing to a struct we created, no coherent flag is set
|
||||||
|
spv::Builder::AccessChain::CoherentFlags flags;
|
||||||
|
flags.clear();
|
||||||
|
|
||||||
|
builder.accessChainPush(builder.makeIntConstant(i), flags);
|
||||||
|
builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1), i+1));
|
||||||
|
}
|
||||||
|
return builder.createCompositeExtract(res, resultType(), 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// projective component (might not to move)
|
// projective component (might not to move)
|
||||||
// GLSL: "The texture coordinates consumed from P, not including the last component of P,
|
// GLSL: "The texture coordinates consumed from P, not including the last component of P,
|
||||||
// are divided by the last component of P."
|
// are divided by the last component of P."
|
||||||
|
@ -1654,6 +1654,13 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
|
|||||||
if (parameters.component != NoResult)
|
if (parameters.component != NoResult)
|
||||||
texArgs[numArgs++] = parameters.component;
|
texArgs[numArgs++] = parameters.component;
|
||||||
|
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
if (parameters.granularity != NoResult)
|
||||||
|
texArgs[numArgs++] = parameters.granularity;
|
||||||
|
if (parameters.coarse != NoResult)
|
||||||
|
texArgs[numArgs++] = parameters.coarse;
|
||||||
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// Set up the optional arguments
|
// Set up the optional arguments
|
||||||
//
|
//
|
||||||
@ -1725,6 +1732,10 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
|
|||||||
opCode = OpImageSparseFetch;
|
opCode = OpImageSparseFetch;
|
||||||
else
|
else
|
||||||
opCode = OpImageFetch;
|
opCode = OpImageFetch;
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
} else if (parameters.granularity && parameters.coarse) {
|
||||||
|
opCode = OpImageSampleFootprintNV;
|
||||||
|
#endif
|
||||||
} else if (gather) {
|
} else if (gather) {
|
||||||
if (parameters.Dref)
|
if (parameters.Dref)
|
||||||
if (sparse)
|
if (sparse)
|
||||||
|
@ -366,6 +366,10 @@ public:
|
|||||||
Id component;
|
Id component;
|
||||||
Id texelOut;
|
Id texelOut;
|
||||||
Id lodClamp;
|
Id lodClamp;
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
Id granularity;
|
||||||
|
Id coarse;
|
||||||
|
#endif
|
||||||
bool nonprivate;
|
bool nonprivate;
|
||||||
bool volatil;
|
bool volatil;
|
||||||
};
|
};
|
||||||
|
@ -1251,7 +1251,9 @@ const char* OpcodeString(int op)
|
|||||||
|
|
||||||
#ifdef NV_EXTENSIONS
|
#ifdef NV_EXTENSIONS
|
||||||
case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
|
case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
|
||||||
|
case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return "Bad";
|
return "Bad";
|
||||||
}
|
}
|
||||||
@ -2596,6 +2598,12 @@ void Parameterize()
|
|||||||
|
|
||||||
#ifdef NV_EXTENSIONS
|
#ifdef NV_EXTENSIONS
|
||||||
InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
|
InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
|
||||||
|
InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'");
|
||||||
|
InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'");
|
||||||
|
InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Granularity'");
|
||||||
|
InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coarse'");
|
||||||
|
InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandImageOperands, "", true);
|
||||||
|
InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandVariableIds, "", true);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
849
Test/baseResults/spv.shaderImageFootprint.frag.out
Normal file
849
Test/baseResults/spv.shaderImageFootprint.frag.out
Normal file
@ -0,0 +1,849 @@
|
|||||||
|
spv.shaderImageFootprint.frag
|
||||||
|
// Module Version 10000
|
||||||
|
// Generated by (magic number): 80007
|
||||||
|
// Id's are bound by 622
|
||||||
|
|
||||||
|
Capability Shader
|
||||||
|
Capability MinLod
|
||||||
|
Capability Bad
|
||||||
|
Extension "SPV_NV_shader_image_footprint"
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint Fragment 4 "main" 21 24 76 125 225 275 277 387
|
||||||
|
ExecutionMode 4 OriginUpperLeft
|
||||||
|
Source GLSL 450
|
||||||
|
SourceExtension "GL_NV_shader_texture_footprint"
|
||||||
|
Name 4 "main"
|
||||||
|
Name 8 "result2D"
|
||||||
|
MemberName 8(result2D) 0 "ret2D"
|
||||||
|
MemberName 8(result2D) 1 "anchor2D"
|
||||||
|
MemberName 8(result2D) 2 "offset2D"
|
||||||
|
MemberName 8(result2D) 3 "mask2D"
|
||||||
|
MemberName 8(result2D) 4 "lod2D"
|
||||||
|
MemberName 8(result2D) 5 "granularity2D"
|
||||||
|
Name 10 ""
|
||||||
|
Name 17 "sample2D"
|
||||||
|
Name 21 "P2"
|
||||||
|
Name 24 "granularity"
|
||||||
|
Name 28 "gl_TextureFootprint2DNV"
|
||||||
|
MemberName 28(gl_TextureFootprint2DNV) 0 "anchor"
|
||||||
|
MemberName 28(gl_TextureFootprint2DNV) 1 "offset"
|
||||||
|
MemberName 28(gl_TextureFootprint2DNV) 2 "mask"
|
||||||
|
MemberName 28(gl_TextureFootprint2DNV) 3 "lod"
|
||||||
|
MemberName 28(gl_TextureFootprint2DNV) 4 "granularity"
|
||||||
|
Name 30 "fp2D"
|
||||||
|
Name 31 "ResType"
|
||||||
|
Name 76 "bias"
|
||||||
|
Name 78 "ResType"
|
||||||
|
Name 125 "lodClamp"
|
||||||
|
Name 128 "ResType"
|
||||||
|
Name 178 "ResType"
|
||||||
|
Name 225 "lod"
|
||||||
|
Name 228 "ResType"
|
||||||
|
Name 275 "dx"
|
||||||
|
Name 277 "dy"
|
||||||
|
Name 280 "ResType"
|
||||||
|
Name 331 "ResType"
|
||||||
|
Name 377 "result3D"
|
||||||
|
MemberName 377(result3D) 0 "ret3D"
|
||||||
|
MemberName 377(result3D) 1 "anchor3D"
|
||||||
|
MemberName 377(result3D) 2 "offset3D"
|
||||||
|
MemberName 377(result3D) 3 "mask3D"
|
||||||
|
MemberName 377(result3D) 4 "lod3D"
|
||||||
|
MemberName 377(result3D) 5 "granularity3D"
|
||||||
|
Name 379 ""
|
||||||
|
Name 383 "sample3D"
|
||||||
|
Name 387 "P3"
|
||||||
|
Name 390 "gl_TextureFootprint3DNV"
|
||||||
|
MemberName 390(gl_TextureFootprint3DNV) 0 "anchor"
|
||||||
|
MemberName 390(gl_TextureFootprint3DNV) 1 "offset"
|
||||||
|
MemberName 390(gl_TextureFootprint3DNV) 2 "mask"
|
||||||
|
MemberName 390(gl_TextureFootprint3DNV) 3 "lod"
|
||||||
|
MemberName 390(gl_TextureFootprint3DNV) 4 "granularity"
|
||||||
|
Name 392 "fp3D"
|
||||||
|
Name 393 "ResType"
|
||||||
|
Name 429 "ResType"
|
||||||
|
Name 478 "ResType"
|
||||||
|
Name 528 "ResType"
|
||||||
|
Name 577 "ResType"
|
||||||
|
MemberDecorate 8(result2D) 0 Offset 0
|
||||||
|
MemberDecorate 8(result2D) 1 Offset 8
|
||||||
|
MemberDecorate 8(result2D) 2 Offset 16
|
||||||
|
MemberDecorate 8(result2D) 3 Offset 24
|
||||||
|
MemberDecorate 8(result2D) 4 Offset 32
|
||||||
|
MemberDecorate 8(result2D) 5 Offset 36
|
||||||
|
Decorate 8(result2D) BufferBlock
|
||||||
|
Decorate 10 DescriptorSet 0
|
||||||
|
Decorate 17(sample2D) DescriptorSet 0
|
||||||
|
Decorate 21(P2) Location 0
|
||||||
|
Decorate 24(granularity) Flat
|
||||||
|
Decorate 24(granularity) Location 3
|
||||||
|
Decorate 76(bias) Location 9
|
||||||
|
Decorate 125(lodClamp) Location 4
|
||||||
|
Decorate 225(lod) Location 5
|
||||||
|
Decorate 275(dx) Location 6
|
||||||
|
Decorate 277(dy) Location 8
|
||||||
|
MemberDecorate 377(result3D) 0 Offset 0
|
||||||
|
MemberDecorate 377(result3D) 1 Offset 16
|
||||||
|
MemberDecorate 377(result3D) 2 Offset 32
|
||||||
|
MemberDecorate 377(result3D) 3 Offset 48
|
||||||
|
MemberDecorate 377(result3D) 4 Offset 56
|
||||||
|
MemberDecorate 377(result3D) 5 Offset 60
|
||||||
|
Decorate 377(result3D) BufferBlock
|
||||||
|
Decorate 379 DescriptorSet 0
|
||||||
|
Decorate 383(sample3D) DescriptorSet 0
|
||||||
|
Decorate 387(P3) Location 2
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeInt 32 0
|
||||||
|
7: TypeVector 6(int) 2
|
||||||
|
8(result2D): TypeStruct 6(int) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
|
||||||
|
9: TypePointer Uniform 8(result2D)
|
||||||
|
10: 9(ptr) Variable Uniform
|
||||||
|
11: TypeInt 32 1
|
||||||
|
12: 11(int) Constant 0
|
||||||
|
13: TypeFloat 32
|
||||||
|
14: TypeImage 13(float) 2D sampled format:Unknown
|
||||||
|
15: TypeSampledImage 14
|
||||||
|
16: TypePointer UniformConstant 15
|
||||||
|
17(sample2D): 16(ptr) Variable UniformConstant
|
||||||
|
19: TypeVector 13(float) 2
|
||||||
|
20: TypePointer Input 19(fvec2)
|
||||||
|
21(P2): 20(ptr) Variable Input
|
||||||
|
23: TypePointer Input 11(int)
|
||||||
|
24(granularity): 23(ptr) Variable Input
|
||||||
|
26: TypeBool
|
||||||
|
27: 26(bool) ConstantTrue
|
||||||
|
28(gl_TextureFootprint2DNV): TypeStruct 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
|
||||||
|
29: TypePointer Function 28(gl_TextureFootprint2DNV)
|
||||||
|
31(ResType): TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
|
||||||
|
34: TypePointer Function 7(ivec2)
|
||||||
|
36: 11(int) Constant 1
|
||||||
|
39: 11(int) Constant 2
|
||||||
|
42: 11(int) Constant 3
|
||||||
|
44: TypePointer Function 6(int)
|
||||||
|
46: 11(int) Constant 4
|
||||||
|
50: 6(int) Constant 1
|
||||||
|
51: 6(int) Constant 0
|
||||||
|
53: TypePointer Uniform 6(int)
|
||||||
|
57: TypePointer Uniform 7(ivec2)
|
||||||
|
68: 11(int) Constant 5
|
||||||
|
75: TypePointer Input 13(float)
|
||||||
|
76(bias): 75(ptr) Variable Input
|
||||||
|
78(ResType): TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
|
||||||
|
125(lodClamp): 75(ptr) Variable Input
|
||||||
|
128(ResType): TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
|
||||||
|
178(ResType): TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
|
||||||
|
225(lod): 75(ptr) Variable Input
|
||||||
|
228(ResType): TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
|
||||||
|
275(dx): 20(ptr) Variable Input
|
||||||
|
277(dy): 20(ptr) Variable Input
|
||||||
|
280(ResType): TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
|
||||||
|
331(ResType): TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
|
||||||
|
376: TypeVector 6(int) 3
|
||||||
|
377(result3D): TypeStruct 6(int) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
|
||||||
|
378: TypePointer Uniform 377(result3D)
|
||||||
|
379: 378(ptr) Variable Uniform
|
||||||
|
380: TypeImage 13(float) 3D sampled format:Unknown
|
||||||
|
381: TypeSampledImage 380
|
||||||
|
382: TypePointer UniformConstant 381
|
||||||
|
383(sample3D): 382(ptr) Variable UniformConstant
|
||||||
|
385: TypeVector 13(float) 3
|
||||||
|
386: TypePointer Input 385(fvec3)
|
||||||
|
387(P3): 386(ptr) Variable Input
|
||||||
|
390(gl_TextureFootprint3DNV): TypeStruct 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
|
||||||
|
391: TypePointer Function 390(gl_TextureFootprint3DNV)
|
||||||
|
393(ResType): TypeStruct 26(bool) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
|
||||||
|
396: TypePointer Function 376(ivec3)
|
||||||
|
411: TypePointer Uniform 376(ivec3)
|
||||||
|
429(ResType): TypeStruct 26(bool) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
|
||||||
|
478(ResType): TypeStruct 26(bool) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
|
||||||
|
528(ResType): TypeStruct 26(bool) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
|
||||||
|
577(ResType): TypeStruct 26(bool) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
30(fp2D): 29(ptr) Variable Function
|
||||||
|
392(fp3D): 391(ptr) Variable Function
|
||||||
|
18: 15 Load 17(sample2D)
|
||||||
|
22: 19(fvec2) Load 21(P2)
|
||||||
|
25: 11(int) Load 24(granularity)
|
||||||
|
32: 31(ResType) ImageSampleFootprintNV 18 22 25 27
|
||||||
|
33: 7(ivec2) CompositeExtract 32 1
|
||||||
|
35: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
Store 35 33
|
||||||
|
37: 7(ivec2) CompositeExtract 32 2
|
||||||
|
38: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
Store 38 37
|
||||||
|
40: 7(ivec2) CompositeExtract 32 3
|
||||||
|
41: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
Store 41 40
|
||||||
|
43: 6(int) CompositeExtract 32 4
|
||||||
|
45: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
Store 45 43
|
||||||
|
47: 6(int) CompositeExtract 32 5
|
||||||
|
48: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
Store 48 47
|
||||||
|
49: 26(bool) CompositeExtract 32 0
|
||||||
|
52: 6(int) Select 49 50 51
|
||||||
|
54: 53(ptr) AccessChain 10 12
|
||||||
|
Store 54 52
|
||||||
|
55: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
56: 7(ivec2) Load 55
|
||||||
|
58: 57(ptr) AccessChain 10 36
|
||||||
|
Store 58 56
|
||||||
|
59: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
60: 7(ivec2) Load 59
|
||||||
|
61: 57(ptr) AccessChain 10 39
|
||||||
|
Store 61 60
|
||||||
|
62: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
63: 7(ivec2) Load 62
|
||||||
|
64: 57(ptr) AccessChain 10 42
|
||||||
|
Store 64 63
|
||||||
|
65: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
66: 6(int) Load 65
|
||||||
|
67: 53(ptr) AccessChain 10 46
|
||||||
|
Store 67 66
|
||||||
|
69: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
70: 6(int) Load 69
|
||||||
|
71: 53(ptr) AccessChain 10 68
|
||||||
|
Store 71 70
|
||||||
|
72: 15 Load 17(sample2D)
|
||||||
|
73: 19(fvec2) Load 21(P2)
|
||||||
|
74: 11(int) Load 24(granularity)
|
||||||
|
77: 13(float) Load 76(bias)
|
||||||
|
79: 78(ResType) ImageSampleFootprintNV 72 73 74 27 Bias 77
|
||||||
|
80: 7(ivec2) CompositeExtract 79 1
|
||||||
|
81: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
Store 81 80
|
||||||
|
82: 7(ivec2) CompositeExtract 79 2
|
||||||
|
83: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
Store 83 82
|
||||||
|
84: 7(ivec2) CompositeExtract 79 3
|
||||||
|
85: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
Store 85 84
|
||||||
|
86: 6(int) CompositeExtract 79 4
|
||||||
|
87: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
Store 87 86
|
||||||
|
88: 6(int) CompositeExtract 79 5
|
||||||
|
89: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
Store 89 88
|
||||||
|
90: 26(bool) CompositeExtract 79 0
|
||||||
|
91: 6(int) Select 90 50 51
|
||||||
|
92: 53(ptr) AccessChain 10 12
|
||||||
|
Store 92 91
|
||||||
|
93: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
94: 7(ivec2) Load 93
|
||||||
|
95: 57(ptr) AccessChain 10 36
|
||||||
|
96: 7(ivec2) Load 95
|
||||||
|
97: 7(ivec2) IAdd 96 94
|
||||||
|
98: 57(ptr) AccessChain 10 36
|
||||||
|
Store 98 97
|
||||||
|
99: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
100: 7(ivec2) Load 99
|
||||||
|
101: 57(ptr) AccessChain 10 39
|
||||||
|
102: 7(ivec2) Load 101
|
||||||
|
103: 7(ivec2) IAdd 102 100
|
||||||
|
104: 57(ptr) AccessChain 10 39
|
||||||
|
Store 104 103
|
||||||
|
105: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
106: 7(ivec2) Load 105
|
||||||
|
107: 57(ptr) AccessChain 10 42
|
||||||
|
108: 7(ivec2) Load 107
|
||||||
|
109: 7(ivec2) IAdd 108 106
|
||||||
|
110: 57(ptr) AccessChain 10 42
|
||||||
|
Store 110 109
|
||||||
|
111: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
112: 6(int) Load 111
|
||||||
|
113: 53(ptr) AccessChain 10 46
|
||||||
|
114: 6(int) Load 113
|
||||||
|
115: 6(int) IAdd 114 112
|
||||||
|
116: 53(ptr) AccessChain 10 46
|
||||||
|
Store 116 115
|
||||||
|
117: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
118: 6(int) Load 117
|
||||||
|
119: 53(ptr) AccessChain 10 68
|
||||||
|
120: 6(int) Load 119
|
||||||
|
121: 6(int) IAdd 120 118
|
||||||
|
122: 53(ptr) AccessChain 10 68
|
||||||
|
Store 122 121
|
||||||
|
123: 15 Load 17(sample2D)
|
||||||
|
124: 19(fvec2) Load 21(P2)
|
||||||
|
126: 13(float) Load 125(lodClamp)
|
||||||
|
127: 11(int) Load 24(granularity)
|
||||||
|
129:128(ResType) ImageSampleFootprintNV 123 124 127 27 MinLod 126
|
||||||
|
130: 7(ivec2) CompositeExtract 129 1
|
||||||
|
131: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
Store 131 130
|
||||||
|
132: 7(ivec2) CompositeExtract 129 2
|
||||||
|
133: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
Store 133 132
|
||||||
|
134: 7(ivec2) CompositeExtract 129 3
|
||||||
|
135: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
Store 135 134
|
||||||
|
136: 6(int) CompositeExtract 129 4
|
||||||
|
137: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
Store 137 136
|
||||||
|
138: 6(int) CompositeExtract 129 5
|
||||||
|
139: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
Store 139 138
|
||||||
|
140: 26(bool) CompositeExtract 129 0
|
||||||
|
141: 6(int) Select 140 50 51
|
||||||
|
142: 53(ptr) AccessChain 10 12
|
||||||
|
Store 142 141
|
||||||
|
143: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
144: 7(ivec2) Load 143
|
||||||
|
145: 57(ptr) AccessChain 10 36
|
||||||
|
146: 7(ivec2) Load 145
|
||||||
|
147: 7(ivec2) IAdd 146 144
|
||||||
|
148: 57(ptr) AccessChain 10 36
|
||||||
|
Store 148 147
|
||||||
|
149: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
150: 7(ivec2) Load 149
|
||||||
|
151: 57(ptr) AccessChain 10 39
|
||||||
|
152: 7(ivec2) Load 151
|
||||||
|
153: 7(ivec2) IAdd 152 150
|
||||||
|
154: 57(ptr) AccessChain 10 39
|
||||||
|
Store 154 153
|
||||||
|
155: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
156: 7(ivec2) Load 155
|
||||||
|
157: 57(ptr) AccessChain 10 42
|
||||||
|
158: 7(ivec2) Load 157
|
||||||
|
159: 7(ivec2) IAdd 158 156
|
||||||
|
160: 57(ptr) AccessChain 10 42
|
||||||
|
Store 160 159
|
||||||
|
161: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
162: 6(int) Load 161
|
||||||
|
163: 53(ptr) AccessChain 10 46
|
||||||
|
164: 6(int) Load 163
|
||||||
|
165: 6(int) IAdd 164 162
|
||||||
|
166: 53(ptr) AccessChain 10 46
|
||||||
|
Store 166 165
|
||||||
|
167: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
168: 6(int) Load 167
|
||||||
|
169: 53(ptr) AccessChain 10 68
|
||||||
|
170: 6(int) Load 169
|
||||||
|
171: 6(int) IAdd 170 168
|
||||||
|
172: 53(ptr) AccessChain 10 68
|
||||||
|
Store 172 171
|
||||||
|
173: 15 Load 17(sample2D)
|
||||||
|
174: 19(fvec2) Load 21(P2)
|
||||||
|
175: 13(float) Load 125(lodClamp)
|
||||||
|
176: 11(int) Load 24(granularity)
|
||||||
|
177: 13(float) Load 76(bias)
|
||||||
|
179:178(ResType) ImageSampleFootprintNV 173 174 176 27 Bias MinLod 177 175
|
||||||
|
180: 7(ivec2) CompositeExtract 179 1
|
||||||
|
181: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
Store 181 180
|
||||||
|
182: 7(ivec2) CompositeExtract 179 2
|
||||||
|
183: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
Store 183 182
|
||||||
|
184: 7(ivec2) CompositeExtract 179 3
|
||||||
|
185: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
Store 185 184
|
||||||
|
186: 6(int) CompositeExtract 179 4
|
||||||
|
187: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
Store 187 186
|
||||||
|
188: 6(int) CompositeExtract 179 5
|
||||||
|
189: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
Store 189 188
|
||||||
|
190: 26(bool) CompositeExtract 179 0
|
||||||
|
191: 6(int) Select 190 50 51
|
||||||
|
192: 53(ptr) AccessChain 10 12
|
||||||
|
Store 192 191
|
||||||
|
193: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
194: 7(ivec2) Load 193
|
||||||
|
195: 57(ptr) AccessChain 10 36
|
||||||
|
196: 7(ivec2) Load 195
|
||||||
|
197: 7(ivec2) IAdd 196 194
|
||||||
|
198: 57(ptr) AccessChain 10 36
|
||||||
|
Store 198 197
|
||||||
|
199: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
200: 7(ivec2) Load 199
|
||||||
|
201: 57(ptr) AccessChain 10 39
|
||||||
|
202: 7(ivec2) Load 201
|
||||||
|
203: 7(ivec2) IAdd 202 200
|
||||||
|
204: 57(ptr) AccessChain 10 39
|
||||||
|
Store 204 203
|
||||||
|
205: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
206: 7(ivec2) Load 205
|
||||||
|
207: 57(ptr) AccessChain 10 42
|
||||||
|
208: 7(ivec2) Load 207
|
||||||
|
209: 7(ivec2) IAdd 208 206
|
||||||
|
210: 57(ptr) AccessChain 10 42
|
||||||
|
Store 210 209
|
||||||
|
211: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
212: 6(int) Load 211
|
||||||
|
213: 53(ptr) AccessChain 10 46
|
||||||
|
214: 6(int) Load 213
|
||||||
|
215: 6(int) IAdd 214 212
|
||||||
|
216: 53(ptr) AccessChain 10 46
|
||||||
|
Store 216 215
|
||||||
|
217: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
218: 6(int) Load 217
|
||||||
|
219: 53(ptr) AccessChain 10 68
|
||||||
|
220: 6(int) Load 219
|
||||||
|
221: 6(int) IAdd 220 218
|
||||||
|
222: 53(ptr) AccessChain 10 68
|
||||||
|
Store 222 221
|
||||||
|
223: 15 Load 17(sample2D)
|
||||||
|
224: 19(fvec2) Load 21(P2)
|
||||||
|
226: 13(float) Load 225(lod)
|
||||||
|
227: 11(int) Load 24(granularity)
|
||||||
|
229:228(ResType) ImageSampleFootprintNV 223 224 227 27 Lod 226
|
||||||
|
230: 7(ivec2) CompositeExtract 229 1
|
||||||
|
231: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
Store 231 230
|
||||||
|
232: 7(ivec2) CompositeExtract 229 2
|
||||||
|
233: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
Store 233 232
|
||||||
|
234: 7(ivec2) CompositeExtract 229 3
|
||||||
|
235: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
Store 235 234
|
||||||
|
236: 6(int) CompositeExtract 229 4
|
||||||
|
237: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
Store 237 236
|
||||||
|
238: 6(int) CompositeExtract 229 5
|
||||||
|
239: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
Store 239 238
|
||||||
|
240: 26(bool) CompositeExtract 229 0
|
||||||
|
241: 6(int) Select 240 50 51
|
||||||
|
242: 53(ptr) AccessChain 10 12
|
||||||
|
Store 242 241
|
||||||
|
243: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
244: 7(ivec2) Load 243
|
||||||
|
245: 57(ptr) AccessChain 10 36
|
||||||
|
246: 7(ivec2) Load 245
|
||||||
|
247: 7(ivec2) IAdd 246 244
|
||||||
|
248: 57(ptr) AccessChain 10 36
|
||||||
|
Store 248 247
|
||||||
|
249: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
250: 7(ivec2) Load 249
|
||||||
|
251: 57(ptr) AccessChain 10 39
|
||||||
|
252: 7(ivec2) Load 251
|
||||||
|
253: 7(ivec2) IAdd 252 250
|
||||||
|
254: 57(ptr) AccessChain 10 39
|
||||||
|
Store 254 253
|
||||||
|
255: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
256: 7(ivec2) Load 255
|
||||||
|
257: 57(ptr) AccessChain 10 42
|
||||||
|
258: 7(ivec2) Load 257
|
||||||
|
259: 7(ivec2) IAdd 258 256
|
||||||
|
260: 57(ptr) AccessChain 10 42
|
||||||
|
Store 260 259
|
||||||
|
261: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
262: 6(int) Load 261
|
||||||
|
263: 53(ptr) AccessChain 10 46
|
||||||
|
264: 6(int) Load 263
|
||||||
|
265: 6(int) IAdd 264 262
|
||||||
|
266: 53(ptr) AccessChain 10 46
|
||||||
|
Store 266 265
|
||||||
|
267: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
268: 6(int) Load 267
|
||||||
|
269: 53(ptr) AccessChain 10 68
|
||||||
|
270: 6(int) Load 269
|
||||||
|
271: 6(int) IAdd 270 268
|
||||||
|
272: 53(ptr) AccessChain 10 68
|
||||||
|
Store 272 271
|
||||||
|
273: 15 Load 17(sample2D)
|
||||||
|
274: 19(fvec2) Load 21(P2)
|
||||||
|
276: 19(fvec2) Load 275(dx)
|
||||||
|
278: 19(fvec2) Load 277(dy)
|
||||||
|
279: 11(int) Load 24(granularity)
|
||||||
|
281:280(ResType) ImageSampleFootprintNV 273 274 279 27 Grad 276 278
|
||||||
|
282: 7(ivec2) CompositeExtract 281 1
|
||||||
|
283: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
Store 283 282
|
||||||
|
284: 7(ivec2) CompositeExtract 281 2
|
||||||
|
285: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
Store 285 284
|
||||||
|
286: 7(ivec2) CompositeExtract 281 3
|
||||||
|
287: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
Store 287 286
|
||||||
|
288: 6(int) CompositeExtract 281 4
|
||||||
|
289: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
Store 289 288
|
||||||
|
290: 6(int) CompositeExtract 281 5
|
||||||
|
291: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
Store 291 290
|
||||||
|
292: 26(bool) CompositeExtract 281 0
|
||||||
|
293: 6(int) Select 292 50 51
|
||||||
|
294: 53(ptr) AccessChain 10 12
|
||||||
|
Store 294 293
|
||||||
|
295: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
296: 7(ivec2) Load 295
|
||||||
|
297: 57(ptr) AccessChain 10 36
|
||||||
|
298: 7(ivec2) Load 297
|
||||||
|
299: 7(ivec2) IAdd 298 296
|
||||||
|
300: 57(ptr) AccessChain 10 36
|
||||||
|
Store 300 299
|
||||||
|
301: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
302: 7(ivec2) Load 301
|
||||||
|
303: 57(ptr) AccessChain 10 39
|
||||||
|
304: 7(ivec2) Load 303
|
||||||
|
305: 7(ivec2) IAdd 304 302
|
||||||
|
306: 57(ptr) AccessChain 10 39
|
||||||
|
Store 306 305
|
||||||
|
307: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
308: 7(ivec2) Load 307
|
||||||
|
309: 57(ptr) AccessChain 10 42
|
||||||
|
310: 7(ivec2) Load 309
|
||||||
|
311: 7(ivec2) IAdd 310 308
|
||||||
|
312: 57(ptr) AccessChain 10 42
|
||||||
|
Store 312 311
|
||||||
|
313: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
314: 6(int) Load 313
|
||||||
|
315: 53(ptr) AccessChain 10 46
|
||||||
|
316: 6(int) Load 315
|
||||||
|
317: 6(int) IAdd 316 314
|
||||||
|
318: 53(ptr) AccessChain 10 46
|
||||||
|
Store 318 317
|
||||||
|
319: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
320: 6(int) Load 319
|
||||||
|
321: 53(ptr) AccessChain 10 68
|
||||||
|
322: 6(int) Load 321
|
||||||
|
323: 6(int) IAdd 322 320
|
||||||
|
324: 53(ptr) AccessChain 10 68
|
||||||
|
Store 324 323
|
||||||
|
325: 15 Load 17(sample2D)
|
||||||
|
326: 19(fvec2) Load 21(P2)
|
||||||
|
327: 19(fvec2) Load 275(dx)
|
||||||
|
328: 19(fvec2) Load 277(dy)
|
||||||
|
329: 13(float) Load 125(lodClamp)
|
||||||
|
330: 11(int) Load 24(granularity)
|
||||||
|
332:331(ResType) ImageSampleFootprintNV 325 326 330 27 Grad MinLod 327 328 329
|
||||||
|
333: 7(ivec2) CompositeExtract 332 1
|
||||||
|
334: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
Store 334 333
|
||||||
|
335: 7(ivec2) CompositeExtract 332 2
|
||||||
|
336: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
Store 336 335
|
||||||
|
337: 7(ivec2) CompositeExtract 332 3
|
||||||
|
338: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
Store 338 337
|
||||||
|
339: 6(int) CompositeExtract 332 4
|
||||||
|
340: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
Store 340 339
|
||||||
|
341: 6(int) CompositeExtract 332 5
|
||||||
|
342: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
Store 342 341
|
||||||
|
343: 26(bool) CompositeExtract 332 0
|
||||||
|
344: 6(int) Select 343 50 51
|
||||||
|
345: 53(ptr) AccessChain 10 12
|
||||||
|
Store 345 344
|
||||||
|
346: 34(ptr) AccessChain 30(fp2D) 12
|
||||||
|
347: 7(ivec2) Load 346
|
||||||
|
348: 57(ptr) AccessChain 10 36
|
||||||
|
349: 7(ivec2) Load 348
|
||||||
|
350: 7(ivec2) IAdd 349 347
|
||||||
|
351: 57(ptr) AccessChain 10 36
|
||||||
|
Store 351 350
|
||||||
|
352: 34(ptr) AccessChain 30(fp2D) 36
|
||||||
|
353: 7(ivec2) Load 352
|
||||||
|
354: 57(ptr) AccessChain 10 39
|
||||||
|
355: 7(ivec2) Load 354
|
||||||
|
356: 7(ivec2) IAdd 355 353
|
||||||
|
357: 57(ptr) AccessChain 10 39
|
||||||
|
Store 357 356
|
||||||
|
358: 34(ptr) AccessChain 30(fp2D) 39
|
||||||
|
359: 7(ivec2) Load 358
|
||||||
|
360: 57(ptr) AccessChain 10 42
|
||||||
|
361: 7(ivec2) Load 360
|
||||||
|
362: 7(ivec2) IAdd 361 359
|
||||||
|
363: 57(ptr) AccessChain 10 42
|
||||||
|
Store 363 362
|
||||||
|
364: 44(ptr) AccessChain 30(fp2D) 42
|
||||||
|
365: 6(int) Load 364
|
||||||
|
366: 53(ptr) AccessChain 10 46
|
||||||
|
367: 6(int) Load 366
|
||||||
|
368: 6(int) IAdd 367 365
|
||||||
|
369: 53(ptr) AccessChain 10 46
|
||||||
|
Store 369 368
|
||||||
|
370: 44(ptr) AccessChain 30(fp2D) 46
|
||||||
|
371: 6(int) Load 370
|
||||||
|
372: 53(ptr) AccessChain 10 68
|
||||||
|
373: 6(int) Load 372
|
||||||
|
374: 6(int) IAdd 373 371
|
||||||
|
375: 53(ptr) AccessChain 10 68
|
||||||
|
Store 375 374
|
||||||
|
384: 381 Load 383(sample3D)
|
||||||
|
388: 385(fvec3) Load 387(P3)
|
||||||
|
389: 11(int) Load 24(granularity)
|
||||||
|
394:393(ResType) ImageSampleFootprintNV 384 388 389 27
|
||||||
|
395: 376(ivec3) CompositeExtract 394 1
|
||||||
|
397: 396(ptr) AccessChain 392(fp3D) 12
|
||||||
|
Store 397 395
|
||||||
|
398: 376(ivec3) CompositeExtract 394 2
|
||||||
|
399: 396(ptr) AccessChain 392(fp3D) 36
|
||||||
|
Store 399 398
|
||||||
|
400: 7(ivec2) CompositeExtract 394 3
|
||||||
|
401: 34(ptr) AccessChain 392(fp3D) 39
|
||||||
|
Store 401 400
|
||||||
|
402: 6(int) CompositeExtract 394 4
|
||||||
|
403: 44(ptr) AccessChain 392(fp3D) 42
|
||||||
|
Store 403 402
|
||||||
|
404: 6(int) CompositeExtract 394 5
|
||||||
|
405: 44(ptr) AccessChain 392(fp3D) 46
|
||||||
|
Store 405 404
|
||||||
|
406: 26(bool) CompositeExtract 394 0
|
||||||
|
407: 6(int) Select 406 50 51
|
||||||
|
408: 53(ptr) AccessChain 379 12
|
||||||
|
Store 408 407
|
||||||
|
409: 396(ptr) AccessChain 392(fp3D) 12
|
||||||
|
410: 376(ivec3) Load 409
|
||||||
|
412: 411(ptr) AccessChain 379 36
|
||||||
|
Store 412 410
|
||||||
|
413: 396(ptr) AccessChain 392(fp3D) 36
|
||||||
|
414: 376(ivec3) Load 413
|
||||||
|
415: 411(ptr) AccessChain 379 39
|
||||||
|
Store 415 414
|
||||||
|
416: 34(ptr) AccessChain 392(fp3D) 39
|
||||||
|
417: 7(ivec2) Load 416
|
||||||
|
418: 57(ptr) AccessChain 379 42
|
||||||
|
Store 418 417
|
||||||
|
419: 44(ptr) AccessChain 392(fp3D) 42
|
||||||
|
420: 6(int) Load 419
|
||||||
|
421: 53(ptr) AccessChain 379 46
|
||||||
|
Store 421 420
|
||||||
|
422: 44(ptr) AccessChain 392(fp3D) 46
|
||||||
|
423: 6(int) Load 422
|
||||||
|
424: 53(ptr) AccessChain 379 68
|
||||||
|
Store 424 423
|
||||||
|
425: 381 Load 383(sample3D)
|
||||||
|
426: 385(fvec3) Load 387(P3)
|
||||||
|
427: 11(int) Load 24(granularity)
|
||||||
|
428: 13(float) Load 76(bias)
|
||||||
|
430:429(ResType) ImageSampleFootprintNV 425 426 427 27 Bias 428
|
||||||
|
431: 376(ivec3) CompositeExtract 430 1
|
||||||
|
432: 396(ptr) AccessChain 392(fp3D) 12
|
||||||
|
Store 432 431
|
||||||
|
433: 376(ivec3) CompositeExtract 430 2
|
||||||
|
434: 396(ptr) AccessChain 392(fp3D) 36
|
||||||
|
Store 434 433
|
||||||
|
435: 7(ivec2) CompositeExtract 430 3
|
||||||
|
436: 34(ptr) AccessChain 392(fp3D) 39
|
||||||
|
Store 436 435
|
||||||
|
437: 6(int) CompositeExtract 430 4
|
||||||
|
438: 44(ptr) AccessChain 392(fp3D) 42
|
||||||
|
Store 438 437
|
||||||
|
439: 6(int) CompositeExtract 430 5
|
||||||
|
440: 44(ptr) AccessChain 392(fp3D) 46
|
||||||
|
Store 440 439
|
||||||
|
441: 26(bool) CompositeExtract 430 0
|
||||||
|
442: 6(int) Select 441 50 51
|
||||||
|
443: 53(ptr) AccessChain 379 12
|
||||||
|
Store 443 442
|
||||||
|
444: 396(ptr) AccessChain 392(fp3D) 12
|
||||||
|
445: 376(ivec3) Load 444
|
||||||
|
446: 411(ptr) AccessChain 379 36
|
||||||
|
447: 376(ivec3) Load 446
|
||||||
|
448: 376(ivec3) IAdd 447 445
|
||||||
|
449: 411(ptr) AccessChain 379 36
|
||||||
|
Store 449 448
|
||||||
|
450: 396(ptr) AccessChain 392(fp3D) 36
|
||||||
|
451: 376(ivec3) Load 450
|
||||||
|
452: 411(ptr) AccessChain 379 39
|
||||||
|
453: 376(ivec3) Load 452
|
||||||
|
454: 376(ivec3) IAdd 453 451
|
||||||
|
455: 411(ptr) AccessChain 379 39
|
||||||
|
Store 455 454
|
||||||
|
456: 34(ptr) AccessChain 392(fp3D) 39
|
||||||
|
457: 7(ivec2) Load 456
|
||||||
|
458: 57(ptr) AccessChain 379 42
|
||||||
|
459: 7(ivec2) Load 458
|
||||||
|
460: 7(ivec2) IAdd 459 457
|
||||||
|
461: 57(ptr) AccessChain 379 42
|
||||||
|
Store 461 460
|
||||||
|
462: 44(ptr) AccessChain 392(fp3D) 42
|
||||||
|
463: 6(int) Load 462
|
||||||
|
464: 53(ptr) AccessChain 379 46
|
||||||
|
465: 6(int) Load 464
|
||||||
|
466: 6(int) IAdd 465 463
|
||||||
|
467: 53(ptr) AccessChain 379 46
|
||||||
|
Store 467 466
|
||||||
|
468: 44(ptr) AccessChain 392(fp3D) 46
|
||||||
|
469: 6(int) Load 468
|
||||||
|
470: 53(ptr) AccessChain 379 68
|
||||||
|
471: 6(int) Load 470
|
||||||
|
472: 6(int) IAdd 471 469
|
||||||
|
473: 53(ptr) AccessChain 379 68
|
||||||
|
Store 473 472
|
||||||
|
474: 381 Load 383(sample3D)
|
||||||
|
475: 385(fvec3) Load 387(P3)
|
||||||
|
476: 13(float) Load 125(lodClamp)
|
||||||
|
477: 11(int) Load 24(granularity)
|
||||||
|
479:478(ResType) ImageSampleFootprintNV 474 475 477 27 MinLod 476
|
||||||
|
480: 376(ivec3) CompositeExtract 479 1
|
||||||
|
481: 396(ptr) AccessChain 392(fp3D) 12
|
||||||
|
Store 481 480
|
||||||
|
482: 376(ivec3) CompositeExtract 479 2
|
||||||
|
483: 396(ptr) AccessChain 392(fp3D) 36
|
||||||
|
Store 483 482
|
||||||
|
484: 7(ivec2) CompositeExtract 479 3
|
||||||
|
485: 34(ptr) AccessChain 392(fp3D) 39
|
||||||
|
Store 485 484
|
||||||
|
486: 6(int) CompositeExtract 479 4
|
||||||
|
487: 44(ptr) AccessChain 392(fp3D) 42
|
||||||
|
Store 487 486
|
||||||
|
488: 6(int) CompositeExtract 479 5
|
||||||
|
489: 44(ptr) AccessChain 392(fp3D) 46
|
||||||
|
Store 489 488
|
||||||
|
490: 26(bool) CompositeExtract 479 0
|
||||||
|
491: 6(int) Select 490 50 51
|
||||||
|
492: 53(ptr) AccessChain 379 12
|
||||||
|
Store 492 491
|
||||||
|
493: 396(ptr) AccessChain 392(fp3D) 12
|
||||||
|
494: 376(ivec3) Load 493
|
||||||
|
495: 411(ptr) AccessChain 379 36
|
||||||
|
496: 376(ivec3) Load 495
|
||||||
|
497: 376(ivec3) IAdd 496 494
|
||||||
|
498: 411(ptr) AccessChain 379 36
|
||||||
|
Store 498 497
|
||||||
|
499: 396(ptr) AccessChain 392(fp3D) 36
|
||||||
|
500: 376(ivec3) Load 499
|
||||||
|
501: 411(ptr) AccessChain 379 39
|
||||||
|
502: 376(ivec3) Load 501
|
||||||
|
503: 376(ivec3) IAdd 502 500
|
||||||
|
504: 411(ptr) AccessChain 379 39
|
||||||
|
Store 504 503
|
||||||
|
505: 34(ptr) AccessChain 392(fp3D) 39
|
||||||
|
506: 7(ivec2) Load 505
|
||||||
|
507: 57(ptr) AccessChain 379 42
|
||||||
|
508: 7(ivec2) Load 507
|
||||||
|
509: 7(ivec2) IAdd 508 506
|
||||||
|
510: 57(ptr) AccessChain 379 42
|
||||||
|
Store 510 509
|
||||||
|
511: 44(ptr) AccessChain 392(fp3D) 42
|
||||||
|
512: 6(int) Load 511
|
||||||
|
513: 53(ptr) AccessChain 379 46
|
||||||
|
514: 6(int) Load 513
|
||||||
|
515: 6(int) IAdd 514 512
|
||||||
|
516: 53(ptr) AccessChain 379 46
|
||||||
|
Store 516 515
|
||||||
|
517: 44(ptr) AccessChain 392(fp3D) 46
|
||||||
|
518: 6(int) Load 517
|
||||||
|
519: 53(ptr) AccessChain 379 68
|
||||||
|
520: 6(int) Load 519
|
||||||
|
521: 6(int) IAdd 520 518
|
||||||
|
522: 53(ptr) AccessChain 379 68
|
||||||
|
Store 522 521
|
||||||
|
523: 381 Load 383(sample3D)
|
||||||
|
524: 385(fvec3) Load 387(P3)
|
||||||
|
525: 13(float) Load 125(lodClamp)
|
||||||
|
526: 11(int) Load 24(granularity)
|
||||||
|
527: 13(float) Load 76(bias)
|
||||||
|
529:528(ResType) ImageSampleFootprintNV 523 524 526 27 Bias MinLod 527 525
|
||||||
|
530: 376(ivec3) CompositeExtract 529 1
|
||||||
|
531: 396(ptr) AccessChain 392(fp3D) 12
|
||||||
|
Store 531 530
|
||||||
|
532: 376(ivec3) CompositeExtract 529 2
|
||||||
|
533: 396(ptr) AccessChain 392(fp3D) 36
|
||||||
|
Store 533 532
|
||||||
|
534: 7(ivec2) CompositeExtract 529 3
|
||||||
|
535: 34(ptr) AccessChain 392(fp3D) 39
|
||||||
|
Store 535 534
|
||||||
|
536: 6(int) CompositeExtract 529 4
|
||||||
|
537: 44(ptr) AccessChain 392(fp3D) 42
|
||||||
|
Store 537 536
|
||||||
|
538: 6(int) CompositeExtract 529 5
|
||||||
|
539: 44(ptr) AccessChain 392(fp3D) 46
|
||||||
|
Store 539 538
|
||||||
|
540: 26(bool) CompositeExtract 529 0
|
||||||
|
541: 6(int) Select 540 50 51
|
||||||
|
542: 53(ptr) AccessChain 379 12
|
||||||
|
Store 542 541
|
||||||
|
543: 396(ptr) AccessChain 392(fp3D) 12
|
||||||
|
544: 376(ivec3) Load 543
|
||||||
|
545: 411(ptr) AccessChain 379 36
|
||||||
|
546: 376(ivec3) Load 545
|
||||||
|
547: 376(ivec3) IAdd 546 544
|
||||||
|
548: 411(ptr) AccessChain 379 36
|
||||||
|
Store 548 547
|
||||||
|
549: 396(ptr) AccessChain 392(fp3D) 36
|
||||||
|
550: 376(ivec3) Load 549
|
||||||
|
551: 411(ptr) AccessChain 379 39
|
||||||
|
552: 376(ivec3) Load 551
|
||||||
|
553: 376(ivec3) IAdd 552 550
|
||||||
|
554: 411(ptr) AccessChain 379 39
|
||||||
|
Store 554 553
|
||||||
|
555: 34(ptr) AccessChain 392(fp3D) 39
|
||||||
|
556: 7(ivec2) Load 555
|
||||||
|
557: 57(ptr) AccessChain 379 42
|
||||||
|
558: 7(ivec2) Load 557
|
||||||
|
559: 7(ivec2) IAdd 558 556
|
||||||
|
560: 57(ptr) AccessChain 379 42
|
||||||
|
Store 560 559
|
||||||
|
561: 44(ptr) AccessChain 392(fp3D) 42
|
||||||
|
562: 6(int) Load 561
|
||||||
|
563: 53(ptr) AccessChain 379 46
|
||||||
|
564: 6(int) Load 563
|
||||||
|
565: 6(int) IAdd 564 562
|
||||||
|
566: 53(ptr) AccessChain 379 46
|
||||||
|
Store 566 565
|
||||||
|
567: 44(ptr) AccessChain 392(fp3D) 46
|
||||||
|
568: 6(int) Load 567
|
||||||
|
569: 53(ptr) AccessChain 379 68
|
||||||
|
570: 6(int) Load 569
|
||||||
|
571: 6(int) IAdd 570 568
|
||||||
|
572: 53(ptr) AccessChain 379 68
|
||||||
|
Store 572 571
|
||||||
|
573: 381 Load 383(sample3D)
|
||||||
|
574: 385(fvec3) Load 387(P3)
|
||||||
|
575: 13(float) Load 225(lod)
|
||||||
|
576: 11(int) Load 24(granularity)
|
||||||
|
578:577(ResType) ImageSampleFootprintNV 573 574 576 27 Lod 575
|
||||||
|
579: 376(ivec3) CompositeExtract 578 1
|
||||||
|
580: 396(ptr) AccessChain 392(fp3D) 12
|
||||||
|
Store 580 579
|
||||||
|
581: 376(ivec3) CompositeExtract 578 2
|
||||||
|
582: 396(ptr) AccessChain 392(fp3D) 36
|
||||||
|
Store 582 581
|
||||||
|
583: 7(ivec2) CompositeExtract 578 3
|
||||||
|
584: 34(ptr) AccessChain 392(fp3D) 39
|
||||||
|
Store 584 583
|
||||||
|
585: 6(int) CompositeExtract 578 4
|
||||||
|
586: 44(ptr) AccessChain 392(fp3D) 42
|
||||||
|
Store 586 585
|
||||||
|
587: 6(int) CompositeExtract 578 5
|
||||||
|
588: 44(ptr) AccessChain 392(fp3D) 46
|
||||||
|
Store 588 587
|
||||||
|
589: 26(bool) CompositeExtract 578 0
|
||||||
|
590: 6(int) Select 589 50 51
|
||||||
|
591: 53(ptr) AccessChain 379 12
|
||||||
|
Store 591 590
|
||||||
|
592: 396(ptr) AccessChain 392(fp3D) 12
|
||||||
|
593: 376(ivec3) Load 592
|
||||||
|
594: 411(ptr) AccessChain 379 36
|
||||||
|
595: 376(ivec3) Load 594
|
||||||
|
596: 376(ivec3) IAdd 595 593
|
||||||
|
597: 411(ptr) AccessChain 379 36
|
||||||
|
Store 597 596
|
||||||
|
598: 396(ptr) AccessChain 392(fp3D) 36
|
||||||
|
599: 376(ivec3) Load 598
|
||||||
|
600: 411(ptr) AccessChain 379 39
|
||||||
|
601: 376(ivec3) Load 600
|
||||||
|
602: 376(ivec3) IAdd 601 599
|
||||||
|
603: 411(ptr) AccessChain 379 39
|
||||||
|
Store 603 602
|
||||||
|
604: 34(ptr) AccessChain 392(fp3D) 39
|
||||||
|
605: 7(ivec2) Load 604
|
||||||
|
606: 57(ptr) AccessChain 379 42
|
||||||
|
607: 7(ivec2) Load 606
|
||||||
|
608: 7(ivec2) IAdd 607 605
|
||||||
|
609: 57(ptr) AccessChain 379 42
|
||||||
|
Store 609 608
|
||||||
|
610: 44(ptr) AccessChain 392(fp3D) 42
|
||||||
|
611: 6(int) Load 610
|
||||||
|
612: 53(ptr) AccessChain 379 46
|
||||||
|
613: 6(int) Load 612
|
||||||
|
614: 6(int) IAdd 613 611
|
||||||
|
615: 53(ptr) AccessChain 379 46
|
||||||
|
Store 615 614
|
||||||
|
616: 44(ptr) AccessChain 392(fp3D) 46
|
||||||
|
617: 6(int) Load 616
|
||||||
|
618: 53(ptr) AccessChain 379 68
|
||||||
|
619: 6(int) Load 618
|
||||||
|
620: 6(int) IAdd 619 617
|
||||||
|
621: 53(ptr) AccessChain 379 68
|
||||||
|
Store 621 620
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
123
Test/spv.shaderImageFootprint.frag
Normal file
123
Test/spv.shaderImageFootprint.frag
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
#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;
|
||||||
|
}
|
@ -865,6 +865,16 @@ enum TOperator {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
EOpSparseTextureGuardEnd,
|
EOpSparseTextureGuardEnd,
|
||||||
|
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
EOpImageFootprintGuardBegin,
|
||||||
|
EOpImageSampleFootprintNV,
|
||||||
|
EOpImageSampleFootprintClampNV,
|
||||||
|
EOpImageSampleFootprintLodNV,
|
||||||
|
EOpImageSampleFootprintGradNV,
|
||||||
|
EOpImageSampleFootprintGradClampNV,
|
||||||
|
EOpImageFootprintGuardEnd,
|
||||||
|
#endif
|
||||||
EOpSamplingGuardEnd,
|
EOpSamplingGuardEnd,
|
||||||
EOpTextureGuardEnd,
|
EOpTextureGuardEnd,
|
||||||
|
|
||||||
@ -1248,6 +1258,9 @@ public:
|
|||||||
bool isSampling() const { return op > EOpSamplingGuardBegin && op < EOpSamplingGuardEnd; }
|
bool isSampling() const { return op > EOpSamplingGuardBegin && op < EOpSamplingGuardEnd; }
|
||||||
bool isImage() const { return op > EOpImageGuardBegin && op < EOpImageGuardEnd; }
|
bool isImage() const { return op > EOpImageGuardBegin && op < EOpImageGuardEnd; }
|
||||||
bool isSparseTexture() const { return op > EOpSparseTextureGuardBegin && op < EOpSparseTextureGuardEnd; }
|
bool isSparseTexture() const { return op > EOpSparseTextureGuardBegin && op < EOpSparseTextureGuardEnd; }
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
bool isImageFootprint() const { return op > EOpImageFootprintGuardBegin && op < EOpImageFootprintGuardEnd; }
|
||||||
|
#endif
|
||||||
bool isSparseImage() const { return op == EOpSparseImageLoad; }
|
bool isSparseImage() const { return op == EOpSparseImageLoad; }
|
||||||
|
|
||||||
void setOperationPrecision(TPrecisionQualifier p) { operationPrecision = p; }
|
void setOperationPrecision(TPrecisionQualifier p) { operationPrecision = p; }
|
||||||
@ -1420,6 +1433,23 @@ public:
|
|||||||
cracked.subpass = sampler.dim == EsdSubpass;
|
cracked.subpass = sampler.dim == EsdSubpass;
|
||||||
cracked.fragMask = true;
|
cracked.fragMask = true;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
case EOpImageSampleFootprintNV:
|
||||||
|
break;
|
||||||
|
case EOpImageSampleFootprintClampNV:
|
||||||
|
cracked.lodClamp = true;
|
||||||
|
break;
|
||||||
|
case EOpImageSampleFootprintLodNV:
|
||||||
|
cracked.lod = true;
|
||||||
|
break;
|
||||||
|
case EOpImageSampleFootprintGradNV:
|
||||||
|
cracked.grad = true;
|
||||||
|
break;
|
||||||
|
case EOpImageSampleFootprintGradClampNV:
|
||||||
|
cracked.lodClamp = true;
|
||||||
|
cracked.grad = true;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case EOpSubpassLoad:
|
case EOpSubpassLoad:
|
||||||
case EOpSubpassLoadMS:
|
case EOpSubpassLoadMS:
|
||||||
|
@ -3850,6 +3850,42 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||||||
|
|
||||||
#endif // AMD_EXTENSIONS
|
#endif // AMD_EXTENSIONS
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
if ((profile != EEsProfile && version >= 450) ||
|
||||||
|
(profile == EEsProfile && version >= 320)) {
|
||||||
|
commonBuiltins.append(
|
||||||
|
"struct gl_TextureFootprint2DNV {"
|
||||||
|
"uvec2 anchor;"
|
||||||
|
"uvec2 offset;"
|
||||||
|
"uvec2 mask;"
|
||||||
|
"uint lod;"
|
||||||
|
"uint granularity;"
|
||||||
|
"};"
|
||||||
|
|
||||||
|
"struct gl_TextureFootprint3DNV {"
|
||||||
|
"uvec3 anchor;"
|
||||||
|
"uvec3 offset;"
|
||||||
|
"uvec2 mask;"
|
||||||
|
"uint lod;"
|
||||||
|
"uint granularity;"
|
||||||
|
"};"
|
||||||
|
"bool textureFootprintNV(sampler2D, vec2, int, bool, out gl_TextureFootprint2DNV);"
|
||||||
|
"bool textureFootprintNV(sampler3D, vec3, int, bool, out gl_TextureFootprint3DNV);"
|
||||||
|
"bool textureFootprintNV(sampler2D, vec2, int, bool, out gl_TextureFootprint2DNV, float);"
|
||||||
|
"bool textureFootprintNV(sampler3D, vec3, int, bool, out gl_TextureFootprint3DNV, float);"
|
||||||
|
"bool textureFootprintClampNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
|
||||||
|
"bool textureFootprintClampNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV);"
|
||||||
|
"bool textureFootprintClampNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV, float);"
|
||||||
|
"bool textureFootprintClampNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV, float);"
|
||||||
|
"bool textureFootprintLodNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
|
||||||
|
"bool textureFootprintLodNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV);"
|
||||||
|
"bool textureFootprintGradNV(sampler2D, vec2, vec2, vec2, int, bool, out gl_TextureFootprint2DNV);"
|
||||||
|
"bool textureFootprintGradClampNV(sampler2D, vec2, vec2, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // NV_EXTENSIONS
|
||||||
// GL_AMD_gpu_shader_half_float/Explicit types
|
// GL_AMD_gpu_shader_half_float/Explicit types
|
||||||
if (profile != EEsProfile && version >= 450) {
|
if (profile != EEsProfile && version >= 450) {
|
||||||
commonBuiltins.append(
|
commonBuiltins.append(
|
||||||
@ -7545,6 +7581,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
symbolTable.setFunctionExtensions("textureFootprintNV", 1, &E_GL_NV_shader_texture_footprint);
|
||||||
|
symbolTable.setFunctionExtensions("textureFootprintClampNV", 1, &E_GL_NV_shader_texture_footprint);
|
||||||
|
symbolTable.setFunctionExtensions("textureFootprintLodNV", 1, &E_GL_NV_shader_texture_footprint);
|
||||||
|
symbolTable.setFunctionExtensions("textureFootprintGradNV", 1, &E_GL_NV_shader_texture_footprint);
|
||||||
|
symbolTable.setFunctionExtensions("textureFootprintGradClampNV", 1, &E_GL_NV_shader_texture_footprint);
|
||||||
|
#endif
|
||||||
// Compatibility variables, vertex only
|
// Compatibility variables, vertex only
|
||||||
if (spvVersion.spv == 0) {
|
if (spvVersion.spv == 0) {
|
||||||
BuiltInVariable("gl_Color", EbvColor, symbolTable);
|
BuiltInVariable("gl_Color", EbvColor, symbolTable);
|
||||||
@ -8501,6 +8544,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||||||
symbolTable.relateToOperator("noise3", EOpNoise);
|
symbolTable.relateToOperator("noise3", EOpNoise);
|
||||||
symbolTable.relateToOperator("noise4", EOpNoise);
|
symbolTable.relateToOperator("noise4", EOpNoise);
|
||||||
|
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
symbolTable.relateToOperator("textureFootprintNV", EOpImageSampleFootprintNV);
|
||||||
|
symbolTable.relateToOperator("textureFootprintClampNV", EOpImageSampleFootprintClampNV);
|
||||||
|
symbolTable.relateToOperator("textureFootprintLodNV", EOpImageSampleFootprintLodNV);
|
||||||
|
symbolTable.relateToOperator("textureFootprintGradNV", EOpImageSampleFootprintGradNV);
|
||||||
|
symbolTable.relateToOperator("textureFootprintGradClampNV", EOpImageSampleFootprintGradClampNV);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (spvVersion.spv == 0 && (IncludeLegacy(version, profile, spvVersion) ||
|
if (spvVersion.spv == 0 && (IncludeLegacy(version, profile, spvVersion) ||
|
||||||
(profile == EEsProfile && version == 100))) {
|
(profile == EEsProfile && version == 100))) {
|
||||||
symbolTable.relateToOperator("ftransform", EOpFtransform);
|
symbolTable.relateToOperator("ftransform", EOpFtransform);
|
||||||
|
@ -237,6 +237,7 @@ void TParseVersions::initializeExtensionBehavior()
|
|||||||
extensionBehavior[E_GL_NV_shader_subgroup_partitioned] = EBhDisable;
|
extensionBehavior[E_GL_NV_shader_subgroup_partitioned] = EBhDisable;
|
||||||
extensionBehavior[E_GL_NV_fragment_shader_barycentric] = EBhDisable;
|
extensionBehavior[E_GL_NV_fragment_shader_barycentric] = EBhDisable;
|
||||||
extensionBehavior[E_GL_NV_compute_shader_derivatives] = EBhDisable;
|
extensionBehavior[E_GL_NV_compute_shader_derivatives] = EBhDisable;
|
||||||
|
extensionBehavior[E_GL_NV_shader_texture_footprint] = EBhDisable;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// AEP
|
// AEP
|
||||||
@ -409,6 +410,7 @@ void TParseVersions::getPreamble(std::string& preamble)
|
|||||||
"#define GL_NV_shader_subgroup_partitioned 1\n"
|
"#define GL_NV_shader_subgroup_partitioned 1\n"
|
||||||
"#define GL_NV_fragment_shader_barycentric 1\n"
|
"#define GL_NV_fragment_shader_barycentric 1\n"
|
||||||
"#define GL_NV_compute_shader_derivatives 1\n"
|
"#define GL_NV_compute_shader_derivatives 1\n"
|
||||||
|
"#define GL_NV_shader_texture_footprint 1\n"
|
||||||
#endif
|
#endif
|
||||||
"#define GL_KHX_shader_explicit_arithmetic_types 1\n"
|
"#define GL_KHX_shader_explicit_arithmetic_types 1\n"
|
||||||
"#define GL_KHX_shader_explicit_arithmetic_types_int8 1\n"
|
"#define GL_KHX_shader_explicit_arithmetic_types_int8 1\n"
|
||||||
|
@ -209,6 +209,7 @@ const char* const E_GL_NV_shader_noperspective_interpolation = "GL_NV_shader_
|
|||||||
const char* const E_GL_NV_shader_subgroup_partitioned = "GL_NV_shader_subgroup_partitioned";
|
const char* const E_GL_NV_shader_subgroup_partitioned = "GL_NV_shader_subgroup_partitioned";
|
||||||
const char* const E_GL_NV_fragment_shader_barycentric = "GL_NV_fragment_shader_barycentric";
|
const char* const E_GL_NV_fragment_shader_barycentric = "GL_NV_fragment_shader_barycentric";
|
||||||
const char* const E_GL_NV_compute_shader_derivatives = "GL_NV_compute_shader_derivatives";
|
const char* const E_GL_NV_compute_shader_derivatives = "GL_NV_compute_shader_derivatives";
|
||||||
|
const char* const E_GL_NV_shader_texture_footprint = "GL_NV_shader_texture_footprint";
|
||||||
// Arrays of extensions for the above viewportEXTs duplications
|
// Arrays of extensions for the above viewportEXTs duplications
|
||||||
|
|
||||||
const char* const viewportEXTs[] = { E_GL_ARB_shader_viewport_layer_array, E_GL_NV_viewport_array2 };
|
const char* const viewportEXTs[] = { E_GL_ARB_shader_viewport_layer_array, E_GL_NV_viewport_array2 };
|
||||||
|
@ -956,7 +956,13 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
|
|||||||
case EOpSparseTextureGatherLodOffsets: out.debug << "sparseTextureGatherLodOffsets"; break;
|
case EOpSparseTextureGatherLodOffsets: out.debug << "sparseTextureGatherLodOffsets"; break;
|
||||||
case EOpSparseImageLoadLod: out.debug << "sparseImageLoadLod"; break;
|
case EOpSparseImageLoadLod: out.debug << "sparseImageLoadLod"; break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef NV_EXTENSIONS
|
||||||
|
case EOpImageSampleFootprintNV: out.debug << "imageSampleFootprintNV"; break;
|
||||||
|
case EOpImageSampleFootprintClampNV: out.debug << "imageSampleFootprintClampNV"; break;
|
||||||
|
case EOpImageSampleFootprintLodNV: out.debug << "imageSampleFootprintLodNV"; break;
|
||||||
|
case EOpImageSampleFootprintGradNV: out.debug << "imageSampleFootprintGradNV"; break;
|
||||||
|
case EOpImageSampleFootprintGradClampNV: out.debug << "mageSampleFootprintGradClampNV"; break;
|
||||||
|
#endif
|
||||||
case EOpAddCarry: out.debug << "addCarry"; break;
|
case EOpAddCarry: out.debug << "addCarry"; break;
|
||||||
case EOpSubBorrow: out.debug << "subBorrow"; break;
|
case EOpSubBorrow: out.debug << "subBorrow"; break;
|
||||||
case EOpUMulExtended: out.debug << "uMulExtended"; break;
|
case EOpUMulExtended: out.debug << "uMulExtended"; break;
|
||||||
|
@ -505,6 +505,7 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
"spv.fragmentShaderBarycentric2.frag",
|
"spv.fragmentShaderBarycentric2.frag",
|
||||||
"spv.computeShaderDerivatives.comp",
|
"spv.computeShaderDerivatives.comp",
|
||||||
"spv.computeShaderDerivatives2.comp",
|
"spv.computeShaderDerivatives2.comp",
|
||||||
|
"spv.shaderImageFootprint.frag",
|
||||||
})),
|
})),
|
||||||
FileNameAsCustomTestSuffix
|
FileNameAsCustomTestSuffix
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user