summaryrefslogtreecommitdiff
path: root/tools/render-test
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-03-24 13:57:55 -0700
committerGitHub <noreply@github.com>2021-03-24 13:57:55 -0700
commit98afb421f408aa8651afff3dba1b21fad71131fe (patch)
treea8610d12ac7d74a8772cb6ecdd810da8216baa67 /tools/render-test
parentd0f7b7f0ed1d0d1388ce944cd1ad906bbd9afb35 (diff)
Reimplement Vulkan shader objects. (#1764)
* Reimplement Vulkan shader objects. This change reimplements Vulkan shader objects in the `gfx` layer so that it is no longer layered on top of the `DescriptorSet` abstraction. Since this is the last implementation that uses `DescriptorSet`, the change also removes all `DescriptorSet` related API from public `gfx` interface. The Vulkan implementation now passes all test cases, but it still have two issues: 1. The PushConstant setting is not correct, this is because we don't seem to be able to get correct reflection data about the size of push constants for an entry-point. 2. The `shader-toy` example can't run on Vulkan, because it currently sets nullptr to `Texture` bindings, and this change doesn't properly handle setting resource to null in `ShaderObject`s yet. If we can use the `nullDescriptor` feature on vulkan, this implementation will be simple. However we still want to decide whether we want to use a Vulkan 1.2 feature for this. * Fix up
Diffstat (limited to 'tools/render-test')
-rw-r--r--tools/render-test/slang-support.cpp32
-rw-r--r--tools/render-test/slang-support.h15
2 files changed, 1 insertions, 46 deletions
diff --git a/tools/render-test/slang-support.cpp b/tools/render-test/slang-support.cpp
index c6d2b971e..72732363e 100644
--- a/tools/render-test/slang-support.cpp
+++ b/tools/render-test/slang-support.cpp
@@ -52,16 +52,10 @@ gfx::StageType translateStage(SlangStage slangStage)
void ShaderCompilerUtil::Output::set(
PipelineType pipelineType,
- const IShaderProgram::KernelDesc* inKernelDescs,
- Slang::Index kernelDescCount,
slang::IComponentType* inSlangProgram)
{
- kernelDescs.clear();
- kernelDescs.addRange(inKernelDescs, kernelDescCount);
slangProgram = inSlangProgram;
desc.pipelineType = pipelineType;
- desc.kernels = kernelDescs.getBuffer();
- desc.kernelCount = kernelDescCount;
desc.slangProgram = inSlangProgram;
}
@@ -70,11 +64,8 @@ void ShaderCompilerUtil::Output::reset()
{
desc.pipelineType = PipelineType::Unknown;
desc.slangProgram = nullptr;
- desc.kernels = nullptr;
- desc.kernelCount = 0;
}
- kernelDescs.clear();
if (m_requestForKernels && session)
{
spDestroyCompileRequest(m_requestForKernels);
@@ -245,28 +236,7 @@ void ShaderCompilerUtil::Output::reset()
actualEntryPoints = request.entryPoints;
}
- Slang::List<IShaderProgram::KernelDesc> kernelDescs;
-
- Index actualEntryPointCount = actualEntryPoints.getCount();
- for(Index ee = 0; ee < actualEntryPointCount; ++ee)
- {
- auto& actualEntryPoint = actualEntryPoints[ee];
-
- size_t codeSize = 0;
- char const* code = (char const*) spGetEntryPointCode(slangRequest, int(ee), &codeSize);
-
- auto gfxStage = translateStage(actualEntryPoint.slangStage);
-
- IShaderProgram::KernelDesc kernelDesc;
- kernelDesc.stage = gfxStage;
- kernelDesc.codeBegin = code;
- kernelDesc.codeEnd = code + codeSize;
- kernelDesc.entryPointName = actualEntryPoint.name;
-
- kernelDescs.add(kernelDesc);
- }
-
- out.set(input.pipelineType, kernelDescs.getBuffer(), kernelDescs.getCount(), linkedSlangProgram);
+ out.set(input.pipelineType, linkedSlangProgram);
return SLANG_OK;
}
diff --git a/tools/render-test/slang-support.h b/tools/render-test/slang-support.h
index 6fa850874..7e00a2c72 100644
--- a/tools/render-test/slang-support.h
+++ b/tools/render-test/slang-support.h
@@ -60,8 +60,6 @@ struct ShaderCompilerUtil
{
void set(
PipelineType pipelineType,
- const IShaderProgram::KernelDesc* kernelDescs,
- Slang::Index kernelDescCount,
slang::IComponentType* slangProgram);
void reset();
~Output()
@@ -69,19 +67,6 @@ struct ShaderCompilerUtil
reset();
}
- Slang::Index findKernelDescIndex(gfx::StageType stage) const
- {
- for (Slang::Index i = 0; i < kernelDescs.getCount(); ++i)
- {
- if (kernelDescs[i].stage == stage)
- {
- return i;
- }
- }
- return -1;
- }
-
- Slang::List<IShaderProgram::KernelDesc> kernelDescs;
ComPtr<slang::IComponentType> slangProgram;
IShaderProgram::Desc desc = {};