Fixing pipelines crashing when not providing vertex input
This commit is contained in:
@@ -2,7 +2,7 @@ import MaterialParameter;
|
|||||||
|
|
||||||
struct VertexInput
|
struct VertexInput
|
||||||
{
|
{
|
||||||
uint vertexId;
|
uint vertexId : SV_VertexID;
|
||||||
uint instanceId: SV_InstanceID;
|
uint instanceId: SV_InstanceID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,28 +52,31 @@ PGraphicsPipeline PipelineCache::createPipeline(Gfx::LegacyPipelineCreateInfo gf
|
|||||||
{
|
{
|
||||||
PPipelineLayout layout = Gfx::PPipelineLayout(gfxInfo.pipelineLayout).cast<PipelineLayout>();
|
PPipelineLayout layout = Gfx::PPipelineLayout(gfxInfo.pipelineLayout).cast<PipelineLayout>();
|
||||||
uint32 hash = layout->getHash();
|
uint32 hash = layout->getHash();
|
||||||
const VertexInputStateCreateInfo& vertexInputDesc = gfxInfo.vertexInput->getInfo();
|
Array<VkVertexInputBindingDescription> bindings;
|
||||||
Array<VkVertexInputBindingDescription> bindings(vertexInputDesc.bindings.size());
|
Array<VkVertexInputAttributeDescription> attributes;
|
||||||
Array<VkVertexInputAttributeDescription> attributes(vertexInputDesc.attributes.size());
|
if (gfxInfo.vertexInput != nullptr)
|
||||||
for (size_t i = 0; i < bindings.size(); i++)
|
|
||||||
{
|
{
|
||||||
bindings[i] = {
|
const VertexInputStateCreateInfo& vertexInputDesc = gfxInfo.vertexInput->getInfo();
|
||||||
.binding = vertexInputDesc.bindings[i].binding,
|
for (const auto& b : vertexInputDesc.bindings)
|
||||||
.stride = vertexInputDesc.bindings[i].stride,
|
{
|
||||||
.inputRate = VkVertexInputRate(vertexInputDesc.bindings[i].inputRate),
|
bindings.add() = {
|
||||||
|
.binding = b.binding,
|
||||||
|
.stride = b.stride,
|
||||||
|
.inputRate = VkVertexInputRate(b.inputRate),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < attributes.size(); i++)
|
for (const auto& a : vertexInputDesc.attributes)
|
||||||
{
|
{
|
||||||
attributes[i] = {
|
attributes.add() = {
|
||||||
.location = vertexInputDesc.attributes[i].location,
|
.location = a.location,
|
||||||
.binding = vertexInputDesc.attributes[i].binding,
|
.binding = a.binding,
|
||||||
.format = cast(vertexInputDesc.attributes[i].format),
|
.format = cast(a.format),
|
||||||
.offset = vertexInputDesc.attributes[i].offset,
|
.offset = a.offset,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
hash = CRC::Calculate(bindings.data(), sizeof(VkVertexInputBindingDescription) * bindings.size(), CRC::CRC_32(), hash);
|
hash = CRC::Calculate(bindings.data(), sizeof(VkVertexInputBindingDescription) * bindings.size(), CRC::CRC_32(), hash);
|
||||||
hash = CRC::Calculate(attributes.data(), sizeof(VkVertexInputAttributeDescription) * attributes.size(), CRC::CRC_32(), hash);
|
hash = CRC::Calculate(attributes.data(), sizeof(VkVertexInputAttributeDescription) * attributes.size(), CRC::CRC_32(), hash);
|
||||||
|
}
|
||||||
VkPipelineVertexInputStateCreateInfo vertexInput = {
|
VkPipelineVertexInputStateCreateInfo vertexInput = {
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
|
||||||
.pNext = nullptr,
|
.pNext = nullptr,
|
||||||
|
|||||||
Reference in New Issue
Block a user