Skip to content

Commit ac04760

Browse files
committed
chore: remove unnecessary shader constants
1 parent 1f202d0 commit ac04760

14 files changed

+323
-214
lines changed

extensions/pl_renderer_ext.c

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,16 +1782,26 @@ pl_renderer_outline_entities(plScene* ptScene, uint32_t uCount, plEntity* atEnti
17821782
}
17831783

17841784
// choose shader variant
1785-
int aiConstantData0[] = {
1785+
int aiForwardFragmentConstantData0[] = {
17861786
(int)ptMesh->ulVertexStreamMask,
1787-
iDataStride,
17881787
iTextureMappingFlags,
17891788
PL_INFO_MATERIAL_METALLICROUGHNESS,
17901789
iObjectRenderingFlags,
17911790
pl_sb_capacity(ptScene->sbtLightData),
17921791
pl_sb_capacity(ptScene->sbtProbeData),
17931792
};
17941793

1794+
int aiGBufferFragmentConstantData0[] = {
1795+
(int)ptMesh->ulVertexStreamMask,
1796+
iTextureMappingFlags,
1797+
PL_INFO_MATERIAL_METALLICROUGHNESS
1798+
};
1799+
1800+
int aiVertexConstantData0[] = {
1801+
(int)ptMesh->ulVertexStreamMask,
1802+
iDataStride
1803+
};
1804+
17951805
uint64_t ulIndex = 0;
17961806
if(pl_hm_has_key_ex(&ptScene->tDrawableHashmap, tEntity.uData, &ulIndex))
17971807
{
@@ -1813,9 +1823,9 @@ pl_renderer_outline_entities(plScene* ptScene, uint32_t uCount, plEntity* atEnti
18131823
pl_sb_push(ptScene->sbtOutlineDrawablesOldEnvShaders, ptDrawable->tEnvShader);
18141824

18151825
if(ptDrawable->tFlags & PL_DRAWABLE_FLAG_FORWARD)
1816-
ptDrawable->tShader = gptShaderVariant->get_shader("forward", &tVariantTemp, aiConstantData0, aiConstantData0, NULL);
1826+
ptDrawable->tShader = gptShaderVariant->get_shader("forward", &tVariantTemp, aiVertexConstantData0, aiForwardFragmentConstantData0, NULL);
18171827
else if(ptDrawable->tFlags & PL_DRAWABLE_FLAG_DEFERRED)
1818-
ptDrawable->tShader = gptShaderVariant->get_shader("gbuffer_fill", &tVariantTemp, aiConstantData0, aiConstantData0, NULL);
1828+
ptDrawable->tShader = gptShaderVariant->get_shader("gbuffer_fill", &tVariantTemp, aiVertexConstantData0, aiGBufferFragmentConstantData0, NULL);
18191829

18201830
if(ptDrawable->uInstanceCount == 0)
18211831
{
@@ -1890,9 +1900,9 @@ pl_renderer_reload_scene_shaders(plScene* ptScene)
18901900
plLightComponent* ptLights = NULL;
18911901
const uint32_t uLightCount = gptECS->get_components(ptScene->ptComponentLibrary, gptData->tLightComponentType, (void**)&ptLights, NULL);
18921902
int aiLightingConstantData[] = {iSceneWideRenderingFlags, pl_sb_capacity(ptScene->sbtLightData), pl_sb_size(ptScene->sbtProbeData)};
1893-
ptScene->tLightingShader = gptShaderVariant->get_shader("deferred_lighting", NULL, aiLightingConstantData, aiLightingConstantData, &gptData->tRenderPassLayout);
1903+
ptScene->tLightingShader = gptShaderVariant->get_shader("deferred_lighting", NULL, NULL, aiLightingConstantData, &gptData->tRenderPassLayout);
18941904
aiLightingConstantData[0] = gptData->tRuntimeOptions.bPunctualLighting ? (PL_RENDERING_FLAG_USE_PUNCTUAL | PL_RENDERING_FLAG_SHADOWS) : 0;
1895-
ptScene->tEnvLightingShader = gptShaderVariant->get_shader("deferred_lighting", NULL, aiLightingConstantData, aiLightingConstantData, &gptData->tRenderPassLayout);
1905+
ptScene->tEnvLightingShader = gptShaderVariant->get_shader("deferred_lighting", NULL, NULL, aiLightingConstantData, &gptData->tRenderPassLayout);
18961906

18971907
pl__renderer_unstage_drawables(ptScene);
18981908
pl__renderer_set_drawable_shaders(ptScene);
@@ -1976,9 +1986,9 @@ pl_renderer_finalize_scene(plScene* ptScene)
19761986

19771987
// create lighting shader
19781988
int aiLightingConstantData[] = {iSceneWideRenderingFlags, pl_sb_capacity(ptScene->sbtLightData), pl_sb_size(ptScene->sbtProbeData)};
1979-
ptScene->tLightingShader = gptShaderVariant->get_shader("deferred_lighting", NULL, aiLightingConstantData, aiLightingConstantData, &gptData->tRenderPassLayout);
1989+
ptScene->tLightingShader = gptShaderVariant->get_shader("deferred_lighting", NULL, NULL, aiLightingConstantData, &gptData->tRenderPassLayout);
19801990
aiLightingConstantData[0] = gptData->tRuntimeOptions.bPunctualLighting ? (PL_RENDERING_FLAG_USE_PUNCTUAL | PL_RENDERING_FLAG_SHADOWS) : 0;
1981-
ptScene->tEnvLightingShader = gptShaderVariant->get_shader("deferred_lighting", NULL, aiLightingConstantData, aiLightingConstantData, &gptData->tRenderPassLayout);
1991+
ptScene->tEnvLightingShader = gptShaderVariant->get_shader("deferred_lighting", NULL, NULL, aiLightingConstantData, &gptData->tRenderPassLayout);
19821992

19831993

19841994
for(uint32_t i = 0; i < gptGfx->get_frames_in_flight(); i++)

extensions/pl_renderer_internal.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3538,16 +3538,26 @@ pl__renderer_set_drawable_shaders(plScene* ptScene)
35383538
}
35393539

35403540
// choose shader variant
3541-
int aiConstantData0[] = {
3541+
int aiForwardFragmentConstantData0[] = {
35423542
(int)ptMesh->ulVertexStreamMask,
3543-
iDataStride,
35443543
iTextureMappingFlags,
35453544
PL_INFO_MATERIAL_METALLICROUGHNESS,
35463545
iObjectRenderingFlags,
35473546
pl_sb_capacity(ptScene->sbtLightData),
35483547
pl_sb_size(ptScene->sbtProbeData),
35493548
};
35503549

3550+
int aiGBufferFragmentConstantData0[] = {
3551+
(int)ptMesh->ulVertexStreamMask,
3552+
iTextureMappingFlags,
3553+
PL_INFO_MATERIAL_METALLICROUGHNESS
3554+
};
3555+
3556+
int aiVertexConstantData0[] = {
3557+
(int)ptMesh->ulVertexStreamMask,
3558+
iDataStride
3559+
};
3560+
35513561
if(ptScene->sbtDrawables[i].tFlags & PL_DRAWABLE_FLAG_DEFERRED)
35523562
{
35533563

@@ -3567,9 +3577,8 @@ pl__renderer_set_drawable_shaders(plScene* ptScene)
35673577
if(ptMaterial->tFlags & PL_MATERIAL_FLAG_DOUBLE_SIDED)
35683578
tVariantTemp.ulCullMode = PL_CULL_MODE_NONE;
35693579

3570-
ptScene->sbtDrawables[i].tShader = gptShaderVariant->get_shader("gbuffer_fill", &tVariantTemp, aiConstantData0, aiConstantData0, &gptData->tRenderPassLayout);
3571-
aiConstantData0[4] = gptData->tRuntimeOptions.bPunctualLighting ? (PL_RENDERING_FLAG_USE_PUNCTUAL | PL_RENDERING_FLAG_SHADOWS) : 0;
3572-
ptScene->sbtDrawables[i].tEnvShader = gptShaderVariant->get_shader("gbuffer_fill", &tVariantTemp, aiConstantData0, aiConstantData0, NULL);
3580+
ptScene->sbtDrawables[i].tShader = gptShaderVariant->get_shader("gbuffer_fill", &tVariantTemp, aiVertexConstantData0, aiGBufferFragmentConstantData0, &gptData->tRenderPassLayout);
3581+
ptScene->sbtDrawables[i].tEnvShader = gptShaderVariant->get_shader("gbuffer_fill", &tVariantTemp, aiVertexConstantData0, aiGBufferFragmentConstantData0, NULL);
35733582
}
35743583

35753584
else if(ptScene->sbtDrawables[i].tFlags & PL_DRAWABLE_FLAG_FORWARD)
@@ -3591,9 +3600,9 @@ pl__renderer_set_drawable_shaders(plScene* ptScene)
35913600
if(ptMaterial->tFlags & PL_MATERIAL_FLAG_DOUBLE_SIDED)
35923601
tVariantTemp.ulCullMode = PL_CULL_MODE_NONE;
35933602

3594-
ptScene->sbtDrawables[i].tShader = gptShaderVariant->get_shader("forward", &tVariantTemp, aiConstantData0, aiConstantData0, &gptData->tRenderPassLayout);
3595-
aiConstantData0[4] = gptData->tRuntimeOptions.bPunctualLighting ? (PL_RENDERING_FLAG_USE_PUNCTUAL | PL_RENDERING_FLAG_SHADOWS) : 0;
3596-
ptScene->sbtDrawables[i].tEnvShader = gptShaderVariant->get_shader("forward", &tVariantTemp, aiConstantData0, aiConstantData0, NULL);
3603+
ptScene->sbtDrawables[i].tShader = gptShaderVariant->get_shader("forward", &tVariantTemp, aiVertexConstantData0, aiForwardFragmentConstantData0, &gptData->tRenderPassLayout);
3604+
aiForwardFragmentConstantData0[2] = gptData->tRuntimeOptions.bPunctualLighting ? (PL_RENDERING_FLAG_USE_PUNCTUAL | PL_RENDERING_FLAG_SHADOWS) : 0;
3605+
ptScene->sbtDrawables[i].tEnvShader = gptShaderVariant->get_shader("forward", &tVariantTemp, aiVertexConstantData0, aiForwardFragmentConstantData0, NULL);
35973606

35983607
}
35993608
if(ptMaterial->tBlendMode != PL_BLEND_MODE_OPAQUE)
@@ -3610,7 +3619,7 @@ pl__renderer_set_drawable_shaders(plScene* ptScene)
36103619
.ulStencilOpDepthFail = PL_STENCIL_OP_KEEP,
36113620
.ulStencilOpPass = PL_STENCIL_OP_KEEP
36123621
};
3613-
ptScene->sbtDrawables[i].tShadowShader = gptShaderVariant->get_shader("alphashadow", &tShadowVariant, aiConstantData0, aiConstantData0, &gptData->tDepthRenderPassLayout);
3622+
ptScene->sbtDrawables[i].tShadowShader = gptShaderVariant->get_shader("alphashadow", &tShadowVariant, aiVertexConstantData0, aiGBufferFragmentConstantData0, &gptData->tDepthRenderPassLayout);
36143623
}
36153624
}
36163625
}

