[Mesa-dev] [PATCH 12/13] clover: Add function for building a clover::module for non-TGSI targets v5

Francisco Jerez currojerez at riseup.net
Mon May 28 13:52:35 PDT 2012


Tom Stellard <thomas.stellard at amd.com> writes:

> On Mon, May 28, 2012 at 10:03:27PM +0200, Francisco Jerez wrote:
>> Tom Stellard <tstellar at gmail.com> writes:
>> 
>> > v2:
>> >   -Separate IR type and LLVM triple
>> >   -Do the OpenCL C->LLVM IR and linking steps for all PIPE_SHADER_IR
>> >    types.
>> >
>> > v3:
>> >   - Coding style fixes
>> >   - Removed compatibility code for LLVM < 3.1
>> >   - Split build_module_llvm() into three functions:
>> >     compile(), link(), and build_module_llvm()
>> >
>> > v4:
>> >   - Use struct pipe_compute_program
>> >
>> > v5:
>> >   - Don't malloc memory for struct pipe_llvm_program
>> > ---
>> >  .../state_trackers/clover/core/compiler.hpp        |    2 +
>> >  src/gallium/state_trackers/clover/core/program.cpp |    9 +-
>> >  .../state_trackers/clover/llvm/invocation.cpp      |  165 ++++++++++++++++++--
>> >  3 files changed, 162 insertions(+), 14 deletions(-)
>[...]
>> > diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp
>> > index 89e21bf..30bad7c 100644
>> > --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
>> > +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
>> >[...]
>> > +      program.num_bytes = llvm_bitcode.size();
>> > +      std::string data;
>> > +      data.insert(0, (char*)(&program.num_bytes), 4);
>> 
>> What's the point of defining the header layout using a struct if you're
>> pushing the header fields by hand into the object file?
>>
>
> I was trying to follow the suggestion you gave in the last email as
> close as possible:
>
>> It should be as simple as:
>>
>>|        header.num_bytes = llvm_bitcode.size();
>>|        sec.data.insert(sec.data.end(), (char *)header,
>>|                        (char *)header + sizeof(header));
>>|        sec.data.insert(sec.data.end(), llvm_bitcode.begin(),
>>|                        llvm_bitcode.end());
>
> However, I realized that if you serialize it this way, you end up
> serializing garbage for the second member of struct pipe_llvm_program,
> which is a char*.  This also defeats the purpose of having a struct.
>
I don't think it makes much sense to include that pointer in the struct,
if the only purpose is to represent an LLVM program header.

> I've gone back and forth on this part several times, and I'm still not
> sure what the correct solution is.  Do you have any other suggestions?
>
> -Tom
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 229 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20120528/2d7552d3/attachment.pgp>


More information about the mesa-dev mailing list