@@ -138,7 +138,7 @@ layout(location = 4) flat in uint drawID;
138
138
#endif
139
139
#define _NBL_FRAG_SET3_BINDINGS_DEFINED_
140
140
141
- struct VTData
141
+ struct MaterialParams
142
142
{
143
143
vec3 Ka;
144
144
vec3 Kd;
@@ -155,23 +155,33 @@ struct VTData
155
155
float Ni;
156
156
uint extra; //flags copied from MTL metadata
157
157
};
158
- #define _NBL_FRAG_MATERIAL_PARAMETERS_STRUCT_DEFINED_
159
- #define nbl_glsl_MaterialParametersStruct VTData
160
158
161
- layout(set = 2, binding = 1, std430) readonly buffer VTDataBuffer
159
+ layout(set = 2, binding = 1, std430) readonly buffer MaterialBuffer
162
160
{
163
- VTData vtData [];
164
- } vtDataBuffer ;
161
+ MaterialParams materialData [];
162
+ };
165
163
166
164
layout (push_constant) uniform Block
167
165
{
168
166
uint dataBufferOffset;
169
167
} pc;
170
168
#define _NBL_FRAG_PUSH_CONSTANTS_DEFINED_
171
169
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
173
172
{
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;
175
185
}
176
186
#define _NBL_FRAG_GET_MATERIAL_PARAMETERS_FUNCTION_DEFINED_
177
187
@@ -200,17 +210,17 @@ VTData nbl_glsl_getMaterialParameters()
200
210
201
211
202
212
#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); }
204
214
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); }
206
216
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); }
208
218
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); }
210
220
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); }
212
222
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); }
214
224
#endif
215
225
#define _NBL_TEXTURE_SAMPLE_FUNCTIONS_DEFINED_
216
226
)" ;
@@ -655,7 +665,7 @@ void createPipeline(IVideoDriver* driver, ICPUSpecializedShader* vs, ICPUSpecial
655
665
b2[1 ].stageFlags = asset::ISpecializedShader::ESS_FRAGMENT;
656
666
b2[1 ].type = asset::EDT_STORAGE_BUFFER;
657
667
658
- ds2Layout = driver->createGPUDescriptorSetLayout (b2, b2 + 1 );
668
+ ds2Layout = driver->createGPUDescriptorSetLayout (b2, b2 + 2 );
659
669
}
660
670
661
671
SPushConstantRange pcRange;
@@ -761,10 +771,12 @@ void createPipeline(IVideoDriver* driver, ICPUSpecializedShader* vs, ICPUSpecial
761
771
762
772
info2[1 ].buffer .offset = 0u ;
763
773
info2[1 ].buffer .size = drawData.vtDataSSBO ->getSize ();
764
- info2[1 ].desc = drawData.vtDataSSBO ;
774
+ info2[1 ].desc = drawData.vtDataSSBO ; // TODO: rename vtData to materialData
765
775
766
776
w2[0 ].info = &info2[0 ];
767
777
w2[1 ].info = &info2[1 ];
778
+
779
+ driver->updateDescriptorSets (2u ,w2,0u ,nullptr );
768
780
}
769
781
770
782
IGPUSpecializedShader* shaders[2 ] = { gpuShaders->operator [](0 ).get (), gpuShaders->operator [](1 ).get () };
0 commit comments