Skip to content

Commit 24b64d9

Browse files
committed
chore: further shader cleanup
1 parent 228a3f7 commit 24b64d9

14 files changed

+139
-283
lines changed

extensions/pl_renderer_internal.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,6 @@ typedef struct _plShaderVariant plShaderVariant;
140140
typedef struct _plComputeShaderVariant plComputeShaderVariant;
141141

142142
// gpu buffers
143-
typedef struct _plShadowInstanceBufferData plShadowInstanceBufferData;
144143
typedef struct _plDirectionLightShadowData plDirectionLightShadowData;
145144

146145
// enums & flags
@@ -214,12 +213,6 @@ typedef struct _plDrawable
214213
bool bCulled;
215214
} plDrawable;
216215

217-
typedef struct _plShadowInstanceBufferData
218-
{
219-
uint32_t uTransformIndex;
220-
int32_t iViewportIndex;
221-
} plShadowInstanceBufferData;
222-
223216
typedef struct _plDirectionLightShadowData
224217
{
225218
plBufferHandle atDShadowCameraBuffers[PL_MAX_FRAMES_IN_FLIGHT];

shaders/deferred_lighting.frag

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
#extension GL_ARB_separate_shader_objects : enable
33
#extension GL_EXT_nonuniform_qualifier : enable
44

5-
#include "pl_shader_interop_renderer.h"
6-
#include "lights.glsl"
5+
#include "global.inc"
76
#include "math.glsl"
87

98
//-----------------------------------------------------------------------------
@@ -14,29 +13,6 @@ layout(constant_id = 0) const int iRenderingFlags = 0;
1413
layout(constant_id = 1) const int iLightCount = 0;
1514
layout(constant_id = 2) const int iProbeCount = 0;
1615

17-
//-----------------------------------------------------------------------------
18-
// [SECTION] bind group 0
19-
//-----------------------------------------------------------------------------
20-
21-
layout(std140, set = 0, binding = 0) readonly buffer _tVertexBuffer
22-
{
23-
vec4 atVertexData[];
24-
} tVertexBuffer;
25-
26-
layout(std140, set = 0, binding = 1) readonly buffer _tTransformBuffer
27-
{
28-
mat4 atTransform[];
29-
} tTransformBuffer;
30-
31-
layout(set = 0, binding = 2) readonly buffer plMaterialInfo
32-
{
33-
plGpuMaterial atMaterials[];
34-
} tMaterialInfo;
35-
36-
layout(set = 0, binding = 3) uniform sampler tDefaultSampler;
37-
layout(set = 0, binding = 4) uniform sampler tEnvSampler;
38-
layout(set = 0, binding = 5) uniform texture2D at2DTextures[PL_MAX_BINDLESS_TEXTURES];
39-
layout(set = 0, binding = PL_MAX_BINDLESS_CUBE_TEXTURE_SLOT) uniform textureCube atCubeTextures[PL_MAX_BINDLESS_TEXTURES];
4016
//-----------------------------------------------------------------------------
4117
// [SECTION] bind group 1
4218
//-----------------------------------------------------------------------------
@@ -231,11 +207,12 @@ void main()
231207
float NdotH = clampedDot(n, h);
232208
float LdotH = clampedDot(l, h);
233209
float VdotH = clampedDot(v, h);
210+
vec3 dielectric_fresnel = pl_fresnel_schlick(f0, f90, abs(VdotH));
234211
if (NdotL > 0.0 || NdotV > 0.0)
235212
{
236213
vec3 intensity = getLightIntensity(tLightData, pointToLight);
237-
f_diffuse += shadow * intensity * NdotL * BRDF_lambertian(f0, f90, c_diff, specularWeight, VdotH);
238-
f_specular += shadow * intensity * NdotL * BRDF_specularGGX(f0, f90, fAlphaRoughness, specularWeight, VdotH, NdotL, NdotV, NdotH);
214+
f_diffuse += shadow * intensity * NdotL * (1.0 - specularWeight * dielectric_fresnel) * pl_brdf_lambertian(c_diff);
215+
f_specular += shadow * intensity * NdotL * dielectric_fresnel * specularWeight * BRDF_specularGGX(fAlphaRoughness, NdotL, NdotV, NdotH);
239216
}
240217
}
241218

