Adding DXC
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "Command.h"
|
||||
#include "Graphics/Graphics.h"
|
||||
#include "Graphics/Metal/Resources.h"
|
||||
#include "Metal/MTLCommandBuffer.hpp"
|
||||
#include "Metal/MTLIOCommandQueue.hpp"
|
||||
#include "Metal/MTLRenderCommandEncoder.hpp"
|
||||
#include "Window.h"
|
||||
@@ -8,9 +9,9 @@
|
||||
using namespace Seele;
|
||||
using namespace Seele::Metal;
|
||||
|
||||
Command::Command(PGraphics graphics, PCommandQueue owner)
|
||||
: graphics(graphics), owner(owner), completed(new Event(graphics)),
|
||||
cmdBuffer(owner->getHandle()->commandBuffer()), renderEncoder(nullptr) {}
|
||||
Command::Command(PGraphics graphics, MTL::CommandBuffer* cmdBuffer)
|
||||
: graphics(graphics), completed(new Event(graphics)),
|
||||
cmdBuffer(cmdBuffer), renderEncoder(nullptr) {}
|
||||
|
||||
Command::~Command() { cmdBuffer->release(); }
|
||||
|
||||
@@ -77,48 +78,48 @@ void RenderCommand::setViewport(Gfx::PViewport viewport) {
|
||||
}
|
||||
|
||||
void RenderCommand::bindPipeline(Gfx::PGraphicsPipeline pipeline) {
|
||||
encoder->setRenderPipelineState(
|
||||
pipeline.cast<GraphicsPipeline>()->getState());
|
||||
// encoder->setRenderPipelineState(
|
||||
// pipeline.cast<GraphicsPipeline>()->getState());
|
||||
}
|
||||
|
||||
void RenderCommand::bindDescriptor(Gfx::PDescriptorSet descriptorSet) {
|
||||
encoder->set ? ? ? ? ?
|
||||
}
|
||||
|
||||
void RenderCommand::bindDescriptor(
|
||||
const Array<Gfx::PDescriptorSet> &descriptorSets) {
|
||||
encoder->set ? ? ? ? ?
|
||||
// encoder->set ? ? ? ? ?
|
||||
}
|
||||
|
||||
void RenderCommand::bindVertexBuffer(const Array<Gfx::PVertexBuffer> &buffers) {
|
||||
encoder->setVertexBuffers();
|
||||
// encoder->setVertexBuffers();
|
||||
}
|
||||
|
||||
void RenderCommand::bindIndexBuffer(Gfx::PIndexBuffer indexBuffer) {
|
||||
encoder->setObjectBuffer(??, NS::UInteger offset, NS::UInteger index)
|
||||
// encoder->setObjectBuffer(??, NS::UInteger offset, NS::UInteger index)
|
||||
}
|
||||
|
||||
void RenderCommand::pushConstants(Gfx::PPipelineLayout layout,
|
||||
Gfx::SeShaderStageFlags stage, uint32 offset,
|
||||
uint32 size, const void *data) {
|
||||
? ? ?
|
||||
// ? ? ?
|
||||
}
|
||||
|
||||
void RenderCommand::draw(uint32 vertexCount, uint32 instanceCount,
|
||||
int32 firstVertex, uint32 firstInstance) {
|
||||
encoder->drawPrimitives(???, firstVertex, vertexCount, instanceCount, firstInstance);
|
||||
// encoder->drawPrimitives(???, firstVertex, vertexCount, instanceCount, firstInstance);
|
||||
}
|
||||
|
||||
void RenderCommand::drawIndexed(uint32 indexCount, uint32 instanceCount,
|
||||
int32 firstIndex, uint32 vertexOffset,
|
||||
uint32 firstInstance) {
|
||||
encoder->drawIndexedPrimitives(???, indexCount, indexbuffer->getType(), indexBuffer->getBuffer(), firstIndex, instanceCount, vertexOffset, firstInstance);
|
||||
// encoder->drawIndexedPrimitives(???, indexCount, indexbuffer->getType(), indexBuffer->getBuffer(), firstIndex, instanceCount, vertexOffset, firstInstance);
|
||||
}
|
||||
|
||||
void RenderCommand::drawMesh(uint32 groupX, uint32 groupY, uint32 groupZ){
|
||||
encoder->drawMeshThreads(MTL::Size threadsPerGrid,
|
||||
MTL::Size threadsPerObjectThreadgroup,
|
||||
MTL::Size threadsPerMeshThreadgroup)}
|
||||
// encoder->drawMeshThreads(MTL::Size threadsPerGrid,
|
||||
// MTL::Size threadsPerObjectThreadgroup,
|
||||
// MTL::Size threadsPerMeshThreadgroup)
|
||||
}
|
||||
|
||||
ComputeCommand::ComputeCommand(MTL::ComputeCommandEncoder *encoder)
|
||||
: encoder(encoder) {}
|
||||
@@ -128,30 +129,30 @@ ComputeCommand::~ComputeCommand() { encoder->release(); }
|
||||
void ComputeCommand::end() { encoder->endEncoding(); }
|
||||
|
||||
void ComputeCommand::bindPipeline(Gfx::PComputePipeline pipeline) {
|
||||
encoder->setComputePipelineState(pipeline.cast<ComputePipeline>());
|
||||
// encoder->setComputePipelineState(pipeline.cast<ComputePipeline>());
|
||||
}
|
||||
|
||||
void ComputeCommand::bindDescriptor(Gfx::PDescriptorSet set) {
|
||||
encoder->set ? ? ?
|
||||
// encoder->set ? ? ?
|
||||
}
|
||||
|
||||
void ComputeCommand::bindDescriptor(const Array<Gfx::PDescriptorSet> &sets) {
|
||||
encoder->set ? ? ?
|
||||
// encoder->set ? ? ?
|
||||
}
|
||||
|
||||
void ComputeCommand::pushConstants(Gfx::PPipelineLayout layout,
|
||||
Gfx::SeShaderStageFlags stage, uint32 offset,
|
||||
uint32 size, const void *data) {
|
||||
? ? ?
|
||||
// ? ? ?
|
||||
}
|
||||
|
||||
void ComputeCommand::dispatch(uint32 threadX, uint32 threadY, uint32 threadZ) {
|
||||
encoder->dispatchThreadgroups(???);
|
||||
// encoder->dispatchThreadgroups(???);
|
||||
}
|
||||
|
||||
CommandQueue::CommandQueue(PGraphics graphics) : graphics(graphics) {
|
||||
queue = graphics->getDevice()->newCommandQueue();
|
||||
activeCommand = new Command(graphics, this);
|
||||
activeCommand = new Command(graphics, queue->commandBuffer());
|
||||
}
|
||||
|
||||
CommandQueue::~CommandQueue() { queue->release(); }
|
||||
@@ -166,8 +167,8 @@ OComputeCommand CommandQueue::getComputeCommand(const std::string &name) {
|
||||
|
||||
void CommandQueue::submitCommands(PEvent signalSemaphore) {
|
||||
activeCommand->end(signalSemaphore);
|
||||
MTL::Event *prevCmdEvent = activeCommand->getCompletedEvent();
|
||||
activeCommand = new Command(graphics, this);
|
||||
PEvent prevCmdEvent = activeCommand->getCompletedEvent();
|
||||
activeCommand = new Command(graphics, queue->commandBuffer());
|
||||
activeCommand->waitForEvent(prevCmdEvent);
|
||||
}
|
||||
|
||||
@@ -175,8 +176,8 @@ IOCommandQueue::IOCommandQueue(PGraphics graphics) : graphics(graphics) {
|
||||
MTL::IOCommandQueueDescriptor* desc = MTL::IOCommandQueueDescriptor::alloc()->init();
|
||||
desc->setType(MTL::IOCommandQueueTypeConcurrent);
|
||||
desc->setPriority(MTL::IOPriorityNormal);
|
||||
queue = graphics->getDevice()->newIOCommandQueue(desc);
|
||||
activeCommand = new Command(graphics, this);
|
||||
queue = graphics->getDevice()->newIOCommandQueue(desc, nullptr);
|
||||
//activeCommand = new Command(graphics, queue->commandBuffer());
|
||||
desc->release();
|
||||
}
|
||||
|
||||
@@ -185,7 +186,7 @@ IOCommandQueue::~IOCommandQueue() { queue->release(); }
|
||||
void IOCommandQueue::submitCommands(PEvent signalSemaphore) {
|
||||
//TODO: scratch buffer
|
||||
activeCommand->end(signalSemaphore);
|
||||
MTL::Event *prevCmdEvent = activeCommand->getCompletedEvent();
|
||||
activeCommand = new Command(graphics, this);
|
||||
PEvent prevCmdEvent = activeCommand->getCompletedEvent();
|
||||
//activeCommand = new Command(graphics, queue->commandBuffer());
|
||||
activeCommand->waitForEvent(prevCmdEvent);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user