Mesa (master): clover: Don' t try to build programs created from a binary again.
Francisco Jerez
currojerez at kemper.freedesktop.org
Wed Jan 15 15:52:51 UTC 2014
Module: Mesa
Branch: master
Commit: 5662602ba050a43a01c1e06bdfeea83ec792852e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5662602ba050a43a01c1e06bdfeea83ec792852e
Author: Francisco Jerez <currojerez at riseup.net>
Date: Tue Jan 14 21:55:29 2014 +0100
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 at lmco.com>
---
src/gallium/state_trackers/clover/core/program.cpp | 40 ++++++++++----------
src/gallium/state_trackers/clover/core/program.hpp | 1 +
2 files changed, 22 insertions(+), 19 deletions(-)
diff --git a/src/gallium/state_trackers/clover/core/program.cpp b/src/gallium/state_trackers/clover/core/program.cpp
index 6d4a9ba..fb7e8d1 100644
--- a/src/gallium/state_trackers/clover/core/program.cpp
+++ b/src/gallium/state_trackers/clover/core/program.cpp
@@ -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);
-
- _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 });
-
- } catch (build_error &e) {
- _logs.insert({ &dev, e.what() });
- throw;
+ if (has_source) {
+ for (auto &dev : devs) {
+ _binaries.erase(&dev);
+ _logs.erase(&dev);
+ _opts.erase(&dev);
+
+ _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 });
+
+ } catch (build_error &e) {
+ _logs.insert({ &dev, e.what() });
+ throw;
+ }
}
}
}
diff --git a/src/gallium/state_trackers/clover/core/program.hpp b/src/gallium/state_trackers/clover/core/program.hpp
index 25ec239..d36982c 100644
--- a/src/gallium/state_trackers/clover/core/program.hpp
+++ b/src/gallium/state_trackers/clover/core/program.hpp
@@ -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;
More information about the mesa-commit
mailing list