From 1a698128c15bce0c05b0664bb1458842e1e55511 Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Tue, 5 Jun 2018 21:35:48 -0700 Subject: Fix atomic operations on RWBuffer (#593) * Fix atomic operations on RWBuffer An earlier change added support for passing true pointers to `__ref` parameters to fix the global `Interlocked*()` functions when applied to `groupshared` variables or `RWStructureBuffer` elements. That change didn't apply to `RWBuffer` or `RWTexture2D`, etc. because those types had so far only declared `get` and `set` accessors, but not any `ref` accessors (which return a pointer). The main fixes here are: * Add `ref` accessors to the subscript oeprations on the `RW*` resource types * Adjust the logic for emitting calls to subscript accessors so that we don't get quite as eager about invoking a `ref` accessor, and instead try to invoke just a `get` or `set` accessor when these will suffice. This is important for Vulkan cross-compilation, where we don't yet support the semantics of our `ref` accessors. * Add a test case for atomics on a `RWBuffer` * Fix up `render-test` so that we can specify a format for a buffer resource, which allows us to use things other than `*StructuredBuffer` and `*ByteAddressBuffer`. The work there is probably not complete; I just did what I could to get the test working. * A bunch of files got whitespace edits thanks to the fact that I'm using editorconfig and others on the project seemingly arent... * fixup: remove ifdefed-out code --- tools/render-test/shader-input-layout.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'tools/render-test/shader-input-layout.cpp') diff --git a/tools/render-test/shader-input-layout.cpp b/tools/render-test/shader-input-layout.cpp index fcf25f376..0257c9b53 100644 --- a/tools/render-test/shader-input-layout.cpp +++ b/tools/render-test/shader-input-layout.cpp @@ -1,6 +1,8 @@ #include "shader-input-layout.h" #include "core/token-reader.h" +#include "render.h" + namespace renderer_test { using namespace Slang; @@ -177,6 +179,13 @@ namespace renderer_test else entry.textureDesc.content = InputTextureContent::Gradient; } + else if(word == "format") + { + parser.Read("="); + auto formatWord = parser.ReadWord(); + if(formatWord == "R_UInt32") + entry.bufferDesc.format = Format::R_UInt32; + } if (parser.LookAhead(",")) parser.Read(","); else @@ -229,8 +238,8 @@ namespace renderer_test } } } - - + + } void generateTextureData(TextureData & output, const InputTextureDesc & inputDesc) { @@ -308,4 +317,4 @@ namespace renderer_test } } } -} \ No newline at end of file +} -- cgit v1.2.3