Remove Shader compiler tab from Asset Processor (#6486)
* Remove Shader compiler tab from Asset Processor Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> * Remove more references to shader compiler Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com>
This commit is contained in:
@@ -63,13 +63,6 @@ set(FILES
|
||||
native/resourcecompiler/RCJobSortFilterProxyModel.h
|
||||
native/resourcecompiler/RCQueueSortModel.cpp
|
||||
native/resourcecompiler/RCQueueSortModel.h
|
||||
native/shadercompiler/shadercompilerjob.cpp
|
||||
native/shadercompiler/shadercompilerjob.h
|
||||
native/shadercompiler/shadercompilerManager.cpp
|
||||
native/shadercompiler/shadercompilerManager.h
|
||||
native/shadercompiler/shadercompilerMessages.h
|
||||
native/shadercompiler/shadercompilerModel.cpp
|
||||
native/shadercompiler/shadercompilerModel.h
|
||||
native/utilities/ApplicationManagerAPI.h
|
||||
native/utilities/ApplicationManager.cpp
|
||||
native/utilities/ApplicationManager.h
|
||||
|
||||
@@ -67,8 +67,6 @@ set(FILES
|
||||
native/unittests/PlatformConfigurationUnitTests.h
|
||||
native/unittests/RCcontrollerUnitTests.cpp
|
||||
native/unittests/RCcontrollerUnitTests.h
|
||||
native/unittests/ShaderCompilerUnitTests.cpp
|
||||
native/unittests/ShaderCompilerUnitTests.h
|
||||
native/unittests/UnitTestRunner.cpp
|
||||
native/unittests/UnitTestRunner.h
|
||||
native/unittests/UtilitiesUnitTests.cpp
|
||||
|
||||
@@ -1,162 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
#include "shadercompilerManager.h"
|
||||
#include "shadercompilerjob.h"
|
||||
|
||||
#include <QThreadPool>
|
||||
|
||||
#include "native/utilities/assetUtils.h"
|
||||
|
||||
ShaderCompilerManager::ShaderCompilerManager(QObject* parent)
|
||||
: QObject(parent)
|
||||
, m_isUnitTesting(false)
|
||||
, m_numberOfJobsStarted(0)
|
||||
, m_numberOfJobsEnded(0)
|
||||
, m_numberOfErrors(0)
|
||||
{
|
||||
}
|
||||
|
||||
ShaderCompilerManager::~ShaderCompilerManager()
|
||||
{
|
||||
}
|
||||
|
||||
void ShaderCompilerManager::process(unsigned int connID, unsigned int type, unsigned int serial, QByteArray payload)
|
||||
{
|
||||
(void)type;
|
||||
(void)serial;
|
||||
Q_ASSERT(AssetUtilities::ComputeCRC32Lowercase("ShaderCompilerProxyRequest") == type);
|
||||
decodeShaderCompilerRequest(connID, payload);
|
||||
}
|
||||
|
||||
void ShaderCompilerManager::decodeShaderCompilerRequest(unsigned int connID, QByteArray payload)
|
||||
{
|
||||
if (payload.length() < sizeof(unsigned int) + sizeof(unsigned int) + 2 + sizeof(unsigned short))
|
||||
{
|
||||
QString error = "Payload size is too small";
|
||||
AZ_Warning(AssetProcessor::ConsoleChannel, false, error.toUtf8().data());
|
||||
emit sendErrorMessage(error);
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned char* data_end = reinterpret_cast<unsigned char*>(payload.data() + payload.size());
|
||||
unsigned int* requestId = reinterpret_cast<unsigned int*>(data_end - sizeof(unsigned int));
|
||||
unsigned int* serverListSizePtr = reinterpret_cast<unsigned int*>(data_end - sizeof(unsigned int) - sizeof(unsigned int));
|
||||
unsigned short* serverPortPtr = reinterpret_cast<unsigned short*>(data_end - sizeof(unsigned int) - sizeof(unsigned int) - sizeof(unsigned short));
|
||||
|
||||
ShaderCompilerRequestMessage msg;
|
||||
QString error;
|
||||
|
||||
msg.requestId = *requestId;
|
||||
msg.serverListSize = *serverListSizePtr;
|
||||
msg.serverPort = *serverPortPtr;
|
||||
if ((msg.serverListSize <= 0) || (msg.serverListSize > 100000))
|
||||
{
|
||||
error = "Shader Compiler Server List is wrong";
|
||||
AZ_Warning(AssetProcessor::ConsoleChannel, false, error.toUtf8().data());
|
||||
emit sendErrorMessage(error);
|
||||
return;
|
||||
}
|
||||
if (msg.serverPort == 0)
|
||||
{
|
||||
error = "Shader Compiler port is wrong";
|
||||
AZ_Warning(AssetProcessor::ConsoleChannel, false, error.toUtf8().data());
|
||||
emit sendErrorMessage(error);
|
||||
return;
|
||||
}
|
||||
|
||||
char* position_of_first_null = reinterpret_cast<char*>(serverPortPtr) - 1;// -1 for null
|
||||
if ((*position_of_first_null) != '\0')
|
||||
{
|
||||
error = "Shader Compiler payload is corrupt,position is not null";
|
||||
AZ_Warning(AssetProcessor::ConsoleChannel, false, error.toUtf8().data());
|
||||
emit sendErrorMessage(error);
|
||||
return;
|
||||
}
|
||||
char* beginning_of_serverList = position_of_first_null - msg.serverListSize;
|
||||
char* position_of_second_null = beginning_of_serverList - 1;//-1 for null
|
||||
|
||||
if ((*position_of_second_null) != '\0')
|
||||
{
|
||||
error = "Shader Compiler payload is corrupt,position is not null";
|
||||
AZ_Warning(AssetProcessor::ConsoleChannel, false, error.toUtf8().data());
|
||||
emit sendErrorMessage(error);
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int originalPayloadSize = static_cast<unsigned int>(payload.size()) - sizeof(unsigned int) - sizeof(unsigned int) - sizeof(unsigned short) - static_cast<unsigned int>(msg.serverListSize) - 2;
|
||||
msg.serverList = beginning_of_serverList;
|
||||
msg.originalPayload.insert(0, payload.data(), static_cast<unsigned int>(originalPayloadSize));
|
||||
ShaderCompilerJob* shaderCompilerJob = new ShaderCompilerJob();
|
||||
shaderCompilerJob->initialize(this, msg);
|
||||
shaderCompilerJob->setIsUnitTesting(m_isUnitTesting);
|
||||
m_shaderCompilerJobMap[msg.requestId] = connID;
|
||||
shaderCompilerJob->setAutoDelete(true);
|
||||
QThreadPool* threadPool = QThreadPool::globalInstance();
|
||||
threadPool->start(shaderCompilerJob);
|
||||
}
|
||||
|
||||
void ShaderCompilerManager::OnShaderCompilerJobComplete(QByteArray payload, unsigned int requestId)
|
||||
{
|
||||
auto iterator = m_shaderCompilerJobMap.find(requestId);
|
||||
if (iterator != m_shaderCompilerJobMap.end())
|
||||
{
|
||||
sendResponse(iterator.value(), AssetUtilities::ComputeCRC32Lowercase("ShaderCompilerProxyResponse"), 0, payload);
|
||||
}
|
||||
else
|
||||
{
|
||||
QString error = "Shader Compiler cannot find the connection id";
|
||||
AZ_Warning(AssetProcessor::ConsoleChannel, false, error.toUtf8().data());
|
||||
emit sendErrorMessage(error);
|
||||
}
|
||||
}
|
||||
|
||||
void ShaderCompilerManager::sendResponse(unsigned int connId, unsigned int /*type*/, unsigned int /*serial*/, QByteArray payload)
|
||||
{
|
||||
EBUS_EVENT_ID(connId, AssetProcessor::ConnectionBus, SendRaw, AssetUtilities::ComputeCRC32Lowercase("ShaderCompilerProxyResponse"), 0, payload);
|
||||
}
|
||||
|
||||
void ShaderCompilerManager::shaderCompilerError(QString errorMessage, QString server, QString timestamp, QString payload)
|
||||
{
|
||||
m_numberOfErrors++;
|
||||
emit numberOfErrorsChanged();
|
||||
emit sendErrorMessageFromShaderJob(errorMessage, server, timestamp, payload);
|
||||
}
|
||||
|
||||
void ShaderCompilerManager::jobStarted()
|
||||
{
|
||||
m_numberOfJobsStarted++;
|
||||
emit numberOfJobsStartedChanged();
|
||||
}
|
||||
|
||||
void ShaderCompilerManager::jobEnded()
|
||||
{
|
||||
m_numberOfJobsEnded++;
|
||||
numberOfJobsEndedChanged();
|
||||
}
|
||||
|
||||
|
||||
void ShaderCompilerManager::setIsUnitTesting(bool isUnitTesting)
|
||||
{
|
||||
m_isUnitTesting = isUnitTesting;
|
||||
}
|
||||
|
||||
int ShaderCompilerManager::numberOfJobsStarted()
|
||||
{
|
||||
return m_numberOfJobsStarted;
|
||||
}
|
||||
|
||||
int ShaderCompilerManager::numberOfJobsEnded()
|
||||
{
|
||||
return m_numberOfJobsEnded;
|
||||
}
|
||||
|
||||
int ShaderCompilerManager::numberOfErrors()
|
||||
{
|
||||
return m_numberOfErrors;
|
||||
}
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
#ifndef SHADERCOMPILERMANAGER_H
|
||||
#define SHADERCOMPILERMANAGER_H
|
||||
|
||||
#if !defined(Q_MOC_RUN)
|
||||
#include <QObject>
|
||||
#include <QHash>
|
||||
#include <QString>
|
||||
#include <QByteArray>
|
||||
#endif
|
||||
|
||||
typedef QHash<unsigned int, unsigned int> ShaderCompilerJobMap;
|
||||
|
||||
/**
|
||||
* The Shader Compiler Manager class receive a shader compile request
|
||||
* and starts a shader compiler job for it
|
||||
*/
|
||||
class ShaderCompilerManager
|
||||
: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int numberOfJobsStarted READ numberOfJobsStarted NOTIFY numberOfJobsStartedChanged)
|
||||
Q_PROPERTY(int numberOfJobsEnded READ numberOfJobsEnded NOTIFY numberOfJobsEndedChanged)
|
||||
Q_PROPERTY(int numberOfErrors READ numberOfErrors NOTIFY numberOfErrorsChanged)
|
||||
public:
|
||||
|
||||
explicit ShaderCompilerManager(QObject* parent = 0);
|
||||
virtual ~ShaderCompilerManager();
|
||||
|
||||
void process(unsigned int connID, unsigned int type, unsigned int serial, QByteArray payload);
|
||||
void decodeShaderCompilerRequest(unsigned int connID, QByteArray payload);
|
||||
void setIsUnitTesting(bool isUnitTesting);
|
||||
int numberOfJobsStarted();
|
||||
int numberOfJobsEnded();
|
||||
int numberOfErrors();
|
||||
virtual void sendResponse(unsigned int connId, unsigned int type, unsigned int serial, QByteArray payload);
|
||||
|
||||
signals:
|
||||
void sendErrorMessage(QString errorMessage);
|
||||
void sendErrorMessageFromShaderJob(QString errorMessage, QString server, QString timestamp, QString payload);
|
||||
void numberOfJobsStartedChanged();
|
||||
void numberOfJobsEndedChanged();
|
||||
void numberOfErrorsChanged();
|
||||
|
||||
|
||||
public slots:
|
||||
void OnShaderCompilerJobComplete(QByteArray payload, unsigned int requestId);
|
||||
void shaderCompilerError(QString errorMessage, QString server, QString timestamp, QString payload);
|
||||
void jobStarted();
|
||||
void jobEnded();
|
||||
|
||||
|
||||
private:
|
||||
ShaderCompilerJobMap m_shaderCompilerJobMap;
|
||||
bool m_isUnitTesting;
|
||||
int m_numberOfJobsStarted;
|
||||
int m_numberOfJobsEnded;
|
||||
int m_numberOfErrors;
|
||||
};
|
||||
|
||||
#endif // SHADERCOMPILERMANAGER_H
|
||||
@@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
#ifndef SHADERCOMPILERMESSAGES_H
|
||||
#define SHADERCOMPILERMESSAGES_H
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QString>
|
||||
|
||||
struct ShaderCompilerRequestMessage
|
||||
{
|
||||
QByteArray originalPayload;
|
||||
QString serverList;
|
||||
unsigned short serverPort;
|
||||
unsigned int serverListSize;
|
||||
unsigned int requestId;
|
||||
};
|
||||
|
||||
#endif //SHADERCOMPILERMESSAGES_H
|
||||
|
||||
@@ -1,150 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
#include "shadercompilerModel.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
ShaderCompilerModel* s_singleton = nullptr;
|
||||
}
|
||||
|
||||
ShaderCompilerModel::ShaderCompilerModel(QObject* parent)
|
||||
: QAbstractItemModel(parent)
|
||||
{
|
||||
Q_ASSERT(s_singleton == nullptr);
|
||||
s_singleton = this;
|
||||
}
|
||||
|
||||
ShaderCompilerModel::~ShaderCompilerModel()
|
||||
{
|
||||
s_singleton = nullptr;
|
||||
}
|
||||
|
||||
ShaderCompilerModel* ShaderCompilerModel::Get()
|
||||
{
|
||||
return s_singleton;
|
||||
}
|
||||
|
||||
QVariant ShaderCompilerModel::data(const QModelIndex& index, int role) const
|
||||
{
|
||||
if (!index.isValid())
|
||||
{
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
int row = index.row();
|
||||
|
||||
if (row < 0)
|
||||
{
|
||||
return QVariant();
|
||||
}
|
||||
if (row >= m_shaderErrorInfoList.count())
|
||||
{
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
switch (role)
|
||||
{
|
||||
case TimeStampRole:
|
||||
return m_shaderErrorInfoList[row].m_shaderTimestamp;
|
||||
case ServerRole:
|
||||
return m_shaderErrorInfoList[row].m_shaderServerName;
|
||||
case ErrorRole:
|
||||
return m_shaderErrorInfoList[row].m_shaderError;
|
||||
case OriginalRequestRole:
|
||||
return m_shaderErrorInfoList[row].m_shaderOriginalPayload;
|
||||
|
||||
case Qt::DisplayRole:
|
||||
switch (index.column())
|
||||
{
|
||||
case ColumnTimeStamp:
|
||||
return m_shaderErrorInfoList[row].m_shaderTimestamp;
|
||||
case ColumnServer:
|
||||
return m_shaderErrorInfoList[row].m_shaderServerName;
|
||||
case ColumnError:
|
||||
return m_shaderErrorInfoList[row].m_shaderServerName;
|
||||
}
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
|
||||
Qt::ItemFlags ShaderCompilerModel::flags(const QModelIndex& index) const
|
||||
{
|
||||
(void)index;
|
||||
return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
|
||||
}
|
||||
|
||||
|
||||
int ShaderCompilerModel::rowCount(const QModelIndex& parent) const
|
||||
{
|
||||
(void)parent;
|
||||
return m_shaderErrorInfoList.count();
|
||||
}
|
||||
|
||||
|
||||
QModelIndex ShaderCompilerModel::parent(const QModelIndex&) const
|
||||
{
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
|
||||
QModelIndex ShaderCompilerModel::index(int row, int column, const QModelIndex& parent) const
|
||||
{
|
||||
if (row >= rowCount(parent) || column >= columnCount(parent))
|
||||
{
|
||||
return QModelIndex();
|
||||
}
|
||||
return createIndex(row, column);
|
||||
}
|
||||
|
||||
|
||||
int ShaderCompilerModel::columnCount(const QModelIndex& parent) const
|
||||
{
|
||||
return parent.isValid() ? 0 : Column::Max;
|
||||
}
|
||||
|
||||
|
||||
QVariant ShaderCompilerModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||
{
|
||||
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
|
||||
{
|
||||
switch (section)
|
||||
{
|
||||
case ColumnTimeStamp:
|
||||
return tr("Time Stamp");
|
||||
case ColumnServer:
|
||||
return tr("Server");
|
||||
case ColumnError:
|
||||
return tr("Error");
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return QAbstractItemModel::headerData(section, orientation, role);
|
||||
}
|
||||
|
||||
|
||||
QHash<int, QByteArray> ShaderCompilerModel::roleNames() const
|
||||
{
|
||||
QHash<int, QByteArray> result;
|
||||
result[TimeStampRole] = "timestamp";
|
||||
result[ServerRole] = "server";
|
||||
result[ErrorRole] = "error";
|
||||
result[OriginalRequestRole] = "originalRequest";
|
||||
return result;
|
||||
}
|
||||
void ShaderCompilerModel::addShaderErrorInfoEntry(QString errorMessage, QString timestamp, QString payload, QString server)
|
||||
{
|
||||
ShaderCompilerErrorInfo shaderCompileErrorInfo(errorMessage, timestamp, payload, server);
|
||||
beginInsertRows(QModelIndex(), m_shaderErrorInfoList.size(), m_shaderErrorInfoList.size());
|
||||
m_shaderErrorInfoList.append(shaderCompileErrorInfo);
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
#ifndef SHADERCOMPILERMODEL_H
|
||||
#define SHADERCOMPILERMODEL_H
|
||||
|
||||
#if !defined(Q_MOC_RUN)
|
||||
#include <QAbstractItemModel>
|
||||
#include <QList>
|
||||
#include <QVariant>
|
||||
#include <QHash>
|
||||
#include <QByteArray>
|
||||
#include <QString>
|
||||
#endif
|
||||
|
||||
class QModelIndex;
|
||||
class QObject;
|
||||
|
||||
struct ShaderCompilerErrorInfo
|
||||
{
|
||||
QString m_shaderError;
|
||||
QString m_shaderTimestamp;
|
||||
QString m_shaderOriginalPayload;
|
||||
QString m_shaderServerName;
|
||||
|
||||
ShaderCompilerErrorInfo(QString shaderError, QString shaderTimestamp, QString shaderOriginalPayload, QString shaderServerName)
|
||||
: m_shaderError(shaderError)
|
||||
, m_shaderTimestamp(shaderTimestamp)
|
||||
, m_shaderOriginalPayload(shaderOriginalPayload)
|
||||
, m_shaderServerName(shaderServerName)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
/** The Shader Compiler model is responsible for capturing error requests
|
||||
*/
|
||||
class ShaderCompilerModel
|
||||
: public QAbstractItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
||||
enum DataRoles
|
||||
{
|
||||
TimeStampRole = Qt::UserRole + 1,
|
||||
ServerRole,
|
||||
ErrorRole,
|
||||
OriginalRequestRole,
|
||||
};
|
||||
|
||||
enum Column
|
||||
{
|
||||
ColumnTimeStamp,
|
||||
ColumnServer,
|
||||
ColumnError,
|
||||
Max
|
||||
};
|
||||
|
||||
/// standard Qt constructor
|
||||
explicit ShaderCompilerModel(QObject* parent = 0);
|
||||
virtual ~ShaderCompilerModel();
|
||||
|
||||
// singleton pattern
|
||||
static ShaderCompilerModel* Get();
|
||||
|
||||
|
||||
/// QAbstractListModel interface
|
||||
QModelIndex parent(const QModelIndex&) const override;
|
||||
QModelIndex index(int row, int column, const QModelIndex& parent) const override;
|
||||
int columnCount(const QModelIndex&) const override;
|
||||
virtual int rowCount(const QModelIndex& parent) const override;
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||
virtual QVariant data(const QModelIndex& index, int role) const override;
|
||||
virtual QHash<int, QByteArray> roleNames() const override;
|
||||
virtual Qt::ItemFlags flags(const QModelIndex& index) const override;
|
||||
|
||||
public slots:
|
||||
void addShaderErrorInfoEntry(QString errorMessage, QString timestamp, QString payload, QString server);
|
||||
|
||||
private:
|
||||
|
||||
QList<ShaderCompilerErrorInfo> m_shaderErrorInfoList;
|
||||
};
|
||||
|
||||
|
||||
#endif // SHADERCOMPILERMODEL_H
|
||||
|
||||
|
||||
|
||||
@@ -1,194 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
#include "shadercompilerjob.h"
|
||||
#include "native/assetprocessor.h"
|
||||
|
||||
#include <QTcpSocket>
|
||||
|
||||
ShaderCompilerJob::ShaderCompilerJob()
|
||||
: m_isUnitTesting(false)
|
||||
, m_manager(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
ShaderCompilerJob::~ShaderCompilerJob()
|
||||
{
|
||||
m_manager = nullptr;
|
||||
}
|
||||
|
||||
ShaderCompilerRequestMessage ShaderCompilerJob::ShaderCompilerMessage() const
|
||||
{
|
||||
return m_ShaderCompilerMessage;
|
||||
}
|
||||
|
||||
void ShaderCompilerJob::initialize(QObject* pManager, const ShaderCompilerRequestMessage& ShaderCompilerMessage)
|
||||
{
|
||||
m_manager = pManager;
|
||||
m_ShaderCompilerMessage = ShaderCompilerMessage;
|
||||
}
|
||||
|
||||
QString ShaderCompilerJob::getServerAddress()
|
||||
{
|
||||
if (isServerListEmpty())
|
||||
{
|
||||
return QString();
|
||||
}
|
||||
|
||||
QString serverAddress;
|
||||
if (!m_ShaderCompilerMessage.serverList.contains(","))
|
||||
{
|
||||
serverAddress = m_ShaderCompilerMessage.serverList;
|
||||
m_ShaderCompilerMessage.serverList.clear();
|
||||
return serverAddress;
|
||||
}
|
||||
|
||||
QStringList serverList = m_ShaderCompilerMessage.serverList.split(",");
|
||||
serverAddress = serverList.takeAt(0);
|
||||
m_ShaderCompilerMessage.serverList = serverList.join(",");
|
||||
return serverAddress;
|
||||
}
|
||||
|
||||
bool ShaderCompilerJob::isServerListEmpty()
|
||||
{
|
||||
return m_ShaderCompilerMessage.serverList.isEmpty();
|
||||
}
|
||||
|
||||
bool ShaderCompilerJob::attemptDelivery(QString serverAddress, QByteArray& payload)
|
||||
{
|
||||
QTcpSocket socket;
|
||||
QString error;
|
||||
int waitingTime = 8000; // 8 sec timeout for sending.
|
||||
int jobCompileMaxTime = 1000 * 60; // 60 sec timeout for compilation
|
||||
if (m_isUnitTesting)
|
||||
{
|
||||
waitingTime = 500;
|
||||
jobCompileMaxTime = 500;
|
||||
}
|
||||
|
||||
socket.connectToHost(serverAddress, m_ShaderCompilerMessage.serverPort, QIODevice::ReadWrite);
|
||||
|
||||
if (socket.waitForConnected(waitingTime))
|
||||
{
|
||||
qint64 bytesWritten = 0;
|
||||
qint64 payloadSize = static_cast<qint64>(m_ShaderCompilerMessage.originalPayload.size());
|
||||
// send payload size to server
|
||||
while (bytesWritten != sizeof(qint64))
|
||||
{
|
||||
qint64 currentWrite = socket.write(reinterpret_cast<char*>(&payloadSize) + bytesWritten,
|
||||
sizeof(qint64) - bytesWritten);
|
||||
if (currentWrite == -1)
|
||||
{
|
||||
//It is important to note that we are only outputting the error to debugchannel only here because
|
||||
//we are forwarding these error messages upstream to the manager,who will take the appropriate action
|
||||
error = "Connection Lost:Unable to send data";
|
||||
AZ_TracePrintf(AssetProcessor::DebugChannel, error.toUtf8().data());
|
||||
QMetaObject::invokeMethod(m_manager, "shaderCompilerError", Qt::QueuedConnection, Q_ARG(QString, error), Q_ARG(QString, QDateTime::currentDateTime().toString()), Q_ARG(QString, QString(m_ShaderCompilerMessage.originalPayload)), Q_ARG(QString, serverAddress));
|
||||
return false;
|
||||
}
|
||||
socket.flush();
|
||||
bytesWritten += currentWrite;
|
||||
}
|
||||
bytesWritten = 0;
|
||||
//send actual payload to server
|
||||
while (bytesWritten != m_ShaderCompilerMessage.originalPayload.size())
|
||||
{
|
||||
qint64 currentWrite = socket.write(m_ShaderCompilerMessage.originalPayload.data() + bytesWritten,
|
||||
m_ShaderCompilerMessage.originalPayload.size() - bytesWritten);
|
||||
if (currentWrite == -1)
|
||||
{
|
||||
error = "Connection Lost:Unable to send data";
|
||||
AZ_TracePrintf(AssetProcessor::DebugChannel, error.toUtf8().data());
|
||||
QMetaObject::invokeMethod(m_manager, "shaderCompilerError", Qt::QueuedConnection, Q_ARG(QString, error), Q_ARG(QString, QDateTime::currentDateTime().toString()), Q_ARG(QString, QString(m_ShaderCompilerMessage.originalPayload)), Q_ARG(QString, serverAddress));
|
||||
}
|
||||
socket.flush();
|
||||
bytesWritten += currentWrite;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
error = "Unable to connect to IP Address " + serverAddress;
|
||||
AZ_TracePrintf(AssetProcessor::DebugChannel, error.toUtf8().data());
|
||||
QMetaObject::invokeMethod(m_manager, "shaderCompilerError", Qt::QueuedConnection, Q_ARG(QString, error), Q_ARG(QString, QDateTime::currentDateTime().toString()), Q_ARG(QString, QString(m_ShaderCompilerMessage.originalPayload)), Q_ARG(QString, serverAddress));
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned int expectedBytes = sizeof(unsigned int) + sizeof(qint8);
|
||||
unsigned int bytesReadTotal = 0;
|
||||
unsigned int messageSize = 0;
|
||||
bool isMessageSizeKnown = false;
|
||||
//read the entire payload
|
||||
while ((bytesReadTotal < expectedBytes + messageSize))
|
||||
{
|
||||
if (socket.bytesAvailable() == 0)
|
||||
{
|
||||
if (!socket.waitForReadyRead(jobCompileMaxTime))
|
||||
{
|
||||
error = "Remote IP is taking too long to respond: " + serverAddress;
|
||||
AZ_TracePrintf(AssetProcessor::DebugChannel, error.toUtf8().data());
|
||||
QMetaObject::invokeMethod(m_manager, "shaderCompilerError", Qt::QueuedConnection, Q_ARG(QString, error), Q_ARG(QString, QDateTime::currentDateTime().toString()), Q_ARG(QString, QString(m_ShaderCompilerMessage.originalPayload)), Q_ARG(QString, serverAddress));
|
||||
payload.clear();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
qint64 bytesAvailable = socket.bytesAvailable();
|
||||
|
||||
if (bytesAvailable >= expectedBytes && !isMessageSizeKnown)
|
||||
{
|
||||
socket.peek(reinterpret_cast<char*>(&messageSize), sizeof(unsigned int));
|
||||
payload.resize(expectedBytes + messageSize);
|
||||
isMessageSizeKnown = true;
|
||||
}
|
||||
|
||||
if (bytesAvailable > 0)
|
||||
{
|
||||
qint64 bytesRead = socket.read(payload.data() + bytesReadTotal, bytesAvailable);
|
||||
|
||||
if (bytesRead <= 0)
|
||||
{
|
||||
error = "Connection closed by remote IP Address " + serverAddress;
|
||||
AZ_TracePrintf(AssetProcessor::DebugChannel, error.toUtf8().data());
|
||||
QMetaObject::invokeMethod(m_manager, "shaderCompilerError", Qt::QueuedConnection, Q_ARG(QString, error), Q_ARG(QString, QDateTime::currentDateTime().toString()), Q_ARG(QString, QString(m_ShaderCompilerMessage.originalPayload)), Q_ARG(QString, serverAddress));
|
||||
payload.clear();
|
||||
return false;
|
||||
}
|
||||
|
||||
bytesReadTotal = aznumeric_cast<uint32_t>(bytesReadTotal + bytesRead);
|
||||
}
|
||||
}
|
||||
|
||||
return true; // payload successfully send
|
||||
}
|
||||
|
||||
void ShaderCompilerJob::run()
|
||||
{
|
||||
QMetaObject::invokeMethod(m_manager, "jobStarted", Qt::QueuedConnection);
|
||||
QByteArray payload;
|
||||
//until server list is empty, keep trying
|
||||
while (!isServerListEmpty())
|
||||
{
|
||||
QString serverAddress = getServerAddress();
|
||||
//attempt to send payload
|
||||
if (attemptDelivery(serverAddress, payload))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
//we are appending request id at the end of every payload,
|
||||
//therefore in the case of any errors also
|
||||
//we will be sending atleast four bytes to the game
|
||||
payload.append(reinterpret_cast<char*>(&m_ShaderCompilerMessage.requestId), sizeof(unsigned int));
|
||||
QMetaObject::invokeMethod(m_manager, "OnShaderCompilerJobComplete", Qt::QueuedConnection, Q_ARG(QByteArray, payload), Q_ARG(unsigned int, m_ShaderCompilerMessage.requestId));
|
||||
QMetaObject::invokeMethod(m_manager, "jobEnded", Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
|
||||
void ShaderCompilerJob::setIsUnitTesting(bool isUnitTesting)
|
||||
{
|
||||
m_isUnitTesting = isUnitTesting;
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
#ifndef SHADERCOMPILERJOB_H
|
||||
#define SHADERCOMPILERJOB_H
|
||||
|
||||
#include <QRunnable>
|
||||
#include "shadercompilerMessages.h"
|
||||
|
||||
class QByteArray;
|
||||
class QObject;
|
||||
|
||||
/**
|
||||
* This class is responsible for connecting to the shader compiler server
|
||||
* and getting back the response to the shader compiler manager
|
||||
*/
|
||||
class ShaderCompilerJob
|
||||
: public QRunnable
|
||||
{
|
||||
public:
|
||||
|
||||
explicit ShaderCompilerJob();
|
||||
virtual ~ShaderCompilerJob();
|
||||
ShaderCompilerRequestMessage ShaderCompilerMessage() const;
|
||||
void initialize(QObject* pManager, const ShaderCompilerRequestMessage& ShaderCompilerMessage);
|
||||
QString getServerAddress();
|
||||
bool isServerListEmpty();
|
||||
virtual void run() override;
|
||||
|
||||
void setIsUnitTesting(bool isUnitTesting);
|
||||
|
||||
bool attemptDelivery(QString serverAddress, QByteArray& payload);
|
||||
|
||||
private:
|
||||
ShaderCompilerRequestMessage m_ShaderCompilerMessage;
|
||||
QObject* m_manager;
|
||||
bool m_isUnitTesting;
|
||||
};
|
||||
|
||||
#endif // SHADERCOMPILERJOB_H
|
||||
@@ -37,7 +37,6 @@
|
||||
#include "../connection/connection.h"
|
||||
#include "../resourcecompiler/rccontroller.h"
|
||||
#include "../resourcecompiler/RCJobSortFilterProxyModel.h"
|
||||
#include "../shadercompiler/shadercompilerModel.h"
|
||||
|
||||
|
||||
#include <QClipboard>
|
||||
@@ -148,7 +147,6 @@ void MainWindow::Activate()
|
||||
ui->buttonList->addTab(QStringLiteral("Jobs"));
|
||||
ui->buttonList->addTab(QStringLiteral("Assets"));
|
||||
ui->buttonList->addTab(QStringLiteral("Logs"));
|
||||
ui->buttonList->addTab(QStringLiteral("Shaders"));
|
||||
ui->buttonList->addTab(QStringLiteral("Connections"));
|
||||
ui->buttonList->addTab(QStringLiteral("Tools"));
|
||||
|
||||
@@ -317,14 +315,6 @@ void MainWindow::Activate()
|
||||
connect(ui->jobFilteredSearchWidget, &AzQtComponents::FilteredSearchWidget::TextFilterChanged,
|
||||
this, writeJobFilterSettings);
|
||||
|
||||
//Shader view
|
||||
ui->shaderTreeView->setModel(m_guiApplicationManager->GetShaderCompilerModel());
|
||||
ui->shaderTreeView->header()->resizeSection(ShaderCompilerModel::ColumnTimeStamp, 80);
|
||||
ui->shaderTreeView->header()->resizeSection(ShaderCompilerModel::ColumnServer, 40);
|
||||
ui->shaderTreeView->header()->resizeSection(ShaderCompilerModel::ColumnError, 220);
|
||||
ui->shaderTreeView->header()->setSectionResizeMode(ShaderCompilerModel::ColumnError, QHeaderView::Stretch);
|
||||
ui->shaderTreeView->header()->setStretchLastSection(false);
|
||||
|
||||
// Asset view
|
||||
m_sourceAssetTreeFilterModel = new AssetProcessor::AssetTreeFilterModel(this);
|
||||
m_sourceModel = new AssetProcessor::SourceAssetTreeModel(m_sharedDbConnection, this);
|
||||
|
||||
@@ -65,7 +65,6 @@ public:
|
||||
Jobs,
|
||||
Assets,
|
||||
Logs,
|
||||
Shaders,
|
||||
Connections,
|
||||
Tools
|
||||
};
|
||||
|
||||
@@ -763,59 +763,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="shaderDialog">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="shaderLabel">
|
||||
<property name="text">
|
||||
<string>Shaders</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="shaderInfoPane" native="true">
|
||||
<property name="styleSheet">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="AzQtComponents::TableView" name="shaderTreeView"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="connectionsDialog">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<property name="spacing">
|
||||
|
||||
@@ -1,188 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
#include "ShaderCompilerUnitTests.h"
|
||||
#include "native/connection/connectionManager.h"
|
||||
#include "native/connection/connection.h"
|
||||
#include "native/utilities/assetUtils.h"
|
||||
|
||||
#define UNIT_TEST_CONNECT_PORT 12125
|
||||
|
||||
ShaderCompilerUnitTest::ShaderCompilerUnitTest()
|
||||
{
|
||||
m_connectionManager = ConnectionManager::Get();
|
||||
connect(this, SIGNAL(StartUnitTestForGoodShaderCompiler()), this, SLOT(UnitTestForGoodShaderCompiler()));
|
||||
connect(this, SIGNAL(StartUnitTestForFirstBadShaderCompiler()), this, SLOT(UnitTestForFirstBadShaderCompiler()));
|
||||
connect(this, SIGNAL(StartUnitTestForSecondBadShaderCompiler()), this, SLOT(UnitTestForSecondBadShaderCompiler()));
|
||||
connect(this, SIGNAL(StartUnitTestForThirdBadShaderCompiler()), this, SLOT(UnitTestForThirdBadShaderCompiler()));
|
||||
connect(&m_shaderCompilerManager, SIGNAL(sendErrorMessageFromShaderJob(QString, QString, QString, QString)), this, SLOT(ReceiveShaderCompilerErrorMessage(QString, QString, QString, QString)));
|
||||
|
||||
m_shaderCompilerManager.setIsUnitTesting(true);
|
||||
m_connectionManager->RegisterService(AssetUtilities::ComputeCRC32Lowercase("ShaderCompilerProxyRequest"), AZStd::bind(&ShaderCompilerManager::process, &m_shaderCompilerManager, AZStd::placeholders::_1, AZStd::placeholders::_2, AZStd::placeholders::_3, AZStd::placeholders::_4));
|
||||
ContructPayloadForShaderCompilerServer(m_testPayload);
|
||||
}
|
||||
|
||||
ShaderCompilerUnitTest::~ShaderCompilerUnitTest()
|
||||
{
|
||||
m_connectionManager->removeConnection(m_connectionId);
|
||||
}
|
||||
|
||||
void ShaderCompilerUnitTest::ContructPayloadForShaderCompilerServer(QByteArray& payload)
|
||||
{
|
||||
QString testString = "This is a test string";
|
||||
QString testServerList = "127.0.0.3,198.51.100.0,127.0.0.1"; // note - 198.51.100.0 is in the 'test' range that will never be assigned to anyone.
|
||||
unsigned int testServerListLength = static_cast<unsigned int>(testServerList.size());
|
||||
unsigned short testServerPort = 12348;
|
||||
unsigned int testRequestId = 1;
|
||||
qint64 testStringLength = static_cast<qint64>(testString.size());
|
||||
payload.resize(static_cast<unsigned int>(testStringLength));
|
||||
memcpy(payload.data(), (testString.toStdString().c_str()), testStringLength);
|
||||
unsigned int payloadSize = payload.size();
|
||||
payload.resize(payloadSize + 1 + static_cast<unsigned int>(testServerListLength) + 1 + sizeof(unsigned short) + sizeof(unsigned int) + sizeof(unsigned int));
|
||||
char* dataStart = payload.data() + payloadSize;
|
||||
*dataStart = 0;// null
|
||||
memcpy(payload.data() + payloadSize + 1, (testServerList.toStdString().c_str()), testServerListLength);
|
||||
dataStart += 1 + testServerListLength;
|
||||
*dataStart = 0; //null
|
||||
memcpy(payload.data() + payloadSize + 1 + testServerListLength + 1, reinterpret_cast<char*>(&testServerPort), sizeof(unsigned short));
|
||||
memcpy(payload.data() + payloadSize + 1 + testServerListLength + 1 + sizeof(unsigned short), reinterpret_cast<char*>(&testServerListLength), sizeof(unsigned int));
|
||||
memcpy(payload.data() + payloadSize + 1 + testServerListLength + 1 + sizeof(unsigned short) + sizeof(unsigned int), reinterpret_cast<char*>(&testRequestId), sizeof(unsigned int));
|
||||
}
|
||||
|
||||
void ShaderCompilerUnitTest::StartTest()
|
||||
{
|
||||
m_connectionId = m_connectionManager->addConnection();
|
||||
Connection* connection = m_connectionManager->getConnection(m_connectionId);
|
||||
connection->SetPort(UNIT_TEST_CONNECT_PORT);
|
||||
connection->SetIpAddress("127.0.0.1");
|
||||
connection->SetAutoConnect(true);
|
||||
UnitTestForGoodShaderCompiler();
|
||||
}
|
||||
|
||||
int ShaderCompilerUnitTest::UnitTestPriority() const
|
||||
{
|
||||
return -4;
|
||||
}
|
||||
|
||||
void ShaderCompilerUnitTest::UnitTestForGoodShaderCompiler()
|
||||
{
|
||||
AZ_TracePrintf("ShaderCompilerUnitTest", " ... Starting test of 'good' shader compiler...\n");
|
||||
m_shaderCompilerManager.m_sendResponseCallbackFn = AZStd::bind(&ShaderCompilerUnitTest::VerifyPayloadForGoodShaderCompiler, this , AZStd::placeholders::_1, AZStd::placeholders::_2, AZStd::placeholders::_3, AZStd::placeholders::_4);
|
||||
m_server.Init("127.0.0.1", 12348);
|
||||
m_server.setServerStatus(UnitTestShaderCompilerServer::GoodServer);
|
||||
m_connectionManager->SendMessageToService(m_connectionId, AssetUtilities::ComputeCRC32Lowercase("ShaderCompilerProxyRequest"), 0, m_testPayload);
|
||||
}
|
||||
|
||||
void ShaderCompilerUnitTest::UnitTestForFirstBadShaderCompiler()
|
||||
{
|
||||
AZ_TracePrintf("ShaderCompilerUnitTest", " ... Starting test of 'bad' shader compiler... (Incomplete Payload)\n");
|
||||
m_shaderCompilerManager.m_sendResponseCallbackFn = AZStd::bind(&ShaderCompilerUnitTest::VerifyPayloadForFirstBadShaderCompiler, this, AZStd::placeholders::_1, AZStd::placeholders::_2, AZStd::placeholders::_3, AZStd::placeholders::_4);
|
||||
m_server.setServerStatus(UnitTestShaderCompilerServer::BadServer_SendsIncompletePayload);
|
||||
m_connectionManager->SendMessageToService(m_connectionId, AssetUtilities::ComputeCRC32Lowercase("ShaderCompilerProxyRequest"), 0, m_testPayload);
|
||||
}
|
||||
|
||||
void ShaderCompilerUnitTest::UnitTestForSecondBadShaderCompiler()
|
||||
{
|
||||
AZ_TracePrintf("ShaderCompilerUnitTest", " ... Starting test of 'bad' shader compiler... (Payload followed by disconnection)\n");
|
||||
m_shaderCompilerManager.m_sendResponseCallbackFn = AZStd::bind(&ShaderCompilerUnitTest::VerifyPayloadForSecondBadShaderCompiler, this, AZStd::placeholders::_1, AZStd::placeholders::_2, AZStd::placeholders::_3, AZStd::placeholders::_4);
|
||||
m_server.setServerStatus(UnitTestShaderCompilerServer::BadServer_ReadsPayloadAndDisconnect);
|
||||
m_connectionManager->SendMessageToService(m_connectionId, AssetUtilities::ComputeCRC32Lowercase("ShaderCompilerProxyRequest"), 0, m_testPayload);
|
||||
}
|
||||
|
||||
void ShaderCompilerUnitTest::UnitTestForThirdBadShaderCompiler()
|
||||
{
|
||||
AZ_TracePrintf("ShaderCompilerUnitTest", " ... Starting test of 'bad' shader compiler... (Connect but disconnect without data)\n");
|
||||
m_shaderCompilerManager.m_sendResponseCallbackFn = AZStd::bind(&ShaderCompilerUnitTest::VerifyPayloadForThirdBadShaderCompiler, this, AZStd::placeholders::_1, AZStd::placeholders::_2, AZStd::placeholders::_3, AZStd::placeholders::_4);
|
||||
m_server.setServerStatus(UnitTestShaderCompilerServer::BadServer_DisconnectAfterConnect);
|
||||
m_server.startServer();
|
||||
m_connectionManager->SendMessageToService(m_connectionId, AssetUtilities::ComputeCRC32Lowercase("ShaderCompilerProxyRequest"), 0, m_testPayload);
|
||||
}
|
||||
|
||||
void ShaderCompilerUnitTest::VerifyPayloadForGoodShaderCompiler(unsigned int connId, unsigned int type, unsigned int serial, QByteArray payload)
|
||||
{
|
||||
(void) connId;
|
||||
(void) type;
|
||||
(void) serial;
|
||||
m_shaderCompilerManager.m_sendResponseCallbackFn = nullptr;
|
||||
|
||||
unsigned int messageSize;
|
||||
quint8 status;
|
||||
QByteArray payloadToCheck;
|
||||
unsigned int requestId;
|
||||
memcpy((&messageSize), payload.data(), sizeof(unsigned int));
|
||||
memcpy((&status), payload.data() + sizeof(unsigned int), sizeof(unsigned char));
|
||||
payloadToCheck.resize(messageSize);
|
||||
memcpy((payloadToCheck.data()), payload.data() + sizeof(unsigned int) + sizeof(unsigned char), messageSize);
|
||||
memcpy((&requestId), payload.data() + sizeof(unsigned int) + sizeof(unsigned char) + messageSize, sizeof(unsigned int));
|
||||
QString outgoingTestString = "Test string validated";
|
||||
if (QString::compare(QString(payloadToCheck), outgoingTestString, Qt::CaseSensitive) != 0)
|
||||
{
|
||||
Q_EMIT UnitTestFailed("Unit Test for Good Shader Compiler Failed");
|
||||
return;
|
||||
}
|
||||
Q_EMIT StartUnitTestForFirstBadShaderCompiler();
|
||||
}
|
||||
|
||||
void ShaderCompilerUnitTest::VerifyPayloadForFirstBadShaderCompiler(unsigned int connId, unsigned int type, unsigned int serial, QByteArray payload)
|
||||
{
|
||||
(void) connId;
|
||||
(void) type;
|
||||
(void) serial;
|
||||
m_shaderCompilerManager.m_sendResponseCallbackFn = nullptr;
|
||||
QString error = "Remote IP is taking too long to respond: 127.0.0.1";
|
||||
if ((payload.size() != 4) || (QString::compare(m_lastShaderCompilerErrorMessage, error, Qt::CaseSensitive) != 0))
|
||||
{
|
||||
Q_EMIT UnitTestFailed("Unit Test for First Bad Shader Compiler Failed");
|
||||
return;
|
||||
}
|
||||
m_lastShaderCompilerErrorMessage.clear();
|
||||
Q_EMIT StartUnitTestForSecondBadShaderCompiler();
|
||||
}
|
||||
|
||||
void ShaderCompilerUnitTest::VerifyPayloadForSecondBadShaderCompiler(unsigned int connId, unsigned int type, unsigned int serial, QByteArray payload)
|
||||
{
|
||||
(void) connId;
|
||||
(void) type;
|
||||
(void) serial;
|
||||
m_shaderCompilerManager.m_sendResponseCallbackFn = nullptr;
|
||||
QString error = "Remote IP is taking too long to respond: 127.0.0.1";
|
||||
if ((payload.size() != 4) || (QString::compare(m_lastShaderCompilerErrorMessage, error, Qt::CaseSensitive) != 0))
|
||||
{
|
||||
Q_EMIT UnitTestFailed("Unit Test for Second Bad Shader Compiler Failed");
|
||||
return;
|
||||
}
|
||||
m_lastShaderCompilerErrorMessage.clear();
|
||||
Q_EMIT StartUnitTestForThirdBadShaderCompiler();
|
||||
}
|
||||
|
||||
void ShaderCompilerUnitTest::VerifyPayloadForThirdBadShaderCompiler(unsigned int connId, unsigned int type, unsigned int serial, QByteArray payload)
|
||||
{
|
||||
(void) connId;
|
||||
(void) type;
|
||||
(void) serial;
|
||||
m_shaderCompilerManager.m_sendResponseCallbackFn = nullptr;
|
||||
QString error = "Remote IP is taking too long to respond: 127.0.0.1";
|
||||
if ((payload.size() != 4) || (QString::compare(m_lastShaderCompilerErrorMessage, error, Qt::CaseSensitive) != 0))
|
||||
{
|
||||
Q_EMIT UnitTestFailed("Unit Test for Third Bad Shader Compiler Failed");
|
||||
return;
|
||||
}
|
||||
m_lastShaderCompilerErrorMessage.clear();
|
||||
Q_EMIT UnitTestPassed();
|
||||
}
|
||||
|
||||
void ShaderCompilerUnitTest::ReceiveShaderCompilerErrorMessage(QString error, QString server, QString timestamp, QString payload)
|
||||
{
|
||||
(void) server;
|
||||
(void) timestamp;
|
||||
(void) payload;
|
||||
m_lastShaderCompilerErrorMessage = error;
|
||||
}
|
||||
|
||||
|
||||
REGISTER_UNIT_TEST(ShaderCompilerUnitTest)
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
#ifndef SHADERCOMPILERUNITTEST_H
|
||||
#define SHADERCOMPILERUNITTEST_H
|
||||
|
||||
#if !defined(Q_MOC_RUN)
|
||||
#include "UnitTestRunner.h"
|
||||
|
||||
#include <AzCore/std/functional.h>
|
||||
|
||||
#include "native/shadercompiler/shadercompilerManager.h"
|
||||
//#include "native/shadercompiler/shadercompilerMessages.h"
|
||||
#include "native/utilities/UnitTestShaderCompilerServer.h"
|
||||
#include <QString>
|
||||
#include <QByteArray>
|
||||
#endif
|
||||
|
||||
class ConnectionManager;
|
||||
|
||||
class ShaderCompilerManagerForUnitTest : public ShaderCompilerManager
|
||||
{
|
||||
public:
|
||||
explicit ShaderCompilerManagerForUnitTest(QObject* parent = 0) : ShaderCompilerManager(parent) {};
|
||||
|
||||
// for this test, we override sendResponse and make it so that it just calls a callback instead of actually sending it to the connection manager.
|
||||
void sendResponse(unsigned int connId, unsigned int type, unsigned int serial, QByteArray payload) override
|
||||
{
|
||||
if (m_sendResponseCallbackFn)
|
||||
{
|
||||
m_sendResponseCallbackFn(connId, type, serial, payload);
|
||||
}
|
||||
}
|
||||
AZStd::function<void(unsigned int, unsigned int, unsigned int, QByteArray)> m_sendResponseCallbackFn;
|
||||
};
|
||||
|
||||
class ShaderCompilerUnitTest
|
||||
: public UnitTestRun
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
ShaderCompilerUnitTest();
|
||||
~ShaderCompilerUnitTest();
|
||||
virtual void StartTest() override;
|
||||
virtual int UnitTestPriority() const override;
|
||||
void ContructPayloadForShaderCompilerServer(QByteArray& payload);
|
||||
|
||||
Q_SIGNALS:
|
||||
void StartUnitTestForGoodShaderCompiler();
|
||||
void StartUnitTestForFirstBadShaderCompiler();
|
||||
void StartUnitTestForSecondBadShaderCompiler();
|
||||
void StartUnitTestForThirdBadShaderCompiler();
|
||||
|
||||
public Q_SLOTS:
|
||||
void UnitTestForGoodShaderCompiler();
|
||||
void UnitTestForFirstBadShaderCompiler();
|
||||
void UnitTestForSecondBadShaderCompiler();
|
||||
void UnitTestForThirdBadShaderCompiler();
|
||||
void VerifyPayloadForGoodShaderCompiler(unsigned int connId, unsigned int type, unsigned int serial, QByteArray payload);
|
||||
void VerifyPayloadForFirstBadShaderCompiler(unsigned int connId, unsigned int type, unsigned int serial, QByteArray payload);
|
||||
void VerifyPayloadForSecondBadShaderCompiler(unsigned int connId, unsigned int type, unsigned int serial, QByteArray payload);
|
||||
void VerifyPayloadForThirdBadShaderCompiler(unsigned int connId, unsigned int type, unsigned int serial, QByteArray payload);
|
||||
void ReceiveShaderCompilerErrorMessage(QString error, QString server, QString timestamp, QString payload);
|
||||
|
||||
|
||||
private:
|
||||
UnitTestShaderCompilerServer m_server;
|
||||
ShaderCompilerManagerForUnitTest m_shaderCompilerManager;
|
||||
ConnectionManager* m_connectionManager;
|
||||
QByteArray m_testPayload;
|
||||
QString m_lastShaderCompilerErrorMessage;
|
||||
unsigned int m_connectionId = 0;
|
||||
};
|
||||
|
||||
#endif // SHADERCOMPILERUNITTEST_H
|
||||
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
#include "native/resourcecompiler/rccontroller.h"
|
||||
#include "native/FileServer/fileServer.h"
|
||||
#include "native/AssetManager/assetScanner.h"
|
||||
#include "native/shadercompiler/shadercompilerManager.h"
|
||||
#include "native/shadercompiler/shadercompilerModel.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QDialogButtonBox>
|
||||
@@ -55,7 +53,7 @@ namespace
|
||||
{
|
||||
moduleFileInfo.setFile(executableDirectory);
|
||||
}
|
||||
|
||||
|
||||
QDir binaryDir = moduleFileInfo.absoluteDir();
|
||||
// strip extension
|
||||
QString applicationBase = moduleFileInfo.completeBaseName();
|
||||
@@ -70,7 +68,7 @@ namespace
|
||||
binaryDir.remove(tempFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -145,8 +143,6 @@ void GUIApplicationManager::Destroy()
|
||||
|
||||
DestroyIniConfiguration();
|
||||
DestroyFileServer();
|
||||
DestroyShaderCompilerManager();
|
||||
DestroyShaderCompilerModel();
|
||||
}
|
||||
|
||||
|
||||
@@ -192,7 +188,7 @@ bool GUIApplicationManager::Run()
|
||||
wrapper->enableSaveRestoreGeometry(GetOrganizationName(), GetApplicationName(), "MainWindow", restoreOnFirstShow);
|
||||
|
||||
AzQtComponents::StyleManager::setStyleSheet(m_mainWindow, QStringLiteral("style:AssetProcessor.qss"));
|
||||
|
||||
|
||||
auto refreshStyleSheets = [styleManager]()
|
||||
{
|
||||
styleManager->Refresh();
|
||||
@@ -334,7 +330,7 @@ bool GUIApplicationManager::Run()
|
||||
m_duringStartup = false;
|
||||
|
||||
int resultCode = qApp->exec(); // this blocks until the last window is closed.
|
||||
|
||||
|
||||
if(!InitiatedShutdown())
|
||||
{
|
||||
// if we are here it implies that AP did not stop the Qt event loop and is shutting down prematurely
|
||||
@@ -427,7 +423,7 @@ bool GUIApplicationManager::OnError(const char* /*window*/, const char* message)
|
||||
return true;
|
||||
}
|
||||
|
||||
// If we're the main thread, then consider showing the message box directly.
|
||||
// If we're the main thread, then consider showing the message box directly.
|
||||
// note that all other threads will PAUSE if they emit a message while the main thread is showing this box
|
||||
// due to the way the trace system EBUS is mutex-protected.
|
||||
Qt::ConnectionType connection = Qt::DirectConnection;
|
||||
@@ -470,7 +466,7 @@ bool GUIApplicationManager::Activate()
|
||||
AssetUtilities::ComputeProjectCacheRoot(projectCacheRoot);
|
||||
m_localUserSettings.Load(projectCacheRoot.filePath("AssetProcessorUserSettings.xml").toUtf8().data(), context);
|
||||
m_localUserSettings.Activate(AZ::UserSettings::CT_LOCAL);
|
||||
|
||||
|
||||
InitIniConfiguration();
|
||||
InitFileServer();
|
||||
|
||||
@@ -479,9 +475,6 @@ bool GUIApplicationManager::Activate()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
InitShaderCompilerModel();
|
||||
InitShaderCompilerManager();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -606,7 +599,7 @@ void GUIApplicationManager::InitConnectionManager()
|
||||
QObject::connect(m_fileServer, SIGNAL(AddRenameRequest(unsigned int, bool)), m_connectionManager, SLOT(AddRenameRequest(unsigned int, bool)));
|
||||
QObject::connect(m_fileServer, SIGNAL(AddFindFileNamesRequest(unsigned int, bool)), m_connectionManager, SLOT(AddFindFileNamesRequest(unsigned int, bool)));
|
||||
QObject::connect(m_fileServer, SIGNAL(UpdateConnectionMetrics()), m_connectionManager, SLOT(UpdateConnectionMetrics()));
|
||||
|
||||
|
||||
m_connectionManager->RegisterService(ShowAssetProcessorRequest::MessageType,
|
||||
std::bind([this](unsigned int /*connId*/, unsigned int /*type*/, unsigned int /*serial*/, QByteArray /*payload*/)
|
||||
{
|
||||
@@ -661,40 +654,6 @@ void GUIApplicationManager::DestroyFileServer()
|
||||
}
|
||||
}
|
||||
|
||||
void GUIApplicationManager::InitShaderCompilerManager()
|
||||
{
|
||||
m_shaderCompilerManager = new ShaderCompilerManager();
|
||||
|
||||
//Shader compiler stuff
|
||||
m_connectionManager->RegisterService(AssetUtilities::ComputeCRC32Lowercase("ShaderCompilerProxyRequest"), std::bind(&ShaderCompilerManager::process, m_shaderCompilerManager, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
|
||||
QObject::connect(m_shaderCompilerManager, SIGNAL(sendErrorMessageFromShaderJob(QString, QString, QString, QString)), m_shaderCompilerModel, SLOT(addShaderErrorInfoEntry(QString, QString, QString, QString)));
|
||||
|
||||
|
||||
}
|
||||
|
||||
void GUIApplicationManager::DestroyShaderCompilerManager()
|
||||
{
|
||||
if (m_shaderCompilerManager)
|
||||
{
|
||||
delete m_shaderCompilerManager;
|
||||
m_shaderCompilerManager = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void GUIApplicationManager::InitShaderCompilerModel()
|
||||
{
|
||||
m_shaderCompilerModel = new ShaderCompilerModel();
|
||||
}
|
||||
|
||||
void GUIApplicationManager::DestroyShaderCompilerModel()
|
||||
{
|
||||
if (m_shaderCompilerModel)
|
||||
{
|
||||
delete m_shaderCompilerModel;
|
||||
m_shaderCompilerModel = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
IniConfiguration* GUIApplicationManager::GetIniConfiguration() const
|
||||
{
|
||||
return m_iniConfiguration;
|
||||
@@ -704,14 +663,6 @@ FileServer* GUIApplicationManager::GetFileServer() const
|
||||
{
|
||||
return m_fileServer;
|
||||
}
|
||||
ShaderCompilerManager* GUIApplicationManager::GetShaderCompilerManager() const
|
||||
{
|
||||
return m_shaderCompilerManager;
|
||||
}
|
||||
ShaderCompilerModel* GUIApplicationManager::GetShaderCompilerModel() const
|
||||
{
|
||||
return m_shaderCompilerModel;
|
||||
}
|
||||
|
||||
void GUIApplicationManager::ShowTrayIconErrorMessage(QString msg)
|
||||
{
|
||||
|
||||
@@ -24,8 +24,6 @@ class ConnectionManager;
|
||||
class IniConfiguration;
|
||||
class ApplicationServer;
|
||||
class FileServer;
|
||||
class ShaderCompilerManager;
|
||||
class ShaderCompilerModel;
|
||||
|
||||
namespace AssetProcessor
|
||||
{
|
||||
@@ -47,8 +45,6 @@ public:
|
||||
ApplicationManager::BeforeRunStatus BeforeRun() override;
|
||||
IniConfiguration* GetIniConfiguration() const;
|
||||
FileServer* GetFileServer() const;
|
||||
ShaderCompilerManager* GetShaderCompilerManager() const;
|
||||
ShaderCompilerModel* GetShaderCompilerModel() const;
|
||||
|
||||
bool Run() override;
|
||||
////////////////////////////////////////////////////
|
||||
@@ -72,10 +68,6 @@ private:
|
||||
void DestroyIniConfiguration();
|
||||
void InitFileServer();
|
||||
void DestroyFileServer();
|
||||
void InitShaderCompilerManager();
|
||||
void DestroyShaderCompilerManager();
|
||||
void InitShaderCompilerModel();
|
||||
void DestroyShaderCompilerModel();
|
||||
void Destroy() override;
|
||||
|
||||
Q_SIGNALS:
|
||||
@@ -99,8 +91,7 @@ private:
|
||||
|
||||
IniConfiguration* m_iniConfiguration = nullptr;
|
||||
FileServer* m_fileServer = nullptr;
|
||||
ShaderCompilerManager* m_shaderCompilerManager = nullptr;
|
||||
ShaderCompilerModel* m_shaderCompilerModel = nullptr;
|
||||
|
||||
QFileSystemWatcher m_qtFileWatcher;
|
||||
AZ::UserSettingsProvider m_localUserSettings;
|
||||
bool m_messageBoxIsVisible = false;
|
||||
|
||||
Reference in New Issue
Block a user