@@ -277,11 +254,12 @@ void main()
277254
float NdotH = clampedDot(n, h);
278255
float LdotH = clampedDot(l, h);
279256
float VdotH = clampedDot(v, h);
257+
vec3 dielectric_fresnel = pl_fresnel_schlick(f0 * specularWeight, f90, abs(VdotH));
280258
if (NdotL > 0.0 || NdotV > 0.0)
281259
{
282260
vec3 intensity = getLightIntensity(tLightData, pointToLight);
283-
f_diffuse += shadow * intensity * NdotL * BRDF_lambertian(f0, f90, c_diff, specularWeight, VdotH);
284-
f_specular += shadow * intensity * NdotL * BRDF_specularGGX(f0, f90, fAlphaRoughness, specularWeight, VdotH, NdotL, NdotV, NdotH);
261+
f_diffuse += shadow * intensity * NdotL * (1.0 - specularWeight * dielectric_fresnel) * pl_brdf_lambertian(c_diff);
262+
f_specular += shadow * intensity * NdotL * dielectric_fresnel * specularWeight * BRDF_specularGGX(fAlphaRoughness, NdotL, NdotV, NdotH);
285263
}
286264
}
287265

@@ -321,11 +299,12 @@ void main()
321299
float NdotH = clampedDot(n, h);
322300
float LdotH = clampedDot(l, h);
323301
float VdotH = clampedDot(v, h);
302+
vec3 dielectric_fresnel = pl_fresnel_schlick(f0 * specularWeight, f90, abs(VdotH));
324303
if (NdotL > 0.0 || NdotV > 0.0)
325304
{
326305
vec3 intensity = getLightIntensity(tLightData, pointToLight);
327-
f_diffuse += shadow * intensity * NdotL * BRDF_lambertian(f0, f90, c_diff, specularWeight, VdotH);
328-
f_specular += shadow * intensity * NdotL * BRDF_specularGGX(f0, f90, fAlphaRoughness, specularWeight, VdotH, NdotL, NdotV, NdotH);
306+
f_diffuse += shadow * intensity * NdotL * (1.0 - specularWeight * dielectric_fresnel) * pl_brdf_lambertian(c_diff);
307+
f_specular += shadow * intensity * NdotL * dielectric_fresnel * specularWeight * BRDF_specularGGX(fAlphaRoughness, NdotL, NdotV, NdotH);
329308
}
330309
}
331310

shaders/deferred_lighting.vert

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,7 @@
22
#extension GL_ARB_separate_shader_objects : enable
33
#extension GL_EXT_nonuniform_qualifier : enable
44

5-
#include "pl_shader_interop_renderer.h"
6-
7-
layout(std140, set = 0, binding = 0) readonly buffer _tVertexBuffer
8-
{
9-
vec4 atVertexData[];
10-
} tVertexBuffer;
11-
12-
layout(std140, set = 0, binding = 1) readonly buffer _tTransformBuffer
13-
{
14-
mat4 atTransform[];
15-
} tTransformBuffer;
16-
17-
layout(set = 0, binding = 2) readonly buffer plMaterialInfo
18-
{
19-
plGpuMaterial atMaterials[];
20-
} tMaterialInfo;
21-
22-
layout(set = 0, binding = 3) uniform sampler tDefaultSampler;
23-
layout(set = 0, binding = 4) uniform sampler tEnvSampler;
24-
layout(set = 0, binding = 5) uniform texture2D at2DTextures[PL_MAX_BINDLESS_TEXTURES];
25-
layout(set = 0, binding = PL_MAX_BINDLESS_CUBE_TEXTURE_SLOT) uniform textureCube atCubeTextures[PL_MAX_BINDLESS_TEXTURES];
26-
5+
#include "global.inc"
276
//-----------------------------------------------------------------------------
287
// [SECTION] dynamic bind group
298
//-----------------------------------------------------------------------------

shaders/filter_environment.comp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ pl_ggx(vec2 tXi, float fRoughness)
172172
// Apply the Jacobian to obtain a pdf that is parameterized by l
173173
// see https://bruop.github.io/ibl/
174174
// Typically you'd have the following:
175-
// float pdf = D_GGX(NoH, roughness) * NoH / (4.0 * VoH);
175+
// float pdf = pl_distribution_ggx(NoH, roughness) * NoH / (4.0 * VoH);
176176
// but since V = N => VoH == NoH
177177
tGgx.pdf /= 4.0;
178178

shaders/forward.frag

Lines changed: 14 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
#extension GL_ARB_separate_shader_objects : enable
33
#extension GL_EXT_nonuniform_qualifier : enable
44

5-
#include "pl_shader_interop_renderer.h"
6-
#include "lights.glsl"
5+
#include "global.inc"
76

87
//-----------------------------------------------------------------------------
98
// [SECTION] specialication constants
@@ -17,30 +16,6 @@ layout(constant_id = 4) const int iRenderingFlags = 0;
1716
layout(constant_id = 5) const int iLightCount = 0;
1817
layout(constant_id = 6) const int iProbeCount = 0;
1918

