Ref: split Job internal attribut in proper context class
This commit is contained in:
@@ -324,7 +324,7 @@ import okhttp3.HttpUrl;
|
|||||||
continue; // go back to ask job
|
continue; // go back to ask job
|
||||||
}
|
}
|
||||||
|
|
||||||
this.log.debug("Got work to do id: " + this.renderingJob.getId() + " frame: " + this.renderingJob.getFrameNumber());
|
this.log.debug("Got work to do id: " + this.renderingJob.getId() + " frame: " + this.renderingJob.getRenderSettings().getFrameNumber());
|
||||||
|
|
||||||
// As the server allocated a new job to this client, reset the no_job waiting algorithm
|
// As the server allocated a new job to this client, reset the no_job waiting algorithm
|
||||||
this.noJobRetryIter = 0;
|
this.noJobRetryIter = 0;
|
||||||
@@ -359,7 +359,7 @@ import okhttp3.HttpUrl;
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.renderingJob.isSynchronousUpload()) { // power or compute_method job, need to upload right away
|
if (this.renderingJob.isSynchronousUpload()) { // power or compute_method job, need to upload right away
|
||||||
this.gui.status(String.format("Uploading frame (%.2fMB)", (this.renderingJob.getOutputImageSize() / 1024.0 / 1024.0)));
|
this.gui.status(String.format("Uploading frame (%.2fMB)", (this.renderingJob.getRenderOutput().getFullImageSize() / 1024.0 / 1024.0)));
|
||||||
|
|
||||||
ret = confirmJob(this.renderingJob, step);
|
ret = confirmJob(this.renderingJob, step);
|
||||||
if (ret != Error.Type.OK) {
|
if (ret != Error.Type.OK) {
|
||||||
@@ -369,12 +369,12 @@ import okhttp3.HttpUrl;
|
|||||||
this.renderingJob = null;
|
this.renderingJob = null;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.gui.status(String.format("Queuing frame for upload (%.2fMB)", (this.renderingJob.getOutputImageSize() / 1024.0 / 1024.0)));
|
this.gui.status(String.format("Queuing frame for upload (%.2fMB)", (this.renderingJob.getRenderOutput().getFullImageSize() / 1024.0 / 1024.0)));
|
||||||
|
|
||||||
this.jobsToValidate.add(new QueuedJob(step, this.renderingJob));
|
this.jobsToValidate.add(new QueuedJob(step, this.renderingJob));
|
||||||
|
|
||||||
this.uploadQueueSize++;
|
this.uploadQueueSize++;
|
||||||
this.uploadQueueVolume += this.renderingJob.getOutputImageSize();
|
this.uploadQueueVolume += this.renderingJob.getRenderOutput().getFullImageSize();
|
||||||
this.gui.displayUploadQueueStats(uploadQueueSize, uploadQueueVolume);
|
this.gui.displayUploadQueueStats(uploadQueueSize, uploadQueueVolume);
|
||||||
|
|
||||||
this.renderingJob = null;
|
this.renderingJob = null;
|
||||||
@@ -430,7 +430,7 @@ import okhttp3.HttpUrl;
|
|||||||
this.gui.status("Stopping");
|
this.gui.status("Stopping");
|
||||||
|
|
||||||
if (this.renderingJob.getProcessRender().getProcess() != null) {
|
if (this.renderingJob.getProcessRender().getProcess() != null) {
|
||||||
this.renderingJob.setAskForRendererKill(true);
|
this.renderingJob.getRenderState().setAskForRendererKill(true);
|
||||||
this.renderingJob.getProcessRender().kill();
|
this.renderingJob.getProcessRender().kill();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -568,7 +568,7 @@ import okhttp3.HttpUrl;
|
|||||||
|
|
||||||
this.uploadQueueSize--;
|
this.uploadQueueSize--;
|
||||||
if (queuedJob.job != null) {
|
if (queuedJob.job != null) {
|
||||||
this.uploadQueueVolume -= queuedJob.job.getOutputImageSize();
|
this.uploadQueueVolume -= queuedJob.job.getRenderOutput().getFullImageSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.gui.displayUploadQueueStats(this.uploadQueueSize, this.uploadQueueVolume);
|
this.gui.displayUploadQueueStats(this.uploadQueueSize, this.uploadQueueVolume);
|
||||||
@@ -610,7 +610,7 @@ import okhttp3.HttpUrl;
|
|||||||
logHeader.append("====================================================================================================\n");
|
logHeader.append("====================================================================================================\n");
|
||||||
if (jobToReset != null) {
|
if (jobToReset != null) {
|
||||||
logHeader.append(String.format("Project ::: %s\n", jobToReset.getName()))
|
logHeader.append(String.format("Project ::: %s\n", jobToReset.getName()))
|
||||||
.append(String.format("Project id: %s frame: %s\n", jobToReset.getId(), jobToReset.getFrameNumber())).append(String.format("blender ::: %s\n\n", jobToReset.getBlenderLongVersion())).append(String.format("ERROR Type :: %s\n", error));
|
.append(String.format("Project id: %s frame: %s\n", jobToReset.getId(), jobToReset.getRenderSettings().getFrameNumber())).append(String.format("blender ::: %s\n\n", jobToReset.getRenderOutput().getBlenderLongVersion())).append(String.format("ERROR Type :: %s\n", error));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
logHeader.append("Project ::: No project allocated.\n")
|
logHeader.append("Project ::: No project allocated.\n")
|
||||||
@@ -633,7 +633,7 @@ import okhttp3.HttpUrl;
|
|||||||
HttpUrl.Builder remoteURL = HttpUrl.parse(this.server.getPage("error")).newBuilder();
|
HttpUrl.Builder remoteURL = HttpUrl.parse(this.server.getPage("error")).newBuilder();
|
||||||
remoteURL.addQueryParameter("type", error == null ? "" : Integer.toString(error.getValue()));
|
remoteURL.addQueryParameter("type", error == null ? "" : Integer.toString(error.getValue()));
|
||||||
if (jobToReset != null) {
|
if (jobToReset != null) {
|
||||||
remoteURL.addQueryParameter("frame", jobToReset.getFrameNumber());
|
remoteURL.addQueryParameter("frame", jobToReset.getRenderSettings().getFrameNumber());
|
||||||
remoteURL.addQueryParameter("job", jobToReset.getId());
|
remoteURL.addQueryParameter("job", jobToReset.getId());
|
||||||
remoteURL.addQueryParameter("render_time", Integer.toString(jobToReset.getProcessRender().getRenderDuration()));
|
remoteURL.addQueryParameter("render_time", Integer.toString(jobToReset.getProcessRender().getRenderDuration()));
|
||||||
remoteURL.addQueryParameter("memoryused", Long.toString(jobToReset.getProcessRender().getPeakMemoryUsed()));
|
remoteURL.addQueryParameter("memoryused", Long.toString(jobToReset.getProcessRender().getPeakMemoryUsed()));
|
||||||
@@ -929,11 +929,11 @@ import okhttp3.HttpUrl;
|
|||||||
protected Error.Type confirmJob(Job ajob, int checkpoint) {
|
protected Error.Type confirmJob(Job ajob, int checkpoint) {
|
||||||
String urlReal = String.format(LOCALE, "%s&rendertime=%d&preptime=%d&memoryused=%s", ajob.getValidationUrl(), ajob.getProcessRender().getRenderDuration(), ajob.getProcessRender().getScenePrepDuration(),
|
String urlReal = String.format(LOCALE, "%s&rendertime=%d&preptime=%d&memoryused=%s", ajob.getValidationUrl(), ajob.getProcessRender().getRenderDuration(), ajob.getProcessRender().getScenePrepDuration(),
|
||||||
ajob.getProcessRender().getPeakMemoryUsed());
|
ajob.getProcessRender().getPeakMemoryUsed());
|
||||||
if (ajob.getSpeedSamplesRendered() > 0.0) {
|
if (ajob.getRenderOutput().getSpeedSamplesRendered() > 0.0) {
|
||||||
urlReal += String.format(LOCALE, "&speedsamples=%s", ajob.getSpeedSamplesRendered());
|
urlReal += String.format(LOCALE, "&speedsamples=%s", ajob.getRenderOutput().getSpeedSamplesRendered());
|
||||||
}
|
}
|
||||||
this.log.debug(checkpoint, "Client::confirmeJob url " + urlReal);
|
this.log.debug(checkpoint, "Client::confirmeJob url " + urlReal);
|
||||||
this.log.debug(checkpoint, "path frame " + ajob.getOutputImagePath());
|
this.log.debug(checkpoint, "path frame " + ajob.getRenderOutput().getFullImagePath());
|
||||||
|
|
||||||
this.isValidatingJob = true;
|
this.isValidatingJob = true;
|
||||||
int maxTries = 3;
|
int maxTries = 3;
|
||||||
@@ -954,7 +954,7 @@ import okhttp3.HttpUrl;
|
|||||||
timeToSleep *= 2; // exponential backoff
|
timeToSleep *= 2; // exponential backoff
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = this.server.HTTPSendFile(urlReal, ajob.getOutputImagePath(), checkpoint, this.gui);
|
ret = this.server.HTTPSendFile(urlReal, ajob.getRenderOutput().getFullImagePath(), checkpoint, this.gui);
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
case OK:
|
case OK:
|
||||||
// no issue, exit the loop
|
// no issue, exit the loop
|
||||||
@@ -1003,12 +1003,12 @@ import okhttp3.HttpUrl;
|
|||||||
}
|
}
|
||||||
|
|
||||||
// we can remove the frame file
|
// we can remove the frame file
|
||||||
Utils.deleteFile(new File(ajob.getOutputImagePath()));
|
Utils.deleteFile(new File(ajob.getRenderOutput().getFullImagePath()));
|
||||||
ajob.setOutputImagePath(null);
|
ajob.getRenderOutput().setFullImagePath(null);
|
||||||
|
|
||||||
if (ajob.getPreviewImagePath() != null) {
|
if (ajob.getRenderOutput().getPreviewImagePath() != null) {
|
||||||
Utils.deleteFile(new File(ajob.getPreviewImagePath()));
|
Utils.deleteFile(new File(ajob.getRenderOutput().getPreviewImagePath()));
|
||||||
ajob.setPreviewImagePath(null);
|
ajob.getRenderOutput().setPreviewImagePath(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
return confirmJobReturnCode;
|
return confirmJobReturnCode;
|
||||||
|
|||||||
@@ -54,38 +54,28 @@ import java.util.TimerTask;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import static com.sheepit.client.RenderSettings.UPDATE_METHOD_BY_REMAINING_TIME;
|
||||||
|
import static com.sheepit.client.RenderSettings.UPDATE_METHOD_BY_TILE;
|
||||||
|
|
||||||
@Data public class Job {
|
@Data public class Job {
|
||||||
public static final String UPDATE_METHOD_BY_REMAINING_TIME = "remainingtime";
|
|
||||||
public static final String UPDATE_METHOD_BY_TILE = "by_tile";
|
|
||||||
public static final String POST_LOAD_NOTIFICATION = "POST_LOAD_SCRIPT_loaded";
|
public static final String POST_LOAD_NOTIFICATION = "POST_LOAD_SCRIPT_loaded";
|
||||||
|
|
||||||
public static final int SHOW_BASE_ICON = -1;
|
public static final int SHOW_BASE_ICON = -1;
|
||||||
|
|
||||||
private String frameNumber;
|
|
||||||
private DownloadItem projectDownload;
|
private DownloadItem projectDownload;
|
||||||
private DownloadItem rendererDownload;
|
private DownloadItem rendererDownload;
|
||||||
private String id;
|
private String id;
|
||||||
private String outputImagePath;
|
|
||||||
|
|
||||||
private String previewImagePath;
|
|
||||||
private long outputImageSize;
|
|
||||||
private String path; // path inside of the archive
|
|
||||||
private String rendererCommand;
|
|
||||||
private String validationUrl;
|
private String validationUrl;
|
||||||
private String script;
|
|
||||||
private boolean useGPU;
|
|
||||||
private String name;
|
private String name;
|
||||||
private char[] password;
|
private char[] password;
|
||||||
private String updateRenderingStatusMethod;
|
|
||||||
private String blenderShortVersion;
|
|
||||||
private String blenderLongVersion;
|
|
||||||
private boolean synchronousUpload;
|
private boolean synchronousUpload;
|
||||||
private float speedSamplesRendered; // only used for powerdetection project
|
|
||||||
private RenderProcess render;
|
private RenderSettings renderSettings;
|
||||||
private boolean askForRendererKill;
|
private RenderProcess renderProcess;
|
||||||
private boolean userBlockJob;
|
private RenderOutput renderOutput;
|
||||||
private boolean serverBlockJob;
|
private RenderState renderState;
|
||||||
private boolean incompatibleProcessKillJob;
|
|
||||||
private Gui gui;
|
private Gui gui;
|
||||||
private Configuration configuration;
|
private Configuration configuration;
|
||||||
private Log log;
|
private Log log;
|
||||||
@@ -95,10 +85,7 @@ import java.util.regex.Pattern;
|
|||||||
String update_method_) {
|
String update_method_) {
|
||||||
configuration = config_;
|
configuration = config_;
|
||||||
id = id_;
|
id = id_;
|
||||||
frameNumber = frame_;
|
renderSettings = new RenderSettings(frame_, script_, path_, command_, use_gpu, update_method_);
|
||||||
path = path_;
|
|
||||||
useGPU = use_gpu;
|
|
||||||
rendererCommand = command_;
|
|
||||||
validationUrl = validationUrl_;
|
validationUrl = validationUrl_;
|
||||||
projectDownload = projectDownload_;
|
projectDownload = projectDownload_;
|
||||||
rendererDownload = rendererDownload_;
|
rendererDownload = rendererDownload_;
|
||||||
@@ -106,24 +93,15 @@ import java.util.regex.Pattern;
|
|||||||
password = password_.clone();
|
password = password_.clone();
|
||||||
synchronousUpload = synchronous_upload_;
|
synchronousUpload = synchronous_upload_;
|
||||||
gui = gui_;
|
gui = gui_;
|
||||||
outputImagePath = null;
|
|
||||||
outputImageSize = 0;
|
|
||||||
script = script_;
|
|
||||||
updateRenderingStatusMethod = update_method_;
|
|
||||||
askForRendererKill = false;
|
|
||||||
userBlockJob = false;
|
|
||||||
serverBlockJob = false;
|
|
||||||
incompatibleProcessKillJob = false;
|
|
||||||
log = log_;
|
log = log_;
|
||||||
render = new RenderProcess(log_);
|
renderProcess = new RenderProcess(log_);
|
||||||
blenderShortVersion = null;
|
renderState = new RenderState();
|
||||||
blenderLongVersion = null;
|
renderOutput = new RenderOutput();
|
||||||
speedSamplesRendered = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void block() {
|
public void block() {
|
||||||
setAskForRendererKill(true);
|
renderState.setBlock();
|
||||||
setUserBlockJob(true);
|
|
||||||
RenderProcess process = getProcessRender();
|
RenderProcess process = getProcessRender();
|
||||||
if (process != null) {
|
if (process != null) {
|
||||||
process.kill();
|
process.kill();
|
||||||
@@ -131,8 +109,7 @@ import java.util.regex.Pattern;
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void incompatibleProcessBlock() {
|
public void incompatibleProcessBlock() {
|
||||||
setAskForRendererKill(true);
|
renderState.setBlockIncompatibleProcess();
|
||||||
setIncompatibleProcessKillJob(true);
|
|
||||||
RenderProcess process = getProcessRender();
|
RenderProcess process = getProcessRender();
|
||||||
if (process != null) {
|
if (process != null) {
|
||||||
process.kill();
|
process.kill();
|
||||||
@@ -140,14 +117,15 @@ import java.util.regex.Pattern;
|
|||||||
}
|
}
|
||||||
|
|
||||||
public RenderProcess getProcessRender() {
|
public RenderProcess getProcessRender() {
|
||||||
return render;
|
return renderProcess;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String
|
return String
|
||||||
.format("Job (numFrame '%s' archiveChunks %s rendererMD5 '%s' ID '%s' pictureFilename '%s' jobPath '%s' gpu %s name '%s' updateRenderingStatusMethod '%s' render %s)",
|
.format("Job (numFrame '%s' archiveChunks %s rendererMD5 '%s' ID '%s' pictureFilename '%s' jobPath '%s' gpu %s name '%s' updateRenderingStatusMethod '%s' render %s)",
|
||||||
frameNumber, projectDownload.getMD5(), rendererDownload.getMD5(), id, outputImagePath, path, useGPU, name, updateRenderingStatusMethod, render);
|
getRenderSettings().getFrameNumber(), projectDownload.getMD5(), rendererDownload.getMD5(), id, getRenderOutput().getFullImagePath(),
|
||||||
|
getRenderSettings().getPath(), getRenderSettings().isUseGPU(), name, getRenderSettings().getUpdateRenderingStatusMethod(), renderProcess);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPrefixOutputImage() {
|
public String getPrefixOutputImage() {
|
||||||
@@ -167,7 +145,7 @@ import java.util.regex.Pattern;
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getScenePath() {
|
public String getScenePath() {
|
||||||
return getSceneDirectory() + File.separator + this.path;
|
return getSceneDirectory() + File.separator + getRenderSettings().getPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Error.Type render(Observer renderStarted) {
|
public Error.Type render(Observer renderStarted) {
|
||||||
@@ -179,7 +157,7 @@ import java.util.regex.Pattern;
|
|||||||
// The java program handles Ctrl+C but the renderer quits on Ctrl+C.
|
// The java program handles Ctrl+C but the renderer quits on Ctrl+C.
|
||||||
// This script causes the renderer to ignore Ctrl+C.
|
// This script causes the renderer to ignore Ctrl+C.
|
||||||
String ignore_signal_script = "import signal\n" + "def hndl(signum, frame):\n" + " pass\n" + "signal.signal(signal.SIGINT, hndl)\n";
|
String ignore_signal_script = "import signal\n" + "def hndl(signum, frame):\n" + " pass\n" + "signal.signal(signal.SIGINT, hndl)\n";
|
||||||
if (isUseGPU() && configuration.getGPUDevice() != null && configuration.getComputeMethod() != ComputeType.CPU) {
|
if (getRenderSettings().isUseGPU() && configuration.getGPUDevice() != null && configuration.getComputeMethod() != ComputeType.CPU) {
|
||||||
core_script = "sheepit_set_compute_device(\"" + configuration.getGPUDevice().getType() + "\", \"GPU\", \"" + configuration.getGPUDevice().getId()
|
core_script = "sheepit_set_compute_device(\"" + configuration.getGPUDevice().getType() + "\", \"GPU\", \"" + configuration.getGPUDevice().getId()
|
||||||
+ "\")\n";
|
+ "\")\n";
|
||||||
gui.setComputeMethod("GPU");
|
gui.setComputeMethod("GPU");
|
||||||
@@ -193,7 +171,7 @@ import java.util.regex.Pattern;
|
|||||||
core_script += ignore_signal_script;
|
core_script += ignore_signal_script;
|
||||||
File disableViewportScript = null;
|
File disableViewportScript = null;
|
||||||
File script_file = null;
|
File script_file = null;
|
||||||
String[] command1 = getRendererCommand().split(" ");
|
String[] command1 = getRenderSettings().getCommand().split(" ");
|
||||||
int size_command = command1.length + 2; // + 2 for script
|
int size_command = command1.length + 2; // + 2 for script
|
||||||
|
|
||||||
if (configuration.getNbCores() > 0) { // user has specified something
|
if (configuration.getNbCores() > 0) { // user has specified something
|
||||||
@@ -298,7 +276,7 @@ import java.util.regex.Pattern;
|
|||||||
txt = new FileWriter(file);
|
txt = new FileWriter(file);
|
||||||
|
|
||||||
PrintWriter out = new PrintWriter(txt);
|
PrintWriter out = new PrintWriter(txt);
|
||||||
out.write(getScript());
|
out.write(getRenderSettings().getScript());
|
||||||
out.write("\n");
|
out.write("\n");
|
||||||
out.write("import sys");
|
out.write("import sys");
|
||||||
out.write("\n");
|
out.write("\n");
|
||||||
@@ -335,7 +313,7 @@ import java.util.regex.Pattern;
|
|||||||
command.add(configuration.getWorkingDirectory().getAbsolutePath() + File.separator + getPrefixOutputImage());
|
command.add(configuration.getWorkingDirectory().getAbsolutePath() + File.separator + getPrefixOutputImage());
|
||||||
break;
|
break;
|
||||||
case ".f":
|
case ".f":
|
||||||
command.add(getFrameNumber());
|
command.add(getRenderSettings().getFrameNumber());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
command.add(arg);
|
command.add(arg);
|
||||||
@@ -370,7 +348,7 @@ import java.util.regex.Pattern;
|
|||||||
if (process != null) {
|
if (process != null) {
|
||||||
long duration = (new Date().getTime() - process.getStartTime()) / 1000; // in seconds
|
long duration = (new Date().getTime() - process.getStartTime()) / 1000; // in seconds
|
||||||
if (configuration.getMaxRenderTime() > 0 && duration > configuration.getMaxRenderTime()) {
|
if (configuration.getMaxRenderTime() > 0 && duration > configuration.getMaxRenderTime()) {
|
||||||
setAskForRendererKill(true);
|
getRenderState().setAskForRendererKill(true);
|
||||||
log.debug("Killing render - exceeding allowed process duration");
|
log.debug("Killing render - exceeding allowed process duration");
|
||||||
process.kill();
|
process.kill();
|
||||||
}
|
}
|
||||||
@@ -403,13 +381,13 @@ import java.util.regex.Pattern;
|
|||||||
log.debug(line);
|
log.debug(line);
|
||||||
|
|
||||||
// Process lines until the version is loaded (usually first or second line of log)
|
// Process lines until the version is loaded (usually first or second line of log)
|
||||||
if (blenderLongVersion == null) {
|
if (getRenderOutput().getBlenderLongVersion() == null) {
|
||||||
Pattern blenderPattern = Pattern.compile("Blender (([0-9]{1,3}\\.[0-9]{0,3}).*)$");
|
Pattern blenderPattern = Pattern.compile("Blender (([0-9]{1,3}\\.[0-9]{0,3}).*)$");
|
||||||
Matcher blendDetectedVersion = blenderPattern.matcher(line);
|
Matcher blendDetectedVersion = blenderPattern.matcher(line);
|
||||||
|
|
||||||
if (blendDetectedVersion.find()) {
|
if (blendDetectedVersion.find()) {
|
||||||
blenderLongVersion = blendDetectedVersion.group(1);
|
getRenderOutput().setBlenderLongVersion(blendDetectedVersion.group(1));
|
||||||
blenderShortVersion = blendDetectedVersion.group(2);
|
getRenderOutput().setBlenderShortVersion(blendDetectedVersion.group(2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -476,7 +454,7 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
updateSpeedSamplesRendered(line);
|
updateSpeedSamplesRendered(line);
|
||||||
updateRenderingStatus(line, progress);
|
updateRenderingStatus(line, progress);
|
||||||
Type error = detectError(line);
|
Type error = getRenderOutput().detectError(line);
|
||||||
if (error != Error.Type.OK) {
|
if (error != Error.Type.OK) {
|
||||||
if (script_file != null) {
|
if (script_file != null) {
|
||||||
script_file.delete();
|
script_file.delete();
|
||||||
@@ -578,7 +556,7 @@ import java.util.regex.Pattern;
|
|||||||
disableViewportScript.delete();
|
disableViewportScript.delete();
|
||||||
}
|
}
|
||||||
// find the picture file
|
// find the picture file
|
||||||
final String filename_without_extension = getPrefixOutputImage() + getFrameNumber();
|
final String filename_without_extension = getPrefixOutputImage() + getRenderSettings().getFrameNumber();
|
||||||
|
|
||||||
FilenameFilter textFilter = new FilenameFilter() {
|
FilenameFilter textFilter = new FilenameFilter() {
|
||||||
@Override public boolean accept(File dir, String name) {
|
@Override public boolean accept(File dir, String name) {
|
||||||
@@ -588,7 +566,7 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
File[] files = configuration.getWorkingDirectory().listFiles(textFilter);
|
File[] files = configuration.getWorkingDirectory().listFiles(textFilter);
|
||||||
|
|
||||||
if (isAskForRendererKill()) {
|
if (getRenderState().isAskForRendererKill()) {
|
||||||
log.debug("Job::render been asked to end render");
|
log.debug("Job::render been asked to end render");
|
||||||
|
|
||||||
long duration = (new Date().getTime() - process.getStartTime()) / 1000; // in seconds
|
long duration = (new Date().getTime() - process.getStartTime()) / 1000; // in seconds
|
||||||
@@ -600,13 +578,13 @@ import java.util.regex.Pattern;
|
|||||||
if (files.length != 0) {
|
if (files.length != 0) {
|
||||||
Arrays.stream(files).forEach( file -> new File(file.getAbsolutePath()).delete());
|
Arrays.stream(files).forEach( file -> new File(file.getAbsolutePath()).delete());
|
||||||
}
|
}
|
||||||
if (isServerBlockJob()) {
|
if (getRenderState().isServerBlock()) {
|
||||||
return Error.Type.RENDERER_KILLED_BY_SERVER;
|
return Error.Type.RENDERER_KILLED_BY_SERVER;
|
||||||
}
|
}
|
||||||
if (isUserBlockJob()) {
|
if (getRenderState().isUserBlock()) {
|
||||||
return Error.Type.RENDERER_KILLED_BY_USER;
|
return Error.Type.RENDERER_KILLED_BY_USER;
|
||||||
}
|
}
|
||||||
if (isIncompatibleProcessKillJob()) {
|
if (getRenderState().isIncompatibleProcessKill()) {
|
||||||
return Error.Type.RENDERER_KILLED_BY_USER_INCOMPATIBLE_PROCESS;
|
return Error.Type.RENDERER_KILLED_BY_USER_INCOMPATIBLE_PROCESS;
|
||||||
}
|
}
|
||||||
return Error.Type.RENDERER_KILLED;
|
return Error.Type.RENDERER_KILLED;
|
||||||
@@ -620,7 +598,7 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
String basename = "";
|
String basename = "";
|
||||||
try {
|
try {
|
||||||
basename = getPath().substring(0, getPath().lastIndexOf('.'));
|
basename = getRenderSettings().getPath().substring(0, getRenderSettings().getPath().lastIndexOf('.'));
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -651,13 +629,13 @@ import java.util.regex.Pattern;
|
|||||||
String path = files[1].getAbsolutePath();
|
String path = files[1].getAbsolutePath();
|
||||||
String extension = path.substring(path.lastIndexOf(".") + 1).toLowerCase();
|
String extension = path.substring(path.lastIndexOf(".") + 1).toLowerCase();
|
||||||
if ("jpg".equals(extension)) {
|
if ("jpg".equals(extension)) {
|
||||||
setPreviewImagePath(files[1].getAbsolutePath());
|
getRenderOutput().setPreviewImagePath(files[1].getAbsolutePath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setOutputImagePath(files[0].getAbsolutePath());
|
getRenderOutput().setFullImagePath(files[0].getAbsolutePath());
|
||||||
this.outputImageSize = new File(getOutputImagePath()).length();
|
getRenderOutput().setFullImageSize(new File(getRenderOutput().getFullImagePath()).length());
|
||||||
log.debug(String.format("Job::render pictureFilename: %s, size: %d'", getOutputImagePath(), this.outputImageSize));
|
log.debug(String.format("Job::render pictureFilename: %s, size: %d'", getRenderOutput().getFullImagePath(), getRenderOutput().getFullImageSize()));
|
||||||
}
|
}
|
||||||
|
|
||||||
File scene_dir = new File(getSceneDirectory());
|
File scene_dir = new File(getSceneDirectory());
|
||||||
@@ -704,7 +682,7 @@ import java.util.regex.Pattern;
|
|||||||
float duration = Float.parseFloat(matcher.group(2));
|
float duration = Float.parseFloat(matcher.group(2));
|
||||||
|
|
||||||
if (duration != 0 && amount != 0) {
|
if (duration != 0 && amount != 0) {
|
||||||
this.speedSamplesRendered = amount / duration;
|
this.renderOutput.setSpeedSamplesRendered(amount / duration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -713,7 +691,7 @@ import java.util.regex.Pattern;
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateRenderingStatus(String line, int progress) {
|
private void updateRenderingStatus(String line, int progress) {
|
||||||
if (getUpdateRenderingStatusMethod() == null || UPDATE_METHOD_BY_REMAINING_TIME.equals(getUpdateRenderingStatusMethod())) {
|
if (getRenderSettings().getUpdateRenderingStatusMethod() == null || UPDATE_METHOD_BY_REMAINING_TIME.equals(getRenderSettings().getUpdateRenderingStatusMethod())) {
|
||||||
String search_remaining = "remaining:";
|
String search_remaining = "remaining:";
|
||||||
int index = line.toLowerCase().indexOf(search_remaining);
|
int index = line.toLowerCase().indexOf(search_remaining);
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
@@ -759,7 +737,7 @@ import java.util.regex.Pattern;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (UPDATE_METHOD_BY_TILE.equals(getUpdateRenderingStatusMethod())) {
|
else if (UPDATE_METHOD_BY_TILE.equals(getRenderSettings().getUpdateRenderingStatusMethod())) {
|
||||||
String search = " Tile ";
|
String search = " Tile ";
|
||||||
int index = line.lastIndexOf(search);
|
int index = line.lastIndexOf(search);
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
@@ -787,277 +765,6 @@ import java.util.regex.Pattern;
|
|||||||
getProcessRender().update();
|
getProcessRender().update();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Type detectError(String line) {
|
|
||||||
|
|
||||||
if (line.contains("version `GLIBC_2.28' not found")) {
|
|
||||||
// 07-04 07:43:12 (debug) renderer output
|
|
||||||
// 07-04 07:43:12 (debug) /tmp///rend.exe: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /tmp///rend.exe)
|
|
||||||
// 07-04 07:43:12 (debug) /tmp///rend.exe: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /tmp///lib/libboost_filesystem.so.1.80.0)
|
|
||||||
return Type.OS_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
else if (line.contains("Color management:")) {
|
|
||||||
String[] errors = {
|
|
||||||
" not found",
|
|
||||||
" is not compatible ",
|
|
||||||
" Error could not find role",
|
|
||||||
" Error, could not find role",
|
|
||||||
"using fallback mode",
|
|
||||||
" Error, could not find any displays",
|
|
||||||
" Error, could not find any views",
|
|
||||||
" Failed to load bundled config"
|
|
||||||
};
|
|
||||||
|
|
||||||
for (var error : errors) {
|
|
||||||
if (line.contains(error)) {
|
|
||||||
|
|
||||||
//30-11 01:16:57 (debug) Blender 4.0.0 (hash 878f71061b8e built 2023-11-14 01:20:37)
|
|
||||||
//30-11 01:16:57 (debug) Color management: display "sRGB" used by scene not found, setting to default ("Blender").
|
|
||||||
//30-11 01:16:57 (debug) Color management: scene view "AgX" not found, setting default "Standard".
|
|
||||||
//30-11 01:16:57 (debug) Read blend: "C:\Users\tianji\AppData\Local\Temp\farm_3210908783605063546\254263927\Car Scene 3.blend"
|
|
||||||
//30-11 01:16:57 (debug) Color management: display "sRGB" used by scene not found, setting to default ("Blender").
|
|
||||||
//30-11 01:16:57 (debug) Color management: scene view "AgX" not found, setting default "Standard".
|
|
||||||
//30-11 01:16:57 (debug) Color management: scene look "AgX - Medium High Contrast" not found, setting default "None".
|
|
||||||
//30-11 01:16:57 (debug) Color management: image colorspace "Linear Rec.709" not found, will use default instead.
|
|
||||||
return Type.COLOR_MANAGEMENT_ERROR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (line.contains("OpenColorIO Error:")) {
|
|
||||||
//28-11 12:43:40 (debug) Fra:340 Mem:11.74M (Peak 28.28M) | Time:00:01.69 | Compositing | Tile 1-1
|
|
||||||
//28-11 12:43:40 (debug) Fra:340 Mem:11.68M (Peak 28.28M) | Time:00:01.69 | Compositing | De-initializing execution
|
|
||||||
//28-11 12:43:40 (debug) OpenColorIO Error: The specified file reference 'srgb_inv.spi1d' could not be located. The following attempts were made: 'E:\SheepIt\sheepit\6b752e00cd23e1789e00285310cb6845\3.6\datafiles\colormanagement\luts\srgb_inv.spi1d' : 'E:\SheepIt\sheepit\6b752e00cd23e1789e00285310cb6845\3.6\datafiles\colormanagement\filmic\srgb_inv.spi1d'.
|
|
||||||
//28-11 12:43:40 (debug) Saved: 'E:\SheepIt\sheepit\1_0340.png'
|
|
||||||
return Type.COLOR_MANAGEMENT_ERROR;
|
|
||||||
}
|
|
||||||
else if (line.contains("CUDA error: Out of memory")) {
|
|
||||||
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Mem:470.26M, Peak:470.26M | Scene, RenderLayer | Updating Device | Writing constant memory
|
|
||||||
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Mem:470.26M, Peak:470.26M | Scene, RenderLayer | Path Tracing Tile 0/135, Sample 0/200
|
|
||||||
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Mem:470.82M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 1/135, Sample 0/200
|
|
||||||
// CUDA error: Out of memory in cuLaunchKernel(cuPathTrace, xblocks , yblocks, 1, xthreads, ythreads, 1, 0, 0, args, 0)
|
|
||||||
// Refer to the Cycles GPU rendering documentation for possible solutions:
|
|
||||||
// http://www.blender.org/manual/render/cycles/gpu_rendering.html
|
|
||||||
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Remaining:09:26.57 | Mem:470.26M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 1/135, Sample 200/200
|
|
||||||
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Remaining:00:00.06 | Mem:470.50M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 134/135, Sample 0/200
|
|
||||||
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Remaining:00:00.03 | Mem:470.26M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 134/135, Sample 200/200
|
|
||||||
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Remaining:00:00.03 | Mem:470.50M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 135/135, Sample 0/200
|
|
||||||
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Mem:470.26M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 135/135, Sample 200/200
|
|
||||||
// Error: CUDA error: Out of memory in cuLaunchKernel(cuPathTrace, xblocks , yblocks, 1, xthreads, ythreads, 1, 0, 0, args, 0)
|
|
||||||
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Mem:470.26M, Peak:470.82M | Scene, RenderLayer | Cancel | CUDA error: Out of memory in cuLaunchKernel(cuPathTrace, xblocks , yblocks, 1, xthreads, ythreads, 1, 0, 0, args, 0)
|
|
||||||
// Fra:151 Mem:405.89M (0.00M, Peak 633.81M) Sce: Scene Ve:0 Fa:0 La:0
|
|
||||||
// Saved: /tmp/xx/26885_0151.png Time: 00:04.67 (Saving: 00:00.22)
|
|
||||||
// Blender quit
|
|
||||||
return Type.RENDERER_OUT_OF_VIDEO_MEMORY;
|
|
||||||
}
|
|
||||||
else if (line.contains("CUDA error at cuCtxCreate: Out of memory")) {
|
|
||||||
// renderer output
|
|
||||||
// CUDA error at cuCtxCreate: Out of memory
|
|
||||||
// Refer to the Cycles GPU rendering documentation for possible solutions:
|
|
||||||
// http://www.blender.org/manual/render/cycles/gpu_rendering.html
|
|
||||||
// found bundled python: /tmp/aaaa/bbbb/2.78/python
|
|
||||||
// read blend: /tmp/aaaa/bbbb/compute-method.blend
|
|
||||||
// Fra:340 Mem:7.25M (0.00M, Peak 7.25M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Sun
|
|
||||||
// Fra:340 Mem:7.25M (0.00M, Peak 7.25M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Plane
|
|
||||||
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Cube
|
|
||||||
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Camera
|
|
||||||
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Initializing
|
|
||||||
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Loading render kernels (may take a few minutes the first time)
|
|
||||||
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Error | CUDA error at cuCtxCreate: Out of memory
|
|
||||||
// Error: CUDA error at cuCtxCreate: Out of memory
|
|
||||||
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Waiting for render to start
|
|
||||||
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Cancel | CUDA error at cuCtxCreate: Out of memory
|
|
||||||
// CUDA error: Invalid value in cuCtxDestroy(cuContext)
|
|
||||||
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Sce: Scene Ve:0 Fa:0 La:0
|
|
||||||
// Blender quit
|
|
||||||
// end of rendering
|
|
||||||
return Type.RENDERER_OUT_OF_VIDEO_MEMORY;
|
|
||||||
}
|
|
||||||
else if (line.contains("Error: Out of memory in CUDA") || line.contains("Error: Out of memory in OPTIX")) {
|
|
||||||
// 15-03 21:13:45 (debug) Fra:27 Mem:8441.68M (Peak 9675.81M) | Time:00:16.27 | Mem:8411.20M, Peak:8411.20M | Scene, View Layer | Loading render kernels (may take a few minutes the first time)
|
|
||||||
// 15-03 21:13:45 (debug) Out of memory in CUDA queue enqueue (integrator_shade_surface)
|
|
||||||
// 15-03 21:13:45 (debug) Refer to the Cycles GPU rendering documentation for possible solutions:
|
|
||||||
// 15-03 21:13:45 (debug) https://docs.blender.org/manual/en/latest/render/cycles/gpu_rendering.html
|
|
||||||
// 15-03 21:13:45 (debug) Fra:27 Mem:8441.68M (Peak 9675.81M) | Time:00:16.38 | Mem:8411.27M, Peak:8411.27M | Scene, View Layer | Updating Scene
|
|
||||||
// 15-03 21:13:45 (debug) Fra:27 Mem:8441.68M (Peak 9675.81M) | Time:00:16.38 | Mem:8411.27M, Peak:8411.27M | Scene, View Layer | Updating Shaders
|
|
||||||
// 15-03 21:13:45 (debug) Fra:27 Mem:8447.08M (Peak 9675.81M) | Time:00:16.63 | Mem:8763.00M, Peak:8763.00M | Scene, View Layer | Out of memory in CUDA queue enqueue (integrator_shade_surface)
|
|
||||||
// 15-03 21:13:45 (debug) Error: Out of memory in CUDA queue enqueue (integrator_shade_surface)
|
|
||||||
// 15-03 21:13:46 (debug) Blender quit
|
|
||||||
return Error.Type.RENDERER_OUT_OF_VIDEO_MEMORY;
|
|
||||||
}
|
|
||||||
else if (line.contains("CUDA error: Launch exceeded timeout in") || line.contains("CUDA error: Invalid value in cuTexRefSetAddress(") || line.contains("CUDA error: Launch failed in cuCtxSynchronize()") || line.contains("CUDA error: Illegal address in cuCtxSynchronize()")) {
|
|
||||||
return Error.Type.GPU_OR_DRIVER_ERROR;
|
|
||||||
}
|
|
||||||
else if (line.contains("System is out of GPU memory")) {
|
|
||||||
// 16-03 18:37:37 (debug) Fra:192 Mem:15826.70M (Peak 15831.18M) | Time:02:21.86 | Mem:6622.87M, Peak:6625.35M | Scene, ViewLayer | Loading denoising kernels (may take a few minutes the first time)
|
|
||||||
// 16-03 18:37:37 (debug) System is out of GPU memory
|
|
||||||
// 16-03 18:37:37 (debug) Refer to the Cycles GPU rendering documentation for possible solutions:
|
|
||||||
// 16-03 18:37:37 (debug) https://docs.blender.org/manual/en/latest/render/cycles/gpu_rendering.html
|
|
||||||
// 16-03 18:37:37 (debug) System is out of GPU memory
|
|
||||||
// 16-03 18:37:38 (debug) Fra:192 Mem:15831.01M (Peak 15831.18M) | Time:02:23.11 | Mem:7017.46M, Peak:7017.46M | Scene, ViewLayer | System is out of GPU memory
|
|
||||||
// 16-03 18:37:38 (debug) Error: System is out of GPU memory
|
|
||||||
// 16-03 18:37:40 (debug) Blender quit
|
|
||||||
// 16-03 18:37:40 (debug) end of rendering
|
|
||||||
return Error.Type.RENDERER_OUT_OF_VIDEO_MEMORY;
|
|
||||||
}
|
|
||||||
else if (line.contains("CUDA device supported only with compute capability") || line.contains("OPTIX device supported only with compute capability")) {
|
|
||||||
// found bundled python: /tmp/xx/2.73/python
|
|
||||||
// read blend: /tmp/xx/compute-method.blend
|
|
||||||
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Sun
|
|
||||||
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Plane
|
|
||||||
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Cube
|
|
||||||
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Camera
|
|
||||||
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Initializing
|
|
||||||
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Loading render kernels (may take a few minutes the first time)
|
|
||||||
// CUDA device supported only with compute capability 2.0 or up, found 1.2.
|
|
||||||
// Refer to the Cycles GPU rendering documentation for possible solutions:
|
|
||||||
// http://www.blender.org/manual/render/cycles/gpu_rendering.html
|
|
||||||
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Error | CUDA device supported only with compute capability 2.0 or up, found 1.2.
|
|
||||||
// Error: CUDA device supported only with compute capability 2.0 or up, found 1.2.
|
|
||||||
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Waiting for render to start
|
|
||||||
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Cancel | CUDA device supported only with compute capability 2.0 or up, found 1.2.
|
|
||||||
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) Sce: Scene Ve:0 Fa:0 La:0
|
|
||||||
// Saved: /tmp/xx/0_0340.png Time: 00:00.12 (Saving: 00:00.03)
|
|
||||||
// Blender quit
|
|
||||||
return Type.GPU_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
else if (line.contains("terminate called after throwing an instance of 'boost::filesystem::filesystem_error'")) {
|
|
||||||
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.24 | Mem:1.64M, Peak:1.64M | Scene, RenderLayer | Updating Mesh | Computing attributes
|
|
||||||
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.24 | Mem:1.64M, Peak:1.64M | Scene, RenderLayer | Updating Mesh | Copying Attributes to device
|
|
||||||
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.24 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Building
|
|
||||||
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.24 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Building BVH
|
|
||||||
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.24 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Looking in BVH cache
|
|
||||||
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.27 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Packing BVH triangles and strands
|
|
||||||
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.27 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Packing BVH nodes
|
|
||||||
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.27 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Writing BVH cache
|
|
||||||
// terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
|
|
||||||
// what(): boost::filesystem::create_directory: Permission denied: "/var/local/cache"
|
|
||||||
return Error.Type.NOOUTPUTFILE;
|
|
||||||
}
|
|
||||||
else if (line.contains("terminate called after throwing an instance of 'std::bad_alloc'")) {
|
|
||||||
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Mesh BVH Plane.083 171/2 | Building BVH
|
|
||||||
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Mesh BVH Mesh 172/2 | Building BVH
|
|
||||||
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Mesh BVH Mesh 172/2 | Packing BVH triangles and strands
|
|
||||||
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Mesh BVH Mesh 172/2 | Packing BVH nodes
|
|
||||||
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Scene BVH | Building
|
|
||||||
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Scene BVH | Building BVH
|
|
||||||
// terminate called after throwing an instance of 'std::bad_alloc'
|
|
||||||
// what(): std::bad_alloc
|
|
||||||
return Error.Type.RENDERER_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
else if (line.contains("what(): std::bad_alloc")) {
|
|
||||||
// Fra:7 Mem:1247.01M (0.00M, Peak 1247.01M) | Time:00:28.84 | Mem:207.63M, Peak:207.63M | Scene, RenderLayer | Updating Scene BVH | Building BVH 93%, duplicates 0%terminate called recursively
|
|
||||||
// terminate called after throwing an instance of 'St9bad_alloc'
|
|
||||||
// what(): std::bad_alloc
|
|
||||||
// scandir: Cannot allocate memory
|
|
||||||
return Error.Type.RENDERER_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
else if (line.contains("Fatal Python error:")) {
|
|
||||||
// Fatal Python error: Py_Initialize: unable to load the file system codec
|
|
||||||
// ImportError: No module named 'encodings'
|
|
||||||
// Current thread 0x0000388c (most recent call first):
|
|
||||||
return Error.Type.RENDERER_CRASHED_PYTHON_ERROR;
|
|
||||||
}
|
|
||||||
else if (line.contains("Calloc returns null")) {
|
|
||||||
// Fra:1 Mem:976.60M (0.00M, Peak 1000.54M) | Time:00:01.34 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Left
|
|
||||||
// Calloc returns null: len=7186416 in CDMLoopUV, total 2145859048
|
|
||||||
// Calloc returns null: len=7186416 in CDMLoopUV, total 2145859048
|
|
||||||
// Malloc returns null: len=3190672 in CDMTexPoly, total 2149293176
|
|
||||||
// Writing: /home/user/.sheepit/LEFT packed.crash.txt
|
|
||||||
return Error.Type.RENDERER_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
else if (line.contains("Malloc returns null")) {
|
|
||||||
// Fra:1 Mem:976.60M (0.00M, Peak 1000.54M) | Time:00:01.34 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Left
|
|
||||||
// Calloc returns null: len=7186416 in CDMLoopUV, total 2145859048
|
|
||||||
// Calloc returns null: len=7186416 in CDMLoopUV, total 2145859048
|
|
||||||
// Malloc returns null: len=3190672 in CDMTexPoly, total 2149293176
|
|
||||||
// Writing: /home/user/.sheepit/LEFT packed.crash.txt
|
|
||||||
return Error.Type.RENDERER_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
else if (line.contains("Error: run out of memory!")) {
|
|
||||||
// 09-01 09:26:45 (debug) Fra:4 Mem:8444.44M (Peak 12092.10M) | Time:01:11.45 | Mem:6632.02M, Peak:6632.02M | Scene, ViewLayer | Updating Mesh | Tessellating Plane 1/1
|
|
||||||
//09-01 09:27:30 (debug) Error: run out of memory!
|
|
||||||
//09-01 09:27:30 (debug) Fra:4 Mem:8444.44M (Peak 12092.10M) | Time:01:55.95 | Mem:6632.02M, Peak:6632.02M | Scene, ViewLayer | Sample 0/1024
|
|
||||||
//09-01 09:27:30 (debug) Error: Out of memory
|
|
||||||
//09-01 09:27:30 (debug) Fra:4 Mem:8745.04M (Peak 12092.10M) | Time:01:55.97 | Mem:6632.03M, Peak:6632.03M | Scene, ViewLayer | Out of memory
|
|
||||||
//09-01 09:27:33 (debug) Blender quit
|
|
||||||
return Error.Type.RENDERER_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
else if (line.contains("CUDA kernel compilation failed") || line.contains("OPTIX kernel compilation failed")) {
|
|
||||||
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.02 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Sun.001
|
|
||||||
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.02 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Sun.002
|
|
||||||
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.02 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Initializing
|
|
||||||
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.02 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Loading render kernels (may take a few minutes the first time)
|
|
||||||
// nvcc fatal : Value 'sm_61' is not defined for option 'gpu-architecture'
|
|
||||||
// CUDA kernel compilation failed, see console for details.
|
|
||||||
// Refer to the Cycles GPU rendering documentation for possible solutions:
|
|
||||||
// http://www.blender.org/manual/render/cycles/gpu_rendering.html
|
|
||||||
// Compiling CUDA kernel ...
|
|
||||||
// "nvcc" -arch=sm_61 -m64 --cubin "/tmp/cache/c36db40aa5e59f5ea4ff139180353dbc/2.77/scripts/addons/cycles/kernel/kernels/cuda/kernel.cu" -o "/tmp/cache/cycles_kernel_sm61_079195D400571E023CC499D037AB6EE5.cubin" --ptxas-options="-v" --use_fast_math -I"/tmp/cache/c36db40aa5e59f5ea4ff139180353dbc/2.77/scripts/addons/cycles/kernel" -DNVCC -D__KERNEL_CUDA_VERSION__=75
|
|
||||||
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.08 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Error | CUDA kernel compilation failed, see console for details.
|
|
||||||
// Error: CUDA kernel compilation failed, see console for details.
|
|
||||||
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.08 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Waiting for render to start
|
|
||||||
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.08 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Cancel | CUDA kernel compilation failed, see console for details.
|
|
||||||
// Fra:1 Mem:147.74M (0.00M, Peak 378.15M) | Time:00:01.12 | Sce: Scene Ve:0 Fa:0 La:0
|
|
||||||
// Saved: '/tmp/cache/8_0001.png'
|
|
||||||
return Error.Type.GPU_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
else if (line.contains("Engine 'CYCLES' not available for scene") || line.contains("Engine 'BLENDER_EEVEE' not available for scene") || line.contains("Engine 'BLENDER_WORKBENCH' not available for scene") || line.contains("Engine 'HYDRA_STORM' not available for scene")) {
|
|
||||||
return Error.Type.ENGINE_NOT_AVAILABLE;
|
|
||||||
}
|
|
||||||
else if (line.contains("Warning: Cycles is not enabled!")) {
|
|
||||||
return Error.Type.ENGINE_NOT_AVAILABLE;
|
|
||||||
}
|
|
||||||
else if (line.contains("OpenImageDenoise error: SSE4.1 support is required at minimum") || line.contains("OpenImageDenoiser is not supported on this CPU:") || line.contains("OpenImageDenoise is not supported on this CPU:") || line.contains("No device available to denoise on")) {
|
|
||||||
//OpenImageDenoiser is Blender pre 4.2
|
|
||||||
//OpenImageDenoise after Blender 4.2
|
|
||||||
|
|
||||||
// denoising capability detection
|
|
||||||
// Fra:201 Mem:8.89M (Peak 10.09M) | Time:00:00.04 | Mem:0.27M, Peak:0.27M | Scene, View Layer | Updating Device | Writing constant memory
|
|
||||||
// Fra:201 Mem:8.89M (Peak 10.09M) | Time:00:00.04 | Mem:0.27M, Peak:0.27M | Scene, View Layer | Loading denoising kernels (may take a few minutes the first time)
|
|
||||||
// Fra:201 Mem:8.89M (Peak 10.09M) | Time:00:00.04 | Mem:0.27M, Peak:0.27M | Scene, View Layer | Sample 0/16
|
|
||||||
// Fra:201 Mem:127.55M (Peak 127.55M) | Time:00:00.65 | Remaining:00:09.13 | Mem:118.92M, Peak:118.92M | Scene, View Layer | Sample 1/16
|
|
||||||
// E0308 1719 31449 denoiser_oidn.cpp:197] OpenImageDenoise error: SSE4.1 support is required at minimum
|
|
||||||
// Fra:201 Mem:198.74M (Peak 301.58M) | Time:00:08.74 | Mem:118.92M, Peak:118.92M | Scene, View Layer | Sample 16/16
|
|
||||||
// Rendering done
|
|
||||||
// Fra:201 Mem:198.74M (Peak 301.58M) | Time:00:08.74 | Mem:118.92M, Peak:118.92M | Scene, View Layer | Finished
|
|
||||||
// Saved: '/tmp/5/sheepit/1541_0201.png'
|
|
||||||
// Time: 00:09.30 (Saving: 00:00.55)
|
|
||||||
// Blender quit
|
|
||||||
return Error.Type.DENOISING_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
else if (line.contains("Error: File format is not supported")) {
|
|
||||||
//09-03 23:36:03 (debug) Blender 2.83.19 (hash 86c526d2c733 built 2022-02-02 00:44:40)
|
|
||||||
//09-03 23:36:03 (debug) found bundled python: C:\Users\Username\Documents\sheepit\sheepit\f1f9e587201b428c9416faf614b677bf\2.83\python
|
|
||||||
//09-03 23:36:03 (debug) Error: File format is not supported in file 'C:\Users\Username\Documents\sheepit\sheepit\686c6bdbf752790b28c1b21180aa5db5\correndo4.blend'
|
|
||||||
//09-03 23:36:03 (debug) Blender quit
|
|
||||||
//09-03 23:36:03 (debug) end of rendering
|
|
||||||
return Error.Type.RENDERER_CRASHED;
|
|
||||||
}
|
|
||||||
else if (line.contains("Unable to open a display") || line.contains("Managed to successfully fallback to surfaceless EGL rendering!") || line.contains("Couldn't open libEGL")) {
|
|
||||||
//17-03 07:38:47 (debug) Fra:7 Mem:1667.27M (Peak 1762.19M) | Time:06:27.86 | Mem:1184.92M, Peak:1194.58M | Scene, ViewLayer | Sample 187/187
|
|
||||||
//17-03 07:38:47 (debug) Fra:7 Mem:1667.27M (Peak 1762.19M) | Time:06:27.86 | Mem:1184.92M, Peak:1194.58M | Scene, ViewLayer | Finished
|
|
||||||
//17-03 07:38:47 (debug) Unable to open a display
|
|
||||||
//17-03 07:38:47 (debug) end of rendering
|
|
||||||
//17-03 07:38:47 (error) Job::render no picture file found (after finished render (filename_without_extension 116372253_0007)
|
|
||||||
return Error.Type.CURRENTLY_HEADLESS;
|
|
||||||
}
|
|
||||||
else if (line.contains("Error: Cannot read file") || line.contains("Error: Failed to read blend file")) {
|
|
||||||
//14-10 11:03:21 (debug) Blender 3.1.0 (hash c77597cd0e15 built 2022-03-09 00:44:13)
|
|
||||||
//14-10 11:03:21 (debug) Error: Cannot read file 'C:\SheepIT\sheepit\ef925644a319c5ad604ebc077769bcb8\Passeio Virtual FINAL.blend': No such file or directory
|
|
||||||
//14-10 11:03:21 (debug) Blender quit
|
|
||||||
return Error.Type.CANNOT_READ_FILE;
|
|
||||||
}
|
|
||||||
else if (line.contains("DETECT_DEVICE_ERROR")) {
|
|
||||||
//./blender-3.3.2-linux-x64/blender -b -E CYCLES -P /mnt/d/sheep_gpu/set_gpu.py -f 1
|
|
||||||
//Blender 3.3.2 (hash bf24652e38a2 built 2022-12-07 01:12:36)
|
|
||||||
//Read prefs: /home/raimund/.config/blender/3.3/config/userpref.blend
|
|
||||||
///run/user/1000/gvfs/ non-existent directory
|
|
||||||
//DETECT_DEVICE_ERRORR: Couldn't find OPTIX device with id CUDA_NVIDIA GeForce GTX 1080_0000:01:00_OptiX
|
|
||||||
return Error.Type.DETECT_DEVICE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Type.OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void maybeCleanWorkingDir(Type error) {
|
private void maybeCleanWorkingDir(Type error) {
|
||||||
boolean cleanup = Type.COLOR_MANAGEMENT_ERROR == error
|
boolean cleanup = Type.COLOR_MANAGEMENT_ERROR == error
|
||||||
|| Type.RENDERER_CRASHED_PYTHON_ERROR == error
|
|| Type.RENDERER_CRASHED_PYTHON_ERROR == error
|
||||||
|
|||||||
307
src/main/java/com/sheepit/client/RenderOutput.java
Normal file
307
src/main/java/com/sheepit/client/RenderOutput.java
Normal file
@@ -0,0 +1,307 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2024 Laurent CLOUET
|
||||||
|
* Author Laurent CLOUET <laurent.clouet@nopnop.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; version 2
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sheepit.client;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Track the output of the render
|
||||||
|
* like image, preview, ...
|
||||||
|
*/
|
||||||
|
@Data public class RenderOutput {
|
||||||
|
private String fullImagePath = null;
|
||||||
|
private String previewImagePath = null;
|
||||||
|
private long fullImageSize = 0;
|
||||||
|
private float speedSamplesRendered = 0; // only used for powerdetection project
|
||||||
|
|
||||||
|
private String blenderShortVersion;
|
||||||
|
private String blenderLongVersion;
|
||||||
|
|
||||||
|
public Error.Type detectError(String line) {
|
||||||
|
|
||||||
|
if (line.contains("version `GLIBC_2.28' not found")) {
|
||||||
|
// 07-04 07:43:12 (debug) renderer output
|
||||||
|
// 07-04 07:43:12 (debug) /tmp///rend.exe: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /tmp///rend.exe)
|
||||||
|
// 07-04 07:43:12 (debug) /tmp///rend.exe: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /tmp///lib/libboost_filesystem.so.1.80.0)
|
||||||
|
return Error.Type.OS_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
else if (line.contains("Color management:")) {
|
||||||
|
String[] errors = {
|
||||||
|
" not found",
|
||||||
|
" is not compatible ",
|
||||||
|
" Error could not find role",
|
||||||
|
" Error, could not find role",
|
||||||
|
"using fallback mode",
|
||||||
|
" Error, could not find any displays",
|
||||||
|
" Error, could not find any views",
|
||||||
|
" Failed to load bundled config"
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var error : errors) {
|
||||||
|
if (line.contains(error)) {
|
||||||
|
|
||||||
|
//30-11 01:16:57 (debug) Blender 4.0.0 (hash 878f71061b8e built 2023-11-14 01:20:37)
|
||||||
|
//30-11 01:16:57 (debug) Color management: display "sRGB" used by scene not found, setting to default ("Blender").
|
||||||
|
//30-11 01:16:57 (debug) Color management: scene view "AgX" not found, setting default "Standard".
|
||||||
|
//30-11 01:16:57 (debug) Read blend: "C:\Users\tianji\AppData\Local\Temp\farm_3210908783605063546\254263927\Car Scene 3.blend"
|
||||||
|
//30-11 01:16:57 (debug) Color management: display "sRGB" used by scene not found, setting to default ("Blender").
|
||||||
|
//30-11 01:16:57 (debug) Color management: scene view "AgX" not found, setting default "Standard".
|
||||||
|
//30-11 01:16:57 (debug) Color management: scene look "AgX - Medium High Contrast" not found, setting default "None".
|
||||||
|
//30-11 01:16:57 (debug) Color management: image colorspace "Linear Rec.709" not found, will use default instead.
|
||||||
|
return Error.Type.COLOR_MANAGEMENT_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (line.contains("OpenColorIO Error:")) {
|
||||||
|
//28-11 12:43:40 (debug) Fra:340 Mem:11.74M (Peak 28.28M) | Time:00:01.69 | Compositing | Tile 1-1
|
||||||
|
//28-11 12:43:40 (debug) Fra:340 Mem:11.68M (Peak 28.28M) | Time:00:01.69 | Compositing | De-initializing execution
|
||||||
|
//28-11 12:43:40 (debug) OpenColorIO Error: The specified file reference 'srgb_inv.spi1d' could not be located. The following attempts were made: 'E:\SheepIt\sheepit\6b752e00cd23e1789e00285310cb6845\3.6\datafiles\colormanagement\luts\srgb_inv.spi1d' : 'E:\SheepIt\sheepit\6b752e00cd23e1789e00285310cb6845\3.6\datafiles\colormanagement\filmic\srgb_inv.spi1d'.
|
||||||
|
//28-11 12:43:40 (debug) Saved: 'E:\SheepIt\sheepit\1_0340.png'
|
||||||
|
return Error.Type.COLOR_MANAGEMENT_ERROR;
|
||||||
|
}
|
||||||
|
else if (line.contains("CUDA error: Out of memory")) {
|
||||||
|
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Mem:470.26M, Peak:470.26M | Scene, RenderLayer | Updating Device | Writing constant memory
|
||||||
|
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Mem:470.26M, Peak:470.26M | Scene, RenderLayer | Path Tracing Tile 0/135, Sample 0/200
|
||||||
|
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Mem:470.82M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 1/135, Sample 0/200
|
||||||
|
// CUDA error: Out of memory in cuLaunchKernel(cuPathTrace, xblocks , yblocks, 1, xthreads, ythreads, 1, 0, 0, args, 0)
|
||||||
|
// Refer to the Cycles GPU rendering documentation for possible solutions:
|
||||||
|
// http://www.blender.org/manual/render/cycles/gpu_rendering.html
|
||||||
|
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Remaining:09:26.57 | Mem:470.26M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 1/135, Sample 200/200
|
||||||
|
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Remaining:00:00.06 | Mem:470.50M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 134/135, Sample 0/200
|
||||||
|
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Remaining:00:00.03 | Mem:470.26M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 134/135, Sample 200/200
|
||||||
|
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Remaining:00:00.03 | Mem:470.50M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 135/135, Sample 0/200
|
||||||
|
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Mem:470.26M, Peak:470.82M | Scene, RenderLayer | Path Tracing Tile 135/135, Sample 200/200
|
||||||
|
// Error: CUDA error: Out of memory in cuLaunchKernel(cuPathTrace, xblocks , yblocks, 1, xthreads, ythreads, 1, 0, 0, args, 0)
|
||||||
|
// Fra:151 Mem:405.91M (0.00M, Peak 633.81M) | Mem:470.26M, Peak:470.82M | Scene, RenderLayer | Cancel | CUDA error: Out of memory in cuLaunchKernel(cuPathTrace, xblocks , yblocks, 1, xthreads, ythreads, 1, 0, 0, args, 0)
|
||||||
|
// Fra:151 Mem:405.89M (0.00M, Peak 633.81M) Sce: Scene Ve:0 Fa:0 La:0
|
||||||
|
// Saved: /tmp/xx/26885_0151.png Time: 00:04.67 (Saving: 00:00.22)
|
||||||
|
// Blender quit
|
||||||
|
return Error.Type.RENDERER_OUT_OF_VIDEO_MEMORY;
|
||||||
|
}
|
||||||
|
else if (line.contains("CUDA error at cuCtxCreate: Out of memory")) {
|
||||||
|
// renderer output
|
||||||
|
// CUDA error at cuCtxCreate: Out of memory
|
||||||
|
// Refer to the Cycles GPU rendering documentation for possible solutions:
|
||||||
|
// http://www.blender.org/manual/render/cycles/gpu_rendering.html
|
||||||
|
// found bundled python: /tmp/aaaa/bbbb/2.78/python
|
||||||
|
// read blend: /tmp/aaaa/bbbb/compute-method.blend
|
||||||
|
// Fra:340 Mem:7.25M (0.00M, Peak 7.25M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Sun
|
||||||
|
// Fra:340 Mem:7.25M (0.00M, Peak 7.25M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Plane
|
||||||
|
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Cube
|
||||||
|
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Camera
|
||||||
|
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Initializing
|
||||||
|
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Loading render kernels (may take a few minutes the first time)
|
||||||
|
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Error | CUDA error at cuCtxCreate: Out of memory
|
||||||
|
// Error: CUDA error at cuCtxCreate: Out of memory
|
||||||
|
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Waiting for render to start
|
||||||
|
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Cancel | CUDA error at cuCtxCreate: Out of memory
|
||||||
|
// CUDA error: Invalid value in cuCtxDestroy(cuContext)
|
||||||
|
// Fra:340 Mem:7.25M (0.00M, Peak 7.26M) | Time:00:00.13 | Sce: Scene Ve:0 Fa:0 La:0
|
||||||
|
// Blender quit
|
||||||
|
// end of rendering
|
||||||
|
return Error.Type.RENDERER_OUT_OF_VIDEO_MEMORY;
|
||||||
|
}
|
||||||
|
else if (line.contains("Error: Out of memory in CUDA") || line.contains("Error: Out of memory in OPTIX")) {
|
||||||
|
// 15-03 21:13:45 (debug) Fra:27 Mem:8441.68M (Peak 9675.81M) | Time:00:16.27 | Mem:8411.20M, Peak:8411.20M | Scene, View Layer | Loading render kernels (may take a few minutes the first time)
|
||||||
|
// 15-03 21:13:45 (debug) Out of memory in CUDA queue enqueue (integrator_shade_surface)
|
||||||
|
// 15-03 21:13:45 (debug) Refer to the Cycles GPU rendering documentation for possible solutions:
|
||||||
|
// 15-03 21:13:45 (debug) https://docs.blender.org/manual/en/latest/render/cycles/gpu_rendering.html
|
||||||
|
// 15-03 21:13:45 (debug) Fra:27 Mem:8441.68M (Peak 9675.81M) | Time:00:16.38 | Mem:8411.27M, Peak:8411.27M | Scene, View Layer | Updating Scene
|
||||||
|
// 15-03 21:13:45 (debug) Fra:27 Mem:8441.68M (Peak 9675.81M) | Time:00:16.38 | Mem:8411.27M, Peak:8411.27M | Scene, View Layer | Updating Shaders
|
||||||
|
// 15-03 21:13:45 (debug) Fra:27 Mem:8447.08M (Peak 9675.81M) | Time:00:16.63 | Mem:8763.00M, Peak:8763.00M | Scene, View Layer | Out of memory in CUDA queue enqueue (integrator_shade_surface)
|
||||||
|
// 15-03 21:13:45 (debug) Error: Out of memory in CUDA queue enqueue (integrator_shade_surface)
|
||||||
|
// 15-03 21:13:46 (debug) Blender quit
|
||||||
|
return Error.Type.RENDERER_OUT_OF_VIDEO_MEMORY;
|
||||||
|
}
|
||||||
|
else if (line.contains("CUDA error: Launch exceeded timeout in") || line.contains("CUDA error: Invalid value in cuTexRefSetAddress(") || line.contains("CUDA error: Launch failed in cuCtxSynchronize()") || line.contains("CUDA error: Illegal address in cuCtxSynchronize()")) {
|
||||||
|
return Error.Type.GPU_OR_DRIVER_ERROR;
|
||||||
|
}
|
||||||
|
else if (line.contains("System is out of GPU memory")) {
|
||||||
|
// 16-03 18:37:37 (debug) Fra:192 Mem:15826.70M (Peak 15831.18M) | Time:02:21.86 | Mem:6622.87M, Peak:6625.35M | Scene, ViewLayer | Loading denoising kernels (may take a few minutes the first time)
|
||||||
|
// 16-03 18:37:37 (debug) System is out of GPU memory
|
||||||
|
// 16-03 18:37:37 (debug) Refer to the Cycles GPU rendering documentation for possible solutions:
|
||||||
|
// 16-03 18:37:37 (debug) https://docs.blender.org/manual/en/latest/render/cycles/gpu_rendering.html
|
||||||
|
// 16-03 18:37:37 (debug) System is out of GPU memory
|
||||||
|
// 16-03 18:37:38 (debug) Fra:192 Mem:15831.01M (Peak 15831.18M) | Time:02:23.11 | Mem:7017.46M, Peak:7017.46M | Scene, ViewLayer | System is out of GPU memory
|
||||||
|
// 16-03 18:37:38 (debug) Error: System is out of GPU memory
|
||||||
|
// 16-03 18:37:40 (debug) Blender quit
|
||||||
|
// 16-03 18:37:40 (debug) end of rendering
|
||||||
|
return Error.Type.RENDERER_OUT_OF_VIDEO_MEMORY;
|
||||||
|
}
|
||||||
|
else if (line.contains("CUDA device supported only with compute capability") || line.contains("OPTIX device supported only with compute capability")) {
|
||||||
|
// found bundled python: /tmp/xx/2.73/python
|
||||||
|
// read blend: /tmp/xx/compute-method.blend
|
||||||
|
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Sun
|
||||||
|
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Plane
|
||||||
|
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Cube
|
||||||
|
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Camera
|
||||||
|
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Initializing
|
||||||
|
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Loading render kernels (may take a few minutes the first time)
|
||||||
|
// CUDA device supported only with compute capability 2.0 or up, found 1.2.
|
||||||
|
// Refer to the Cycles GPU rendering documentation for possible solutions:
|
||||||
|
// http://www.blender.org/manual/render/cycles/gpu_rendering.html
|
||||||
|
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Error | CUDA device supported only with compute capability 2.0 or up, found 1.2.
|
||||||
|
// Error: CUDA device supported only with compute capability 2.0 or up, found 1.2.
|
||||||
|
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Waiting for render to start
|
||||||
|
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Cancel | CUDA device supported only with compute capability 2.0 or up, found 1.2.
|
||||||
|
// Fra:340 Mem:7.64M (0.00M, Peak 8.23M) Sce: Scene Ve:0 Fa:0 La:0
|
||||||
|
// Saved: /tmp/xx/0_0340.png Time: 00:00.12 (Saving: 00:00.03)
|
||||||
|
// Blender quit
|
||||||
|
return Error.Type.GPU_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
else if (line.contains("terminate called after throwing an instance of 'boost::filesystem::filesystem_error'")) {
|
||||||
|
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.24 | Mem:1.64M, Peak:1.64M | Scene, RenderLayer | Updating Mesh | Computing attributes
|
||||||
|
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.24 | Mem:1.64M, Peak:1.64M | Scene, RenderLayer | Updating Mesh | Copying Attributes to device
|
||||||
|
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.24 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Building
|
||||||
|
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.24 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Building BVH
|
||||||
|
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.24 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Looking in BVH cache
|
||||||
|
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.27 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Packing BVH triangles and strands
|
||||||
|
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.27 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Packing BVH nodes
|
||||||
|
// Fra:2103 Mem:29.54M (0.00M, Peak 29.54M) | Time:00:00.27 | Mem:1.97M, Peak:1.97M | Scene, RenderLayer | Updating Scene BVH | Writing BVH cache
|
||||||
|
// terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
|
||||||
|
// what(): boost::filesystem::create_directory: Permission denied: "/var/local/cache"
|
||||||
|
return Error.Type.NOOUTPUTFILE;
|
||||||
|
}
|
||||||
|
else if (line.contains("terminate called after throwing an instance of 'std::bad_alloc'")) {
|
||||||
|
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Mesh BVH Plane.083 171/2 | Building BVH
|
||||||
|
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Mesh BVH Mesh 172/2 | Building BVH
|
||||||
|
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Mesh BVH Mesh 172/2 | Packing BVH triangles and strands
|
||||||
|
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Mesh BVH Mesh 172/2 | Packing BVH nodes
|
||||||
|
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Scene BVH | Building
|
||||||
|
// Fra:80 Mem:1333.02M (0.00M, Peak 1651.23M) | Mem:780.37M, Peak:780.37M | Scene, RenderLayer | Updating Scene BVH | Building BVH
|
||||||
|
// terminate called after throwing an instance of 'std::bad_alloc'
|
||||||
|
// what(): std::bad_alloc
|
||||||
|
return Error.Type.RENDERER_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
else if (line.contains("what(): std::bad_alloc")) {
|
||||||
|
// Fra:7 Mem:1247.01M (0.00M, Peak 1247.01M) | Time:00:28.84 | Mem:207.63M, Peak:207.63M | Scene, RenderLayer | Updating Scene BVH | Building BVH 93%, duplicates 0%terminate called recursively
|
||||||
|
// terminate called after throwing an instance of 'St9bad_alloc'
|
||||||
|
// what(): std::bad_alloc
|
||||||
|
// scandir: Cannot allocate memory
|
||||||
|
return Error.Type.RENDERER_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
else if (line.contains("Fatal Python error:")) {
|
||||||
|
// Fatal Python error: Py_Initialize: unable to load the file system codec
|
||||||
|
// ImportError: No module named 'encodings'
|
||||||
|
// Current thread 0x0000388c (most recent call first):
|
||||||
|
return Error.Type.RENDERER_CRASHED_PYTHON_ERROR;
|
||||||
|
}
|
||||||
|
else if (line.contains("Calloc returns null")) {
|
||||||
|
// Fra:1 Mem:976.60M (0.00M, Peak 1000.54M) | Time:00:01.34 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Left
|
||||||
|
// Calloc returns null: len=7186416 in CDMLoopUV, total 2145859048
|
||||||
|
// Calloc returns null: len=7186416 in CDMLoopUV, total 2145859048
|
||||||
|
// Malloc returns null: len=3190672 in CDMTexPoly, total 2149293176
|
||||||
|
// Writing: /home/user/.sheepit/LEFT packed.crash.txt
|
||||||
|
return Error.Type.RENDERER_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
else if (line.contains("Malloc returns null")) {
|
||||||
|
// Fra:1 Mem:976.60M (0.00M, Peak 1000.54M) | Time:00:01.34 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Left
|
||||||
|
// Calloc returns null: len=7186416 in CDMLoopUV, total 2145859048
|
||||||
|
// Calloc returns null: len=7186416 in CDMLoopUV, total 2145859048
|
||||||
|
// Malloc returns null: len=3190672 in CDMTexPoly, total 2149293176
|
||||||
|
// Writing: /home/user/.sheepit/LEFT packed.crash.txt
|
||||||
|
return Error.Type.RENDERER_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
else if (line.contains("Error: run out of memory!")) {
|
||||||
|
// 09-01 09:26:45 (debug) Fra:4 Mem:8444.44M (Peak 12092.10M) | Time:01:11.45 | Mem:6632.02M, Peak:6632.02M | Scene, ViewLayer | Updating Mesh | Tessellating Plane 1/1
|
||||||
|
//09-01 09:27:30 (debug) Error: run out of memory!
|
||||||
|
//09-01 09:27:30 (debug) Fra:4 Mem:8444.44M (Peak 12092.10M) | Time:01:55.95 | Mem:6632.02M, Peak:6632.02M | Scene, ViewLayer | Sample 0/1024
|
||||||
|
//09-01 09:27:30 (debug) Error: Out of memory
|
||||||
|
//09-01 09:27:30 (debug) Fra:4 Mem:8745.04M (Peak 12092.10M) | Time:01:55.97 | Mem:6632.03M, Peak:6632.03M | Scene, ViewLayer | Out of memory
|
||||||
|
//09-01 09:27:33 (debug) Blender quit
|
||||||
|
return Error.Type.RENDERER_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
else if (line.contains("CUDA kernel compilation failed") || line.contains("OPTIX kernel compilation failed")) {
|
||||||
|
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.02 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Sun.001
|
||||||
|
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.02 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Synchronizing object | Sun.002
|
||||||
|
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.02 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Initializing
|
||||||
|
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.02 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Loading render kernels (may take a few minutes the first time)
|
||||||
|
// nvcc fatal : Value 'sm_61' is not defined for option 'gpu-architecture'
|
||||||
|
// CUDA kernel compilation failed, see console for details.
|
||||||
|
// Refer to the Cycles GPU rendering documentation for possible solutions:
|
||||||
|
// http://www.blender.org/manual/render/cycles/gpu_rendering.html
|
||||||
|
// Compiling CUDA kernel ...
|
||||||
|
// "nvcc" -arch=sm_61 -m64 --cubin "/tmp/cache/c36db40aa5e59f5ea4ff139180353dbc/2.77/scripts/addons/cycles/kernel/kernels/cuda/kernel.cu" -o "/tmp/cache/cycles_kernel_sm61_079195D400571E023CC499D037AB6EE5.cubin" --ptxas-options="-v" --use_fast_math -I"/tmp/cache/c36db40aa5e59f5ea4ff139180353dbc/2.77/scripts/addons/cycles/kernel" -DNVCC -D__KERNEL_CUDA_VERSION__=75
|
||||||
|
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.08 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Error | CUDA kernel compilation failed, see console for details.
|
||||||
|
// Error: CUDA kernel compilation failed, see console for details.
|
||||||
|
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.08 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Waiting for render to start
|
||||||
|
// Fra:1 Mem:200.70M (0.00M, Peak 378.15M) | Time:00:01.08 | Mem:0.00M, Peak:0.00M | Scene, RenderLayer | Cancel | CUDA kernel compilation failed, see console for details.
|
||||||
|
// Fra:1 Mem:147.74M (0.00M, Peak 378.15M) | Time:00:01.12 | Sce: Scene Ve:0 Fa:0 La:0
|
||||||
|
// Saved: '/tmp/cache/8_0001.png'
|
||||||
|
return Error.Type.GPU_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
else if (line.contains("Engine 'CYCLES' not available for scene") || line.contains("Engine 'BLENDER_EEVEE' not available for scene") || line.contains("Engine 'BLENDER_WORKBENCH' not available for scene") || line.contains("Engine 'HYDRA_STORM' not available for scene")) {
|
||||||
|
return Error.Type.ENGINE_NOT_AVAILABLE;
|
||||||
|
}
|
||||||
|
else if (line.contains("Warning: Cycles is not enabled!")) {
|
||||||
|
return Error.Type.ENGINE_NOT_AVAILABLE;
|
||||||
|
}
|
||||||
|
else if (line.contains("OpenImageDenoise error: SSE4.1 support is required at minimum") || line.contains("OpenImageDenoiser is not supported on this CPU:") || line.contains("OpenImageDenoise is not supported on this CPU:") || line.contains("No device available to denoise on")) {
|
||||||
|
//OpenImageDenoiser is Blender pre 4.2
|
||||||
|
//OpenImageDenoise after Blender 4.2
|
||||||
|
|
||||||
|
// denoising capability detection
|
||||||
|
// Fra:201 Mem:8.89M (Peak 10.09M) | Time:00:00.04 | Mem:0.27M, Peak:0.27M | Scene, View Layer | Updating Device | Writing constant memory
|
||||||
|
// Fra:201 Mem:8.89M (Peak 10.09M) | Time:00:00.04 | Mem:0.27M, Peak:0.27M | Scene, View Layer | Loading denoising kernels (may take a few minutes the first time)
|
||||||
|
// Fra:201 Mem:8.89M (Peak 10.09M) | Time:00:00.04 | Mem:0.27M, Peak:0.27M | Scene, View Layer | Sample 0/16
|
||||||
|
// Fra:201 Mem:127.55M (Peak 127.55M) | Time:00:00.65 | Remaining:00:09.13 | Mem:118.92M, Peak:118.92M | Scene, View Layer | Sample 1/16
|
||||||
|
// E0308 1719 31449 denoiser_oidn.cpp:197] OpenImageDenoise error: SSE4.1 support is required at minimum
|
||||||
|
// Fra:201 Mem:198.74M (Peak 301.58M) | Time:00:08.74 | Mem:118.92M, Peak:118.92M | Scene, View Layer | Sample 16/16
|
||||||
|
// Rendering done
|
||||||
|
// Fra:201 Mem:198.74M (Peak 301.58M) | Time:00:08.74 | Mem:118.92M, Peak:118.92M | Scene, View Layer | Finished
|
||||||
|
// Saved: '/tmp/5/sheepit/1541_0201.png'
|
||||||
|
// Time: 00:09.30 (Saving: 00:00.55)
|
||||||
|
// Blender quit
|
||||||
|
return Error.Type.DENOISING_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
else if (line.contains("Error: File format is not supported")) {
|
||||||
|
//09-03 23:36:03 (debug) Blender 2.83.19 (hash 86c526d2c733 built 2022-02-02 00:44:40)
|
||||||
|
//09-03 23:36:03 (debug) found bundled python: C:\Users\Username\Documents\sheepit\sheepit\f1f9e587201b428c9416faf614b677bf\2.83\python
|
||||||
|
//09-03 23:36:03 (debug) Error: File format is not supported in file 'C:\Users\Username\Documents\sheepit\sheepit\686c6bdbf752790b28c1b21180aa5db5\correndo4.blend'
|
||||||
|
//09-03 23:36:03 (debug) Blender quit
|
||||||
|
//09-03 23:36:03 (debug) end of rendering
|
||||||
|
return Error.Type.RENDERER_CRASHED;
|
||||||
|
}
|
||||||
|
else if (line.contains("Unable to open a display") || line.contains("Managed to successfully fallback to surfaceless EGL rendering!") || line.contains("Couldn't open libEGL")) {
|
||||||
|
//17-03 07:38:47 (debug) Fra:7 Mem:1667.27M (Peak 1762.19M) | Time:06:27.86 | Mem:1184.92M, Peak:1194.58M | Scene, ViewLayer | Sample 187/187
|
||||||
|
//17-03 07:38:47 (debug) Fra:7 Mem:1667.27M (Peak 1762.19M) | Time:06:27.86 | Mem:1184.92M, Peak:1194.58M | Scene, ViewLayer | Finished
|
||||||
|
//17-03 07:38:47 (debug) Unable to open a display
|
||||||
|
//17-03 07:38:47 (debug) end of rendering
|
||||||
|
//17-03 07:38:47 (error) Job::render no picture file found (after finished render (filename_without_extension 116372253_0007)
|
||||||
|
return Error.Type.CURRENTLY_HEADLESS;
|
||||||
|
}
|
||||||
|
else if (line.contains("Error: Cannot read file") || line.contains("Error: Failed to read blend file")) {
|
||||||
|
//14-10 11:03:21 (debug) Blender 3.1.0 (hash c77597cd0e15 built 2022-03-09 00:44:13)
|
||||||
|
//14-10 11:03:21 (debug) Error: Cannot read file 'C:\SheepIT\sheepit\ef925644a319c5ad604ebc077769bcb8\Passeio Virtual FINAL.blend': No such file or directory
|
||||||
|
//14-10 11:03:21 (debug) Blender quit
|
||||||
|
return Error.Type.CANNOT_READ_FILE;
|
||||||
|
}
|
||||||
|
else if (line.contains("DETECT_DEVICE_ERROR")) {
|
||||||
|
//./blender-3.3.2-linux-x64/blender -b -E CYCLES -P /mnt/d/sheep_gpu/set_gpu.py -f 1
|
||||||
|
//Blender 3.3.2 (hash bf24652e38a2 built 2022-12-07 01:12:36)
|
||||||
|
//Read prefs: /home/raimund/.config/blender/3.3/config/userpref.blend
|
||||||
|
///run/user/1000/gvfs/ non-existent directory
|
||||||
|
//DETECT_DEVICE_ERRORR: Couldn't find OPTIX device with id CUDA_NVIDIA GeForce GTX 1080_0000:01:00_OptiX
|
||||||
|
return Error.Type.DETECT_DEVICE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Error.Type.OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
39
src/main/java/com/sheepit/client/RenderSettings.java
Normal file
39
src/main/java/com/sheepit/client/RenderSettings.java
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2024 Laurent CLOUET
|
||||||
|
* Author Laurent CLOUET <laurent.clouet@nopnop.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; version 2
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sheepit.client;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Settings of a render (command, use gpu,...)
|
||||||
|
*/
|
||||||
|
@Data @AllArgsConstructor public class RenderSettings {
|
||||||
|
public static final String UPDATE_METHOD_BY_REMAINING_TIME = "remainingtime";
|
||||||
|
public static final String UPDATE_METHOD_BY_TILE = "by_tile";
|
||||||
|
|
||||||
|
|
||||||
|
private String frameNumber;
|
||||||
|
private String script;
|
||||||
|
private String path; // path inside the archive
|
||||||
|
private String command;
|
||||||
|
private boolean useGPU;
|
||||||
|
private String updateRenderingStatusMethod;
|
||||||
|
}
|
||||||
42
src/main/java/com/sheepit/client/RenderState.java
Normal file
42
src/main/java/com/sheepit/client/RenderState.java
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2024 Laurent CLOUET
|
||||||
|
* Author Laurent CLOUET <laurent.clouet@nopnop.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; version 2
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sheepit.client;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Track if the render ask been cancel, is finished...
|
||||||
|
*/
|
||||||
|
@Data public class RenderState {
|
||||||
|
private boolean askForRendererKill = false;
|
||||||
|
private boolean userBlock = false;
|
||||||
|
private boolean serverBlock = false;
|
||||||
|
private boolean incompatibleProcessKill = false;
|
||||||
|
|
||||||
|
public void setBlockIncompatibleProcess() {
|
||||||
|
setAskForRendererKill(true);
|
||||||
|
setIncompatibleProcessKill(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBlock() {
|
||||||
|
setAskForRendererKill(true);
|
||||||
|
setUserBlock(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -132,7 +132,7 @@ public class Server extends Thread {
|
|||||||
if (this.client != null && this.client.getRenderingJob() != null) {
|
if (this.client != null && this.client.getRenderingJob() != null) {
|
||||||
Job job = this.client.getRenderingJob();
|
Job job = this.client.getRenderingJob();
|
||||||
|
|
||||||
urlBuilder.addQueryParameter("frame", job.getFrameNumber()).addQueryParameter("job", job.getId());
|
urlBuilder.addQueryParameter("frame", job.getRenderSettings().getFrameNumber()).addQueryParameter("job", job.getId());
|
||||||
|
|
||||||
RenderProcess process = job.getProcessRender();
|
RenderProcess process = job.getProcessRender();
|
||||||
if (process != null) {
|
if (process != null) {
|
||||||
@@ -153,10 +153,10 @@ public class Server extends Thread {
|
|||||||
this.log.debug("Server::stayAlive server asked to kill local render process");
|
this.log.debug("Server::stayAlive server asked to kill local render process");
|
||||||
// kill the current process, it will generate an error but it's okay
|
// kill the current process, it will generate an error but it's okay
|
||||||
if (this.client != null && this.client.getRenderingJob() != null) {
|
if (this.client != null && this.client.getRenderingJob() != null) {
|
||||||
this.client.getRenderingJob().setServerBlockJob(true);
|
this.client.getRenderingJob().getRenderState().setServerBlock(true);
|
||||||
|
|
||||||
if (this.client.getRenderingJob().getProcessRender().getProcess() != null) {
|
if (this.client.getRenderingJob().getProcessRender().getProcess() != null) {
|
||||||
this.client.getRenderingJob().setAskForRendererKill(true);
|
this.client.getRenderingJob().getRenderState().setAskForRendererKill(true);
|
||||||
this.client.getRenderingJob().getProcessRender().kill();
|
this.client.getRenderingJob().getProcessRender().kill();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -522,10 +522,10 @@ public class Server extends Thread {
|
|||||||
LocalDateTime startRequestTime = LocalDateTime.now();
|
LocalDateTime startRequestTime = LocalDateTime.now();
|
||||||
|
|
||||||
while ((len = is.read(buffer)) != -1) {
|
while ((len = is.read(buffer)) != -1) {
|
||||||
if (this.client.getRenderingJob().isServerBlockJob()) {
|
if (this.client.getRenderingJob().getRenderState().isServerBlock()) {
|
||||||
return Error.Type.RENDERER_KILLED_BY_SERVER;
|
return Error.Type.RENDERER_KILLED_BY_SERVER;
|
||||||
}
|
}
|
||||||
else if (this.client.getRenderingJob().isUserBlockJob()) {
|
else if (this.client.getRenderingJob().getRenderState().isUserBlock()) {
|
||||||
return Error.Type.RENDERER_KILLED_BY_USER;
|
return Error.Type.RENDERER_KILLED_BY_USER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -410,13 +410,13 @@ public class Working implements Activity {
|
|||||||
else {
|
else {
|
||||||
String path = null;
|
String path = null;
|
||||||
try {
|
try {
|
||||||
boolean hasPreview = lastJob.getPreviewImagePath() != null;
|
boolean hasPreview = lastJob.getRenderOutput().getPreviewImagePath() != null;
|
||||||
|
|
||||||
if (hasPreview) {
|
if (hasPreview) {
|
||||||
path = lastJob.getPreviewImagePath();
|
path = lastJob.getRenderOutput().getPreviewImagePath();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
path = lastJob.getOutputImagePath();
|
path = lastJob.getRenderOutput().getFullImagePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
BufferedImage img = ImageIO.read(new File(path));
|
BufferedImage img = ImageIO.read(new File(path));
|
||||||
|
|||||||
Reference in New Issue
Block a user