diff options
Diffstat (limited to 'tools/render-test/main.cpp')
| -rw-r--r-- | tools/render-test/main.cpp | 49 |
1 files changed, 15 insertions, 34 deletions
diff --git a/tools/render-test/main.cpp b/tools/render-test/main.cpp index 6907ba40f..d3247e55f 100644 --- a/tools/render-test/main.cpp +++ b/tools/render-test/main.cpp @@ -5,7 +5,7 @@ #include "render-d3d11.h" #include "render-gl.h" #include "slang-support.h" - +#include "shader-input-layout.h" #include <stdio.h> #include <stdlib.h> @@ -54,8 +54,9 @@ uintptr_t gConstantBufferSize, gComputeResultBufferSize; Buffer* gConstantBuffer; InputLayout* gInputLayout; Buffer* gVertexBuffer; -Buffer* gComputeResultBuffer; -ShaderProgram* gShaderProgram; +ShaderProgram* gShaderProgram; +BindingState* gBindingState; +ShaderInputLayout gShaderInputLayout; // Entry point name to use for vertex/fragment shader static char const* vertexEntryPointName = "vertexMain"; @@ -92,6 +93,8 @@ Error initializeShaders( fclose(sourceFile); sourceText[sourceSize] = 0; + gShaderInputLayout.Parse(sourceText); + ShaderCompileRequest::SourceInfo sourceInfo; sourceInfo.path = sourcePath; sourceInfo.text = sourceText; @@ -121,16 +124,6 @@ Error initializeShaders( return Error::None; } - -void outputComputeResult(Renderer* renderer, const char * fileName) -{ - float* data = (float*)renderer->map(gComputeResultBuffer, MapFlavor::HostRead); - FILE* f = fopen(fileName, "wt"); - for (auto i = 0u; i < gComputeResultBufferSize / sizeof(UInt); i++) - fprintf(f, "%.9g\n", data[i]); - fclose(f); -} - // // At initialization time, we are going to load and compile our Slang shader // code, and then create the D3D11 API objects we need for rendering. @@ -144,6 +137,7 @@ Error initializeInner( err = initializeShaders(shaderCompiler); if(err != Error::None) return err; + gBindingState = renderer->createBindingState(gShaderInputLayout); // Do other initialization that doesn't depend on the source language. @@ -157,20 +151,7 @@ Error initializeInner( gConstantBuffer = renderer->createBuffer(constantBufferDesc); if(!gConstantBuffer) return Error::Unexpected; - - gComputeResultBufferSize = 512 * sizeof(float); - BufferDesc computeResultBufferDesc; - computeResultBufferDesc.size = gComputeResultBufferSize; - computeResultBufferDesc.flavor = BufferFlavor::Storage; - gComputeResultBuffer = renderer->createBuffer(computeResultBufferDesc); - if (!gComputeResultBufferSize) - return Error::Unexpected; - // initialize buffer to 0 - char * ptr = (char*)renderer->map(gComputeResultBuffer, MapFlavor::HostWrite); - for (auto i = 0u; i < gComputeResultBufferSize; i++) - ptr[i] = 0; - renderer->unmap(gComputeResultBuffer); - + // Input Assembler (IA) InputElementDesc inputElements[] = { @@ -222,7 +203,7 @@ void renderFrameInner( renderer->setShaderProgram(gShaderProgram); renderer->setConstantBuffer(0, gConstantBuffer); - + renderer->setBindingState(gBindingState); // renderer->draw(3); @@ -231,7 +212,7 @@ void renderFrameInner( void runCompute(Renderer * renderer) { renderer->setShaderProgram(gShaderProgram); - renderer->setStorageBuffer(0, gComputeResultBuffer); + renderer->setBindingState(gBindingState); renderer->dispatchCompute(1, 1, 1); } @@ -403,7 +384,7 @@ int main( { if (message.message == WM_QUIT) { - return (int)message.wParam; + return (int)message.wParam; } TranslateMessage(&message); @@ -428,10 +409,10 @@ int main( // If we are in a mode where output is requested, we need to snapshot the back buffer here if (gOptions.outputPath) { - if (gOptions.shaderType == ShaderProgramType::Compute) - outputComputeResult(renderer, gOptions.outputPath); - else - renderer->captureScreenShot(gOptions.outputPath); + if (gOptions.shaderType == ShaderProgramType::Compute) + renderer->serializeOutput(gBindingState, gOptions.outputPath); + else + renderer->captureScreenShot(gOptions.outputPath); return 0; } |
