diff options
| author | lucy96chen <47800040+lucy96chen@users.noreply.github.com> | 2022-01-10 11:00:50 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-10 11:00:50 -0800 |
| commit | aee4aa3528072e4b5e95ccc4e571868716b47d50 (patch) | |
| tree | 3621d7e5cd67e09581d7fe001e359df12167889b /examples | |
| parent | 8919c19440dea9a62578905d365fe80bcd58e316 (diff) | |
Draw call tests for Vulkan (#2073)
* Added instancing support to Vulkan, drawInstanced() test image is upside-down
* Fixed inverted drawInstanced() test output by changing Vulkan viewport convention
* Replaced vkCmdDraw with vkCmdDrawIndexed in all non-indirect indexed draws, drawIndexedIndirect test now working for Vulkan
* Moved index and vertex buffer binding into setIndexBuffer and setVertexBuffers; Defaulted countBuffer to nullptr and countOffset to 0 and added a check for non-null countBuffer to drawIndirect and drawIndexedIndirect in Vulkan; All Vulkan draw tests working (but D3D12 tests broken)
* Added support for drawInstanced and drawIndexedInstanced to D3D11 and added tests for both, however D3D11 tests are currently disabled due to readTextureResource assuming a fixed pixel size (among other possible problems); Fixed issues causing D3D12 tests to fail after major back-end fixes to get Vulkan up and running
* Removed testing function for dumping images and some other commented out code
* Removed some commented out code
* Fix initializer list causing builds to fail (attempt 1)
* Removed initializer list for VertexStreamDesc in createInputLayout() and fill in struct fields normally (build fix attempt 2)
* Removed default values from VertexStreamDesc and changed all initializer lists to reflect this change
* Moved applyBinding before setVertexBuffer in RenderTestApp::renderFrame() to ensure the pipeline has already been bound before vertex buffers are
* Changed D3D11's readTextureResource to calculate pixel size using format-specific size information; Removed wrapper around D3D11 instanced and indexed instanced draw tests
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/model-viewer/main.cpp | 3 | ||||
| -rw-r--r-- | examples/ray-tracing-pipeline/main.cpp | 4 | ||||
| -rw-r--r-- | examples/ray-tracing/main.cpp | 4 | ||||
| -rw-r--r-- | examples/shader-toy/main.cpp | 3 | ||||
| -rw-r--r-- | examples/triangle/main.cpp | 3 |
5 files changed, 10 insertions, 7 deletions
diff --git a/examples/model-viewer/main.cpp b/examples/model-viewer/main.cpp index bd8e2ad2f..dcc1a975f 100644 --- a/examples/model-viewer/main.cpp +++ b/examples/model-viewer/main.cpp @@ -748,6 +748,7 @@ Result initialize() {"UV", 0, Format::R32G32_FLOAT, offsetof(Model::Vertex, uv) }, }; auto inputLayout = gDevice->createInputLayout( + sizeof(Model::Vertex), &inputElements[0], 3); if(!inputLayout) return SLANG_FAIL; @@ -868,7 +869,7 @@ void renderFrame(int frameIndex) override // for(auto& model : gModels) { - drawCommandEncoder->setVertexBuffer(0, model->vertexBuffer, sizeof(Model::Vertex)); + drawCommandEncoder->setVertexBuffer(0, model->vertexBuffer); drawCommandEncoder->setIndexBuffer(model->indexBuffer, Format::R32_UINT); // For each model we provide a parameter // block that holds the per-model transformation diff --git a/examples/ray-tracing-pipeline/main.cpp b/examples/ray-tracing-pipeline/main.cpp index 9ae44a3fc..e927b9d10 100644 --- a/examples/ray-tracing-pipeline/main.cpp +++ b/examples/ray-tracing-pipeline/main.cpp @@ -504,7 +504,7 @@ Slang::Result initialize() InputElementDesc inputElements[] = { {"POSITION", 0, Format::R32G32_FLOAT, offsetof(FullScreenTriangle::Vertex, position)}, }; - auto inputLayout = gDevice->createInputLayout(&inputElements[0], SLANG_COUNT_OF(inputElements)); + auto inputLayout = gDevice->createInputLayout(sizeof(FullScreenTriangle::Vertex), &inputElements[0], SLANG_COUNT_OF(inputElements)); if (!inputLayout) return SLANG_FAIL; @@ -643,7 +643,7 @@ virtual void renderFrame(int frameBufferIndex) override auto cursor = ShaderCursor(rootObject->getEntryPoint(1)); cursor["t"].setResource(gResultTextureUAV); presentEncoder->setVertexBuffer( - 0, gFullScreenVertexBuffer, sizeof(FullScreenTriangle::Vertex)); + 0, gFullScreenVertexBuffer); presentEncoder->setPrimitiveTopology(PrimitiveTopology::TriangleList); presentEncoder->draw(3); presentEncoder->endEncoding(); diff --git a/examples/ray-tracing/main.cpp b/examples/ray-tracing/main.cpp index 1285be866..e26393cbc 100644 --- a/examples/ray-tracing/main.cpp +++ b/examples/ray-tracing/main.cpp @@ -496,7 +496,7 @@ Slang::Result initialize() InputElementDesc inputElements[] = { {"POSITION", 0, Format::R32G32_FLOAT, offsetof(FullScreenTriangle::Vertex, position)}, }; - auto inputLayout = gDevice->createInputLayout(&inputElements[0], SLANG_COUNT_OF(inputElements)); + auto inputLayout = gDevice->createInputLayout(sizeof(FullScreenTriangle::Vertex), &inputElements[0], SLANG_COUNT_OF(inputElements)); if (!inputLayout) return SLANG_FAIL; @@ -622,7 +622,7 @@ virtual void renderFrame(int frameBufferIndex) override auto cursor = ShaderCursor(rootObject->getEntryPoint(1)); cursor["t"].setResource(gResultTextureUAV); presentEncoder->setVertexBuffer( - 0, gFullScreenVertexBuffer, sizeof(FullScreenTriangle::Vertex)); + 0, gFullScreenVertexBuffer); presentEncoder->setPrimitiveTopology(PrimitiveTopology::TriangleList); presentEncoder->draw(3); presentEncoder->endEncoding(); diff --git a/examples/shader-toy/main.cpp b/examples/shader-toy/main.cpp index facaeb75f..879330aca 100644 --- a/examples/shader-toy/main.cpp +++ b/examples/shader-toy/main.cpp @@ -284,6 +284,7 @@ Result initialize() { "POSITION", 0, Format::R32G32_FLOAT, offsetof(FullScreenTriangle::Vertex, position) }, }; auto inputLayout = gDevice->createInputLayout( + sizeof(FullScreenTriangle::Vertex), &inputElements[0], SLANG_COUNT_OF(inputElements)); if(!inputLayout) return SLANG_FAIL; @@ -367,7 +368,7 @@ virtual void renderFrame(int frameIndex) override auto constantBuffer = rootObject->getObject(ShaderOffset()); constantBuffer->setData(ShaderOffset(), &uniforms, sizeof(uniforms)); - encoder->setVertexBuffer(0, gVertexBuffer, sizeof(FullScreenTriangle::Vertex)); + encoder->setVertexBuffer(0, gVertexBuffer); encoder->setPrimitiveTopology(PrimitiveTopology::TriangleList); encoder->draw(3); encoder->endEncoding(); diff --git a/examples/triangle/main.cpp b/examples/triangle/main.cpp index 51d355e50..a81a105ab 100644 --- a/examples/triangle/main.cpp +++ b/examples/triangle/main.cpp @@ -227,6 +227,7 @@ Slang::Result initialize() { "COLOR", 0, Format::R32G32B32_FLOAT, offsetof(Vertex, color) }, }; auto inputLayout = gDevice->createInputLayout( + sizeof(Vertex), &inputElements[0], 2); if(!inputLayout) return SLANG_FAIL; @@ -373,7 +374,7 @@ virtual void renderFrame(int frameBufferIndex) override // We also need to set up a few pieces of fixed-function pipeline // state that are not bound by the pipeline state above. // - renderEncoder->setVertexBuffer(0, gVertexBuffer, sizeof(Vertex)); + renderEncoder->setVertexBuffer(0, gVertexBuffer); renderEncoder->setPrimitiveTopology(PrimitiveTopology::TriangleList); // Finally, we are ready to issue a draw call for a single triangle. |