20-
//-----------------------------------------------------------------------------
21-
// [SECTION] bind group 0
22-
//-----------------------------------------------------------------------------
23-
24-
layout(std140, set = 0, binding = 0) readonly buffer _tVertexBuffer
25-
{
26-
vec4 atVertexData[];
27-
} tVertexBuffer;
28-
29-
layout(std140, set = 0, binding = 1) readonly buffer _tTransformBuffer
30-
{
31-
mat4 atTransform[];
32-
} tTransformBuffer;
33-
34-
layout(set = 0, binding = 2) readonly buffer plMaterialInfo
35-
{
36-
plGpuMaterial atMaterials[];
37-
} tMaterialInfo;
38-
39-
layout(set = 0, binding = 3) uniform sampler tDefaultSampler;
40-
layout(set = 0, binding = 4) uniform sampler tEnvSampler;
41-
layout(set = 0, binding = 5) uniform texture2D at2DTextures[PL_MAX_BINDLESS_TEXTURES];
42-
layout(set = 0, binding = PL_MAX_BINDLESS_CUBE_TEXTURE_SLOT) uniform textureCube atCubeTextures[PL_MAX_BINDLESS_TEXTURES];
43-
4419
//-----------------------------------------------------------------------------
4520
// [SECTION] bind group 1
4621
//-----------------------------------------------------------------------------
@@ -125,7 +100,7 @@ void main()
125100
materialInfo.baseColor = tBaseColor.rgb;
126101

127102
// The default index of refraction of 1.5 yields a dielectric normal incidence reflectance of 0.04.
128-
materialInfo.f0 = vec3(0.04);
103+
materialInfo.f0_dielectric = vec3(0.04);
129104
float specularWeight = 1.0;
130105

131106
if(bool(iMaterialFlags & PL_INFO_MATERIAL_METALLICROUGHNESS))
@@ -190,8 +165,8 @@ void main()
190165
if(iProbeIndex > -1)
191166
{
192167
int iMips = textureQueryLevels(samplerCube(atCubeTextures[nonuniformEXT(tProbeData.atData[iProbeIndex].uGGXEnvSampler)], tEnvSampler));
193-
f_specular += getIBLRadianceGGX(n, v, materialInfo.perceptualRoughness, materialInfo.f0, specularWeight, iMips, iProbeIndex, tShaderIn.tWorldPosition);
194-
f_diffuse += getIBLRadianceLambertian(n, v, materialInfo.perceptualRoughness, materialInfo.c_diff, materialInfo.f0, specularWeight, iProbeIndex, tShaderIn.tWorldPosition);
168+
f_specular += getIBLRadianceGGX(n, v, materialInfo.perceptualRoughness, materialInfo.f0_dielectric, specularWeight, iMips, iProbeIndex, tShaderIn.tWorldPosition);
169+
f_diffuse += getIBLRadianceLambertian(n, v, materialInfo.perceptualRoughness, materialInfo.c_diff, materialInfo.f0_dielectric, specularWeight, iProbeIndex, tShaderIn.tWorldPosition);
195170
}
196171
}
197172

@@ -262,11 +237,13 @@ void main()
262237
float NdotH = clampedDot(n, h);
263238
float LdotH = clampedDot(l, h);
264239
float VdotH = clampedDot(v, h);
240+
vec3 dielectric_fresnel = pl_fresnel_schlick(materialInfo.f0_dielectric, materialInfo.f90, abs(VdotH));
241+
265242
if (NdotL > 0.0 || NdotV > 0.0)
266243
{
267244
vec3 intensity = getLightIntensity(tLightData, pointToLight);
268-
f_diffuse += shadow * intensity * NdotL * BRDF_lambertian(materialInfo.f0, materialInfo.f90, materialInfo.c_diff, specularWeight, VdotH);
269-
f_specular += shadow * intensity * NdotL * BRDF_specularGGX(materialInfo.f0, materialInfo.f90, materialInfo.alphaRoughness, specularWeight, VdotH, NdotL, NdotV, NdotH);
245+
f_diffuse += shadow * intensity * NdotL * (1.0 - specularWeight * dielectric_fresnel) * pl_brdf_lambertian(materialInfo.c_diff);
246+
f_specular += shadow * intensity * NdotL * dielectric_fresnel * specularWeight * BRDF_specularGGX(materialInfo.alphaRoughness, NdotL, NdotV, NdotH);
270247
}
271248
}
272249

