diff --git a/projects/rocr-runtime/runtime/hsa-runtime/loader/AMDHSAKernelDescriptor.h b/projects/rocr-runtime/runtime/hsa-runtime/loader/AMDHSAKernelDescriptor.h index 4f64d2482c..b1fe4d4298 100644 --- a/projects/rocr-runtime/runtime/hsa-runtime/loader/AMDHSAKernelDescriptor.h +++ b/projects/rocr-runtime/runtime/hsa-runtime/loader/AMDHSAKernelDescriptor.h @@ -167,7 +167,8 @@ enum : int32_t { struct kernel_descriptor_t { uint32_t group_segment_fixed_size; uint32_t private_segment_fixed_size; - uint8_t reserved0[8]; + uint32_t kernarg_size; + uint8_t reserved0[4]; int64_t kernel_code_entry_byte_offset; uint8_t reserved1[24]; uint32_t compute_pgm_rsrc1; @@ -185,8 +186,11 @@ static_assert( static_assert( offsetof(kernel_descriptor_t, private_segment_fixed_size) == 4, "invalid offset for private_segment_fixed_size"); +static_assert( + offsetof(kernel_descriptor_t, kernarg_size) == 8, + "invalid offset for kernarg_size"); static_assert( - offsetof(kernel_descriptor_t, reserved0) == 8, + offsetof(kernel_descriptor_t, reserved0) == 12, "invalid offset for reserved0"); static_assert( offsetof(kernel_descriptor_t, kernel_code_entry_byte_offset) == 16, diff --git a/projects/rocr-runtime/runtime/hsa-runtime/loader/executable.cpp b/projects/rocr-runtime/runtime/hsa-runtime/loader/executable.cpp index 0d982e7a5a..d53a098505 100644 --- a/projects/rocr-runtime/runtime/hsa-runtime/loader/executable.cpp +++ b/projects/rocr-runtime/runtime/hsa-runtime/loader/executable.cpp @@ -1422,8 +1422,8 @@ hsa_status_t ExecutableImpl::LoadDefinitionSymbol(hsa_agent_t agent, llvm::amdhsa::kernel_descriptor_t kd; sym->GetSection()->getData(sym->SectionOffset(), &kd, sizeof(kd)); - uint32_t kernarg_segment_size = 0; // FIXME. - uint32_t kernarg_segment_alignment = 0; // FIXME. + uint32_t kernarg_segment_size = kd.kernarg_size; // FIXME: If 0 then the compiler is not specifying the size. + uint32_t kernarg_segment_alignment = 16; // FIXME: Use the minumum HSA required alignment. uint32_t group_segment_size = kd.group_segment_fixed_size; uint32_t private_segment_size = kd.private_segment_fixed_size; bool is_dynamic_callstack = false;