GLSL: Increase supported sizes of XBF strides and offsets.

This commit is contained in:
John Kessenich 2018-11-15 15:07:28 -07:00
parent 579ccece45
commit f4ba9522ec
4 changed files with 30 additions and 26 deletions

View File

@ -171,6 +171,8 @@ ERROR: xfb_buffer 0, xfb_stride 92
ERROR: Linking vertex stage: xfb_stride must be multiple of 4: ERROR: Linking vertex stage: xfb_stride must be multiple of 4:
ERROR: xfb_buffer 5, xfb_stride 6 ERROR: xfb_buffer 5, xfb_stride 6
ERROR: Linking vertex stage: xfb_stride is too large: ERROR: Linking vertex stage: xfb_stride is too large:
ERROR: xfb_buffer 6, components (1/4 stride) needed are 500, gl_MaxTransformFeedbackInterleavedComponents is 64
ERROR: Linking vertex stage: xfb_stride is too large:
ERROR: xfb_buffer 7, components (1/4 stride) needed are 66, gl_MaxTransformFeedbackInterleavedComponents is 64 ERROR: xfb_buffer 7, components (1/4 stride) needed are 66, gl_MaxTransformFeedbackInterleavedComponents is 64
Shader version: 440 Shader version: 440

8
glslang/Include/Types.h Normal file → Executable file
View File

@ -795,11 +795,11 @@ public:
unsigned int layoutXfbBuffer : 4; unsigned int layoutXfbBuffer : 4;
static const unsigned int layoutXfbBufferEnd = 0xF; static const unsigned int layoutXfbBufferEnd = 0xF;
unsigned int layoutXfbStride : 10; unsigned int layoutXfbStride : 14;
static const unsigned int layoutXfbStrideEnd = 0x3FF; static const unsigned int layoutXfbStrideEnd = 0x3FFF;
unsigned int layoutXfbOffset : 10; unsigned int layoutXfbOffset : 13;
static const unsigned int layoutXfbOffsetEnd = 0x3FF; static const unsigned int layoutXfbOffsetEnd = 0x1FFF;
unsigned int layoutAttachment : 8; // for input_attachment_index unsigned int layoutAttachment : 8; // for input_attachment_index
static const unsigned int layoutAttachmentEnd = 0XFF; static const unsigned int layoutAttachmentEnd = 0XFF;

View File

@ -1,3 +1,3 @@
// This header is generated by the make-revision script. // This header is generated by the make-revision script.
#define GLSLANG_PATCH_LEVEL 2984 #define GLSLANG_PATCH_LEVEL 2988

View File

@ -4936,11 +4936,13 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
} else if (id == "xfb_stride") { } else if (id == "xfb_stride") {
// "The resulting stride (implicit or explicit), when divided by 4, must be less than or equal to the // "The resulting stride (implicit or explicit), when divided by 4, must be less than or equal to the
// implementation-dependent constant gl_MaxTransformFeedbackInterleavedComponents." // implementation-dependent constant gl_MaxTransformFeedbackInterleavedComponents."
if (value > 4 * resources.maxTransformFeedbackInterleavedComponents) if (value > 4 * resources.maxTransformFeedbackInterleavedComponents) {
error(loc, "1/4 stride is too large:", id.c_str(), "gl_MaxTransformFeedbackInterleavedComponents is %d", resources.maxTransformFeedbackInterleavedComponents); error(loc, "1/4 stride is too large:", id.c_str(), "gl_MaxTransformFeedbackInterleavedComponents is %d",
else if (value >= (int)TQualifier::layoutXfbStrideEnd) resources.maxTransformFeedbackInterleavedComponents);
}
if (value >= (int)TQualifier::layoutXfbStrideEnd)
error(loc, "stride is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbStrideEnd-1); error(loc, "stride is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbStrideEnd-1);
if (value < (int)TQualifier::layoutXfbStrideEnd) else
publicType.qualifier.layoutXfbStride = value; publicType.qualifier.layoutXfbStride = value;
return; return;
} }