[Mesa-dev] [PATCH 1/3] clover: separate compile and link stages

Francisco Jerez currojerez at riseup.net
Sun Jul 5 12:12:07 PDT 2015


EdB <edb+mesa at sigluy.net> writes:

> On Sunday 05 July 2015 18:15:33 Francisco Jerez wrote:
>>[...]
>> > --- a/src/gallium/state_trackers/clover/core/error.hpp
>> > +++ b/src/gallium/state_trackers/clover/core/error.hpp
>> > @@ -68,10 +68,31 @@ namespace clover {
>> > 
>> >     class build_error : public error {
>> >     
>> >     public:
>> >        build_error(const std::string &what = "") :
>> > +         error(CL_BUILD_PROGRAM_FAILURE, what) {
>> > +      }
>> > +   };
>> > +
>> 
>> This exception class now seems redundant -- With program::build() gone
>> build is no longer a thing.
>
> It's still needed by tgsi.
> I plan to rework this part later to make it consistent with the way it's 
> handle in llvm/invocation but first off I wanted to be done with clLink :/
>
The tgsi path could also throw compile_error AFAICT?

>> 
>> > +   class compile_error : public error {
>> > +   public:
>> > 
>> > +      compile_error(const std::string &what = "") :
>> >           error(CL_COMPILE_PROGRAM_FAILURE, what) {
>> >        
>> >        }
>> >     
>> >     };
>> > 
>> > +   class link_error : public error {
>> > +   public:
>> > +      link_error(const std::string &what = "") :
>> > +         error(CL_LINK_PROGRAM_FAILURE, what) {
>> > +      }
>> > +   };
>> > +
>> > +   class link_option_error : public error {
>> > +   public:
>> > +      link_option_error(const std::string &what = "") :
>> > +         error(CL_INVALID_LINKER_OPTIONS , what) {
>> > +      }
>> > +   };
>> > +
>> 
>> I don't think you really need to special-case link_option_error against
>> the less specific clover::error class?
>
> clLinkProgram should not create a program if it failed to parse the given 
> options, I will use this class to handle this case. Other case should create 
> the said program.
> That said, it could also have been created in later patch.
>

Ah, fair enough.

>> 
>> >     template<typename O>
>> >     class invalid_object_error;
>> > 
>> > diff --git a/src/gallium/state_trackers/clover/core/program.cpp
>> > b/src/gallium/state_trackers/clover/core/program.cpp index
>> > 0d6cc40..21faf4e 100644
>> > --- a/src/gallium/state_trackers/clover/core/program.cpp
>> > +++ b/src/gallium/state_trackers/clover/core/program.cpp
>>[...]
>> 
>> > +      std::string log;
>> > +
>> > +      try {
>> > +         auto module = link_program_llvm(mods,
>> > +                                         dev.ir_format(),
>> > dev.ir_target(),
>> > +                                         opts, log);
>> > +         _binaries.insert({ &dev, module });
>> > +         append_to_log(&dev, log);
>> > +      } catch (const link_option_error &) {
>> > +         append_to_log(&dev, log);
>> > +         throw;
>> > +      } catch (const error &) {
>> > +         append_to_log(&dev, log);
>> > +         r = false;
>> 
>> I suggest you just catch "const error &", update the error log and
>> rethrow here, so you save a catch block and an error subclass.
>
> As explain clLinkProgram doesn't behave the same way regarding error during 
> option parsing and after.
>
Still I doubt that you need to handle them separately here, just update
the log and rethrow whatever you got, clLinkProgram can still give
link_error special treatment and return the created program despite the
failure for the application to be able to read back the error log.

>[...]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150705/b057e248/attachment.sig>


More information about the mesa-dev mailing list