mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-14 13:51:04 +00:00
b8338311ea
For GL_EXT_vulkan_glsl_relaxed. When merging the default uniform block, there were cases where symbols in the tree wern't updated to match the new block structure after merging blocks together. This change traverses the symbol tree and updates any references to the merged block.
140 lines
3.1 KiB
GLSL
Executable File
140 lines
3.1 KiB
GLSL
Executable File
#version 460
|
|
uniform int uTDInstanceIDOffset;
|
|
uniform int uTDNumInstances;
|
|
uniform float uTDAlphaTestVal;
|
|
#define TD_NUM_COLOR_BUFFERS 1
|
|
#define TD_NUM_LIGHTS 0
|
|
#define TD_NUM_SHADOWED_LIGHTS 0
|
|
#define TD_NUM_ENV_LIGHTS 0
|
|
#define TD_LIGHTS_ARRAY_SIZE 1
|
|
#define TD_ENV_LIGHTS_ARRAY_SIZE 1
|
|
#define TD_NUM_CAMERAS 1
|
|
struct TDPhongResult
|
|
{
|
|
vec3 diffuse;
|
|
vec3 specular;
|
|
vec3 specular2;
|
|
float shadowStrength;
|
|
};
|
|
struct TDPBRResult
|
|
{
|
|
vec3 diffuse;
|
|
vec3 specular;
|
|
float shadowStrength;
|
|
};
|
|
struct TDMatrix
|
|
{
|
|
mat4 world;
|
|
mat4 worldInverse;
|
|
mat4 worldCam;
|
|
mat4 worldCamInverse;
|
|
mat4 cam;
|
|
mat4 camInverse;
|
|
mat4 camProj;
|
|
mat4 camProjInverse;
|
|
mat4 proj;
|
|
mat4 projInverse;
|
|
mat4 worldCamProj;
|
|
mat4 worldCamProjInverse;
|
|
mat4 quadReproject;
|
|
mat3 worldForNormals;
|
|
mat3 camForNormals;
|
|
mat3 worldCamForNormals;
|
|
};
|
|
layout(std140) uniform TDMatricesBlock {
|
|
TDMatrix uTDMats[TD_NUM_CAMERAS];
|
|
};
|
|
struct TDCameraInfo
|
|
{
|
|
vec4 nearFar;
|
|
vec4 fog;
|
|
vec4 fogColor;
|
|
int renderTOPCameraIndex;
|
|
};
|
|
layout(std140) uniform TDCameraInfoBlock {
|
|
TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS];
|
|
};
|
|
struct TDGeneral
|
|
{
|
|
vec4 ambientColor;
|
|
vec4 nearFar;
|
|
vec4 viewport;
|
|
vec4 viewportRes;
|
|
vec4 fog;
|
|
vec4 fogColor;
|
|
};
|
|
layout(std140) uniform TDGeneralBlock {
|
|
TDGeneral uTDGeneral;
|
|
};
|
|
|
|
void TDAlphaTest(float alpha);
|
|
vec4 TDDither(vec4 color);
|
|
vec4 TDOutputSwizzle(vec4 v);
|
|
uvec4 TDOutputSwizzle(uvec4 v);
|
|
void TDCheckOrderIndTrans();
|
|
void TDCheckDiscard();
|
|
uniform vec3 uConstant;
|
|
uniform float uShadowStrength;
|
|
uniform vec3 uShadowColor;
|
|
uniform vec4 uDiffuseColor;
|
|
uniform vec4 uAmbientColor;
|
|
|
|
uniform sampler2DArray sColorMap;
|
|
|
|
in Vertex
|
|
{
|
|
vec4 color;
|
|
vec3 worldSpacePos;
|
|
vec3 texCoord0;
|
|
flat int cameraIndex;
|
|
flat int instance;
|
|
} iVert;
|
|
|
|
// Output variable for the color
|
|
layout(location = 0) out vec4 oFragColor[TD_NUM_COLOR_BUFFERS];
|
|
void main()
|
|
{
|
|
// This allows things such as order independent transparency
|
|
// and Dual-Paraboloid rendering to work properly
|
|
TDCheckDiscard();
|
|
|
|
vec4 outcol = vec4(0.0, 0.0, 0.0, 0.0);
|
|
|
|
vec3 texCoord0 = iVert.texCoord0.stp;
|
|
float actualTexZ = mod(int(texCoord0.z),2048);
|
|
float instanceLoop = floor(int(texCoord0.z)/2048);
|
|
texCoord0.z = actualTexZ;
|
|
vec4 colorMapColor = texture(sColorMap, texCoord0.stp);
|
|
|
|
float red = colorMapColor[int(instanceLoop)];
|
|
colorMapColor = vec4(red);
|
|
// Constant Light Contribution
|
|
outcol.rgb += uConstant * iVert.color.rgb;
|
|
|
|
outcol *= colorMapColor;
|
|
|
|
// Alpha Calculation
|
|
float alpha = iVert.color.a * colorMapColor.a ;
|
|
|
|
// Dithering, does nothing if dithering is disabled
|
|
outcol = TDDither(outcol);
|
|
|
|
outcol.rgb *= alpha;
|
|
|
|
// Modern GL removed the implicit alpha test, so we need to apply
|
|
// it manually here. This function does nothing if alpha test is disabled.
|
|
TDAlphaTest(alpha);
|
|
|
|
outcol.a = alpha;
|
|
oFragColor[0] = TDOutputSwizzle(outcol);
|
|
|
|
|
|
// TD_NUM_COLOR_BUFFERS will be set to the number of color buffers
|
|
// active in the render. By default we want to output zero to every
|
|
// buffer except the first one.
|
|
for (int i = 1; i < TD_NUM_COLOR_BUFFERS; i++)
|
|
{
|
|
oFragColor[i] = vec4(0.0);
|
|
}
|
|
}
|