Updated glslang.

This commit is contained in:
Branimir Karadžić
2017-02-17 20:20:27 -08:00
parent 8d304c9235
commit 38efe9a41f
35 changed files with 867 additions and 115 deletions

View File

@@ -1,5 +1,5 @@
/*
** Copyright (c) 2014-2016 The Khronos Group Inc.
** Copyright (c) 2014-2017 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a copy
** of this software and/or associated documentation files (the "Materials"),
@@ -33,7 +33,7 @@ enum Op;
enum Capability;
static const int GLSLextNVVersion = 100;
static const int GLSLextNVRevision = 4;
static const int GLSLextNVRevision = 5;
//SPV_NV_sample_mask_override_coverage
const char* const E_SPV_NV_sample_mask_override_coverage = "SPV_NV_sample_mask_override_coverage";
@@ -71,4 +71,13 @@ static const BuiltIn BuiltInSecondaryViewportMaskNV = static_cast<BuiltIn>(5258)
static const Capability CapabilityShaderStereoViewNV = static_cast<Capability>(5259);
//SPV_NVX_multiview_per_view_attributes
const char* const E_SPV_NVX_multiview_per_view_attributes = "SPV_NVX_multiview_per_view_attributes";
static const BuiltIn BuiltInPositionPerViewNV = static_cast<BuiltIn>(5260);
static const BuiltIn BuiltInViewportMaskPerViewNV = static_cast<BuiltIn>(5261);
static const Capability CapabilityPerViewAttributesNV = static_cast<Capability>(5262);
#endif // #ifndef GLSLextNV_H

View File

@@ -642,6 +642,14 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder.addExtension(spv::E_SPV_NV_stereo_view_rendering);
builder.addCapability(spv::CapabilityShaderStereoViewNV);
return spv::BuiltInSecondaryViewportMaskNV;
case glslang::EbvPositionPerViewNV:
builder.addExtension(spv::E_SPV_NVX_multiview_per_view_attributes);
builder.addCapability(spv::CapabilityPerViewAttributesNV);
return spv::BuiltInPositionPerViewNV;
case glslang::EbvViewportMaskPerViewNV:
builder.addExtension(spv::E_SPV_NVX_multiview_per_view_attributes);
builder.addCapability(spv::CapabilityPerViewAttributesNV);
return spv::BuiltInViewportMaskPerViewNV;
#endif
default: return spv::BuiltInMax;
}
@@ -2384,6 +2392,11 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
builder.addExtension(spv::E_SPV_NV_stereo_view_rendering);
}
}
if (glslangMember.getQualifier().layoutPassthrough) {
addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationPassthroughNV);
builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV);
builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough);
}
#endif
}
}
@@ -2661,6 +2674,8 @@ void TGlslangToSpvTraverser::declareUseOfStructMember(const glslang::TTypeList&
case glslang::EbvViewportMaskNV:
case glslang::EbvSecondaryPositionNV:
case glslang::EbvSecondaryViewportMaskNV:
case glslang::EbvPositionPerViewNV:
case glslang::EbvViewportMaskPerViewNV:
#endif
// Generate the associated capability. Delegate to TranslateBuiltInDecoration.
// Alternately, we could just call this for any glslang built-in, since the
@@ -5312,11 +5327,15 @@ void OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName)
}
// Write SPIR-V out to a text file with 32-bit hexadecimal words
void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName)
void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName)
{
std::ofstream out;
out.open(baseName, std::ios::binary | std::ios::out);
out << "\t// " GLSLANG_REVISION " " GLSLANG_DATE << std::endl;
if (varName != nullptr) {
out << "\t #pragma once" << std::endl;
out << "const uint32_t " << varName << "[] = {" << std::endl;
}
const int WORDS_PER_LINE = 8;
for (int i = 0; i < (int)spirv.size(); i += WORDS_PER_LINE) {
out << "\t";
@@ -5329,6 +5348,9 @@ void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName)
}
out << std::endl;
}
if (varName != nullptr) {
out << "};";
}
out.close();
}

View File

@@ -49,6 +49,6 @@ void GetSpirvVersion(std::string&);
void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv);
void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv, spv::SpvBuildLogger* logger);
void OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName);
void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName);
void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName);
}

View File

@@ -1832,34 +1832,72 @@ Id Builder::createConstructor(Decoration precision, const std::vector<Id>& sourc
if (sources.size() == 1 && isScalar(sources[0]) && numTargetComponents > 1)
return smearScalar(precision, sources[0], resultTypeId);
// accumulate the arguments for OpCompositeConstruct
std::vector<Id> constituents;
Id scalarTypeId = getScalarTypeId(resultTypeId);
std::vector<Id> constituents; // accumulate the arguments for OpCompositeConstruct
for (unsigned int i = 0; i < sources.size(); ++i) {
assert(! isAggregate(sources[i]));
unsigned int sourceSize = getNumComponents(sources[i]);
// lambda to store the result of visiting an argument component
const auto latchResult = [&](Id comp) {
if (numTargetComponents > 1)
constituents.push_back(comp);
else
result = comp;
++targetComponent;
};
// lambda to visit a vector argument's components
const auto accumulateVectorConstituents = [&](Id sourceArg) {
unsigned int sourceSize = getNumComponents(sourceArg);
unsigned int sourcesToUse = sourceSize;
if (sourcesToUse + targetComponent > numTargetComponents)
sourcesToUse = numTargetComponents - targetComponent;
for (unsigned int s = 0; s < sourcesToUse; ++s) {
Id arg = sources[i];
if (sourceSize > 1) {
std::vector<unsigned> swiz;
swiz.push_back(s);
arg = createRvalueSwizzle(precision, scalarTypeId, arg, swiz);
}
if (numTargetComponents > 1)
constituents.push_back(arg);
else
result = arg;
++targetComponent;
std::vector<unsigned> swiz;
swiz.push_back(s);
latchResult(createRvalueSwizzle(precision, scalarTypeId, sourceArg, swiz));
}
};
// lambda to visit a matrix argument's components
const auto accumulateMatrixConstituents = [&](Id sourceArg) {
unsigned int sourceSize = getNumColumns(sourceArg) * getNumRows(sourceArg);
unsigned int sourcesToUse = sourceSize;
if (sourcesToUse + targetComponent > numTargetComponents)
sourcesToUse = numTargetComponents - targetComponent;
int col = 0;
int row = 0;
for (unsigned int s = 0; s < sourcesToUse; ++s) {
if (row >= getNumRows(sourceArg)) {
row = 0;
col++;
}
std::vector<Id> indexes;
indexes.push_back(col);
indexes.push_back(row);
latchResult(createCompositeExtract(sourceArg, scalarTypeId, indexes));
row++;
}
};
// Go through the source arguments, each one could have either
// a single or multiple components to contribute.
for (unsigned int i = 0; i < sources.size(); ++i) {
if (isScalar(sources[i]))
latchResult(sources[i]);
else if (isVector(sources[i]))
accumulateVectorConstituents(sources[i]);
else if (isMatrix(sources[i]))
accumulateMatrixConstituents(sources[i]);
else
assert(0);
if (targetComponent >= numTargetComponents)
break;
}
// If the result is a vector, make it from the gathered constituents.
if (constituents.size() > 0)
result = createCompositeConstruct(resultTypeId, constituents);

View File

@@ -483,7 +483,8 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode,
#ifdef NV_EXTENSIONS
}else if (strcmp(spv::E_SPV_NV_sample_mask_override_coverage, name) == 0 ||
strcmp(spv::E_SPV_NV_geometry_shader_passthrough, name) == 0 ||
strcmp(spv::E_SPV_NV_viewport_array2, name) == 0) {
strcmp(spv::E_SPV_NV_viewport_array2, name) == 0 ||
strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0) {
extInstSet = GLSLextNVInst;
#endif
}
@@ -659,7 +660,8 @@ static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint)
if (strcmp(name, spv::E_SPV_NV_sample_mask_override_coverage) == 0 ||
strcmp(name, spv::E_SPV_NV_geometry_shader_passthrough) == 0 ||
strcmp(name, spv::E_ARB_shader_viewport_layer_array) == 0 ||
strcmp(name, spv::E_SPV_NV_viewport_array2) == 0){
strcmp(name, spv::E_SPV_NV_viewport_array2) == 0 ||
strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0) {
switch (entrypoint) {
case DecorationOverrideCoverageNV: return "OverrideCoverageNV";
case DecorationPassthroughNV: return "PassthroughNV";
@@ -671,6 +673,9 @@ static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint)
case BuiltInSecondaryPositionNV: return "SecondaryPositionNV";
case BuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV";
case CapabilityShaderStereoViewNV: return "ShaderStereoViewNV";
case BuiltInPositionPerViewNV: return "PositionPerViewNV";
case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV";
case CapabilityPerViewAttributesNV: return "PerViewAttributesNV";
default: return "Bad";
}
}

View File

@@ -344,6 +344,8 @@ const char* BuiltInString(int builtIn)
case 5253: return "ViewportMaskNV";
case 5257: return "SecondaryPositionNV";
case 5258: return "SecondaryViewportMaskNV";
case 5260: return "PositionPerViewNV";
case 5261: return "ViewportMaskPerViewNV";
#endif
}
}
@@ -1169,8 +1171,8 @@ const char* OpcodeString(int op)
case 4421: return "OpSubgroupBallotKHR";
case 4422: return "OpSubgroupFirstInvocationKHR";
case 4428: return "OpSubgroupAnyKHR";
case 4429: return "OpSubgroupAllKHR";
case 4428: return "OpSubgroupAllKHR";
case 4429: return "OpSubgroupAnyKHR";
case 4430: return "OpSubgroupAllEqualKHR";
case 4432: return "OpSubgroupReadInvocationKHR";

View File

@@ -163,6 +163,7 @@ const char* binaryFileName = nullptr;
const char* entryPointName = nullptr;
const char* sourceEntryPointName = nullptr;
const char* shaderStageName = nullptr;
const char* variableName = nullptr;
std::array<unsigned int, EShLangCount> baseSamplerBinding;
std::array<unsigned int, EShLangCount> baseTextureBinding;
@@ -302,7 +303,18 @@ void ProcessArguments(int argc, char* argv[])
} else if (lowerword == "no-storage-format" || // synonyms
lowerword == "nsf") {
Options |= EOptionNoStorageFormat;
} else if (lowerword == "source-entrypoint" || // synonyms
} else if (lowerword == "variable-name" || // synonyms
lowerword == "vn") {
Options |= EOptionOutputHexadecimal;
variableName = argv[1];
if (argc > 0) {
argc--;
argv++;
} else
Error("no <C-variable-name> provided for --variable-name");
break;
}
else if (lowerword == "source-entrypoint" || // synonyms
lowerword == "sep") {
sourceEntryPointName = argv[1];
if (argc > 0) {
@@ -650,7 +662,7 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
if (! (Options & EOptionMemoryLeakMode)) {
printf("%s", logger.getAllMessages().c_str());
if (Options & EOptionOutputHexadecimal) {
glslang::OutputSpvHex(spirv, GetBinaryName((EShLanguage)stage));
glslang::OutputSpvHex(spirv, GetBinaryName((EShLanguage)stage), variableName);
} else {
glslang::OutputSpvBin(spirv, GetBinaryName((EShLanguage)stage));
}
@@ -987,6 +999,8 @@ void usage()
"\n"
" --keep-uncalled don't eliminate uncalled functions when linking\n"
" --ku synonym for --keep-uncalled\n"
" --variable-name <name> Creates a C header file that contains a uint32_t array named <name> initialized with the shader binary code.\n"
" --vn <name> synonym for --variable-name <name>.\n"
);
exit(EFailUsage);

View File

@@ -16,7 +16,7 @@ ERROR: 0:47: 'local_size' : can only apply to 'in'
ERROR: 0:61: 'assign' : l-value required "ro" (can't modify a readonly buffer)
ERROR: 0:66: 'buffer' : buffers can be declared only as blocks
ERROR: 0:68: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:76: '' : image variables not declared 'writeonly' must have a format layout qualifier
ERROR: 0:76: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
ERROR: 0:81: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:82: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:87: 'imageAtomicCompSwap' : required extension not requested: GL_OES_shader_image_atomic
@@ -54,12 +54,12 @@ ERROR: 0:171: 'samplerCubeArray' : Reserved word.
ERROR: 0:171: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:172: 'iimage2DRect' : Reserved word.
ERROR: 0:172: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:172: '' : image variables not declared 'writeonly' must have a format layout qualifier
ERROR: 0:172: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
ERROR: 0:173: 'image2DMS' : Reserved word.
ERROR: 0:173: '' : image variables not declared 'writeonly' must have a format layout qualifier
ERROR: 0:173: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
ERROR: 0:174: 'uimage2DMSArray' : Reserved word.
ERROR: 0:174: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:174: '' : image variables not declared 'writeonly' must have a format layout qualifier
ERROR: 0:174: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
ERROR: 0:181: 'rgba32f' : format requires readonly or writeonly memory qualifier
ERROR: 0:182: 'rgba8i' : format requires readonly or writeonly memory qualifier
ERROR: 0:183: 'rgba16ui' : format requires readonly or writeonly memory qualifier

View File

@@ -19,13 +19,13 @@ ERROR: 0:44: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset,
ERROR: 0:45: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
ERROR: 0:45: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
ERROR: 0:66: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:66: '' : image variables not declared 'writeonly' must have a format layout qualifier
ERROR: 0:66: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
ERROR: 0:67: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:67: '' : image variables not declared 'writeonly' must have a format layout qualifier
ERROR: 0:67: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
ERROR: 0:68: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:68: '' : image variables not declared 'writeonly' must have a format layout qualifier
ERROR: 0:68: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
ERROR: 0:69: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:69: '' : image variables not declared 'writeonly' must have a format layout qualifier
ERROR: 0:69: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
ERROR: 0:73: 'binding' : requires block, or sampler/image, or atomic-counter type
ERROR: 0:77: 'location' : location is too large
ERROR: 0:81: 'location' : too large for fragment output
@@ -36,7 +36,7 @@ ERROR: 0:83: 'layout-id value' : cannot be negative
ERROR: 0:96: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:110: 'out' : cannot be bool
ERROR: 0:111: 'image2D' : sampler/image types can only be used in uniform variables or function parameters: imageOut
ERROR: 0:111: '' : image variables not declared 'writeonly' must have a format layout qualifier
ERROR: 0:111: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
ERROR: 0:112: 'out' : cannot be a matrix
ERROR: 0:114: 'in' : cannot be bool
ERROR: 0:115: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: ino

View File

@@ -71,8 +71,8 @@ ERROR: node is still EOpNull!
0:25 move second child to first child (temp highp 4-component vector of float)
0:25 'p' (temp highp 4-component vector of float)
0:25 gl_Position: direct index for structure (in highp 4-component vector of float Position)
0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
0:25 Constant:
0:25 1 (const int)
0:25 Constant:
@@ -81,8 +81,8 @@ ERROR: node is still EOpNull!
0:26 move second child to first child (temp highp float)
0:26 'ps' (temp highp float)
0:26 gl_PointSize: direct index for structure (in highp float PointSize)
0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
0:26 Constant:
0:26 1 (const int)
0:26 Constant:
@@ -210,8 +210,8 @@ ERROR: node is still EOpNull!
0:114 move second child to first child (temp highp float)
0:114 'ps' (temp highp float)
0:114 gl_PointSize: direct index for structure (in highp float PointSize)
0:114 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:114 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:114 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
0:114 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
0:114 Constant:
0:114 1 (const int)
0:114 Constant:
@@ -402,8 +402,8 @@ ERROR: node is still EOpNull!
0:25 move second child to first child (temp highp 4-component vector of float)
0:25 'p' (temp highp 4-component vector of float)
0:25 gl_Position: direct index for structure (in highp 4-component vector of float Position)
0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
0:25 Constant:
0:25 1 (const int)
0:25 Constant:
@@ -412,8 +412,8 @@ ERROR: node is still EOpNull!
0:26 move second child to first child (temp highp float)
0:26 'ps' (temp highp float)
0:26 gl_PointSize: direct index for structure (in highp float PointSize)
0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
0:26 Constant:
0:26 1 (const int)
0:26 Constant:

View File

@@ -78,8 +78,8 @@ ERROR: node is still EOpNull!
0:36 move second child to first child (temp highp 4-component vector of float)
0:36 'p' (temp highp 4-component vector of float)
0:36 gl_Position: direct index for structure (in highp 4-component vector of float Position)
0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
0:36 Constant:
0:36 1 (const int)
0:36 Constant:
@@ -88,8 +88,8 @@ ERROR: node is still EOpNull!
0:37 move second child to first child (temp highp float)
0:37 'ps' (temp highp float)
0:37 gl_PointSize: direct index for structure (in highp float PointSize)
0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
0:37 Constant:
0:37 1 (const int)
0:37 Constant:
@@ -211,8 +211,8 @@ ERROR: node is still EOpNull!
0:36 move second child to first child (temp highp 4-component vector of float)
0:36 'p' (temp highp 4-component vector of float)
0:36 gl_Position: direct index for structure (in highp 4-component vector of float Position)
0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
0:36 Constant:
0:36 1 (const int)
0:36 Constant:
@@ -221,8 +221,8 @@ ERROR: node is still EOpNull!
0:37 move second child to first child (temp highp float)
0:37 'ps' (temp highp float)
0:37 gl_PointSize: direct index for structure (in highp float PointSize)
0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
0:37 Constant:
0:37 1 (const int)
0:37 Constant:

View File

@@ -33,7 +33,7 @@ ERROR: 0:85: '' : vertex input cannot be further qualified
ERROR: 0:86: 'patch' : not supported in this stage: vertex
ERROR: 0:100: '=' : global const initializers must be constant 'const int'
ERROR: 0:101: '' : array size must be a constant integer expression
ERROR: 0:107: '' : image variables not declared 'writeonly' must have a format layout qualifier
ERROR: 0:107: 'image variables declared 'writeonly' without a format layout qualifier' : not supported for this version or the enabled extensions
ERROR: 0:114: 'imageAtomicMin' : only supported on image with format r32i or r32ui
ERROR: 0:115: 'imageAtomicMax' : no matching overloaded function found
ERROR: 0:119: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter

View File

@@ -54,7 +54,7 @@ spv.140.frag
MemberDecorate 87(bn) 3 Offset 576
MemberDecorate 87(bn) 3 MatrixStride 16
MemberDecorate 87(bn) 4 RowMajor
MemberDecorate 87(bn) 4 Offset 640
MemberDecorate 87(bn) 4 Offset 1024
MemberDecorate 87(bn) 4 MatrixStride 16
Decorate 87(bn) Block
Decorate 89 DescriptorSet 0

View File

@@ -61,7 +61,7 @@ Warning, version 310 is not yet complete; most version-specific features are pre
MemberDecorate 45(T3) 2 ColMajor
MemberDecorate 45(T3) 2 Offset 128
MemberDecorate 45(T3) 2 MatrixStride 16
MemberDecorate 45(T3) 3 Offset 160
MemberDecorate 45(T3) 3 Offset 2048
Decorate 45(T3) Block
Decorate 47 DescriptorSet 0
MemberDecorate 78(T2) 0 Offset 0

View File

@@ -0,0 +1,352 @@
spv.image.load-formatted.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 240
Capability Shader
Capability SampledRect
Capability Sampled1D
Capability SampledCubeArray
Capability SampledBuffer
Capability ImageMSArray
Capability ImageQuery
Capability StorageImageReadWithoutFormat
Capability StorageImageWriteWithoutFormat
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 132 142 152 233 237 239
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_EXT_shader_image_load_formatted"
Name 4 "main"
Name 9 "iv"
Name 15 "i1D"
Name 27 "i2D"
Name 38 "i3D"
Name 45 "iCube"
Name 55 "iCubeArray"
Name 62 "i2DRect"
Name 72 "i1DArray"
Name 82 "i2DArray"
Name 89 "iBuffer"
Name 98 "i2DMS"
Name 108 "i2DMSArray"
Name 127 "v"
Name 132 "ic1D"
Name 142 "ic2D"
Name 152 "ic3D"
Name 228 "wo2D"
Name 233 "fragData"
Name 237 "ic4D"
Name 239 "value"
Decorate 15(i1D) DescriptorSet 0
Decorate 15(i1D) Binding 0
Decorate 27(i2D) DescriptorSet 0
Decorate 27(i2D) Binding 1
Decorate 38(i3D) DescriptorSet 0
Decorate 38(i3D) Binding 2
Decorate 45(iCube) DescriptorSet 0
Decorate 45(iCube) Binding 3
Decorate 55(iCubeArray) DescriptorSet 0
Decorate 55(iCubeArray) Binding 4
Decorate 62(i2DRect) DescriptorSet 0
Decorate 62(i2DRect) Binding 5
Decorate 72(i1DArray) DescriptorSet 0
Decorate 72(i1DArray) Binding 6
Decorate 82(i2DArray) DescriptorSet 0
Decorate 82(i2DArray) Binding 7
Decorate 89(iBuffer) DescriptorSet 0
Decorate 89(iBuffer) Binding 8
Decorate 98(i2DMS) DescriptorSet 0
Decorate 98(i2DMS) Binding 9
Decorate 108(i2DMSArray) DescriptorSet 0
Decorate 108(i2DMSArray) Binding 10
Decorate 132(ic1D) Flat
Decorate 142(ic2D) Flat
Decorate 152(ic3D) Flat
Decorate 228(wo2D) DescriptorSet 0
Decorate 228(wo2D) Binding 1
Decorate 228(wo2D) NonReadable
Decorate 237(ic4D) Flat
Decorate 239(value) Flat
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeVector 6(int) 3
8: TypePointer Function 7(ivec3)
10: 6(int) Constant 0
11: 7(ivec3) ConstantComposite 10 10 10
12: TypeFloat 32
13: TypeImage 12(float) 1D nonsampled format:Unknown
14: TypePointer UniformConstant 13
15(i1D): 14(ptr) Variable UniformConstant
18: TypeInt 32 0
19: 18(int) Constant 0
20: TypePointer Function 6(int)
25: TypeImage 12(float) 2D nonsampled format:Unknown
26: TypePointer UniformConstant 25
27(i2D): 26(ptr) Variable UniformConstant
29: TypeVector 6(int) 2
36: TypeImage 12(float) 3D nonsampled format:Unknown
37: TypePointer UniformConstant 36
38(i3D): 37(ptr) Variable UniformConstant
43: TypeImage 12(float) Cube nonsampled format:Unknown
44: TypePointer UniformConstant 43
45(iCube): 44(ptr) Variable UniformConstant
53: TypeImage 12(float) Cube array nonsampled format:Unknown
54: TypePointer UniformConstant 53
55(iCubeArray): 54(ptr) Variable UniformConstant
60: TypeImage 12(float) Rect nonsampled format:Unknown
61: TypePointer UniformConstant 60
62(i2DRect): 61(ptr) Variable UniformConstant
70: TypeImage 12(float) 1D array nonsampled format:Unknown
71: TypePointer UniformConstant 70
72(i1DArray): 71(ptr) Variable UniformConstant
80: TypeImage 12(float) 2D array nonsampled format:Unknown
81: TypePointer UniformConstant 80
82(i2DArray): 81(ptr) Variable UniformConstant
87: TypeImage 12(float) Buffer nonsampled format:Unknown
88: TypePointer UniformConstant 87
89(iBuffer): 88(ptr) Variable UniformConstant
96: TypeImage 12(float) 2D multi-sampled nonsampled format:Unknown
97: TypePointer UniformConstant 96
98(i2DMS): 97(ptr) Variable UniformConstant
106: TypeImage 12(float) 2D array multi-sampled nonsampled format:Unknown
107: TypePointer UniformConstant 106
108(i2DMSArray): 107(ptr) Variable UniformConstant
125: TypeVector 12(float) 4
126: TypePointer Function 125(fvec4)
128: 12(float) Constant 0
129: 125(fvec4) ConstantComposite 128 128 128 128
131: TypePointer Input 6(int)
132(ic1D): 131(ptr) Variable Input
141: TypePointer Input 29(ivec2)
142(ic2D): 141(ptr) Variable Input
151: TypePointer Input 7(ivec3)
152(ic3D): 151(ptr) Variable Input
210: 6(int) Constant 1
216: 6(int) Constant 2
220: 6(int) Constant 3
226: 6(int) Constant 4
228(wo2D): 26(ptr) Variable UniformConstant
232: TypePointer Output 125(fvec4)
233(fragData): 232(ptr) Variable Output
235: TypeVector 6(int) 4
236: TypePointer Input 235(ivec4)
237(ic4D): 236(ptr) Variable Input
238: TypePointer Input 18(int)
239(value): 238(ptr) Variable Input
4(main): 2 Function None 3
5: Label
9(iv): 8(ptr) Variable Function
127(v): 126(ptr) Variable Function
Store 9(iv) 11
16: 13 Load 15(i1D)
17: 6(int) ImageQuerySize 16
21: 20(ptr) AccessChain 9(iv) 19
22: 6(int) Load 21
23: 6(int) IAdd 22 17
24: 20(ptr) AccessChain 9(iv) 19
Store 24 23
28: 25 Load 27(i2D)
30: 29(ivec2) ImageQuerySize 28
31: 7(ivec3) Load 9(iv)
32: 29(ivec2) VectorShuffle 31 31 0 1
33: 29(ivec2) IAdd 32 30
34: 7(ivec3) Load 9(iv)
35: 7(ivec3) VectorShuffle 34 33 3 4 2
Store 9(iv) 35
39: 36 Load 38(i3D)
40: 7(ivec3) ImageQuerySize 39
41: 7(ivec3) Load 9(iv)
42: 7(ivec3) IAdd 41 40
Store 9(iv) 42
46: 43 Load 45(iCube)
47: 29(ivec2) ImageQuerySize 46
48: 7(ivec3) Load 9(iv)
49: 29(ivec2) VectorShuffle 48 48 0 1
50: 29(ivec2) IAdd 49 47
51: 7(ivec3) Load 9(iv)
52: 7(ivec3) VectorShuffle 51 50 3 4 2
Store 9(iv) 52
56: 53 Load 55(iCubeArray)
57: 7(ivec3) ImageQuerySize 56
58: 7(ivec3) Load 9(iv)
59: 7(ivec3) IAdd 58 57
Store 9(iv) 59
63: 60 Load 62(i2DRect)
64: 29(ivec2) ImageQuerySize 63
65: 7(ivec3) Load 9(iv)
66: 29(ivec2) VectorShuffle 65 65 0 1
67: 29(ivec2) IAdd 66 64
68: 7(ivec3) Load 9(iv)
69: 7(ivec3) VectorShuffle 68 67 3 4 2
Store 9(iv) 69
73: 70 Load 72(i1DArray)
74: 29(ivec2) ImageQuerySize 73
75: 7(ivec3) Load 9(iv)
76: 29(ivec2) VectorShuffle 75 75 0 1
77: 29(ivec2) IAdd 76 74
78: 7(ivec3) Load 9(iv)
79: 7(ivec3) VectorShuffle 78 77 3 4 2
Store 9(iv) 79
83: 80 Load 82(i2DArray)
84: 7(ivec3) ImageQuerySize 83
85: 7(ivec3) Load 9(iv)
86: 7(ivec3) IAdd 85 84
Store 9(iv) 86
90: 87 Load 89(iBuffer)
91: 6(int) ImageQuerySize 90
92: 20(ptr) AccessChain 9(iv) 19
93: 6(int) Load 92
94: 6(int) IAdd 93 91
95: 20(ptr) AccessChain 9(iv) 19
Store 95 94
99: 96 Load 98(i2DMS)
100: 29(ivec2) ImageQuerySize 99
101: 7(ivec3) Load 9(iv)
102: 29(ivec2) VectorShuffle 101 101 0 1
103: 29(ivec2) IAdd 102 100
104: 7(ivec3) Load 9(iv)
105: 7(ivec3) VectorShuffle 104 103 3 4 2
Store 9(iv) 105
109: 106 Load 108(i2DMSArray)
110: 7(ivec3) ImageQuerySize 109
111: 7(ivec3) Load 9(iv)
112: 7(ivec3) IAdd 111 110
Store 9(iv) 112
113: 96 Load 98(i2DMS)
114: 6(int) ImageQuerySamples 113
115: 20(ptr) AccessChain 9(iv) 19
116: 6(int) Load 115
117: 6(int) IAdd 116 114
118: 20(ptr) AccessChain 9(iv) 19
Store 118 117
119: 106 Load 108(i2DMSArray)
120: 6(int) ImageQuerySamples 119
121: 20(ptr) AccessChain 9(iv) 19
122: 6(int) Load 121
123: 6(int) IAdd 122 120
124: 20(ptr) AccessChain 9(iv) 19
Store 124 123
Store 127(v) 129
130: 13 Load 15(i1D)
133: 6(int) Load 132(ic1D)
134: 125(fvec4) ImageRead 130 133
135: 125(fvec4) Load 127(v)
136: 125(fvec4) FAdd 135 134
Store 127(v) 136
137: 13 Load 15(i1D)
138: 6(int) Load 132(ic1D)
139: 125(fvec4) Load 127(v)
ImageWrite 137 138 139
140: 25 Load 27(i2D)
143: 29(ivec2) Load 142(ic2D)
144: 125(fvec4) ImageRead 140 143
145: 125(fvec4) Load 127(v)
146: 125(fvec4) FAdd 145 144
Store 127(v) 146
147: 25 Load 27(i2D)
148: 29(ivec2) Load 142(ic2D)
149: 125(fvec4) Load 127(v)
ImageWrite 147 148 149
150: 36 Load 38(i3D)
153: 7(ivec3) Load 152(ic3D)
154: 125(fvec4) ImageRead 150 153
155: 125(fvec4) Load 127(v)
156: 125(fvec4) FAdd 155 154
Store 127(v) 156
157: 36 Load 38(i3D)
158: 7(ivec3) Load 152(ic3D)
159: 125(fvec4) Load 127(v)
ImageWrite 157 158 159
160: 43 Load 45(iCube)
161: 7(ivec3) Load 152(ic3D)
162: 125(fvec4) ImageRead 160 161
163: 125(fvec4) Load 127(v)
164: 125(fvec4) FAdd 163 162
Store 127(v) 164
165: 43 Load 45(iCube)
166: 7(ivec3) Load 152(ic3D)
167: 125(fvec4) Load 127(v)
ImageWrite 165 166 167
168: 53 Load 55(iCubeArray)
169: 7(ivec3) Load 152(ic3D)
170: 125(fvec4) ImageRead 168 169
171: 125(fvec4) Load 127(v)
172: 125(fvec4) FAdd 171 170
Store 127(v) 172
173: 53 Load 55(iCubeArray)
174: 7(ivec3) Load 152(ic3D)
175: 125(fvec4) Load 127(v)
ImageWrite 173 174 175
176: 60 Load 62(i2DRect)
177: 29(ivec2) Load 142(ic2D)
178: 125(fvec4) ImageRead 176 177
179: 125(fvec4) Load 127(v)
180: 125(fvec4) FAdd 179 178
Store 127(v) 180
181: 60 Load 62(i2DRect)
182: 29(ivec2) Load 142(ic2D)
183: 125(fvec4) Load 127(v)
ImageWrite 181 182 183
184: 70 Load 72(i1DArray)
185: 29(ivec2) Load 142(ic2D)
186: 125(fvec4) ImageRead 184 185
187: 125(fvec4) Load 127(v)
188: 125(fvec4) FAdd 187 186
Store 127(v) 188
189: 70 Load 72(i1DArray)
190: 29(ivec2) Load 142(ic2D)
191: 125(fvec4) Load 127(v)
ImageWrite 189 190 191
192: 80 Load 82(i2DArray)
193: 7(ivec3) Load 152(ic3D)
194: 125(fvec4) ImageRead 192 193
195: 125(fvec4) Load 127(v)
196: 125(fvec4) FAdd 195 194
Store 127(v) 196
197: 80 Load 82(i2DArray)
198: 7(ivec3) Load 152(ic3D)
199: 125(fvec4) Load 127(v)
ImageWrite 197 198 199
200: 87 Load 89(iBuffer)
201: 6(int) Load 132(ic1D)
202: 125(fvec4) ImageRead 200 201
203: 125(fvec4) Load 127(v)
204: 125(fvec4) FAdd 203 202
Store 127(v) 204
205: 87 Load 89(iBuffer)
206: 6(int) Load 132(ic1D)
207: 125(fvec4) Load 127(v)
ImageWrite 205 206 207
208: 96 Load 98(i2DMS)
209: 29(ivec2) Load 142(ic2D)
211: 125(fvec4) ImageRead 208 209 Sample 210
212: 125(fvec4) Load 127(v)
213: 125(fvec4) FAdd 212 211
Store 127(v) 213
214: 96 Load 98(i2DMS)
215: 29(ivec2) Load 142(ic2D)
217: 125(fvec4) Load 127(v)
ImageWrite 214 215 217 Sample 216
218: 106 Load 108(i2DMSArray)
219: 7(ivec3) Load 152(ic3D)
221: 125(fvec4) ImageRead 218 219 Sample 220
222: 125(fvec4) Load 127(v)
223: 125(fvec4) FAdd 222 221
Store 127(v) 223
224: 106 Load 108(i2DMSArray)
225: 7(ivec3) Load 152(ic3D)
227: 125(fvec4) Load 127(v)
ImageWrite 224 225 227 Sample 226
229: 25 Load 228(wo2D)
230: 29(ivec2) Load 142(ic2D)
231: 125(fvec4) Load 127(v)
ImageWrite 229 230 231
234: 125(fvec4) Load 127(v)
Store 233(fragData) 234
Return
FunctionEnd

View File

@@ -3,7 +3,7 @@ Warning, version 420 is not yet complete; most version-specific features are pre
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 261
// Id's are bound by 286
Capability Shader
Capability Float64
@@ -55,6 +55,9 @@ Warning, version 420 is not yet complete; most version-specific features are pre
186: TypePointer Output 7(fvec4)
187(color): 186(ptr) Variable Output
208: 6(float) Constant 0
270: TypeVector 6(float) 2
271: TypeMatrix 270(fvec2) 2
279: 6(float) Constant 1088841318
4(main): 2 Function None 3
5: Label
10(sum34): 9(ptr) Variable Function
@@ -305,5 +308,29 @@ Warning, version 420 is not yet complete; most version-specific features are pre
259: 7(fvec4) Load 187(color)
260: 7(fvec4) FAdd 259 258
Store 187(color) 260
261: 172 Load 174(m43)
262: 6(float) CompositeExtract 261 0 0
263: 6(float) CompositeExtract 261 0 1
264: 6(float) CompositeExtract 261 0 2
265: 6(float) CompositeExtract 261 1 0
266: 7(fvec4) CompositeConstruct 262 263 264 265
267: 7(fvec4) Load 187(color)
268: 7(fvec4) FAdd 267 266
Store 187(color) 268
269: 6(float) Load 28(f)
272: 270(fvec2) CompositeConstruct 269 208
273: 270(fvec2) CompositeConstruct 208 269
274: 271 CompositeConstruct 272 273
275: 6(float) CompositeExtract 274 0 0
276: 6(float) CompositeExtract 274 0 1
277: 6(float) CompositeExtract 274 1 0
278: 157(fvec3) CompositeConstruct 275 276 277
280: 6(float) CompositeExtract 278 0
281: 6(float) CompositeExtract 278 1
282: 6(float) CompositeExtract 278 2
283: 7(fvec4) CompositeConstruct 280 281 282 279
284: 7(fvec4) Load 187(color)
285: 7(fvec4) FAdd 284 283
Store 187(color) 285
Return
FunctionEnd

View File

@@ -0,0 +1,78 @@
spv.multiviewPerViewAttributes.tesc
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 37
Capability Tessellation
Capability Bad
Extension "SPV_NVX_multiview_per_view_attributes"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TessellationControl 4 "main" 17 19 31
ExecutionMode 4 OutputVertices 4
Source GLSL 450
SourceExtension "GL_NVX_multiview_per_view_attributes"
Name 4 "main"
Name 13 "gl_PerVertex"
MemberName 13(gl_PerVertex) 0 "gl_PositionPerViewNV"
MemberName 13(gl_PerVertex) 1 "gl_ViewportMaskPerViewNV"
Name 17 "gl_out"
Name 19 "gl_InvocationID"
Name 27 "gl_PerVertex"
MemberName 27(gl_PerVertex) 0 "gl_Position"
MemberName 27(gl_PerVertex) 1 "gl_PointSize"
MemberName 27(gl_PerVertex) 2 "gl_ClipDistance"
MemberName 27(gl_PerVertex) 3 "gl_CullDistance"
MemberName 27(gl_PerVertex) 4 "gl_SecondaryPositionNV"
MemberName 27(gl_PerVertex) 5 "gl_PositionPerViewNV"
Name 31 "gl_in"
MemberDecorate 13(gl_PerVertex) 0 BuiltIn PositionPerViewNV
MemberDecorate 13(gl_PerVertex) 1 BuiltIn ViewportMaskPerViewNV
Decorate 13(gl_PerVertex) Block
Decorate 19(gl_InvocationID) BuiltIn InvocationId
MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
Decorate 27(gl_PerVertex) Block
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeInt 32 0
9: 8(int) Constant 1
10: TypeArray 7(fvec4) 9
11: TypeInt 32 1
12: TypeArray 11(int) 9
13(gl_PerVertex): TypeStruct 10 12
14: 8(int) Constant 4
15: TypeArray 13(gl_PerVertex) 14
16: TypePointer Output 15
17(gl_out): 16(ptr) Variable Output
18: TypePointer Input 11(int)
19(gl_InvocationID): 18(ptr) Variable Input
21: 11(int) Constant 1
22: 11(int) Constant 0
23: TypePointer Output 11(int)
26: TypeArray 6(float) 9
27(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 26 26 7(fvec4) 10
28: 8(int) Constant 32
29: TypeArray 27(gl_PerVertex) 28
30: TypePointer Input 29
31(gl_in): 30(ptr) Variable Input
32: TypePointer Input 7(fvec4)
35: TypePointer Output 7(fvec4)
4(main): 2 Function None 3
5: Label
20: 11(int) Load 19(gl_InvocationID)
24: 23(ptr) AccessChain 17(gl_out) 20 21 22
Store 24 21
25: 11(int) Load 19(gl_InvocationID)
33: 32(ptr) AccessChain 31(gl_in) 21 22
34: 7(fvec4) Load 33
36: 35(ptr) AccessChain 17(gl_out) 25 22 22
Store 36 34
Return
FunctionEnd

View File

@@ -0,0 +1,62 @@
spv.multiviewPerViewAttributes.vert
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 29
Capability Shader
Capability Bad
Extension "SPV_NVX_multiview_per_view_attributes"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 11 20 24
Source GLSL 450
SourceExtension "GL_NVX_multiview_per_view_attributes"
Name 4 "main"
Name 11 "gl_ViewportMaskPerViewNV"
Name 20 "gl_PositionPerViewNV"
Name 22 "gl_PerVertex"
MemberName 22(gl_PerVertex) 0 "gl_Position"
MemberName 22(gl_PerVertex) 1 "gl_PointSize"
MemberName 22(gl_PerVertex) 2 "gl_ClipDistance"
MemberName 22(gl_PerVertex) 3 "gl_CullDistance"
Name 24 ""
Decorate 11(gl_ViewportMaskPerViewNV) BuiltIn ViewportMaskPerViewNV
Decorate 20(gl_PositionPerViewNV) BuiltIn PositionPerViewNV
MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance
MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance
Decorate 22(gl_PerVertex) Block
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeInt 32 0
8: 7(int) Constant 1
9: TypeArray 6(int) 8
10: TypePointer Output 9
11(gl_ViewportMaskPerViewNV): 10(ptr) Variable Output
12: 6(int) Constant 0
13: 6(int) Constant 1
14: TypePointer Output 6(int)
16: TypeFloat 32
17: TypeVector 16(float) 4
18: TypeArray 17(fvec4) 8
19: TypePointer Output 18
20(gl_PositionPerViewNV): 19(ptr) Variable Output
21: TypeArray 16(float) 8
22(gl_PerVertex): TypeStruct 17(fvec4) 16(float) 21 21
23: TypePointer Output 22(gl_PerVertex)
24: 23(ptr) Variable Output
25: TypePointer Output 17(fvec4)
4(main): 2 Function None 3
5: Label
15: 14(ptr) AccessChain 11(gl_ViewportMaskPerViewNV) 12
Store 15 13
26: 25(ptr) AccessChain 24 12
27: 17(fvec4) Load 26
28: 25(ptr) AccessChain 20(gl_PositionPerViewNV) 12
Store 28 27
Return
FunctionEnd

View File

@@ -48,10 +48,10 @@ Warning, version 450 is not yet complete; most version-specific features are pre
19: 6(bool) INotEqual 17 18
Store 8(b1) 19
20: 6(bool) Load 8(b1)
21: 6(bool) SubgroupAllKHR 20
21: 6(bool) SubgroupAnyKHR 20
Store 8(b1) 21
22: 6(bool) Load 8(b1)
23: 6(bool) SubgroupAnyKHR 22
23: 6(bool) SubgroupAllKHR 22
Store 8(b1) 23
24: 6(bool) Load 8(b1)
25: 6(bool) SubgroupAllEqualKHR 24

View File

@@ -3,7 +3,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 38
// Id's are bound by 39
Capability Geometry
Capability Tessellation
@@ -13,7 +13,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Extension "SPV_NV_viewport_array2"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TessellationControl 4 "main" 16 18 32
EntryPoint TessellationControl 4 "main" 16 18 33
ExecutionMode 4 OutputVertices 4
Source GLSL 450
SourceExtension "GL_NV_stereo_view_rendering"
@@ -25,13 +25,14 @@ Warning, version 450 is not yet complete; most version-specific features are pre
MemberName 12(gl_PerVertex) 2 "gl_SecondaryViewportMaskNV"
Name 16 "gl_out"
Name 18 "gl_InvocationID"
Name 28 "gl_PerVertex"
MemberName 28(gl_PerVertex) 0 "gl_Position"
MemberName 28(gl_PerVertex) 1 "gl_PointSize"
MemberName 28(gl_PerVertex) 2 "gl_ClipDistance"
MemberName 28(gl_PerVertex) 3 "gl_CullDistance"
MemberName 28(gl_PerVertex) 4 "gl_SecondaryPositionNV"
Name 32 "gl_in"
Name 29 "gl_PerVertex"
MemberName 29(gl_PerVertex) 0 "gl_Position"
MemberName 29(gl_PerVertex) 1 "gl_PointSize"
MemberName 29(gl_PerVertex) 2 "gl_ClipDistance"
MemberName 29(gl_PerVertex) 3 "gl_CullDistance"
MemberName 29(gl_PerVertex) 4 "gl_SecondaryPositionNV"
MemberName 29(gl_PerVertex) 5 "gl_PositionPerViewNV"
Name 33 "gl_in"
MemberDecorate 12(gl_PerVertex) 0 BuiltIn Layer
MemberDecorate 12(gl_PerVertex) 0 ViewportRelativeNV
MemberDecorate 12(gl_PerVertex) 0 SecondaryViewportRelativeNV 1
@@ -39,11 +40,11 @@ Warning, version 450 is not yet complete; most version-specific features are pre
MemberDecorate 12(gl_PerVertex) 2 BuiltIn SecondaryViewportMaskNV
Decorate 12(gl_PerVertex) Block
Decorate 18(gl_InvocationID) BuiltIn InvocationId
MemberDecorate 28(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 28(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 28(gl_PerVertex) 2 BuiltIn ClipDistance
MemberDecorate 28(gl_PerVertex) 3 BuiltIn CullDistance
Decorate 28(gl_PerVertex) Block
MemberDecorate 29(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 29(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 29(gl_PerVertex) 2 BuiltIn ClipDistance
MemberDecorate 29(gl_PerVertex) 3 BuiltIn CullDistance
Decorate 29(gl_PerVertex) Block
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
@@ -65,22 +66,23 @@ Warning, version 450 is not yet complete; most version-specific features are pre
23: TypePointer Output 6(int)
26: 9(int) Constant 1
27: TypeArray 7(float) 26
28(gl_PerVertex): TypeStruct 8(fvec4) 7(float) 27 27 8(fvec4)
29: 9(int) Constant 32
30: TypeArray 28(gl_PerVertex) 29
31: TypePointer Input 30
32(gl_in): 31(ptr) Variable Input
33: TypePointer Input 8(fvec4)
36: TypePointer Output 8(fvec4)
28: TypeArray 8(fvec4) 26
29(gl_PerVertex): TypeStruct 8(fvec4) 7(float) 27 27 8(fvec4) 28
30: 9(int) Constant 32
31: TypeArray 29(gl_PerVertex) 30
32: TypePointer Input 31
33(gl_in): 32(ptr) Variable Input
34: TypePointer Input 8(fvec4)
37: TypePointer Output 8(fvec4)
4(main): 2 Function None 3
5: Label
19: 6(int) Load 18(gl_InvocationID)
24: 23(ptr) AccessChain 16(gl_out) 19 20 21
Store 24 22
25: 6(int) Load 18(gl_InvocationID)
34: 33(ptr) AccessChain 32(gl_in) 22 21
35: 8(fvec4) Load 34
37: 36(ptr) AccessChain 16(gl_out) 25 22
Store 37 35
35: 34(ptr) AccessChain 33(gl_in) 22 21
36: 8(fvec4) Load 35
38: 37(ptr) AccessChain 16(gl_out) 25 22
Store 38 36
Return
FunctionEnd

View File

@@ -14,7 +14,7 @@ layout(std140) uniform bn {
layout(column_major) mat4 matca[4];
layout(row_major) mat4 matr;
layout(column_major) mat4 matc;
mat4 matrdef;
layout(align=512, offset=1024) mat4 matrdef;
};
uniform sampler2DRect sampR;

View File

@@ -25,7 +25,7 @@ layout(column_major) uniform T3 { // shared and column_major
mat4 M3; // column_major
layout(row_major) mat4 M4; // row major
mat2x3 N2; // column_major
uvec3 uv3a[4];
layout(align=16, offset=2048) uvec3 uv3a[4];
};
in uint uiuin;

View File

@@ -0,0 +1,74 @@
#version 450
#extension GL_EXT_shader_image_load_formatted : require
layout(binding = 0) uniform image1D i1D;
layout(binding = 1) uniform image2D i2D;
layout(binding = 2) uniform image3D i3D;
layout(binding = 3) uniform imageCube iCube;
layout(binding = 4) uniform imageCubeArray iCubeArray;
layout(binding = 5) uniform image2DRect i2DRect;
layout(binding = 6) uniform image1DArray i1DArray;
layout(binding = 7) uniform image2DArray i2DArray;
layout(binding = 8) uniform imageBuffer iBuffer;
layout(binding = 9) uniform image2DMS i2DMS;
layout(binding = 10) uniform image2DMSArray i2DMSArray;
flat in int ic1D;
flat in ivec2 ic2D;
flat in ivec3 ic3D;
flat in ivec4 ic4D;
writeonly layout(binding = 1) uniform image2D wo2D;
flat in uint value;
out vec4 fragData;
void main()
{
ivec3 iv = ivec3(0);
iv.x += imageSize(i1D);
iv.xy += imageSize(i2D);
iv.xyz += imageSize(i3D);
iv.xy += imageSize(iCube);
iv.xyz += imageSize(iCubeArray);
iv.xy += imageSize(i2DRect);
iv.xy += imageSize(i1DArray);
iv.xyz += imageSize(i2DArray);
iv.x += imageSize(iBuffer);
iv.xy += imageSize(i2DMS);
iv.xyz += imageSize(i2DMSArray);
iv.x += imageSamples(i2DMS);
iv.x += imageSamples(i2DMSArray);
vec4 v = vec4(0.0);
v += imageLoad(i1D, ic1D);
imageStore(i1D, ic1D, v);
v += imageLoad(i2D, ic2D);
imageStore(i2D, ic2D, v);
v += imageLoad(i3D, ic3D);
imageStore(i3D, ic3D, v);
v += imageLoad(iCube, ic3D);
imageStore(iCube, ic3D, v);
v += imageLoad(iCubeArray, ic3D);
imageStore(iCubeArray, ic3D, v);
v += imageLoad(i2DRect, ic2D);
imageStore(i2DRect, ic2D, v);
v += imageLoad(i1DArray, ic2D);
imageStore(i1DArray, ic2D, v);
v += imageLoad(i2DArray, ic3D);
imageStore(i2DArray, ic3D, v);
v += imageLoad(iBuffer, ic1D);
imageStore(iBuffer, ic1D, v);
v += imageLoad(i2DMS, ic2D, 1);
imageStore(i2DMS, ic2D, 2, v);
v += imageLoad(i2DMSArray, ic3D, 3);
imageStore(i2DMSArray, ic3D, 4, v);
imageStore(wo2D, ic2D, v);
fragData = v;
}

View File

@@ -43,4 +43,7 @@ void main()
sum34 += mat3x4(v3, f, v3, f, v3, f);
color += sum3 * m43 + sum4;
color += vec4(m43);
color += vec4(vec3(mat2(f)), 7.2);
}

View File

@@ -0,0 +1,14 @@
#version 450
#extension GL_NVX_multiview_per_view_attributes :require
layout(vertices = 4) out;
out gl_PerVertex {
int gl_ViewportMaskPerViewNV[];
vec4 gl_PositionPerViewNV[];
} gl_out[];
void main()
{
gl_out[gl_InvocationID].gl_ViewportMaskPerViewNV[0] = 1;
gl_out[gl_InvocationID].gl_PositionPerViewNV[0] = gl_in[1].gl_Position;
}

View File

@@ -0,0 +1,10 @@
#version 450
#extension GL_NVX_multiview_per_view_attributes :require
void main()
{
gl_ViewportMaskPerViewNV[0] = 1;
gl_PositionPerViewNV[0] = gl_Position;
}

View File

@@ -207,6 +207,8 @@ enum TBuiltInVariable {
EbvViewportMaskNV,
EbvSecondaryPositionNV,
EbvSecondaryViewportMaskNV,
EbvPositionPerViewNV,
EbvViewportMaskPerViewNV,
#endif
// HLSL built-ins that live only temporarily, until they get remapped
// to one of the above.
@@ -325,6 +327,8 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
case EbvViewportMaskNV: return "ViewportMaskNV";
case EbvSecondaryPositionNV: return "SecondaryPositionNV";
case EbvSecondaryViewportMaskNV: return "SecondaryViewportMaskNV";
case EbvPositionPerViewNV: return "PositionPerViewNV";
case EbvViewportMaskPerViewNV: return "ViewportMaskPerViewNV";
#endif
default: return "unknown built-in variable";
}

View File

@@ -1360,6 +1360,8 @@ public:
case EbvViewportMaskNV:
case EbvSecondaryPositionNV:
case EbvSecondaryViewportMaskNV:
case EbvPositionPerViewNV:
case EbvViewportMaskPerViewNV:
#endif
return true;
default:

View File

@@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits.
// For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "Overload400-PrecQual.1825"
#define GLSLANG_DATE "10-Feb-2017"
#define GLSLANG_REVISION "Overload400-PrecQual.1842"
#define GLSLANG_DATE "17-Feb-2017"

View File

@@ -3249,6 +3249,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"out int gl_ViewportMask[];"
"out int gl_SecondaryViewportMaskNV[];"
"out vec4 gl_SecondaryPositionNV;"
"out vec4 gl_PositionPerViewNV[];"
"out int gl_ViewportMaskPerViewNV[];"
);
#endif
@@ -3313,6 +3315,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"float gl_CullDistance[];"
#ifdef NV_EXTENSIONS
"vec4 gl_SecondaryPositionNV;"
"vec4 gl_PositionPerViewNV[];"
#endif
);
stageBuiltins[EShLangGeometry].append(
@@ -3362,9 +3365,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
#ifdef NV_EXTENSIONS
if (version >= 450)
stageBuiltins[EShLangGeometry].append(
"out int gl_ViewportMask[];"
"out int gl_SecondaryViewportMaskNV[];"
"out vec4 gl_SecondaryPositionNV;"
"out int gl_ViewportMask[];"
"out int gl_SecondaryViewportMaskNV[];"
"out vec4 gl_SecondaryPositionNV;"
"out vec4 gl_PositionPerViewNV[];"
"out int gl_ViewportMaskPerViewNV[];"
);
#endif
@@ -3424,11 +3429,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
stageBuiltins[EShLangTessControl].append(
"float gl_CullDistance[];"
#ifdef NV_EXTENSIONS
"int gl_ViewportIndex;"
"int gl_Layer;"
"int gl_ViewportMask[];"
"int gl_ViewportIndex;"
"int gl_Layer;"
"int gl_ViewportMask[];"
"vec4 gl_SecondaryPositionNV;"
"int gl_SecondaryViewportMaskNV[];"
"int gl_SecondaryViewportMaskNV[];"
"vec4 gl_PositionPerViewNV[];"
"int gl_ViewportMaskPerViewNV[];"
#endif
);
stageBuiltins[EShLangTessControl].append(
@@ -3503,11 +3510,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
#ifdef NV_EXTENSIONS
if (version >= 450)
stageBuiltins[EShLangTessEvaluation].append(
"out int gl_ViewportIndex;"
"out int gl_Layer;"
"out int gl_ViewportMask[];"
"out int gl_ViewportIndex;"
"out int gl_Layer;"
"out int gl_ViewportMask[];"
"out vec4 gl_SecondaryPositionNV;"
"out int gl_SecondaryViewportMaskNV[];"
"out int gl_SecondaryViewportMaskNV[];"
"out vec4 gl_PositionPerViewNV[];"
"out int gl_ViewportMaskPerViewNV[];"
);
#endif
@@ -4446,6 +4455,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
"highp float gl_PointSize;"
#ifdef NV_EXTENSIONS
"highp vec4 gl_SecondaryPositionNV;"
"highp vec4 gl_PositionPerViewNV[];"
#endif
"} gl_in[gl_MaxPatchVertices];"
"\n");
@@ -4635,6 +4645,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
"float gl_CullDistance[];"
#ifdef NV_EXTENSIONS
"vec4 gl_SecondaryPositionNV;"
"vec4 gl_PositionPerViewNV[];"
#endif
);
s.append(
@@ -5033,19 +5044,26 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setVariableExtensions("gl_ViewportMask", 1, &E_GL_NV_viewport_array2);
symbolTable.setVariableExtensions("gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
symbolTable.setVariableExtensions("gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering);
symbolTable.setVariableExtensions("gl_PositionPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes);
symbolTable.setVariableExtensions("gl_ViewportMaskPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes);
BuiltInVariable("gl_ViewportMask", EbvViewportMaskNV, symbolTable);
BuiltInVariable("gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
BuiltInVariable("gl_SecondaryViewportMaskNV", EbvSecondaryViewportMaskNV, symbolTable);
BuiltInVariable("gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable);
BuiltInVariable("gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable);
if (language != EShLangVertex)
if (language != EShLangVertex) {
BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
BuiltInVariable("gl_in", "gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable);
}
BuiltInVariable("gl_out", "gl_Layer", EbvLayer, symbolTable);
BuiltInVariable("gl_out", "gl_ViewportIndex", EbvViewportIndex, symbolTable);
BuiltInVariable("gl_out", "gl_ViewportMask", EbvViewportMaskNV, symbolTable);
BuiltInVariable("gl_out", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
BuiltInVariable("gl_out", "gl_SecondaryViewportMaskNV", EbvSecondaryViewportMaskNV, symbolTable);
BuiltInVariable("gl_out", "gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable);
BuiltInVariable("gl_out", "gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable);
#endif
BuiltInVariable("gl_PatchVerticesIn", EbvPatchVertices, symbolTable);

View File

@@ -4008,16 +4008,20 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
// - uniform offsets
// - atomic_uint offsets
const char* feature = "offset";
requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature);
const char* exts[2] = { E_GL_ARB_enhanced_layouts, E_GL_ARB_shader_atomic_counters };
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, 2, exts, feature);
profileRequires(loc, EEsProfile, 310, nullptr, feature);
if (spvVersion.spv == 0) {
requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature);
const char* exts[2] = { E_GL_ARB_enhanced_layouts, E_GL_ARB_shader_atomic_counters };
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, 2, exts, feature);
profileRequires(loc, EEsProfile, 310, nullptr, feature);
}
publicType.qualifier.layoutOffset = value;
return;
} else if (id == "align") {
const char* feature = "uniform buffer-member align";
requireProfile(loc, ECoreProfile | ECompatibilityProfile, feature);
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, feature);
if (spvVersion.spv == 0) {
requireProfile(loc, ECoreProfile | ECompatibilityProfile, feature);
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, feature);
}
// "The specified alignment must be a power of 2, or a compile-time error results."
if (! IsPow2(value))
error(loc, "must be a power of 2", "align", "");
@@ -4495,8 +4499,11 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
}
}
}
} else if (type.isImage() && ! qualifier.writeonly)
error(loc, "image variables not declared 'writeonly' must have a format layout qualifier", "", "");
} else if (type.isImage() && ! qualifier.writeonly) {
const char *explanation = "image variables declared 'writeonly' without a format layout qualifier";
requireProfile(loc, ECoreProfile | ECompatibilityProfile, explanation);
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shader_image_load_formatted, explanation);
}
if (qualifier.layoutPushConstant && type.getBasicType() != EbtBlock)
error(loc, "can only be used with a block", "push_constant", "");
@@ -5546,8 +5553,10 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
if (memberType.isArray())
arrayUnsizedCheck(memberLoc, currentBlockQualifier, &memberType.getArraySizes(), false, member == typeList.size() - 1);
if (memberQualifier.hasOffset()) {
requireProfile(memberLoc, ~EEsProfile, "offset on block member");
profileRequires(memberLoc, ~EEsProfile, 440, E_GL_ARB_enhanced_layouts, "offset on block member");
if (spvVersion.spv == 0) {
requireProfile(memberLoc, ~EEsProfile, "offset on block member");
profileRequires(memberLoc, ~EEsProfile, 440, E_GL_ARB_enhanced_layouts, "offset on block member");
}
}
if (memberType.containsOpaque())

View File

@@ -182,6 +182,7 @@ void TParseVersions::initializeExtensionBehavior()
// extensionBehavior[E_GL_ARB_cull_distance] = EBhDisable; // present for 4.5, but need extension control over block members
extensionBehavior[E_GL_EXT_shader_non_constant_global_initializers] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_image_load_formatted] = EBhDisable;
// #line and #include
extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhDisable;
@@ -201,6 +202,7 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_ARB_shader_viewport_layer_array] = EBhDisable;
extensionBehavior[E_GL_NV_viewport_array2] = EBhDisable;
extensionBehavior[E_GL_NV_stereo_view_rendering] = EBhDisable;
extensionBehavior[E_GL_NVX_multiview_per_view_attributes] = EBhDisable;
#endif
// AEP
@@ -302,6 +304,7 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_ARB_sparse_texture_clamp 1\n"
// "#define GL_ARB_cull_distance 1\n" // present for 4.5, but need extension control over block members
"#define GL_EXT_shader_non_constant_global_initializers 1\n"
"#define GL_EXT_shader_image_load_formatted 1\n"
#ifdef AMD_EXTENSIONS
"#define GL_AMD_shader_ballot 1\n"

View File

@@ -130,6 +130,7 @@ const char* const E_GL_ARB_sparse_texture_clamp = "GL_ARB_sparse_texture
// const char* const E_GL_ARB_cull_distance = "GL_ARB_cull_distance"; // present for 4.5, but need extension control over block members
const char* const E_GL_EXT_shader_non_constant_global_initializers = "GL_EXT_shader_non_constant_global_initializers";
const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_load_formatted";
// #line and #include
const char* const E_GL_GOOGLE_cpp_style_line_directive = "GL_GOOGLE_cpp_style_line_directive";
@@ -149,6 +150,7 @@ const char* const E_SPV_NV_geometry_shader_passthrough = "GL_NV_geometr
const char* const E_GL_ARB_shader_viewport_layer_array = "GL_ARB_shader_viewport_layer_array";
const char* const E_GL_NV_viewport_array2 = "GL_NV_viewport_array2";
const char* const E_GL_NV_stereo_view_rendering = "GL_NV_stereo_view_rendering";
const char* const E_GL_NVX_multiview_per_view_attributes = "GL_NVX_multiview_per_view_attributes";
// Arrays of extensions for the above viewportEXTs duplications

View File

@@ -386,6 +386,8 @@ INSTANTIATE_TEST_CASE_P(
"spv.viewportArray2.tesc",
"spv.stereoViewRendering.vert",
"spv.stereoViewRendering.tesc",
"spv.multiviewPerViewAttributes.vert",
"spv.multiviewPerViewAttributes.tesc",
})),
FileNameAsCustomTestSuffix
);

View File

@@ -543,7 +543,7 @@ bool HlslParseContext::parseMatrixSwizzleSelector(const TSourceLoc& loc, const T
error(loc, "matrix component swizzle missing", compString.c_str(), "");
return false;
}
startPos[numComps++] = c + 1;
startPos[numComps++] = (int)c + 1;
}
}
@@ -2153,7 +2153,7 @@ TIntermTyped* HlslParseContext::handleAssignToMatrixSwizzle(const TSourceLoc& lo
TIntermTyped* vectorAssign = nullptr;
if (vector == nullptr) {
// create a new intermediate vector variable to assign to
TType vectorType(matrix->getBasicType(), EvqTemporary, matrix->getQualifier().precision, swizzle.size()/2);
TType vectorType(matrix->getBasicType(), EvqTemporary, matrix->getQualifier().precision, (int)swizzle.size()/2);
vector = intermediate.addSymbol(*makeInternalVariable("intermVec", vectorType), loc);
// assign the right to the new vector
@@ -3887,6 +3887,8 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con
qualifier.builtIn = EbvGlobalInvocationId;
else if (semanticUpperCase == "SV_GROUPTHREADID")
qualifier.builtIn = EbvLocalInvocationId;
else if (semanticUpperCase == "SV_GROUPINDEX")
qualifier.builtIn = EbvLocalInvocationIndex;
else if (semanticUpperCase == "SV_GROUPID")
qualifier.builtIn = EbvWorkGroupId;
else if (semanticUpperCase == "SV_DOMAINLOCATION")
@@ -3903,8 +3905,6 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con
qualifier.builtIn = EbvFragDepthLesser;
else if( semanticUpperCase == "SV_STENCILREF")
error(loc, "unimplemented; need ARB_shader_stencil_export", "SV_STENCILREF", "");
else if( semanticUpperCase == "SV_GROUPINDEX")
error(loc, "unimplemented", "SV_GROUPINDEX", "");
}
//