Skip to content

Commit 1579c34

Browse files
committed
Fixed descriptors
1 parent 93fece4 commit 1579c34

File tree

2 files changed

+33
-26
lines changed

2 files changed

+33
-26
lines changed

examples_tests/41.VisibilityBuffer/main.cpp

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ layout(location = 4) flat in uint drawID;
138138
#endif
139139
#define _NBL_FRAG_SET3_BINDINGS_DEFINED_
140140
141-
struct VTData
141+
struct MaterialParams
142142
{
143143
vec3 Ka;
144144
vec3 Kd;
@@ -155,23 +155,33 @@ struct VTData
155155
float Ni;
156156
uint extra; //flags copied from MTL metadata
157157
};
158-
#define _NBL_FRAG_MATERIAL_PARAMETERS_STRUCT_DEFINED_
159-
#define nbl_glsl_MaterialParametersStruct VTData
160158
161-
layout(set = 2, binding = 1, std430) readonly buffer VTDataBuffer
159+
layout(set = 2, binding = 1, std430) readonly buffer MaterialBuffer
162160
{
163-
VTData vtData[];
164-
} vtDataBuffer;
161+
MaterialParams materialData[];
162+
};
165163
166164
layout (push_constant) uniform Block
167165
{
168166
uint dataBufferOffset;
169167
} pc;
170168
#define _NBL_FRAG_PUSH_CONSTANTS_DEFINED_
171169
172-
VTData nbl_glsl_getMaterialParameters()
170+
#include <nbl/builtin/glsl/loader/mtl/common.glsl>
171+
nbl_glsl_MTLMaterialParameters nbl_glsl_getMaterialParameters() // this function is for MTL's shader only
173172
{
174-
return vtDataBuffer.vtData[drawID + pc.dataBufferOffset];
173+
MaterialParams params = materialData[drawID+pc.dataBufferOffset];
174+
175+
nbl_glsl_MTLMaterialParameters mtl_params;
176+
mtl_params.Ka = params.Ka;
177+
mtl_params.Kd = params.Kd;
178+
mtl_params.Ks = params.Ks;
179+
mtl_params.Ke = params.Ke;
180+
mtl_params.Ns = params.Ns;
181+
mtl_params.d = params.d;
182+
mtl_params.Ni = params.Ni;
183+
mtl_params.extra = params.extra;
184+
return mtl_params;
175185
}
176186
#define _NBL_FRAG_GET_MATERIAL_PARAMETERS_FUNCTION_DEFINED_
177187
@@ -200,17 +210,17 @@ VTData nbl_glsl_getMaterialParameters()
200210
201211
202212
#ifndef _NO_UV
203-
vec4 nbl_sample_Ka(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(nbl_glsl_getMaterialParameters().map_Ka_data, uv, dUV); }
213+
vec4 nbl_sample_Ka(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawID+pc.dataBufferOffset].map_Ka_data, uv, dUV); }
204214
205-
vec4 nbl_sample_Kd(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(nbl_glsl_getMaterialParameters().map_Kd_data, uv, dUV); }
215+
vec4 nbl_sample_Kd(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawID+pc.dataBufferOffset].map_Kd_data, uv, dUV); }
206216
207-
vec4 nbl_sample_Ks(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(nbl_glsl_getMaterialParameters().map_Ks_data, uv, dUV); }
217+
vec4 nbl_sample_Ks(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawID+pc.dataBufferOffset].map_Ks_data, uv, dUV); }
208218
209-
vec4 nbl_sample_Ns(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(nbl_glsl_getMaterialParameters().map_Ns_data, uv, dUV); }
219+
vec4 nbl_sample_Ns(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawID+pc.dataBufferOffset].map_Ns_data, uv, dUV); }
210220
211-
vec4 nbl_sample_d(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(nbl_glsl_getMaterialParameters().map_d_data, uv, dUV); }
221+
vec4 nbl_sample_d(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawID+pc.dataBufferOffset].map_d_data, uv, dUV); }
212222
213-
vec4 nbl_sample_bump(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(nbl_glsl_getMaterialParameters().map_bump_data, uv, dUV); }
223+
vec4 nbl_sample_bump(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawID+pc.dataBufferOffset].map_bump_data, uv, dUV); }
214224
#endif
215225
#define _NBL_TEXTURE_SAMPLE_FUNCTIONS_DEFINED_
216226
)";
@@ -655,7 +665,7 @@ void createPipeline(IVideoDriver* driver, ICPUSpecializedShader* vs, ICPUSpecial
655665
b2[1].stageFlags = asset::ISpecializedShader::ESS_FRAGMENT;
656666
b2[1].type = asset::EDT_STORAGE_BUFFER;
657667

658-
ds2Layout = driver->createGPUDescriptorSetLayout(b2, b2 + 1);
668+
ds2Layout = driver->createGPUDescriptorSetLayout(b2, b2 + 2);
659669
}
660670

