@@ -4928,6 +4928,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
4928
4928
" \n " );
4929
4929
}
4930
4930
4931
+ if ((profile != EEsProfile && version >= 450 ) || (profile == EEsProfile && version >= 310 )) {
4932
+ stageBuiltins[EShLangVertex].append (
4933
+ " out highp int gl_PrimitiveShadingRateEXT;" // GL_EXT_fragment_shading_rate
4934
+ " \n " );
4935
+ }
4931
4936
4932
4937
// ============================================================================
4933
4938
//
@@ -5041,6 +5046,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
5041
5046
" \n " );
5042
5047
}
5043
5048
5049
+ if ((profile != EEsProfile && version >= 450 ) || (profile == EEsProfile && version >= 310 )) {
5050
+ stageBuiltins[EShLangGeometry].append (
5051
+ " out highp int gl_PrimitiveShadingRateEXT;" // GL_EXT_fragment_shading_rate
5052
+ " \n " );
5053
+ }
5054
+
5044
5055
// ============================================================================
5045
5056
//
5046
5057
// Define the interface to the tessellation control shader.
@@ -5338,6 +5349,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
5338
5349
" in vec3 gl_BaryCoordNoPerspNV;"
5339
5350
);
5340
5351
5352
+ if (version >= 450 )
5353
+ stageBuiltins[EShLangFragment].append (
5354
+ " flat in int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate
5355
+ );
5356
+
5341
5357
} else {
5342
5358
// ES profile
5343
5359
@@ -5396,6 +5412,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
5396
5412
" in vec3 gl_BaryCoordNV;"
5397
5413
" in vec3 gl_BaryCoordNoPerspNV;"
5398
5414
);
5415
+ if (version >= 310 )
5416
+ stageBuiltins[EShLangFragment].append (
5417
+ " flat in highp int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate
5418
+ );
5399
5419
}
5400
5420
#endif
5401
5421
@@ -5692,6 +5712,18 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
5692
5712
" flat in highp uint gl_ViewID_OVR;" // GL_OVR_multiview, GL_OVR_multiview2
5693
5713
" \n " );
5694
5714
}
5715
+
5716
+ // Adding these to common built-ins triggers an assert due to a memory corruption in related code when testing
5717
+ // So instead add to each stage individually, avoiding the GLSLang bug
5718
+ if ((profile != EEsProfile && version >= 450 ) || (profile == EEsProfile && version >= 310 )) {
5719
+ for (int stage=EShLangVertex; stage<EShLangCount; stage++)
5720
+ {
5721
+ stageBuiltins[static_cast <EShLanguage>(stage)].append (" const highp int gl_ShadingRateFlag2VerticalPixelsEXT = 1;\n " );
5722
+ stageBuiltins[static_cast <EShLanguage>(stage)].append (" const highp int gl_ShadingRateFlag4VerticalPixelsEXT = 2;\n " );
5723
+ stageBuiltins[static_cast <EShLanguage>(stage)].append (" const highp int gl_ShadingRateFlag2HorizontalPixelsEXT = 4;\n " );
5724
+ stageBuiltins[static_cast <EShLanguage>(stage)].append (" const highp int gl_ShadingRateFlag4HorizontalPixelsEXT = 8;\n " );
5725
+ }
5726
+ }
5695
5727
#endif // !GLSLANG_WEB
5696
5728
5697
5729
// printf("%s\n", commonBuiltins.c_str());
@@ -7650,6 +7682,20 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
7650
7682
BuiltInVariable (" gl_WarpIDNV" , EbvWarpID, symbolTable);
7651
7683
BuiltInVariable (" gl_SMIDNV" , EbvSMID, symbolTable);
7652
7684
}
7685
+
7686
+ if (language == EShLangGeometry || language == EShLangVertex) {
7687
+ if ((profile == EEsProfile && version >= 310 ) ||
7688
+ (profile != EEsProfile && version >= 450 )) {
7689
+ symbolTable.setVariableExtensions (" gl_PrimitiveShadingRateEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
7690
+ BuiltInVariable (" gl_PrimitiveShadingRateEXT" , EbvPrimitiveShadingRateKHR, symbolTable);
7691
+
7692
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
7693
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
7694
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
7695
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
7696
+ }
7697
+ }
7698
+
7653
7699
#endif // !GLSLANG_WEB
7654
7700
break ;
7655
7701
@@ -8156,6 +8202,17 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
8156
8202
}
8157
8203
8158
8204
symbolTable.setFunctionExtensions (" helperInvocationEXT" , 1 , &E_GL_EXT_demote_to_helper_invocation);
8205
+
8206
+ if ((profile == EEsProfile && version >= 310 ) ||
8207
+ (profile != EEsProfile && version >= 450 )) {
8208
+ symbolTable.setVariableExtensions (" gl_ShadingRateEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8209
+ BuiltInVariable (" gl_ShadingRateEXT" , EbvShadingRateKHR, symbolTable);
8210
+
8211
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8212
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8213
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8214
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8215
+ }
8159
8216
#endif // !GLSLANG_WEB
8160
8217
break ;
8161
8218
@@ -8288,6 +8345,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
8288
8345
symbolTable.setFunctionExtensions (" dFdyCoarse" , 1 , &E_GL_NV_compute_shader_derivatives);
8289
8346
symbolTable.setFunctionExtensions (" fwidthCoarse" , 1 , &E_GL_NV_compute_shader_derivatives);
8290
8347
}
8348
+
8349
+ if ((profile == EEsProfile && version >= 310 ) ||
8350
+ (profile != EEsProfile && version >= 450 )) {
8351
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8352
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8353
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8354
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8355
+ }
8291
8356
#endif // !GLSLANG_WEB
8292
8357
break ;
8293
8358
@@ -8437,6 +8502,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
8437
8502
BuiltInVariable (" gl_WarpIDNV" , EbvWarpID, symbolTable);
8438
8503
BuiltInVariable (" gl_SMIDNV" , EbvSMID, symbolTable);
8439
8504
}
8505
+ if ((profile == EEsProfile && version >= 310 ) ||
8506
+ (profile != EEsProfile && version >= 450 )) {
8507
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8508
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8509
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8510
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8511
+ }
8440
8512
break ;
8441
8513
8442
8514
case EShLangMeshNV:
@@ -8581,6 +8653,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
8581
8653
BuiltInVariable (" gl_WarpIDNV" , EbvWarpID, symbolTable);
8582
8654
BuiltInVariable (" gl_SMIDNV" , EbvSMID, symbolTable);
8583
8655
}
8656
+
8657
+ if ((profile == EEsProfile && version >= 310 ) ||
8658
+ (profile != EEsProfile && version >= 450 )) {
8659
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8660
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8661
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8662
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8663
+ }
8584
8664
break ;
8585
8665
8586
8666
case EShLangTaskNV:
@@ -8681,6 +8761,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
8681
8761
BuiltInVariable (" gl_WarpIDNV" , EbvWarpID, symbolTable);
8682
8762
BuiltInVariable (" gl_SMIDNV" , EbvSMID, symbolTable);
8683
8763
}
8764
+ if ((profile == EEsProfile && version >= 310 ) ||
8765
+ (profile != EEsProfile && version >= 450 )) {
8766
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8767
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4VerticalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8768
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag2HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8769
+ symbolTable.setVariableExtensions (" gl_ShadingRateFlag4HorizontalPixelsEXT" , 1 , &E_GL_EXT_fragment_shading_rate);
8770
+ }
8684
8771
break ;
8685
8772
#endif
8686
8773
0 commit comments