Tom Stellard <thomas.stell...@amd.com> writes:

> On Mon, May 28, 2012 at 10:03:27PM +0200, Francisco Jerez wrote:
>> Tom Stellard <tstel...@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
>

Attachment: pgplQr2ltSGjj.pgp
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to