On Thu, Jul 3, 2014 at 9:56 AM, Tom Stellard <t...@stellard.net> wrote: > On Wed, Jul 02, 2014 at 04:34:24PM -0500, Aaron Watry wrote: >> Previously, we were assuming that kernel metadata nodes only had 1 operand. >> >> Kernels which have attributes can have more than 1, e.g.: >> !0 = metadata !{void (i32 addrspace(1)*)* @testKernel, metadata !1} >> !1 = metadata !{metadata !"work_group_size_hint", i32 4, i32 1, i32 1} >> >> Attempting to get the kernel without the correct number of attributes led >> to memory corruption and luxrays crashing out. >> >> Fixes the cl/program/execute/attributes.cl piglit test. >> > > Thanks for tracking this down. >
no problem. It was driving me nuts. I've now got the luxmark kernels building successfully on evergreen (followed by a machine hang and loss of signal to the monitor, but that could be the kernel or the fact that CEDAR seems extra crashy compared to my other EG/NI cards) and I'm getting an instruction selection error on radeonsi. Haven't managed to track that down yet, but at least it means that all required built-ins/defines for luxrays are now present (at least with my own libclc tree), at least with image support disabled in luxrays. If you enable image support, I believe that it is still going to fail due to mismatches/oddness with the number of supported pixel formats. --Aaron > Reviewed-by: Tom Stellard <thomas.stell...@amd.com> > >> Signed-off-by: Aaron Watry <awa...@gmail.com> >> CC: Tom Stellard <thomas.stell...@amd.com> >> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76223 >> --- >> src/gallium/drivers/radeon/radeon_llvm_util.c | 10 +++++++--- >> 1 file changed, 7 insertions(+), 3 deletions(-) >> >> diff --git a/src/gallium/drivers/radeon/radeon_llvm_util.c >> b/src/gallium/drivers/radeon/radeon_llvm_util.c >> index 2ace91f..ec11559 100644 >> --- a/src/gallium/drivers/radeon/radeon_llvm_util.c >> +++ b/src/gallium/drivers/radeon/radeon_llvm_util.c >> @@ -100,13 +100,17 @@ LLVMModuleRef >> radeon_llvm_get_kernel_module(LLVMContextRef ctx, unsigned index, >> kernel_metadata = MALLOC(num_kernels * sizeof(LLVMValueRef)); >> LLVMGetNamedMetadataOperands(mod, "opencl.kernels", kernel_metadata); >> for (i = 0; i < num_kernels; i++) { >> - LLVMValueRef kernel_signature, kernel_function; >> + LLVMValueRef kernel_signature, *kernel_function; >> + unsigned num_kernel_md_operands; >> if (i == index) { >> continue; >> } >> kernel_signature = kernel_metadata[i]; >> - LLVMGetMDNodeOperands(kernel_signature, &kernel_function); >> - LLVMDeleteFunction(kernel_function); >> + num_kernel_md_operands = >> LLVMGetMDNodeNumOperands(kernel_signature); >> + kernel_function = MALLOC(num_kernel_md_operands * sizeof >> (LLVMValueRef)); >> + LLVMGetMDNodeOperands(kernel_signature, kernel_function); >> + LLVMDeleteFunction(*kernel_function); >> + FREE(kernel_function); >> } >> FREE(kernel_metadata); >> radeon_llvm_optimize(mod); >> -- >> 1.9.1 >> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev