summaryrefslogtreecommitdiffstats
path: root/tools/render-test/slang-support.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/render-test/slang-support.cpp')
-rw-r--r--tools/render-test/slang-support.cpp251
1 files changed, 0 insertions, 251 deletions
diff --git a/tools/render-test/slang-support.cpp b/tools/render-test/slang-support.cpp
index a9079b52c..094c306d1 100644
--- a/tools/render-test/slang-support.cpp
+++ b/tools/render-test/slang-support.cpp
@@ -174,255 +174,4 @@ ShaderCompiler* createSlangShaderCompiler(
return result;
}
-SlangResult generateTextureResource(const InputTextureDesc& inputDesc, int bindFlags, Renderer* renderer, Slang::RefPtr<TextureResource>& textureOut)
-{
- using namespace Slang;
-
- TextureData texData;
- generateTextureData(texData, inputDesc);
-
- TextureResource::Desc textureResourceDesc;
- textureResourceDesc.init();
-
- textureResourceDesc.format = Format::RGBA_Unorm_UInt8;
- textureResourceDesc.numMipLevels = texData.mipLevels;
- textureResourceDesc.arraySize = inputDesc.arrayLength;
- textureResourceDesc.bindFlags = bindFlags;
-
- // It's the same size in all dimensions
- Resource::Type type = Resource::Type::Unknown;
- switch (inputDesc.dimension)
- {
- case 1:
- {
- type = Resource::Type::Texture1D;
- textureResourceDesc.size.init(inputDesc.size);
- break;
- }
- case 2:
- {
- type = inputDesc.isCube ? Resource::Type::TextureCube : Resource::Type::Texture2D;
- textureResourceDesc.size.init(inputDesc.size, inputDesc.size);
- break;
- }
- case 3:
- {
- type = Resource::Type::Texture3D;
- textureResourceDesc.size.init(inputDesc.size, inputDesc.size, inputDesc.size);
- break;
- }
- }
-
- const int effectiveArraySize = textureResourceDesc.calcEffectiveArraySize(type);
- const int numSubResources = textureResourceDesc.calcNumSubResources(type);
-
- Resource::Usage initialUsage = Resource::Usage::GenericRead;
- TextureResource::Data initData;
-
- List<ptrdiff_t> mipRowStrides;
- mipRowStrides.SetSize(textureResourceDesc.numMipLevels);
- List<const void*> subResources;
- subResources.SetSize(numSubResources);
-
- // Set up the src row strides
- for (int i = 0; i < textureResourceDesc.numMipLevels; i++)
- {
- const int mipWidth = TextureResource::calcMipSize(textureResourceDesc.size.width, i);
- mipRowStrides[i] = mipWidth * sizeof(uint32_t);
- }
-
- // Set up pointers the the data
- {
- int subResourceIndex = 0;
- const int numGen = int(texData.dataBuffer.Count());
- for (int i = 0; i < numSubResources; i++)
- {
- subResources[i] = texData.dataBuffer[subResourceIndex].Buffer();
- // Wrap around
- subResourceIndex = (subResourceIndex + 1 >= numGen) ? 0 : (subResourceIndex + 1);
- }
- }
-
- initData.mipRowStrides = mipRowStrides.Buffer();
- initData.numMips = textureResourceDesc.numMipLevels;
- initData.numSubResources = numSubResources;
- initData.subResources = subResources.Buffer();
-
- textureOut = renderer->createTextureResource(type, Resource::Usage::GenericRead, textureResourceDesc, &initData);
-
- return textureOut ? SLANG_OK : SLANG_FAIL;
-}
-
-SlangResult createInputBufferResource(const InputBufferDesc& inputDesc, bool isOutput, size_t bufferSize, const void* initData, Renderer* renderer, Slang::RefPtr<BufferResource>& bufferOut)
-{
- using namespace Slang;
-
- Resource::Usage initialUsage = Resource::Usage::GenericRead;
-
- BufferResource::Desc srcDesc;
- srcDesc.init(bufferSize);
-
- int bindFlags = 0;
- if (inputDesc.type == InputBufferType::ConstantBuffer)
- {
- bindFlags |= Resource::BindFlag::ConstantBuffer;
- srcDesc.cpuAccessFlags |= Resource::AccessFlag::Write;
- initialUsage = Resource::Usage::ConstantBuffer;
- }
- else
- {
- bindFlags |= Resource::BindFlag::UnorderedAccess | Resource::BindFlag::PixelShaderResource | Resource::BindFlag::NonPixelShaderResource;
- srcDesc.elementSize = inputDesc.stride;
- initialUsage = Resource::Usage::UnorderedAccess;
- }
-
- if (isOutput)
- {
- srcDesc.cpuAccessFlags |= Resource::AccessFlag::Read;
- }
-
- srcDesc.bindFlags = bindFlags;
-
- RefPtr<BufferResource> bufferResource = renderer->createBufferResource(initialUsage, srcDesc, initData);
- if (!bufferResource)
- {
- return SLANG_FAIL;
- }
-
- bufferOut = bufferResource;
- return SLANG_OK;
-}
-
-static BindingState::SamplerDesc _calcSamplerDesc(const InputSamplerDesc& srcDesc)
-{
- BindingState::SamplerDesc dstDesc;
- dstDesc.isCompareSampler = srcDesc.isCompareSampler;
- return dstDesc;
-}
-
-SlangResult createBindingStateDesc(ShaderInputLayoutEntry* srcEntries, int numEntries, Renderer* renderer, BindingState::Desc& descOut)
-{
- using namespace Slang;
-
- const int textureBindFlags = Resource::BindFlag::NonPixelShaderResource | Resource::BindFlag::PixelShaderResource;
-
- descOut.clear();
- for (int i = 0; i < numEntries; i++)
- {
- const ShaderInputLayoutEntry& srcEntry = srcEntries[i];
-
- BindingState::RegisterDesc registerDesc;
- registerDesc.registerSets[int(BindingState::ShaderStyle::Hlsl)] = descOut.addRegisterSet(srcEntry.hlslBinding);
- registerDesc.registerSets[int(BindingState::ShaderStyle::Glsl)] = descOut.addRegisterSet(srcEntry.glslBinding.Buffer(), int(srcEntry.glslBinding.Count()));
-
- switch (srcEntry.type)
- {
- case ShaderInputType::Buffer:
- {
- const InputBufferDesc& srcBuffer = srcEntry.bufferDesc;
-
- const size_t bufferSize = srcEntry.bufferData.Count() * sizeof(uint32_t);
-
- RefPtr<BufferResource> bufferResource;
- SLANG_RETURN_ON_FAIL(createInputBufferResource(srcEntry.bufferDesc, srcEntry.isOutput, bufferSize, srcEntry.bufferData.Buffer(), renderer, bufferResource));
-
- descOut.addBufferResource(bufferResource, registerDesc);
- break;
- }
- case ShaderInputType::CombinedTextureSampler:
- {
- RefPtr<TextureResource> texture;
- SLANG_RETURN_ON_FAIL(generateTextureResource(srcEntry.textureDesc, textureBindFlags, renderer, texture));
- descOut.addCombinedTextureSampler(texture, _calcSamplerDesc(srcEntry.samplerDesc), registerDesc);
- break;
- }
- case ShaderInputType::Texture:
- {
- RefPtr<TextureResource> texture;
- SLANG_RETURN_ON_FAIL(generateTextureResource(srcEntry.textureDesc, textureBindFlags, renderer, texture));
-
- descOut.addTextureResource(texture, registerDesc);
- break;
- }
- case ShaderInputType::Sampler:
- {
- descOut.addSampler(_calcSamplerDesc(srcEntry.samplerDesc), registerDesc);
- break;
- }
- default:
- {
- assert(!"Unhandled type");
- return SLANG_FAIL;
- }
- }
- }
-
- return SLANG_OK;
-}
-
-SlangResult createBindingStateDesc(const ShaderInputLayout& layout, Renderer* renderer, BindingState::Desc& descOut)
-{
- SLANG_RETURN_ON_FAIL(createBindingStateDesc(layout.entries.Buffer(), int(layout.entries.Count()), renderer, descOut));
- descOut.m_numRenderTargets = layout.numRenderTargets;
-
- return SLANG_OK;
-}
-
-SlangResult serializeBindingOutput(const ShaderInputLayout& layout, BindingState* bindingState, Renderer* renderer, const char* fileName)
-{
- // Submit the work
- renderer->submitGpuWork();
- // Wait until everything is complete
- renderer->waitForGpu();
-
- FILE * f = fopen(fileName, "wb");
- if (!f)
- {
- return SLANG_FAIL;
- }
-
- const BindingState::Desc& bindingStateDesc = bindingState->getDesc();
- // Must be the same amount of entries
- assert(bindingStateDesc.m_bindings.Count() == layout.entries.Count());
-
- const int numBindings = int(bindingStateDesc.m_bindings.Count());
-
- for (int i = 0; i < numBindings; ++i)
- {
- const auto& layoutBinding = layout.entries[i];
- const auto& binding = bindingStateDesc.m_bindings[i];
-
- if (layoutBinding.isOutput)
- {
- if (binding.resource && binding.resource->isBuffer())
- {
- BufferResource* bufferResource = static_cast<BufferResource*>(binding.resource.Ptr());
- const size_t bufferSize = bufferResource->getDesc().sizeInBytes;
-
- unsigned int* ptr = (unsigned int*)renderer->map(bufferResource, MapFlavor::HostRead);
- if (!ptr)
- {
- fclose(f);
- return SLANG_FAIL;
- }
-
- const int size = int(bufferSize / sizeof(unsigned int));
- for (int i = 0; i < size; ++i)
- {
- fprintf(f, "%X\n", ptr[i]);
- }
- renderer->unmap(bufferResource);
- }
- else
- {
- printf("invalid output type at %d.\n", i);
- }
- }
- }
- fclose(f);
-
- return SLANG_OK;
-}
-
-
} // renderer_test