661671
SPushConstantRange pcRange;
@@ -761,10 +771,12 @@ void createPipeline(IVideoDriver* driver, ICPUSpecializedShader* vs, ICPUSpecial
761771

762772
info2[1].buffer.offset = 0u;
763773
info2[1].buffer.size = drawData.vtDataSSBO->getSize();
764-
info2[1].desc = drawData.vtDataSSBO;
774+
info2[1].desc = drawData.vtDataSSBO; // TODO: rename vtData to materialData
765775

766776
w2[0].info = &info2[0];
767777
w2[1].info = &info2[1];
778+
779+
driver->updateDescriptorSets(2u,w2,0u,nullptr);
768780
}
769781

770782
IGPUSpecializedShader* shaders[2] = { gpuShaders->operator[](0).get(), gpuShaders->operator[](1).get() };

include/nbl/builtin/shader/loader/mtl/fragment_impl.glsl

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,20 @@ layout (location = 0) out vec4 OutColor;
2828

2929
#include <nbl/builtin/glsl/bxdf/common.glsl> // change to bxdf/common.glsl
3030

31-
#ifndef _NBL_FRAG_MATERIAL_PARAMETERS_STRUCT_DEFINED_
32-
#define _NBL_FRAG_MATERIAL_PARAMETERS_STRUCT_DEFINED_
33-
3431
#include <nbl/builtin/glsl/loader/mtl/common.glsl>
35-
#define nbl_glsl_MaterialParametersStruct nbl_glsl_MTLMaterialParameters
36-
#endif //_NBL_FRAG_MATERIAL_PARAMETERS_STRUCT_DEFINED_
3732

3833
#ifndef _NBL_FRAG_PUSH_CONSTANTS_DEFINED_
3934
#define _NBL_FRAG_PUSH_CONSTANTS_DEFINED_
4035

4136
layout (push_constant) uniform Block {
42-
nbl_glsl_MaterialParametersStruct params;
37+
nbl_glsl_MTLMaterialParameters params;
4338
} PC;
4439
#endif //_NBL_FRAG_PUSH_CONSTANTS_DEFINED_
4540

4641
#ifndef _NBL_FRAG_GET_MATERIAL_PARAMETERS_FUNCTION_DEFINED_
4742
#define _NBL_FRAG_GET_MATERIAL_PARAMETERS_FUNCTION_DEFINED_
4843

49-
nbl_glsl_MaterialParametersStruct nbl_glsl_getMaterialParameters()
44+
nbl_glsl_MTLMaterialParameters nbl_glsl_getMaterialParameters()
5045
{
5146
return PC.params;
5247
}
@@ -99,7 +94,7 @@ vec4 nbl_sample_bump(in vec2 uv, in mat2 dUV) { return texture(map_bump, uv); }
9994
// params can be either BSDFIsotropicParams or BSDFAnisotropicParams
10095
Spectrum nbl_bsdf_cos_eval(in nbl_glsl_LightSample _sample, in nbl_glsl_IsotropicViewSurfaceInteraction inter, in mat2 dUV)
10196
{
102-
nbl_glsl_MaterialParametersStruct mtParams = nbl_glsl_getMaterialParameters();
97+
nbl_glsl_MTLMaterialParameters mtParams = nbl_glsl_getMaterialParameters();
10398

10499
vec3 Kd;
105100
#ifndef _NO_UV
@@ -176,7 +171,7 @@ Spectrum nbl_bsdf_cos_eval(in nbl_glsl_LightSample _sample, in nbl_glsl_Isotropi
176171
vec3 nbl_computeLighting(out nbl_glsl_IsotropicViewSurfaceInteraction out_interaction, in mat2 dUV)
177172
{
178173
nbl_glsl_IsotropicViewSurfaceInteraction interaction = nbl_glsl_calcSurfaceInteraction(vec3(0.0), ViewPos, Normal, mat2x3(dFdx(ViewPos),dFdy(ViewPos)));
179-
nbl_glsl_MaterialParametersStruct mtParams = nbl_glsl_getMaterialParameters();
174+
nbl_glsl_MTLMaterialParameters mtParams = nbl_glsl_getMaterialParameters();
180175

181176
#ifndef _NO_UV
182177
if ((mtParams.extra&map_bump_MASK) == map_bump_MASK)
@@ -239,7 +234,7 @@ void main()
239234
#else
240235
mat2 dUV = mat2(vec2(0,0),vec2(0,0));
241236
#endif
242-
nbl_glsl_MaterialParametersStruct mtParams = nbl_glsl_getMaterialParameters();
237+
nbl_glsl_MTLMaterialParameters mtParams = nbl_glsl_getMaterialParameters();
243238
nbl_glsl_IsotropicViewSurfaceInteraction interaction;
244239
vec3 color = nbl_computeLighting(interaction, dUV);
245240

0 commit comments

Comments
 (0)