@@ -312,11 +289,12 @@ void main()
312289
float NdotH = clampedDot(n, h);
313290
float LdotH = clampedDot(l, h);
314291
float VdotH = clampedDot(v, h);
292+
vec3 dielectric_fresnel = pl_fresnel_schlick(materialInfo.f0_dielectric, materialInfo.f90, abs(VdotH));
315293
if (NdotL > 0.0 || NdotV > 0.0)
316294
{
317295
vec3 intensity = getLightIntensity(tLightData, pointToLight);
318-
f_diffuse += shadow * intensity * NdotL * BRDF_lambertian(materialInfo.f0, materialInfo.f90, materialInfo.c_diff, specularWeight, VdotH);
319-
f_specular += shadow * intensity * NdotL * BRDF_specularGGX(materialInfo.f0, materialInfo.f90, materialInfo.alphaRoughness, specularWeight, VdotH, NdotL, NdotV, NdotH);
296+
f_diffuse += shadow * intensity * NdotL * (1.0 - specularWeight * dielectric_fresnel) * pl_brdf_lambertian(materialInfo.c_diff);
297+
f_specular += shadow * intensity * NdotL * dielectric_fresnel * specularWeight * BRDF_specularGGX(materialInfo.alphaRoughness, NdotL, NdotV, NdotH);
320298
}
321299
}
322300

@@ -356,11 +334,12 @@ void main()
356334
float NdotH = clampedDot(n, h);
357335
float LdotH = clampedDot(l, h);
358336
float VdotH = clampedDot(v, h);
337+
vec3 dielectric_fresnel = pl_fresnel_schlick(materialInfo.f0_dielectric, materialInfo.f90, abs(VdotH));
359338
if (NdotL > 0.0 || NdotV > 0.0)
360339
{
361340
vec3 intensity = getLightIntensity(tLightData, pointToLight);
362-
f_diffuse += shadow * intensity * NdotL * BRDF_lambertian(materialInfo.f0, materialInfo.f90, materialInfo.c_diff, specularWeight, VdotH);
363-
f_specular += shadow * intensity * NdotL * BRDF_specularGGX(materialInfo.f0, materialInfo.f90, materialInfo.alphaRoughness, specularWeight, VdotH, NdotL, NdotV, NdotH);
341+
f_diffuse += shadow * intensity * NdotL * (1.0 - specularWeight * dielectric_fresnel) * pl_brdf_lambertian(materialInfo.c_diff);
342+
f_specular += shadow * intensity * NdotL * dielectric_fresnel * specularWeight * BRDF_specularGGX(materialInfo.alphaRoughness, NdotL, NdotV, NdotH);
364343
}
365344
}
366345

shaders/forward.vert

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
#extension GL_ARB_separate_shader_objects : enable
33
#extension GL_EXT_nonuniform_qualifier : enable
44

5-
#include "pl_shader_interop_renderer.h"
6-
#include "lights.glsl"
5+
#include "global.inc"
76

87
//-----------------------------------------------------------------------------
98
// [SECTION] specialication constants
@@ -14,33 +13,8 @@ layout(constant_id = 1) const int iDataStride = 0;
1413
layout(constant_id = 2) const int iTextureMappingFlags = 0;
1514
layout(constant_id = 3) const int iMaterialFlags = 0;
1615
layout(constant_id = 4) const int iRenderingFlags = 0;
17-
layout(constant_id = 5) const int iDirectionLightCount = 0;
18-
layout(constant_id = 6) const int iPointLightCount = 0;
19-
layout(constant_id = 7) const int iSpotLightCount = 0;
20-
21-
//-----------------------------------------------------------------------------
22-
// [SECTION] bind group 0
23-
//-----------------------------------------------------------------------------
24-
25-
layout(std140, set = 0, binding = 0) readonly buffer _tVertexBuffer
26-
{
27-
vec4 atVertexData[];
28-
} tVertexBuffer;
29-
30-
layout(std140, set = 0, binding = 1) readonly buffer _tTransformBuffer
31-
{
32-
mat4 atTransform[];
33-
} tTransformBuffer;
34-
35-
layout(set = 0, binding = 2) readonly buffer plMaterialInfo
36-
{
37-
plGpuMaterial atMaterials[];
38-
} tMaterialInfo;
39-
40-
layout(set = 0, binding = 3) uniform sampler tDefaultSampler;
41-
layout(set = 0, binding = 4) uniform sampler tEnvSampler;
42-
layout(set = 0, binding = 5) uniform texture2D at2DTextures[PL_MAX_BINDLESS_TEXTURES];
43-
layout(set = 0, binding = PL_MAX_BINDLESS_CUBE_TEXTURE_SLOT) uniform textureCube atCubeTextures[PL_MAX_BINDLESS_TEXTURES];
16+
layout(constant_id = 5) const int iLightCount = 0;
17+
layout(constant_id = 6) const int iProbeCount = 0;
4418

