1
Fork 0
mirror of https://github.com/redstrate/Novus.git synced 2025-04-24 21:07:46 +00:00

Add support for more shader structures as seen in Dawntrail Benchmark

Not sure what these are yet, but stops the renderer from complaining.
This commit is contained in:
Joshua Goins 2024-04-28 07:09:58 -04:00
parent 7d2b81affd
commit 20b2f0e7b8
3 changed files with 29 additions and 3 deletions

View file

@ -92,6 +92,7 @@ private:
Buffer g_MaterialParameterDynamic; Buffer g_MaterialParameterDynamic;
Buffer g_DecalColor; Buffer g_DecalColor;
Buffer g_AmbientParam; Buffer g_AmbientParam;
Buffer g_ShaderTypeParameter;
Buffer m_planeVertexBuffer; Buffer m_planeVertexBuffer;

View file

@ -16,10 +16,14 @@ struct CameraParameter {
glm::vec4 m_LookAtVector; glm::vec4 m_LookAtVector;
}; };
struct JointMatrixArray { struct JointMatrixArrayARR {
glm::mat3x4 g_JointMatrixArray[64]; glm::mat3x4 g_JointMatrixArray[64];
}; };
struct JointMatrixArrayDawntrail {
glm::mat3x4 g_JointMatrixArray[768];
};
struct CameraLight { struct CameraLight {
glm::vec4 m_DiffuseSpecular; glm::vec4 m_DiffuseSpecular;
glm::vec4 m_Rim; glm::vec4 m_Rim;
@ -95,4 +99,11 @@ struct MaterialParameterDynamic {
struct AmbientParameters { struct AmbientParameters {
glm::vec4 g_AmbientParam[6]; glm::vec4 g_AmbientParam[6];
// As seen in Dawntrail characterlegacy.shpk
glm::vec4 g_AdditionalAmbientParam[4];
};
// Dawntrail, unknown purpose
struct ShaderTypeParameter {
glm::vec4 m[2044];
}; };

View file

@ -180,8 +180,20 @@ GameRenderer::GameRenderer(Device &device, GameData *data)
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
ambientParameters.g_AmbientParam[i] = glm::vec4(1.0f); ambientParameters.g_AmbientParam[i] = glm::vec4(1.0f);
} }
for (int i = 0; i < 4; i++) {
ambientParameters.g_AdditionalAmbientParam[i] = glm::vec4(1.0f);
}
m_device.copyToBuffer(g_AmbientParam, &ambientParameters, sizeof(glm::vec4)); m_device.copyToBuffer(g_AmbientParam, &ambientParameters, sizeof(AmbientParameters));
}
// shader type parameter
if (m_dawntrailMode) {
g_ShaderTypeParameter = m_device.createBuffer(sizeof(ShaderTypeParameter), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
ShaderTypeParameter shaderTypeParameter{};
m_device.copyToBuffer(g_ShaderTypeParameter, &g_ShaderTypeParameter, sizeof(ShaderTypeParameter));
} }
VkSamplerCreateInfo samplerInfo = {}; VkSamplerCreateInfo samplerInfo = {};
@ -1192,7 +1204,7 @@ GameRenderer::createDescriptorFor(const DrawObject *object, const CachedPipeline
auto info = &imageInfo.emplace_back(); auto info = &imageInfo.emplace_back();
descriptorWrite.pImageInfo = info; descriptorWrite.pImageInfo = info;
if (binding.stageFlags == VK_SHADER_STAGE_FRAGMENT_BIT && p < pipeline.pixelShader.num_resource_parameters) { if (binding.stageFlags == VK_SHADER_STAGE_FRAGMENT_BIT && p + 1 < pipeline.pixelShader.num_resource_parameters) {
auto name = pipeline.pixelShader.resource_parameters[p].name; auto name = pipeline.pixelShader.resource_parameters[p].name;
qInfo() << "Requesting image" << name << "at" << j; qInfo() << "Requesting image" << name << "at" << j;
if (strcmp(name, "g_SamplerGBuffer") == 0) { if (strcmp(name, "g_SamplerGBuffer") == 0) {
@ -1280,6 +1292,8 @@ GameRenderer::createDescriptorFor(const DrawObject *object, const CachedPipeline
useUniformBuffer(g_DecalColor); useUniformBuffer(g_DecalColor);
} else if (strcmp(name, "g_AmbientParam") == 0) { } else if (strcmp(name, "g_AmbientParam") == 0) {
useUniformBuffer(g_AmbientParam); useUniformBuffer(g_AmbientParam);
} else if (strcmp(name, "g_ShaderTypeParameter") == 0) {
useUniformBuffer(g_ShaderTypeParameter);
} else { } else {
qInfo() << "Unknown resource:" << name; qInfo() << "Unknown resource:" << name;
info->buffer = m_dummyBuffer.buffer; info->buffer = m_dummyBuffer.buffer;