dont define empty attr arrays

This commit is contained in:
Frodo Baggins 2024-11-24 16:30:01 -08:00
parent 8ab3da6b68
commit 0c58c681c7

View File

@ -409,11 +409,13 @@ void EmitContext::DefineInputs() {
} }
#else #else
const u32 num_attrs = runtime_info.hs_info.ls_stride >> 4; const u32 num_attrs = runtime_info.hs_info.ls_stride >> 4;
const Id per_vertex_type{TypeArray(F32[4], ConstU32(num_attrs))}; if (num_attrs > 0) {
// The input vertex count isn't statically known, so make length 32 (what glslang does) const Id per_vertex_type{TypeArray(F32[4], ConstU32(num_attrs))};
const Id patch_array_type{TypeArray(per_vertex_type, ConstU32(32u))}; // The input vertex count isn't statically known, so make length 32 (what glslang does)
input_attr_array = DefineInput(patch_array_type, 0); const Id patch_array_type{TypeArray(per_vertex_type, ConstU32(32u))};
Name(input_attr_array, "in_attrs"); input_attr_array = DefineInput(patch_array_type, 0);
Name(input_attr_array, "in_attrs");
}
#endif #endif
break; break;
} }
@ -436,11 +438,13 @@ void EmitContext::DefineInputs() {
} }
#else #else
const u32 num_attrs = runtime_info.vs_info.hs_output_cp_stride >> 4; const u32 num_attrs = runtime_info.vs_info.hs_output_cp_stride >> 4;
const Id per_vertex_type{TypeArray(F32[4], ConstU32(num_attrs))}; if (num_attrs > 0) {
// The input vertex count isn't statically known, so make length 32 (what glslang does) const Id per_vertex_type{TypeArray(F32[4], ConstU32(num_attrs))};
const Id patch_array_type{TypeArray(per_vertex_type, ConstU32(32u))}; // The input vertex count isn't statically known, so make length 32 (what glslang does)
input_attr_array = DefineInput(patch_array_type, 0); const Id patch_array_type{TypeArray(per_vertex_type, ConstU32(32u))};
Name(input_attr_array, "in_attrs"); input_attr_array = DefineInput(patch_array_type, 0);
Name(input_attr_array, "in_attrs");
}
#endif #endif
u32 patch_base_location = runtime_info.vs_info.hs_output_cp_stride >> 4; u32 patch_base_location = runtime_info.vs_info.hs_output_cp_stride >> 4;
@ -479,9 +483,11 @@ void EmitContext::DefineOutputs() {
} }
if (stage == Shader::Stage::Local && runtime_info.ls_info.links_with_tcs) { if (stage == Shader::Stage::Local && runtime_info.ls_info.links_with_tcs) {
const u32 num_attrs = runtime_info.ls_info.ls_stride >> 4; const u32 num_attrs = runtime_info.ls_info.ls_stride >> 4;
const Id type{TypeArray(F32[4], ConstU32(num_attrs))}; if (num_attrs > 0) {
output_attr_array = DefineOutput(type, 0); const Id type{TypeArray(F32[4], ConstU32(num_attrs))};
Name(output_attr_array, "out_attrs"); output_attr_array = DefineOutput(type, 0);
Name(output_attr_array, "out_attrs");
}
} else { } else {
for (u32 i = 0; i < IR::NumParams; i++) { for (u32 i = 0; i < IR::NumParams; i++) {
const IR::Attribute param{IR::Attribute::Param0 + i}; const IR::Attribute param{IR::Attribute::Param0 + i};
@ -525,13 +531,15 @@ void EmitContext::DefineOutputs() {
output_params[i] = {id, output_f32, F32[1], 4}; output_params[i] = {id, output_f32, F32[1], 4};
} }
#else #else
const u32 num_attrs = runtime_info.hs_info.hs_cp_stride >> 4; const u32 num_attrs = runtime_info.hs_info.hs_output_cp_stride >> 4;
const Id per_vertex_type{TypeArray(F32[4], ConstU32(num_attrs))}; if (num_attrs > 0) {
// The input vertex count isn't statically known, so make length 32 (what glslang does) const Id per_vertex_type{TypeArray(F32[4], ConstU32(num_attrs))};
const Id patch_array_type{ // The input vertex count isn't statically known, so make length 32 (what glslang does)
TypeArray(per_vertex_type, ConstU32(runtime_info.hs_info.output_control_points))}; const Id patch_array_type{
output_attr_array = DefineOutput(patch_array_type, 0); TypeArray(per_vertex_type, ConstU32(runtime_info.hs_info.output_control_points))};
Name(output_attr_array, "out_attrs"); output_attr_array = DefineOutput(patch_array_type, 0);
Name(output_attr_array, "out_attrs");
}
#endif #endif
u32 patch_base_location = runtime_info.hs_info.hs_output_cp_stride >> 4; u32 patch_base_location = runtime_info.hs_info.hs_output_cp_stride >> 4;