4519
//-----------------------------------------------------------------------------
4620
// [SECTION] bind group 1

shaders/gbuffer_fill.frag

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Index of this file:
2222
// [SECTION] includes
2323
//-----------------------------------------------------------------------------
2424

25-
#include "pl_shader_interop_renderer.h"
25+
#include "global.inc"
2626

2727
//-----------------------------------------------------------------------------
2828
// [SECTION] specialication constants
@@ -34,30 +34,6 @@ layout(constant_id = 2) const int iTextureMappingFlags = 0;
3434
layout(constant_id = 3) const int iMaterialFlags = 0;
3535
layout(constant_id = 4) const int iRenderingFlags = 0;
3636

37-
//-----------------------------------------------------------------------------
38-
// [SECTION] bind group 0
39-
//-----------------------------------------------------------------------------
40-
41-
layout(std140, set = 0, binding = 0) readonly buffer _tVertexBuffer
42-
{
43-
vec4 atVertexData[];
44-
} tVertexBuffer;
45-
46-
layout(std140, set = 0, binding = 1) readonly buffer _tTransformBuffer
47-
{
48-
mat4 atTransform[];
49-
} tTransformBuffer;
50-
51-
layout(set = 0, binding = 2) readonly buffer plMaterialInfo
52-
{
53-
plGpuMaterial atMaterials[];
54-
} tMaterialInfo;
55-
56-
layout(set = 0, binding = 3) uniform sampler tDefaultSampler;
57-
layout(set = 0, binding = 4) uniform sampler tEnvSampler;
58-
layout(set = 0, binding = 5) uniform texture2D at2DTextures[PL_MAX_BINDLESS_TEXTURES];
59-
layout(set = 0, binding = PL_MAX_BINDLESS_CUBE_TEXTURE_SLOT) uniform textureCube atCubeTextures[PL_MAX_BINDLESS_TEXTURES];
60-
6137
//-----------------------------------------------------------------------------
6238
// [SECTION] bind group 1
6339
//-----------------------------------------------------------------------------
@@ -114,7 +90,7 @@ void main()
11490
}
11591

11692
MaterialInfo materialInfo;
117-
materialInfo.f0 = vec3(0.04);
93+
materialInfo.f0_dielectric = vec3(0.04);
11894
materialInfo.baseColor = tBaseColor.rgb;
11995

12096
if(bool(iMaterialFlags & PL_INFO_MATERIAL_METALLICROUGHNESS))

shaders/gbuffer_fill.vert

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Index of this file:
2121
// [SECTION] includes
2222
//-----------------------------------------------------------------------------
2323

24-
#include "pl_shader_interop_renderer.h"
24+
#include "global.inc"
2525

2626
//-----------------------------------------------------------------------------
2727
// [SECTION] specialication constants
@@ -33,30 +33,6 @@ layout(constant_id = 2) const int iTextureMappingFlags = 0;
3333
layout(constant_id = 3) const int iMaterialFlags = 0;
3434
layout(constant_id = 4) const int iRenderingFlags = 0;
3535

36-
//-----------------------------------------------------------------------------
37-
// [SECTION] bind group 0
38-
//-----------------------------------------------------------------------------
39-
40-
layout(std140, set = 0, binding = 0) readonly buffer _tVertexBuffer
41-
{
42-
vec4 atVertexData[];
43-
} tVertexBuffer;
44-
45-
layout(std140, set = 0, binding = 1) readonly buffer _tTransformBuffer
46-
{
47-
mat4 atTransform[];
48-
} tTransformBuffer;
49-
50-
layout(set = 0, binding = 2) readonly buffer plMaterialInfo
51-
{
52-
plGpuMaterial atMaterials[];
53-
} tMaterialInfo;
54-
55-
layout(set = 0, binding = 3) uniform sampler tDefaultSampler;
56-
layout(set = 0, binding = 4) uniform sampler tEnvSampler;
57-
layout(set = 0, binding = 5) uniform texture2D at2DTextures[PL_MAX_BINDLESS_TEXTURES];
58-
layout(set = 0, binding = PL_MAX_BINDLESS_CUBE_TEXTURE_SLOT) uniform textureCube atCubeTextures[PL_MAX_BINDLESS_TEXTURES];
59-
6036
//-----------------------------------------------------------------------------
6137
// [SECTION] bind group 1
6238
//-----------------------------------------------------------------------------

0 commit comments

Comments
 (0)