Adding vertex input description, readding slang
This commit is contained in:
@@ -249,6 +249,11 @@ Gfx::OPipelineLayout Graphics::createPipelineLayout(Gfx::PPipelineLayout baseLay
|
||||
return new PipelineLayout(this, baseLayout);
|
||||
}
|
||||
|
||||
Gfx::OVertexInput Graphics::createVertexInput(VertexInputStateCreateInfo createInfo)
|
||||
{
|
||||
return new VertexInput(createInfo);
|
||||
}
|
||||
|
||||
void Graphics::resolveTexture(Gfx::PTexture source, Gfx::PTexture destination)
|
||||
{
|
||||
PTextureBase sourceTex = source.cast<TextureBase>();
|
||||
|
||||
@@ -66,6 +66,8 @@ public:
|
||||
virtual Gfx::ODescriptorLayout createDescriptorLayout(const std::string& name = "") override;
|
||||
virtual Gfx::OPipelineLayout createPipelineLayout(Gfx::PPipelineLayout baseLayout = nullptr) override;
|
||||
|
||||
virtual Gfx::OVertexInput createVertexInput(VertexInputStateCreateInfo createInfo) override;
|
||||
|
||||
virtual void resolveTexture(Gfx::PTexture source, Gfx::PTexture destination) override;
|
||||
|
||||
void vkCmdDrawMeshTasksEXT(VkCommandBuffer handle, uint32 groupX, uint32 groupY, uint32 groupZ);
|
||||
|
||||
@@ -5,6 +5,15 @@
|
||||
using namespace Seele;
|
||||
using namespace Seele::Vulkan;
|
||||
|
||||
VertexInput::VertexInput(VertexInputStateCreateInfo createInfo)
|
||||
: Gfx::VertexInput(createInfo)
|
||||
{
|
||||
}
|
||||
|
||||
VertexInput::~VertexInput()
|
||||
{
|
||||
}
|
||||
|
||||
GraphicsPipeline::GraphicsPipeline(PGraphics graphics, VkPipeline handle, Gfx::OPipelineLayout pipelineLayout)
|
||||
: Gfx::GraphicsPipeline(std::move(pipelineLayout))
|
||||
, graphics(graphics)
|
||||
|
||||
@@ -6,6 +6,13 @@ namespace Seele
|
||||
{
|
||||
namespace Vulkan
|
||||
{
|
||||
class VertexInput : public Gfx::VertexInput
|
||||
{
|
||||
public:
|
||||
VertexInput(VertexInputStateCreateInfo createInfo);
|
||||
virtual ~VertexInput();
|
||||
private:
|
||||
};
|
||||
DECLARE_REF(PipelineLayout)
|
||||
DECLARE_REF(Graphics)
|
||||
class GraphicsPipeline : public Gfx::GraphicsPipeline
|
||||
|
||||
@@ -52,10 +52,36 @@ PGraphicsPipeline PipelineCache::createPipeline(Gfx::LegacyPipelineCreateInfo gf
|
||||
{
|
||||
PPipelineLayout layout = Gfx::PPipelineLayout(gfxInfo.pipelineLayout).cast<PipelineLayout>();
|
||||
uint32 hash = layout->getHash();
|
||||
const VertexInputStateCreateInfo& vertexInputDesc = gfxInfo.vertexInput->getInfo();
|
||||
Array<VkVertexInputBindingDescription> bindings(vertexInputDesc.bindings.size());
|
||||
Array<VkVertexInputAttributeDescription> attributes(vertexInputDesc.attributes.size());
|
||||
for (size_t i = 0; i < bindings.size(); i++)
|
||||
{
|
||||
bindings[i] = {
|
||||
.binding = vertexInputDesc.bindings[i].binding,
|
||||
.stride = vertexInputDesc.bindings[i].stride,
|
||||
.inputRate = VkVertexInputRate(vertexInputDesc.bindings[i].inputRate),
|
||||
};
|
||||
}
|
||||
for (size_t i = 0; i < attributes.size(); i++)
|
||||
{
|
||||
attributes[i] = {
|
||||
.location = vertexInputDesc.attributes[i].location,
|
||||
.binding = vertexInputDesc.attributes[i].binding,
|
||||
.format = cast(vertexInputDesc.attributes[i].format),
|
||||
.offset = vertexInputDesc.attributes[i].offset,
|
||||
};
|
||||
}
|
||||
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);
|
||||
VkPipelineVertexInputStateCreateInfo vertexInput = {
|
||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
|
||||
.pNext = nullptr,
|
||||
.flags = 0,
|
||||
.vertexBindingDescriptionCount = (uint32)bindings.size(),
|
||||
.pVertexBindingDescriptions = bindings.data(),
|
||||
.vertexAttributeDescriptionCount = (uint32)attributes.size(),
|
||||
.pVertexAttributeDescriptions = attributes.data(),
|
||||
};
|
||||
uint32 stageCount = 0;
|
||||
|
||||
|
||||
@@ -63,7 +63,6 @@ void Shader::create(const ShaderCreateInfo& createInfo)
|
||||
|
||||
Slang::ComPtr<slang::ISession> session;
|
||||
CHECK_RESULT(globalSession->createSession(sessionDesc, session.writeRef()));
|
||||
|
||||
Slang::ComPtr<slang::IBlob> diagnostics;
|
||||
Array<slang::IComponentType*> modules;
|
||||
Slang::ComPtr<slang::IEntryPoint> entrypoint;
|
||||
|
||||
Reference in New Issue
Block a user