summaryrefslogtreecommitdiff
path: root/tools/gfx/d3d12/render-d3d12.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-11-04 09:40:56 -0700
committerGitHub <noreply@github.com>2021-11-04 09:40:56 -0700
commit8fe3f9cd7d664fc98e33cf276427390b42b9b468 (patch)
tree2e920085fc82f45befef0c438357596e3d159e82 /tools/gfx/d3d12/render-d3d12.cpp
parentaf0f26d54ce39b6d7203646abd6e970b8113584c (diff)
Add interface for new gfx features. (#2003)
* Add interface for new gfx features. * Add cuda implementation. * Code review fixes. * Fix. Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tools/gfx/d3d12/render-d3d12.cpp')
-rw-r--r--tools/gfx/d3d12/render-d3d12.cpp97
1 files changed, 96 insertions, 1 deletions
diff --git a/tools/gfx/d3d12/render-d3d12.cpp b/tools/gfx/d3d12/render-d3d12.cpp
index cc8086080..4384cc243 100644
--- a/tools/gfx/d3d12/render-d3d12.cpp
+++ b/tools/gfx/d3d12/render-d3d12.cpp
@@ -3101,6 +3101,13 @@ public:
{
return bindPipelineImpl(state, outRootObject);
}
+
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ bindPipelineAndRootObject(IPipelineState* state, IShaderObject* rootObject) override
+ {
+ SLANG_UNIMPLEMENTED_X("bindPipelineAndRootObject");
+ return SLANG_E_NOT_AVAILABLE;
+ }
virtual SLANG_NO_THROW void SLANG_MCALL
setViewports(uint32_t count, const Viewport* viewports) override
@@ -3314,6 +3321,36 @@ public:
{
m_d3dCmdList->OMSetStencilRef((UINT)referenceValue);
}
+
+ virtual SLANG_NO_THROW void SLANG_MCALL drawIndirect(
+ uint32_t maxDrawCount,
+ IBufferResource* argBuffer,
+ uint64_t argOffset,
+ IBufferResource* countBuffer,
+ uint64_t countOffset) override
+ {
+ SLANG_UNUSED(maxDrawCount);
+ SLANG_UNUSED(argBuffer);
+ SLANG_UNUSED(argOffset);
+ SLANG_UNUSED(countBuffer);
+ SLANG_UNUSED(countOffset);
+ SLANG_UNIMPLEMENTED_X("drawIndirect");
+ }
+
+ virtual SLANG_NO_THROW void SLANG_MCALL drawIndexedIndirect(
+ uint32_t maxDrawCount,
+ IBufferResource* argBuffer,
+ uint64_t argOffset,
+ IBufferResource* countBuffer,
+ uint64_t countOffset) override
+ {
+ SLANG_UNUSED(maxDrawCount);
+ SLANG_UNUSED(argBuffer);
+ SLANG_UNUSED(argOffset);
+ SLANG_UNUSED(countBuffer);
+ SLANG_UNUSED(countOffset);
+ SLANG_UNIMPLEMENTED_X("drawIndirect");
+ }
};
RenderCommandEncoderImpl m_renderCommandEncoder;
@@ -3361,6 +3398,13 @@ public:
return bindPipelineImpl(state, outRootObject);
}
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ bindPipelineAndRootObject(IPipelineState* state, IShaderObject* rootObject) override
+ {
+ SLANG_UNIMPLEMENTED_X("bindPipelineAndRootObject");
+ return SLANG_E_NOT_AVAILABLE;
+ }
+
virtual SLANG_NO_THROW void SLANG_MCALL dispatchCompute(int x, int y, int z) override
{
// Submit binding for compute
@@ -3374,6 +3418,12 @@ public:
}
m_d3dCmdList->Dispatch(x, y, z);
}
+
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ dispatchComputeIndirect(IBufferResource* argBuffer, uint64_t offset) override
+ {
+ SLANG_UNIMPLEMENTED_X("dispatchComputeIndirect");
+ }
};
ComputeCommandEncoderImpl m_computeCommandEncoder;
@@ -3442,6 +3492,41 @@ public:
{
static_cast<QueryPoolImpl*>(pool)->writeTimestamp(m_commandBuffer->m_cmdList, index);
}
+ virtual SLANG_NO_THROW void SLANG_MCALL copyTexture(
+ ITextureResource* dst,
+ ITextureResource::SubresourceRange dstSubresource,
+ ITextureResource::Offset3D dstOffset,
+ ITextureResource* src,
+ ITextureResource::SubresourceRange srcSubresource,
+ ITextureResource::Offset3D srcOffset,
+ ITextureResource::Size extent) override
+ {
+ SLANG_UNUSED(dst);
+ SLANG_UNUSED(dstSubresource);
+ SLANG_UNUSED(dstOffset);
+ SLANG_UNUSED(src);
+ SLANG_UNUSED(srcSubresource);
+ SLANG_UNUSED(srcOffset);
+ SLANG_UNUSED(extent);
+ SLANG_UNIMPLEMENTED_X("copyTexture");
+ }
+
+ virtual SLANG_NO_THROW void SLANG_MCALL uploadTextureData(
+ ITextureResource* dst,
+ ITextureResource::SubresourceRange subResourceRange,
+ ITextureResource::Offset3D offset,
+ ITextureResource::Offset3D extent,
+ ITextureResource::SubresourceData* subResourceData,
+ size_t subResourceDataCount) override
+ {
+ SLANG_UNUSED(dst);
+ SLANG_UNUSED(subResourceRange);
+ SLANG_UNUSED(offset);
+ SLANG_UNUSED(extent);
+ SLANG_UNUSED(subResourceData);
+ SLANG_UNUSED(subResourceDataCount);
+ SLANG_UNIMPLEMENTED_X("uploadTextureData");
+ }
};
ResourceCommandEncoderImpl m_resourceCommandEncoder;
@@ -3491,6 +3576,8 @@ public:
AccessFlag::Enum destAccess) override;
virtual SLANG_NO_THROW void SLANG_MCALL
bindPipeline(IPipelineState* state, IShaderObject** outRootObject) override;
+ virtual SLANG_NO_THROW void SLANG_MCALL bindPipelineAndRootObject(
+ IPipelineState* state, IShaderObject* rootObject) override;
virtual SLANG_NO_THROW void SLANG_MCALL dispatchRays(
const char* rayGenShaderName,
int32_t width,
@@ -3582,8 +3669,10 @@ public:
}
virtual SLANG_NO_THROW void SLANG_MCALL
- executeCommandBuffers(uint32_t count, ICommandBuffer* const* commandBuffers) override
+ executeCommandBuffers(uint32_t count, ICommandBuffer* const* commandBuffers, IFence* fence) override
{
+ // TODO: implement fence signal.
+ assert(fence == nullptr);
ShortList<ID3D12CommandList*> commandLists;
for (uint32_t i = 0; i < count; i++)
{
@@ -5978,6 +6067,12 @@ void D3D12Device::CommandBufferImpl::RayTracingCommandEncoderImpl::bindPipeline(
bindPipelineImpl(state, outRootObject);
}
+void D3D12Device::CommandBufferImpl::RayTracingCommandEncoderImpl::bindPipelineAndRootObject(
+ IPipelineState* state, IShaderObject* rootObject)
+{
+ SLANG_UNIMPLEMENTED_X("bindPipelineAndRootObject");
+}
+
void D3D12Device::CommandBufferImpl::RayTracingCommandEncoderImpl::dispatchRays(
const char* rayGenShaderName,
int32_t width,