shaders/bg_scene.inc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
#include "pl_shader_interop_renderer.h"
55
#include "lights.glsl"
6-
#include "material_info.glsl"
76

87
//-----------------------------------------------------------------------------
98
// [SECTION] bind group 0

shaders/deferred_lighting.frag

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ layout(location = 0) in struct plShaderIn {
4444
} tShaderIn;
4545

4646
#include "lighting.glsl"
47+
#include "material_info.glsl"
4748

4849
void main()
4950
{

shaders/deferred_lighting.vert

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@
44

55
#include "bg_scene.inc"
66

7-
layout(constant_id = 0) const int iRenderingFlags = 0;
8-
layout(constant_id = 1) const int iLightCount = 0;
9-
layout(constant_id = 2) const int iProbeCount = 0;
10-
117
//-----------------------------------------------------------------------------
128
// [SECTION] dynamic bind group
139
//-----------------------------------------------------------------------------

shaders/forward.frag

Lines changed: 143 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@
1010
//-----------------------------------------------------------------------------
1111

1212
layout(constant_id = 0) const int iMeshVariantFlags = 0;
13-
layout(constant_id = 1) const int iDataStride = 0;
14-
layout(constant_id = 2) const int iTextureMappingFlags = 0;
15-
layout(constant_id = 3) const int iMaterialFlags = 0;
16-
layout(constant_id = 4) const int iRenderingFlags = 0;
17-
layout(constant_id = 5) const int iLightCount = 0;
18-
layout(constant_id = 6) const int iProbeCount = 0;
13+
layout(constant_id = 1) const int iTextureMappingFlags = 0;
14+
layout(constant_id = 2) const int iMaterialFlags = 0;
15+
layout(constant_id = 3) const int iRenderingFlags = 0;
16+
layout(constant_id = 4) const int iLightCount = 0;
17+
layout(constant_id = 5) const int iProbeCount = 0;
1918

2019
//-----------------------------------------------------------------------------
2120
// [SECTION] dynamic bind group
@@ -41,9 +40,146 @@ layout(location = 0) in struct plShaderIn {
4140
mat3 tTBN;
4241
} tShaderIn;
4342

44-
#define PL_FRAGMENT
4543
#include "math.glsl"
4644
#include "lighting.glsl"
45+
#include "material_info.glsl"
46+
47+
struct NormalInfo {
48+
vec3 ng; // Geometry normal
49+
vec3 t; // Geometry tangent
50+
vec3 b; // Geometry bitangent
51+
vec3 n; // Shading normal
52+
vec3 ntex; // Normal from texture, scaling is accounted for.
53+
};
54+
55+
NormalInfo
56+
pl_get_normal_info(int iUVSet)
57+
{
58+
vec2 UV = tShaderIn.tUV[iUVSet];
59+
vec2 uv_dx = dFdx(UV);
60+
vec2 uv_dy = dFdy(UV);
61+
62+
// if (length(uv_dx) <= 1e-2) {
63+
// uv_dx = vec2(1.0, 0.0);
64+
// }
65+
66+
// if (length(uv_dy) <= 1e-2) {
67+
// uv_dy = vec2(0.0, 1.0);
68+
// }
69+
70+
vec3 t_ = (uv_dy.t * dFdx(tShaderIn.tWorldPosition) - uv_dx.t * dFdy(tShaderIn.tWorldPosition)) /
71+
(uv_dx.s * uv_dy.t - uv_dy.s * uv_dx.t);
72+
73+
vec3 n, t, b, ng;
74+
75+
// Compute geometrical TBN:
76+
if(bool(iMeshVariantFlags & PL_MESH_FORMAT_FLAG_HAS_NORMAL))
77+
{
78+
79+
if(bool(iMeshVariantFlags & PL_MESH_FORMAT_FLAG_HAS_TANGENT))
80+
{
81+
// Trivial TBN computation, present as vertex attribute.
82+
// Normalize eigenvectors as matrix is linearly interpolated.
83+
t = normalize(tShaderIn.tTBN[0]);
84+
b = normalize(tShaderIn.tTBN[1]);
85+
ng = normalize(tShaderIn.tTBN[2]);
86+
}
87+
else
88+
{
89+
// Normals are either present as vertex attributes or approximated.
90+
ng = normalize(tShaderIn.tWorldNormal);
91+
t = normalize(t_ - ng * dot(ng, t_));
92+
b = cross(ng, t);
93+
}
94+
}
95+
else
96+
{
97+
ng = normalize(cross(dFdx(tShaderIn.tWorldPosition), dFdy(tShaderIn.tWorldPosition)));
98+
t = normalize(t_ - ng * dot(ng, t_));
99+
b = cross(ng, t);
100+
}
101+
102+
103+
// For a back-facing surface, the tangential basis vectors are negated.
104+
if (gl_FrontFacing == false)
105+
{
106+
t *= -1.0;
107+
b *= -1.0;
108+
ng *= -1.0;
109+
}
110+
111+
// Compute normals:
112+
NormalInfo info;
113+
info.ng = ng;
114+
if(bool(iTextureMappingFlags & PL_HAS_NORMAL_MAP))
115+
{
116+
plGpuMaterial material = tMaterialInfo.atMaterials[tObjectInfo.tData.iMaterialIndex];
117+
info.ntex = texture(sampler2D(at2DTextures[nonuniformEXT(material.iNormalTexIdx)], tSamplerLinearRepeat), UV).rgb * 2.0 - vec3(1.0);
118+
// info.ntex *= vec3(0.2, 0.2, 1.0);
119+
// info.ntex *= vec3(u_NormalScale, u_NormalScale, 1.0);
120+
info.ntex = normalize(info.ntex);
121+
info.n = normalize(mat3(t, b, ng) * info.ntex);
122+
}
123+
else
124+
{
125+
info.n = ng;
126+
}
127+
info.t = t;
128+
info.b = b;
129+
return info;
130+
}
131+
132+
vec4
133+
getBaseColor(vec4 u_ColorFactor, int iUVSet)
134+
{
135+
vec4 baseColor = vec4(1);
136+
137+
// if(bool(MATERIAL_SPECULARGLOSSINESS))
138+
// {
139+
// baseColor = u_DiffuseFactor;
140+
// }
141+
// else if(bool(MATERIAL_METALLICROUGHNESS))
142+
if(bool(iMaterialFlags & PL_INFO_MATERIAL_METALLICROUGHNESS))
143+
{
144+
// baseColor = u_BaseColorFactor;
145+
baseColor = u_ColorFactor;
146+
}
147+
148+
// if(bool(MATERIAL_SPECULARGLOSSINESS) && bool(HAS_DIFFUSE_MAP))
149+
// {
150+
// // baseColor *= texture(u_DiffuseSampler, getDiffuseUV());
151+
// baseColor *= texture(u_DiffuseSampler, tShaderIn.tUV);
152+
// }
153+
// else if(bool(MATERIAL_METALLICROUGHNESS) && bool(HAS_BASE_COLOR_MAP))
154+
if(bool(iMaterialFlags & PL_INFO_MATERIAL_METALLICROUGHNESS) && bool(iTextureMappingFlags & PL_HAS_BASE_COLOR_MAP))
155+
{
156+
plGpuMaterial material = tMaterialInfo.atMaterials[tObjectInfo.tData.iMaterialIndex];
157+
baseColor *= pl_srgb_to_linear(texture(sampler2D(at2DTextures[nonuniformEXT(material.iBaseColorTexIdx)], tSamplerLinearRepeat), tShaderIn.tUV[iUVSet]));
158+
}
159+
return baseColor * tShaderIn.tColor;
160+
}
161+
162+
MaterialInfo
163+
getMetallicRoughnessInfo(MaterialInfo info, float u_MetallicFactor, float u_RoughnessFactor, int UVSet)
164+
{
165+
info.metallic = u_MetallicFactor;
166+
info.perceptualRoughness = u_RoughnessFactor;
167+
168+
if(bool(iTextureMappingFlags & PL_HAS_METALLIC_ROUGHNESS_MAP))
169+
{
170+
// Roughness is stored in the 'g' channel, metallic is stored in the 'b' channel.
171+
// This layout intentionally reserves the 'r' channel for (optional) occlusion map data
172+
plGpuMaterial material = tMaterialInfo.atMaterials[tObjectInfo.tData.iMaterialIndex];
173+
vec4 mrSample = texture(sampler2D(at2DTextures[nonuniformEXT(material.iMetallicRoughnessTexIdx)], tSamplerLinearRepeat), tShaderIn.tUV[UVSet]);
174+
info.perceptualRoughness *= mrSample.g;
175+
info.metallic *= mrSample.b;
176+
}
177+
178+
// Achromatic f0 based on IOR.
179+
info.c_diff = mix(info.baseColor.rgb, vec3(0), info.metallic);
180+
info.f0_dielectric = mix(info.f0_dielectric, info.baseColor.rgb, info.metallic);
181+
return info;
182+
}
47183

48184
//-----------------------------------------------------------------------------
49185
// [SECTION] entry

shaders/forward.vert

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,6 @@
1111

1212
layout(constant_id = 0) const int iMeshVariantFlags = 0;
1313
layout(constant_id = 1) const int iDataStride = 0;
14-
layout(constant_id = 2) const int iTextureMappingFlags = 0;
15-
layout(constant_id = 3) const int iMaterialFlags = 0;
16-
layout(constant_id = 4) const int iRenderingFlags = 0;
17-
layout(constant_id = 5) const int iLightCount = 0;
18-
layout(constant_id = 6) const int iProbeCount = 0;
1914

2015
//-----------------------------------------------------------------------------
2116
// [SECTION] dynamic bind group

0 commit comments

Comments
 (0)