@@ -12,8 +12,8 @@ using Sirit::Id;
1212constexpr u32 SPIRV_VERSION_1_5 = 0x00010500 ;
1313
1414struct QuadRectListEmitter : public Sirit ::Module {
15- explicit QuadRectListEmitter (const FragmentRuntimeInfo& fs_info_)
16- : Sirit::Module{SPIRV_VERSION_1_5}, fs_info{fs_info_} {
15+ explicit QuadRectListEmitter (const VertexRuntimeInfo& vs_info_, const FragmentRuntimeInfo& fs_info_)
16+ : Sirit::Module{SPIRV_VERSION_1_5}, vs_info{vs_info_}, fs_info{fs_info_} {
1717 void_id = TypeVoid ();
1818 bool_id = TypeBool ();
1919 float_id = TypeFloat (32 );
@@ -252,8 +252,9 @@ struct QuadRectListEmitter : public Sirit::Module {
252252 } else {
253253 gl_per_vertex = AddOutput (gl_per_vertex_type);
254254 }
255- outputs.reserve (fs_info.num_inputs );
256- for (int i = 0 ; i < fs_info.num_inputs ; i++) {
255+ const auto num_forwards = std::min (vs_info.num_exports , fs_info.num_inputs );
256+ outputs.reserve (num_forwards);
257+ for (int i = 0 ; i < num_forwards; i++) {
257258 const auto & input = fs_info.inputs [i];
258259 if (input.IsDefault ()) {
259260 continue ;
@@ -276,8 +277,10 @@ struct QuadRectListEmitter : public Sirit::Module {
276277 const Id gl_per_vertex_array{TypeArray (gl_per_vertex_type, Constant (uint_id, 32U ))};
277278 gl_in = AddInput (gl_per_vertex_array);
278279 const Id float_arr{TypeArray (vec4_id, Int (32 ))};
279- inputs.reserve (fs_info.num_inputs );
280- for (int i = 0 ; i < fs_info.num_inputs ; i++) {
280+
281+ const auto num_forwards = std::min (vs_info.num_exports , fs_info.num_inputs );
282+ inputs.reserve (num_forwards);
283+ for (int i = 0 ; i < num_forwards; i++) {
281284 const auto & input = fs_info.inputs [i];
282285 if (input.IsDefault ()) {
283286 continue ;
@@ -288,6 +291,7 @@ struct QuadRectListEmitter : public Sirit::Module {
288291 }
289292
290293private:
294+ VertexRuntimeInfo vs_info;
291295 FragmentRuntimeInfo fs_info;
292296 Id main;
293297 Id void_id;
@@ -319,8 +323,10 @@ struct QuadRectListEmitter : public Sirit::Module {
319323 std::vector<Id> interfaces;
320324};
321325
322- std::vector<u32 > EmitAuxilaryTessShader (AuxShaderType type, const FragmentRuntimeInfo& fs_info) {
323- QuadRectListEmitter ctx{fs_info};
326+ std::vector<u32 > EmitAuxilaryTessShader (AuxShaderType type,
327+ const VertexRuntimeInfo& vs_info,
328+ const FragmentRuntimeInfo& fs_info) {
329+ QuadRectListEmitter ctx{vs_info, fs_info};
324330 switch (type) {
325331 case AuxShaderType::RectListTCS:
326332 ctx.EmitRectListTCS ();
0 commit comments