mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-27 00:20:30 +01:00
clover: Don't try to build programs created from a binary again.
According to the spec it's allowed to call clBuildProgram() on a program created from a user-specified binary. We don't need to do anything to build the program in that case. Reported-and-tested-by: "Dorrington, Albert" <albert.dorrington@lmco.com>
This commit is contained in:
parent
5195f1d9c6
commit
5662602ba0
2 changed files with 19 additions and 16 deletions
|
|
@ -26,13 +26,13 @@
|
|||
using namespace clover;
|
||||
|
||||
program::program(context &ctx, const std::string &source) :
|
||||
ctx(ctx), _source(source) {
|
||||
has_source(true), ctx(ctx), _source(source) {
|
||||
}
|
||||
|
||||
program::program(context &ctx,
|
||||
const ref_vector<device> &devs,
|
||||
const std::vector<module> &binaries) :
|
||||
ctx(ctx) {
|
||||
has_source(false), ctx(ctx) {
|
||||
for_each([&](device &dev, const module &bin) {
|
||||
_binaries.insert({ &dev, bin });
|
||||
},
|
||||
|
|
@ -41,23 +41,25 @@ program::program(context &ctx,
|
|||
|
||||
void
|
||||
program::build(const ref_vector<device> &devs, const char *opts) {
|
||||
for (auto &dev : devs) {
|
||||
_binaries.erase(&dev);
|
||||
_logs.erase(&dev);
|
||||
_opts.erase(&dev);
|
||||
if (has_source) {
|
||||
for (auto &dev : devs) {
|
||||
_binaries.erase(&dev);
|
||||
_logs.erase(&dev);
|
||||
_opts.erase(&dev);
|
||||
|
||||
_opts.insert({ &dev, opts });
|
||||
_opts.insert({ &dev, opts });
|
||||
|
||||
try {
|
||||
auto module = (dev.ir_format() == PIPE_SHADER_IR_TGSI ?
|
||||
compile_program_tgsi(_source) :
|
||||
compile_program_llvm(_source, dev.ir_format(),
|
||||
dev.ir_target(), build_opts(dev)));
|
||||
_binaries.insert({ &dev, module });
|
||||
try {
|
||||
auto module = (dev.ir_format() == PIPE_SHADER_IR_TGSI ?
|
||||
compile_program_tgsi(_source) :
|
||||
compile_program_llvm(_source, dev.ir_format(),
|
||||
dev.ir_target(), build_opts(dev)));
|
||||
_binaries.insert({ &dev, module });
|
||||
|
||||
} catch (build_error &e) {
|
||||
_logs.insert({ &dev, e.what() });
|
||||
throw;
|
||||
} catch (build_error &e) {
|
||||
_logs.insert({ &dev, e.what() });
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ namespace clover {
|
|||
|
||||
void build(const ref_vector<device> &devs, const char *opts);
|
||||
|
||||
const bool has_source;
|
||||
const std::string &source() const;
|
||||
|
||||
device_range devices() const;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue